我最近一直在关注" Brackeys"在youtube上进行塔防游戏时,我一字不漏地跟着它,但是有一个错误(在下面的照片中)不会让我的敌人预制件在场景中移动。预制件都是产卵的,但却被困在一个地方。 任何帮助将不胜感激
谢谢,米奇using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 10f;
private Transform target;
private int wavePointIndex = 0;
// Use this for initialization
void Start()
{
// An error pops up on the first frame for this line of code below
target = Waypoints.points[0];
}
// Update is called once per frame
void Update ()
{
// This is the main source of the error below.
Vector3 dir = target.position - transform.position;
transform.Translate (dir.normalized * speed * Time.deltaTime, Space.World);
if (Vector3.Distance (transform.position, target.position) <= 0.4f)
{
GetNextWayPoint ();
}
}
void GetNextWayPoint()
{
if (wavePointIndex >= Waypoints.points.Length - 1)
{
Destroy (gameObject);
return;
}
wavePointIndex++;
target = Waypoints.points[wavePointIndex];
}
}
error description in unity Enemy prefab that has script on it
答案 0 :(得分:1)
您上传的图片显示您在编辑器中为Enemy
脚本EnemyMover
命名。这不是问题,但您应该始终在场景中发布脚本名称以避免混淆。
根据您的说法,这行代码就是问题所在:target = Waypoints.points[0];
问题是points
是Transform
的数组,未初始化。
有三个可能的问题:
1 。您的Waypoint
脚本未附加到 Waypoints GameObject。
选择 Waypoints GameObject,将Waypoint
脚本拖入其中。它必须附加到您的 Waypoints GameObject才能启动它
points
数组变量。
2 。您的Waypoint
脚本附加到多个GameObjects。确保Waypoint
脚本仅附加到一个GameObject,并且GameObject是所有航点的父级。此GameObject名为 Waypoints 。
要验证这一点,请从“项目”标签中选择Waypoint
脚本,右键单击该脚本,然后点击在场景中查找参考。它将显示Waypoint
脚本附加到的每个GameObject。如果它附加到任何未命名为 Waypoints 的GameObject,请从该GameObject中删除该脚本。
3 Waypoint
脚本中的函数在Enemy
脚本中的函数之前被调用。 Unity中有时会发生这种情况。
转到修改 - &gt; 项目设置 - &gt; 脚本执行订单。将Waypoint
脚本拖到订单中,然后在oder中拖动Enemy
脚本。单击“应用”。
问题#3 的第二个解决方案是删除static
关键字并使用GameObject.Find("Waypoints");
和GetComponent<Waypoint>();
。您可以找到脚本here和here的完整脚本。请注意,如果您遵循第二个删除static
关键字的解决方案,则可能很难完成本教程的其余部分。