如何让Unity 游戏物体立即销毁
下面我们将详细阐述实现Unity游戏物体立即销毁的方法和步骤,主要涵盖层级物体的销毁以及对NGUI层级关系和深度的深入理解总结。
层级物体的销毁
单个物体的查找与销毁
若要在层级面板中找到某个物体并将其销毁,可使用以下代码:
GameObject obj = GameObject.Find("所要找的名字");
Destroy(obj);
多个物体的查找与销毁
当需要查找的物体较多时,可以将找到的物体存放在一个数组中。若物体的名字按照顺序或一定规律命名,还能通过for
循环统一查找并赋值。例如,物体的名字依次为house1
,house2
,……,house10
,可按如下方式处理:
string str;
GameObject[] a = new GameObject[11]; // 数组长度根据实际情况调整
for (int i = 1; i < 11; i++)
{
str = "house";
str = str + i;
a[i] = GameObject.Find(str);
Destroy(a[i]); // 销毁找到的物体
}
通过标签查找物体
还可以使用GameObject.FindWithTag("标签名")
方法来查找物体,但前提是要给这些物体添加相应的标签。
NGUI层级关系与非层级关系
NGUI层级关系
NGUI层级关系是创建时默认的层级关系,包含UIRoot
、Camera
、anchor
和panel
。
非NGUI层级关系
非NGUI层级关系是以Camera
为基础,在其中创建控件。不过,Camera
需要挂载UIcamera
和UIpanel
脚本。
关于NGUI深度、层次总结(做过很多NGUI界面后理解会更深刻)
同一panel下,同一atlas的不同sprite
在同一个panel
下,使用同一个atlas
的不同sprite
的显示仅受depth
控制,这是最常用的方式。此时,不论精灵的z
轴如何变化,depth
值高的精灵一定显示在前面(相同atlas
其实是共用同一个Z
轴深度)。
不同panel下,同一atlas的不同sprite
在不同panel
下,使用同一个atlas
的不同sprite
不受depth
控制,而是受z
轴控制。此时,只需稍微调节其中一个精灵的z
轴,例如设置为0.1
,就可以控制sprite
的显示。
不同panel下,不同atlas的精灵
不同panel
下,使用不同atlas
的精灵的穿插显示受z
轴控制。
同一panel下,不同Atlas的sprite
在同一个panel
下,使用不同Atlas
的sprite
受z
轴控制,depth
不起作用。
在项目中制作较为复杂的界面时,经常会用到多个图集。以技能界面为例,项目中常用的图片会放到共用图集中,这是一个图集;技能界面本身独有的元素,如跟技能职业相关的背景,算作第二个图集;还有一些技能图标,会单独归类到一个图集中;另外就是字体的图集。基本一个界面如此划分,最多需要4个图集。
NGUI的图集之间的处理,默认是通过调整控件的Z
值来区分的,但这种方式存在不足。在调整同一个图集每个控件的Z
值时,经常会出现图层相互遮挡的情况,尤其是对于控件较多的界面。当一段时间后再回来修改界面时,会让人感到十分棘手。
我的做法是,在UIPanel
中,为每一个Material
添加一个layer
变量。当处于同一图层时,靠depth
来决定前后关系;不同图层则靠layer
来决定前后关系。在绘制UIDrawCall
时,根据layer
对根节点做一定偏移。这样就能摆脱对Z
值的依赖。
如果大家在项目中也遇到了图层相关的问题,可以参考这种做法。采用这种方法处理图层关系较为简单,在处理过的大量项目UI中,尚未遇到无法解决的情况。
以上就是关于如何让Unity游戏物体立即销毁的一些理解和总结,供大家参考学习。