unity 销毁物体Destroy、DestroyImmediate

编程知识 更新时间:2023-05-02 19:05:35

参考:Unity中使用Destroy删除游戏物体的大坑_zxy13826134783的博客-CSDN博客

Destroy(异步销毁):使用Destroy删除游戏物体,游戏物体并不会立即被删除,而是异步执行的,不会影响主线程的执行,说白了,就是它另外开一条道去执行了;该函数给物体加了一个标识符,物体还在内存中,在下一帧时才销毁并从内存中移除。

DestroyImmediate:立即销毁物体并移除内存。使用DestroyImmediate删除游戏物体,游戏物体立即被删除,代码顺序执行,影响主线程的执行

1、首先说一下需要做的功能:
(1)想要ImageTargetParent作为父物体,然后在它下边实例化一些随机的点,输出ImageTargetParent下第0个子物体的位置;
(2)点击“重置”按钮,删除ImageTargetParent下所有子物体,然后再随机实例化一些点,同样输出ImageTargetParent下第0个子物体的位置;

 实现方法如下:使用Destroy进行删除,可是发现并不能得到想要的结果,点击“重置”按钮,输出的结果一样。原因就是点击“重置”按钮后此时没有销毁原有的子物体,新增加的子物体索引在原有基础上继续增加,但是在Unity面板是看不到的,因为unity在下一帧时删除了原有的子物体。

using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
    Transform targetPrefab;
    public Transform targetParent;
    public Button resetButton;
    void Start()
    {
        targetPrefab = Resources.Load<Transform>("prewfabs/ImageTarget1");
        resetButton.onClick.AddListener(ResetTargetObj);
        CreateTargetObjPosition(); 
    }
    void ResetTargetObj()
    {
        for (int i = 0; i < targetParent.childCount; i++)
        {
            Destroy(targetParent.GetChild(i).gameObject);
        }
        CreateTargetObjPosition();
    }
    void CreateTargetObjPosition()
    {
        int  targetNum = UnityEngine.Random.Range(3, 6);
        for (int i = 0; i < targetNum; i++)
        {
            Transform _tra = Instantiate(targetPrefab, targetParent);
            _tra.localPosition = Vector3.one * UnityEngine.Random.Range(3, 6);
            _tra.gameObject.SetActive(true);
        }
        Debug.Log("**1**:" + targetParent.transform.GetChild(0).localPosition);
    }
}

修改方法如下:将Destroy替换为DestroyImmediate。
注意:此时程序还是不能正常执行,因为一旦DestroyImmediate执行,那么targetParent.childCount的数量就会立刻减1 ,循环不成立;最简单的办法,将循环范围+i,查找子物体的索引变成“ 0 ”;

 

更多推荐

unity 销毁物体Destroy、DestroyImmediate

本文发布于:2023-04-28 04:36:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/4779cbfb60c48ce2f0a5907fd1db781a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:物体   unity   DestroyImmediate   Destroy

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 107665文章数
  • 27233阅读数
  • 0评论数