[英]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<<hitLayerMask
, 1 << 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.