繁体   English   中英

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

[英]Unity 3D Instantiated Prefabs stop moving

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM