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