簡體   English   中英

Unity C# 使用標簽查找游戲對象

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

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