【发布时间】:2017-11-04 22:10:34
【问题描述】:
我有一个似乎无法解决的问题。
我有一个 AIManager 脚本。这具有所有控件以及我的敌人将如何移动。 然后我有一个 EnemyBasic 脚本。这代表了这个敌人的 AI 行为。他多久会攻击一次等。
我尝试使用有关 Raycast 的教程,它可以帮助我实现敌人的视线。这行得通,我的敌人确实发现了我,并用公共布尔值进行了测试。
现在是有问题的部分。如果我禁用 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.上面
Sight脚本附加到的GameObject的名称是什么? 2.EnemyBasic脚本附加到的GameObject的名称是什么? -
它们都附加在一个名为 Enemy1 的游戏对象下。
-
gameObject是null或gameObject.GetComponent<EnemyBasic>()是,但是您显示的代码中没有任何内容可以为我们提供信息以进行修复。如果您需要帮助,请发帖minimal reproducible example。
标签: unity3d unity5 unity3d-2dtools