我设置了一个非常简单的场景,每隔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);
}
}
}
答案 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);
}
}