Unity 3D Instantiated Prefabs 停止移动

Unity 3D Instantiated Prefabs stop moving

我设置了一个非常简单的场景,其中每 x 秒实例化一个预制件。我在 Update() 函数中的实例上应用了 transform.Translate。一切正常,直到生成第二个对象,第一个停止移动并且所有实例都停止在我的翻译值。

这是我的脚本,附加到一个空的游戏对象:

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    public GameObject prefab;
    private Transform prefabInstance;

    void spawnEnemy() {
        GameObject newObject = (GameObject)Instantiate(prefab.gameObject, transform.position, transform.rotation);
        prefabInstance = newObject.transform;
    }

    void Start() {
        InvokeRepeating ("spawnEnemy", 1F, 1F);
    }

    void Update () {
        if (prefabInstance) {
            prefabInstance.transform.Translate (new Vector3(4,0,0) * Time.deltaTime);
        }
    }
}

您的移动发生在 Update() 中的 prefabInstance 对象上,但是,当创建第二个实例时该对象会被覆盖,因此只有最后一个实例化的预制件会移动。

您应该考虑将您的代码拆分为 2 个脚本,第一个生成预制件,第二个实际在预制件上移动它的脚本。

public class Test : MonoBehaviour {
    public GameObject prefab;

    void spawnEnemy() {
        Instantiate(prefab, transform.position, transform.rotation);
    }

    void Start() {
        InvokeRepeating ("spawnEnemy", 1F, 1F);
    }
}

并将此脚本放在您的预制件上:

public class Enemy : MonoBehaviour {

   void Update () {
        transform.Translate (new Vector3(4,0,0) * Time.deltaTime);
        }
}