Unity 3D实例化预制件停止移动

时间:2015-06-19 10:14:59

标签: c# unity3d transform instantiation

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

这是我的脚本,附加到一个空的GameObject:

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);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的移动在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);
        }
}