我刚刚开始使用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)
为什么会发生这种情况,我该怎么做才能解决问题?非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
您需要使用&#34;播放器标记播放器&#34;标签。您必须通过Unity中的编辑器窗口执行此操作。
您遇到的另一个问题是您尝试分配null而不是实际检查null。
if(attackingg = null)
{}
应该是:
if(attackingg == null)
{}
答案 1 :(得分:0)
您需要将“玩家”标签添加到检查器中的玩家游戏对象。
和错误:
<块引用>未将对象引用设置为对象的实例
只需检查您是否已在 Inspector 中分配了相应的 GameObject。
而且,在这一行
if (attacking = null) {}
您应该通过替换 "=" with "=="