[英]Unity C# finding GameObjects using tags
我剛開始使用 Unity 和 C#,我正試圖讓敵人追逐玩家。 為了讓敵人找到並追逐玩家,我使用以下代碼:
public GameObject attackingg;
public Entity attacking;
public int distance;
private bool canAttack;
void Start () {
canAttack = true;
if(attackingg = null){
attackingg = GameObject.FindGameObjectWithTag("Player");
attacking = attackingg.GetComponent<Entity>();
}
}
void Update () {
if(attacking.rigidbody2D.transform.position.y>rigidbody2D.transform.position.y - distance)
{
rigidbody2D.transform.position += Vector3.up * speed * Time.deltaTime;
}
if(attacking.rigidbody2D.transform.position.y<rigidbody2D.transform.position.y - distance)
{
rigidbody2D.transform.position += Vector3.down * speed * Time.deltaTime;
}
if(attacking.rigidbody2D.transform.position.x>rigidbody2D.transform.position.x+ distance)
{
rigidbody2D.transform.position += Vector3.right * speed * Time.deltaTime;
}
if(attacking.rigidbody2D.transform.position.x<rigidbody2D.transform.position.x - distance)
{
rigidbody2D.transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Vector2.Distance (rigidbody2D.transform.position, attacking.transform.position) <= distance && canAttack) {
attackEntity();
StartCoroutine(waitForAttack());
}
}
運行游戲時,出現以下錯誤:
NullReferenceException:Object 引用未設置為 object AttackingMob.Update () 的實例(位於 Assets/Code/Entities/Mobs/AttackingMob.cs:22)
為什么會發生這種情況,我該怎么做才能解決我的問題? 我真的很感激任何幫助,謝謝。
您需要使用“玩家”標簽來標記玩家。 您必須通過 Unity 中的編輯器窗口執行此操作。
您遇到的另一個問題是您試圖分配空值而不是實際檢查空值。
if(attackingg = null)
{}
應該:
if(attackingg == null)
{}
您需要將 " Player標簽添加到檢查器中的 Player GameObject。
和錯誤:
你調用的對象是空的
只需檢查您是否已在 Inspector 中分配了相應的 GameObject。 而且,在if (attacking = null) {}
您應該通過將"=" with "=="
替換"=" with "=="
來檢查 GameObject 是否為 NULL
您正在分配 null 而不是檢查 null。
你的代碼
if (attackingg = null)
應該
if (attackingg == null)
為了不導致此 NullPointerException,如果游戲對象已經在場景中生成,則只需在檢查器中分配變量,因為您已經為此設置了全局變量。
public GameObject attackingg = null; // assign gameobject
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.