Unity 怎么获取场景中顶级节点的所有GameObject

Unity 怎么获取场景中顶级节点的所有GameObject,第1张

Unity3d中要对对象进行 *** 作必须首先去获取得到场景中的对象,那么弄清除获取对象的小细节就能够事半功倍

工具/原料

Unity3d和其内置的编译器

方法/步骤

在层级面板中选择多个对象相同的部分在监听器面板中给显示出来并且批量 *** 作

在Untiy3d的层级面板中创建多个对象并有复杂的父子级关系

在EmptyObject上挂载的C#脚本来通过GameObject的(静态的方法)Find()的对象名称获取G1对象,通过获取G1对象的直接父节点对象打印输出信息

分别通过EmptyObject挂载C#和Cube没有挂载C# 的GameObject 静态方法find()的元素目录(精确指定对象)获取一个指定的对象,获取的对象分为隐藏和显示两种情况

在EmptyObject上挂载的C#脚本通过transform(公共的方法)find()的对象的名称获分别获取G1,G5和G6。结果只能够获取挂载C#的对象的直接子节点对象

分别通过EmptyObject挂载C#和Cube没有挂载C# 的transform公共方法find()的元素目录(精确指定对象)获取一个指定的对象,获取的对象分为隐藏和显示两种情况

7

总结:通过GameObject的静态的find(),对象的名称去查找一个对象从整个层级面板中去匹配一个对象忽略掉目录结构的多少和是否对象挂载了该 *** 作的C#脚本,但最后获取的对象可能并不是我们想要的,如果查找的对象被隐藏则找不到通过名称所匹配的对象;通过GameObject的静态的find()对象的目录基本去定位获取对象时一种精确匹配且是不管该匹配的对象是否被隐藏。--------------通过transform的公共find()方法且是对象的名称来匹配的只能够所编译的C#一定是挂载到被查找的对象上面且是找其直接子节点对象(非多级子对象),目录查找就忽略掉了多级别的子节点对象。

用代码还是直接在unity中调试?代码直接获取

用这个获取组件 ,更改组件的color属性就可以了

如果直接调试

Light是灯光,type是类型,color是光照颜色

通过GameObjectFind("节点的名字"), 来寻找到其他节点的object;

不管是父节点,子节点 都可以直接找到。

//题外话

GameObjectFind() 消耗大,别用到Update();

如果这个节点的active 是false 用GameObjectFind()是找不到的。

(active 为false 就是Tag 位置上边的勾选框 没有勾选)

这就是为什么会建立一个空节点作为父节点,然后在空节点下面放其他有用的节点吧。。。?

让这个空节点active 保持是 true;

然后通过

GameObjectFind("空节点的名字")transformFind("active是false的子节点");

条件一:对象A不存在父级对象,我们可以通过localScale获取对象实际尺寸。

条件二:对象A存在一个父级对象B,而父级对象B不存在父级(爷级),我们可以通过localScale获取相对父级B的缩放比例sizeA,然后在获取父级对象B的尺寸sizeB,然后通过计算sizeA sizeB活的对象A的实际尺寸。

条件三:对象A存在父级对象B,而父级对象B又存在父级对象C,C还存在父类D。。。。。依次嵌套,除了使用递归,Unity3D有没有什么办法可以直接获得对象A实际尺寸?谢谢

在 Unity 中目前我发现了获取依赖关系的两个 API 接口,分别是:

EditorUtilityCollectDependencies

AssetDatabaseGetDependencies

其中 AssetDatabaseGetDependencies 获取到的结果就是上面演示的那样,是大粒度的依赖关系。而 EditorUtilityCollectDependencies 获取到的是小粒度的依赖关系,所依赖的组件和 Shader 等都会列出来,非常的仔细。

C#

#if UNITY_EDITOR

using UnityEngine;

using SystemCollections;

using UnityEditor;

namespace PTFind

{

[ExecuteInEditMode]

public static class Find

{

[MenuItem("Find/What objects in scene use this", false, 20)]

public static void SelectSceneUsesOfAsset()

{

Object selectedObject = SelectionactiveObject;

if (selectedObject == null)

{

return;

}

Object[] roots = new Object[]{ selectedObject };

var objs = EditorUtilityCollectDependencies(roots);

string path = AssetDatabaseGetAssetPath(selectedObject);

var objs2 = AssetDatabaseGetDependencies(path);

foreach (var obj in objs)

{

DebugLog(objGetType()Name);

}

}

}

}

#endif

#if UNITY_EDITOR

using UnityEngine;

using SystemCollections;

using UnityEditor;

namespace PTFind

{

[ExecuteInEditMode]

public static class Find

{

[MenuItem("Find/What objects in scene use this", false, 20)]

public static void SelectSceneUsesOfAsset()

{

Object selectedObject = SelectionactiveObject;

if (selectedObject == null)

{

return;

}

Object[] roots = new Object[]{ selectedObject };

var objs = EditorUtilityCollectDependencies(roots);

string path = AssetDatabaseGetAssetPath(selectedObject);

var objs2 = AssetDatabaseGetDependencies(path);

foreach (var objin objs)

{

DebugLog(objGetType()Name);

}

}

}

}

#endif

不得不说,Unity Editor 提供的默认的依赖查找的功能好弱,包括反向依赖关系,引用关系丢失等功能。或许我们可以利用这些接口自己做一个好用点的依赖关系查找插件。

1,如果只是要不定期取一下这个数值,调用scrollViewgetScrollY(),如果是横向的scrollView,换成X。

2,如果要随时使用这个值,例如正在scroll过程中,其他控件要随着卷动的位置变化,需要继承一下并且重载onScrollChanged(int, int, int, int),这样每个scroll动作,都会被调用,告知当前scroll的位置以及上一次的位置。如果是横向,那么参数1,3起作用,纵向为2,4

T是组件类型

比如mesh就是

transformgameObjectGetComponent<Mesh>()

我举个别的例子

curObjtransformFind ("mesh_body")GetComponentsInChildren<SkinnedMeshRenderer> (true) [0]sharedMaterials[0]color; 这个例子里color是main color,要是获取tinycolor啥的话就是sharedMaterials[0]GetColor("_TintColor");

以上就是关于Unity 怎么获取场景中顶级节点的所有GameObject全部的内容,包括:Unity 怎么获取场景中顶级节点的所有GameObject、Unity中怎么获取实时全局光照的颜色信息、unity中怎样获取其他父节点的子节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9562347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存