2015-11-03 75 views
0

我想寫一個腳本,當玩家被敵人擊中時會重新加載關卡。我是gamedev和c#的新手,所以我對我的代碼不是100%自信。Unity2D Raycasting

我得到一些錯誤,把我扔掉,我找不到任何線上的東西指向正確的方向。

using UnityEngine; 
using System.Collections; 

public class RobotAttack : MonoBehaviour 
{ 

void Update() 
{ 

    RaycastHit2D hit; 
    Vector2 attackPosition = transform.position + new Vector2(0f, 1f); 

    if (Physics2D.Raycast(attackPosition, transform.forward, hit, 1f) && (hit.transform.tag == "Player"))   
    { 
     Application.LoadLevel(Application.loadedLevel); 
    }  
} 
} 

我得到的錯誤如下。

Assets/Scripts/RobotAttack.cs(14,44): error CS0121: The call is ambiguous between the following methods or properties: `UnityEngine.Vector2.operator +(UnityEngine.Vector2, UnityEngine.Vector2)' and `UnityEngine.Vector3.operator +(UnityEngine.Vector3, UnityEngine.Vector3)' 

Assets/Scripts/RobotAttack.cs(17,66): error CS0165: Use of unassigned local variable `hit' 

Assets/Scripts/RobotAttack.cs(17,23): error CS1502: The best overloaded method match for `UnityEngine.Physics2D.Raycast(UnityEngine.Vector2, UnityEngine.Vector2, float, int)' has some invalid arguments 

Assets/Scripts/RobotAttack.cs(17,23): error CS1503: Argument `#3' cannot convert `UnityEngine.RaycastHit2D' expression to type `float' 

道歉,如果這是可怕的格式,這是我在這個網站的第一篇文章:^) 感謝。

+0

格式非常好!感謝您付出的努力! – Pogrindis

回答

0

資產/腳本/ Robotack.cs(14,44):錯誤CS0121:呼叫是以下方法或屬性之間曖昧 : UnityEngine.Vector2.operator +(UnityEngine.Vector2, UnityEngine.Vector2)' and UnityEngine.Vector3.operator +(UnityEngine.Vector3,UnityEngine。 Vector3)'

這意味着有另一種方法具有相同的名稱,因此編譯器不知道您打算使用哪一個。即:Vector2.operatorVector3.operator更改名稱將解決此問題或指定前綴庫。

資產/腳本/ RobotAttack.cs(17,66):錯誤CS0165:未分配 局部變量的使用'打」

這是相當明確的,你還沒有定義hit是任何東西,只有它的類型。 您可以嘗試: RaycastHit2D hit = new RaycastHit2D();

但我不確定它的構造函數。

編輯:

Raycast Documentation

資產/腳本/ RobotAttack.cs(17,23):錯誤CS1502:審查構造後最好 重載方法匹配 ` UnityEngine.Physics2D.Raycast(UnityEngine.Vector2, UnityEngine.Vector2,float,int)'有一些無效參數

資產/腳本/ RobotAttack.cs(17,23):錯誤CS1503:參數#3' cannot convert UnityEngine.RaycastHit2D

這只是意味着你正在試圖通過在參數「到類型`float表達式」是錯誤的類型。值得注意的是,第三個參數不是float事實上,它看起來像是在傳遞RaycastHit2D類型的對象。如果你確信自己會投出,你可以嘗試將它投入浮動,儘管這是不太可能的。或者,您需要建立正確的輸入變量才能使用。

希望這會有所幫助!

+0

感謝您花時間幫助我!關於第一個錯誤,我使用Vector2的唯一方法是 Vector2 attackPosition = transform.position + new Vector2(0f,1f); 所以我不知道要重命名,如果這是有道理的:) – Ety

+0

@Ety嘗試使用'UnityEngine.Vector2 attackPosition = transform.position + new UnityEngine.Vector2(0f,1f);'來指定你指的是哪個庫至 。 – Pogrindis