Unity开发备忘录000021:如何判断某一个对象是否有子对象

在项目开发中,有时要为某一对象(如X对象)动态添加一个子对象,这就需要判断X对象是否已经具有了子对象,因为是动态实时添加子对象,如果不做这样的判断以及相应的限制,就会给X对象添加上一批相同的子对象,这不是我们想要的。

那么,如何判断某一个对象是否有子对象呢?

其实也很简单,可通过计算该对象身上有多少个子对象来判断该对象是否有子对象,语句如下:

gameObj.GetComponentsInChildren<Transform>(true).Length

gameObj是被测对象,查找它的子对象可以通过GetComponentsInChildren<Transform>(true)实现,Length可视为有多少个对象。

但需要主意的是,gameObj本身也会被记录到Length之中,所以在判断gameObj对象是否有子对象时,应做如下书写(而不是写成==0)

 if (gameObj.GetComponentsInChildren<Transform>(true).Length <=1)

{

}

例如,场景中放有三个对象:A、B、C,其中A对象中有一个子对象,B对象中有两个子对象,C对象没有子对象,如果我想只对没有子对象的对象添加一个名字为door的子对象,可用下面的语句段:

if (gameObj.GetComponentsInChildren<Transform>(true).Length <=1)

{
                    newGameObject = (GameObject)Instantiate(gameObject);
                    newGameObject.name = "door";
                    newGameObject.transform.parent = m_hit.transform;
 }

测试如下:

操作之前的状态

运行后,当用鼠标点击A、B、C三个对象时,只有C对象添加了一个子对象door,其他对象都没有添加,如下:

测试成功,满足我们的需求。

忽然觉得程序员有点像上帝,如果某人没有孩子就赐给他一个孩子,如果已有孩子的家伙就不再给他更多的孩子了,嘿嘿!

老孙头课堂:https://edu.csdn.net/lecturer/3617

上一篇:Unity开发备忘录000020:Unity2019如何切换成中文界面

下一篇:Unity开发备忘录000022:Unity许可证无效,怎么办?

猜你喜欢

转载自blog.csdn.net/sunbowen63/article/details/96964910