我有一个似乎无法解决的问题。
我有一个AIManager脚本。这有所有的控制和我的敌人将如何行动。然后我就有了一个EnemyBasic脚本。这代表了这个敌人的人工智能行为。他多久会攻击一次等。
我试着使用一个关于Raycast的教程,它可以帮助我为我的敌人实现视力。这起作用了,我的敌人确实发现了我,用一个公开的嘘声来测试。
有问题的部分。如果我禁用了EnemyBasic脚本,我的敌人就会呆在一个地方,这是我想要的。当我进入他的视线,我想激活EnemyBasic脚本,这样他就可以开始攻击我。不幸的是,在我的代码中,这会产生一个错误:
NullReferenceException:对象引用未设置为对象Sight.Raycasting ()的实例(at Asset/Sight.cs:21) Sight.Update () (at Asset/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;
}
}
}任何想法。我对团结是陌生的,所以很有可能它是愚蠢的。谢谢!
发布于 2017-11-04 22:40:39
正如@程序员在注释中所建议的那样。结果发现,我的视觉脚本与GameObejct脚本不同,它与EnemyBasic脚本不同。把剧本抄袭过来,效果就像一种魅力。
https://stackoverflow.com/questions/47116111
复制相似问题