簡體   English   中英

使用Physics2D.Raycast時出錯-可選參數

[英]Error using Physics2D.Raycast - optional arguments

您好:)我使用的是Physics2D.Raycast方法,根據Unity文檔,其輸入參數定義如下:

public static RaycastHit2D Raycast(Vector2 origin, Vector2 direction, float distance = Mathf.Infinity, 

int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

然后我調用了此方法,並插入了以下輸入參數:

RaycastHit2D hit = Physics2D.Raycast (transform.position,
newVelocity, layerMask: hitLayerMask);

但是,我收到以下錯誤消息:

The best overloaded method match for 'UnityEngine.Physics2D.Raycast(UnityEngine.Vector2, UnityEngine.Vector2, float)' 

does not contain a parameter named layerMask

您能幫我解決這個問題嗎? 我不明白為什么編譯器會認為我只用三個輸入參數來重載一個方法。

PS:我知道我在Vector3對象中引入了Vector3對象'transform.position'。 但是我之前已經做過,而且沒有錯誤。 我采用的唯一新穎方法是指定參數layerMask:/

我將不勝感激。

編輯:只是為了澄清,transform.position是一個Vector3對象,newVelocity是一個Vector2,hitLayerMask是一個整數。

編輯2:請注意,我忽略了傳遞“距離”輸入參數,因為它具有默認值Mathf.Infinity。 在有關可選參數的網頁( https://msdn.microsoft.com/zh-cn/library/dd264739.aspx )上,在ExampleMethod()部分上,它顯示了如何忽略具有默認值的參數。 這就是我忽略“距離”論點的原因

您必須在圖層蒙版之前通過距離,但未通過。 該函數的簽名是vector2,vector2,float int等,但是您當前擁有的代碼是vector2,vector2,int(hitLayerMask)。

    int hitLayerMask = 0;
    int layerMask = 6;
    float distance = 60f;

    RaycastHit2D hit = Physics2D.Raycast(transform.position,
        newVelocity, distance, layerMask: hitLayerMask);

這將編譯,但由於您的層傳遞方式而可能無法正常工作。 您可以使用按位操作來執行此操作。例如, 1<<hitLayerMask1 << LayerMask.NameToLayer("Environment") 有關層按位運算的更多信息,請訪問此處

下面是執行此操作的正確方法:

    Vector3 newVelocity = Vector3.zero;
    float distance = 100f;
    int layerMask = 1 << 6; //cast rays only against colliders in layer 6.
    RaycastHit2D hit = Physics2D.Raycast(transform.position,
        newVelocity, distance, layerMask);

編輯

可能存在錯誤,因為您嘗試使用的功能在當前Unity C#版本中不可用。 可選參數和命名參數是在C#V4中添加的,而Unity使用的是C#<= 3.5版本,其中去除了某些功能。

如用戶@Programmer所述,Unity使用C#2-> 3.5。 我實際上使用“ Debug.Log(System.Environment.Version);”搜索了c#“版本”; 並注意到我的版本是2.0.50727.1433。

為了執行我想要的命名參數操作,我需要C#4.0版本,這就是為什么出現此錯誤的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM