unity3d 是否有方法删除最后一个示例化的预制件而不丢失其他示例的引用?

gcuhipw9  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(118)

感谢其他用户(如果你正在阅读这篇文章,再次感谢),我开始使用一个函数将我的预制件与两个EmptyGameObject并排放置,这两个对象用作对象每侧的位置/旋转参考。
我想删除创建的最后一个示例(通过按键盘上的W),而不失去在删除过程后放置其他示例的可能性。
`

public class Placement : MonoBehaviour
{
    public GameObject GO1, GO2, GO3, GO4, GO5;
    public Counter count;

    void Start()
    {
        count = FindObjectOfType<Counter>();
    }
    
    void Update()
    {
            if (Input.GetKeyDown(KeyCode.Alpha1))
            {
                Instantiate(GO1, transform.position, transform.rotation);
                this.enabled = false;
            }
            if (Input.GetKeyDown(KeyCode.Alpha2))
            {
                Instantiate(GO2, transform.position, transform.rotation);
                this.enabled = false;
            }
            if (Input.GetKeyDown(KeyCode.Alpha3))
            {
                Instantiate(GO3, transform.position, transform.rotation);
                this.enabled = false;
            }
            if (Input.GetKeyDown(KeyCode.Alpha4))
            {
                Instantiate(GO4, transform.position, transform.rotation);
                this.enabled = false;
            }
            if ((Input.GetKeyDown(KeyCode.Alpha5)) && count.angolo <= 2)
            {
                Instantiate(GO5, transform.position, transform.rotation);
                this.enabled = false;
            }
            if (Input.GetKeyDown(KeyCode.W))
            {
                destroy(GO1);
            }
    }   
}


上面的代码被放在我在场景中使用的每个预制件中。
问题是告诉Unity识别最后克隆的预制件的名称(这样我就可以销毁它,而不必每次都写入预制件的确切名称),并让我有可能在最后一次操作之后放置其他示例化对象。

egdjgwm8

egdjgwm81#

目前,您并没有在代码中的任何地方创建对示例化对象的引用。相反,您试图破坏一个编辑器引用,我假设它是一个GameObject prefab。(GO1
如果你只对last示例化的GameObject感兴趣(而不是跟踪所有示例化的GameObject),那么创建一个可以用来引用示例化的GameObjects的变量,并在Destroy方法中使用它:

private GameObject _lastInstantiatedObject;

然后在示例化的每个点指定它:

if (Input.GetKeyDown(KeyCode.Alpha1))
{
    _lastInstantiatedObject = Instantiate(GO1, transform.position, transform.rotation);
}

由于现在有了对最后一个示例化的GameObject的引用,因此也可以销毁它

Destroy(_lastInstantiatedObject);

相关问题