资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 游戏开发 > 其他

unity 销毁物体Destroy、DestroyImmediate

其他 更新时间: 发布时间: 计算机考试归档 最新发布

unity 销毁物体Destroy、DestroyImmediate

参考: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("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 ”;

 

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/904499.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【unity 销毁物体Destroy、DestroyImmediate】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2