Unity C#使用标签查找GameObjects

时间:2014-06-22 03:30:10

标签: c# tags unity3d

我刚刚开始使用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:未将对象引用设置为对象的实例   AttackingMob.Update()(在Assets / Code / Entities / Mobs / AttackingMob.cs:22)

为什么会发生这种情况,我该怎么做才能解决问题?非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:2)

您需要使用&#34;播放器标记播放器&#34;标签。您必须通过Unity中的编辑器窗口执行此操作。

您遇到的另一个问题是您尝试分配null而不是实际检查null。

if(attackingg = null)
{}

应该是:

if(attackingg == null)
{}

答案 1 :(得分:0)

您需要将“玩家”标签添加到检查器中的玩家游戏对象。

和错误:

<块引用>

未将对象引用设置为对象的实例

只需检查您是否已在 Inspector 中分​​配了相应的 GameObject。 而且,在这一行 if (attacking = null) {} 您应该通过替换 "=" with "=="

来检查 GameObject 是否为 NULL