【问题标题】:Unity 2D - Null Reference upon script activationUnity 2D - 脚本激活时的空引用
【发布时间】: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 的游戏对象下。
  • gameObjectnullgameObject.GetComponent&lt;EnemyBasic&gt;() 是,但是您显示的代码中没有任何内容可以为我们提供信息以进行修复。如果您需要帮助,请发帖minimal reproducible example

标签: unity3d unity5 unity3d-2dtools


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多