Unity 2D - 脚本激活时的空引用
Unity 2D - Null Reference upon script activation
我有一个似乎无法解决的问题。
我有一个 AIManager 脚本。这具有所有控件以及我的敌人将如何移动。
然后我有一个 EnemyBasic 脚本。这代表了这个敌人的 AI 行为。他多久会攻击等等
我尝试使用有关 Raycasts 的教程,它可以帮助我实现敌人的视线。这奏效了,我的敌人确实发现了我,用 public bool 进行了测试。
现在是有问题的部分。如果我禁用 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;
}
}
}
任何想法。我是团结的新手,所以它很有可能是愚蠢的。
谢谢!
正如@Programmer 在评论中所建议的那样。原来我的 Sight 脚本与 EnemyBasic 脚本不在同一个 GameObejct 下。复制脚本,它就像一个魅力。
我有一个似乎无法解决的问题。
我有一个 AIManager 脚本。这具有所有控件以及我的敌人将如何移动。 然后我有一个 EnemyBasic 脚本。这代表了这个敌人的 AI 行为。他多久会攻击等等
我尝试使用有关 Raycasts 的教程,它可以帮助我实现敌人的视线。这奏效了,我的敌人确实发现了我,用 public bool 进行了测试。
现在是有问题的部分。如果我禁用 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;
}
}
}
任何想法。我是团结的新手,所以它很有可能是愚蠢的。 谢谢!
正如@Programmer 在评论中所建议的那样。原来我的 Sight 脚本与 EnemyBasic 脚本不在同一个 GameObejct 下。复制脚本,它就像一个魅力。