我有一个问题似乎无法解决。
我有一个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;
}
}
}
任何想法。我是团结的新手,所以很有可能是愚蠢的东西。 谢谢!
答案 0 :(得分:0)
正如@Programmer在评论中所建议的那样。原来我的Sight脚本与EnemyBasic脚本不在同一个GameObejct下。复制了脚本,它就像一个魅力。