unity3d C#未分配引用异常:

agxfikkp  于 2023-03-19  发布在  C#
关注(0)|答案(2)|浏览(205)

在代码(https://livebook.manning.com/book/unity-in-action-third-edition/chapter-3/166)中,添加火球攻击敌人的能力时,文件被编译,当您启动游戏并遇到敌人时,出现错误:

UnassignedReferenceException: The variable fireballPrefab of WanderingAI has not been assigned.
You probably need to assign the fireballPrefab variable of the WanderingAI script in the inspector.
UnityEngine.Object.Instantiate[T] (T original) (at <e8a406da998549af9a2680936c7da25a>:0)
WanderingAI.Update () (at Assets/WanderingAI.cs:31)

对象已添加https://prnt.sc/hudEm5hvcuWx

void Update()
    {   
        if (_alive) 
        {
            transform.Translate(0, 0, speed * Time.deltaTime);
            Ray ray = new Ray(transform.position, transform.forward); // непрерывное движение
            RaycastHit hit;
            if (Physics.SphereCast(ray, 0.75f, out hit)) // бросаем луч с описанной вокруг него окружностью
        {   GameObject hitObject = hit.transform.gameObject;
            if (hitObject.GetComponent<PlayerCharacter>()) 
            {
                if (_fireball == null) 
                {
                    _fireball = Instantiate(fireballPrefab) as GameObject;
                    _fireball.transform.position = transform.TransformPoint(Vector3.forward * 1.5f);
                    _fireball.transform.rotation = transform.rotation;
                }
            }
            else if (hit.distance < obstacleRange) 
            {
                float angle = Random.Range (-110, 110); // поворот с наполовину случайным выбором направления
                transform.Rotate(0, angle, 0);
            }
        }
        }
    }
}
bkhjykvo

bkhjykvo1#

看起来您添加到了脚本,而不是包含脚本的预置。
在编辑器中选择包含你的WanderingAI脚本的预置,在检查器中赋值。这样就可以了。
如果您没有此脚本的预置,只是通过AddComponent方法添加它,则必须在创建后明确地将链接传递到所需的预置。

tp5buhyn

tp5buhyn2#

啊我想现在我明白了:您仅直接在脚本导入设置本身上将预置指定为**“默认引用”
这只有在
指定此默认引用后**使用AddComponent时才有效。如果您已经将组件的示例附加到场景中的对象,则它不会受此后来添加的默认引用的影响
=〉在层次结构中找到该组件实际连接到的对象,并通过检查器将预置分配到那里!

相关问题