Enemy Script Isn在我的塔防游戏c#上正常工作

时间:2016-08-19 07:26:18

标签: c# unity3d

我最近一直在关注" 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

1 个答案:

答案 0 :(得分:1)

您上传的图片显示您在编辑器中为Enemy脚本EnemyMover命名。这不是问题,但您应该始终在场景中发布脚本名称以避免混淆。

根据您的说法,这行代码就是问题所在:target = Waypoints.points[0];

问题是pointsTransform的数组,未初始化。

有三个可能的问题:

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脚本。单击“应用”。

enter image description here

问题#3 的第二个解决方案是删除static关键字并使用GameObject.Find("Waypoints");GetComponent<Waypoint>();。您可以找到脚本herehere的完整脚本。请注意,如果您遵循第二个删除static关键字的解决方案,则可能很难完成本教程的其余部分。