Unity 2D - 脚本激活时的空引用

时间:2017-11-04 22:10:34

标签: unity3d unity5 unity3d-2dtools

我有一个问题似乎无法解决。

我有一个AIManager脚本。这有所有控制以及我的敌人将如何移动。 然后我有一个EnemyBasic脚本。这代表了这个敌人的AI行为。他多久会攻击等等。

我尝试使用有关Raycasts的教程,这可以帮助我为敌人实现视力。这很有效,我的敌人确实发现了我,用公共布尔测试过。

现在有问题的部分。如果我禁用EnemyBasic脚本,我的敌人会留在一个我想要的地方。在我进入他的视线后,我想要激活EnemyBasic脚本,所以他可以开始攻击我。不幸的是,使用我的代码,这会产生错误:

NullReferenceException:未将对象引用设置为对象的实例 Sight.Raycasting()(在Assets / Sight.cs:21) Sight.Update()(在Assets / Sight.cs:13)

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sight : MonoBehaviour {

    public Transform sightStart, sightEnd;
    public bool spotted = false;

    void Update () {
        Raycasting();
    }

     void Raycasting()
    {
        spotted = Physics2D.Linecast(sightStart.position, sightEnd.position, 1 << LayerMask.NameToLayer("Player"));

        if (spotted)
        {
           /*---> LINE OF ERROR */ gameObject.GetComponent<EnemyBasic>().enabled = true;
        }
    }
}

任何想法。我是团结的新手,所以很有可能是愚蠢的东西。 谢谢!

1 个答案:

答案 0 :(得分:0)

正如@Programmer在评论中所建议的那样。原来我的Sight脚本与EnemyBasic脚本不在同一个GameObejct下。复制了脚本,它就像一个魅力。