在代码(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);
}
}
}
}
}
2条答案
按热度按时间bkhjykvo1#
看起来您添加到了脚本,而不是包含脚本的预置。
在编辑器中选择包含你的WanderingAI脚本的预置,在检查器中赋值。这样就可以了。
如果您没有此脚本的预置,只是通过
AddComponent
方法添加它,则必须在创建后明确地将链接传递到所需的预置。tp5buhyn2#
啊我想现在我明白了:您仅直接在脚本导入设置本身上将预置指定为**“默认引用”。
这只有在指定此默认引用后**使用
AddComponent
时才有效。如果您已经将组件的示例附加到场景中的对象,则它不会受此后来添加的默认引用的影响=〉在层次结构中找到该组件实际连接到的对象,并通过检查器将预置分配到那里!