您的位置:首页 > 移动开发 > Unity3D

Unity删除所有子物体保留父物体的2种方式

2015-09-07 18:01 1361 查看
今天遇到了这个问题,最后得出了2种解决方案,经过测试后,销毁所有子物体所用的时间,基本相同

情景:有一个父物体A,有子物体B1.B2.B3......B10等10个子物体

现在想销毁B1----B10,保留A

方法一:找到所有子物体,依次销毁

方法二:给每个子物体添加一个自我销毁的方法,在满足特定条件的情况下发送广播

方法一:

using UnityEngine;
using System.Collections;
/// <summary>
/// 脚本位置:将此脚本挂载到父物体A身上
/// 脚本功能:用于测试销毁所有子物体
/// </summary>
public class Parent : MonoBehaviour
{

	void Start ()
	{
		for (int i = 0; i < transform.childCount; i++) {
			Destroy (transform.GetChild (i).gameObject);
		}
	}

}


方法二:

using UnityEngine;
using System.Collections;

/// <summary>
/// 脚本位置:将此脚本挂载到父物体A身上
/// 脚本功能:发送广播给自己和自己的所有子物体
/// </summary>
public class Parent : MonoBehaviour
{

	void Start ()
	{
		// 执行Start方法后会发送一个广播
		// 广播会从自身开始查找这个DestoryMe方法,查找完自身后会查找所有子物体
		BroadcastMessage ("DestoryMe");
	}

}


using UnityEngine;
using System.Collections;
/// <summary>
/// 脚本位置:每个需要被销毁的子物体身上
/// 脚本功能:销毁自身
/// </summary>
public class Son : MonoBehaviour
{
	// 作为被广播通知的方法,由父物体通知执行
	public void DestoryMe ()
	{
		Destroy (gameObject);
	}
}


-------------------------------------------------------------------------

总结:这两种方法本质上都是遍历

我个人认为for循环的方法更好一些

第二种广播方法的方法也是遍历,但会从自身开始遍历

所以说,第二种方法会比第一种方法多遍历1次。

经过测试后,两种方法在当今年代的设备上效率基本相同


所以,用自己喜欢的吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: