如何在 Unity 中获取某个对象的依赖关系

如何在 Unity 中获取某个对象的依赖关系,第1张

在 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 提供的默认的依赖查找的功能好弱,包括反向依赖关系,引用关系丢失等功能。或许我们可以利用这些接口自己做一个好用点的依赖关系查找插件。

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

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

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

Unity3d中GameObject对象可以包括其他子GameObject,并且本身包括多个Component

1.GameObjectFind("myObject") or FindGameObjectByTag will search the scene for an object called myObject

2. transformFind("myObject") will only search the game objects children for an object called myObject

3.GetComponent用来获取组件。

Transform Find(String name)    Transform FindChild(String name)

查找名为name的(transformgameObject)直接子物体并返回该子物体的Transform属性。不能是孙子物体或更低辈分的子物体。

2可以在name中使用字符'\' 遍历整个路径。其中路径的根必须是transformgameObject的直接子物体,不能是孙子物体或更低辈分的子物体。

这样就可以访问到以transformgameObject为根的物体树,包括其子物体,孙子物体,曾孙物体。。。。

若Cube物体有一个直接子物体Cube1,Cube1有一个直接子物体Cube2,我们就可以在Cube的脚本中使用transformFind("Cube1/Cube2");

或transformFindChild("Cube1/Cube2");

这样就直接访问到了transformgameObject的孙子物体Cube2。

Unity中可以使用两种方式得到透明效果:透明度测试(alpha test,无法得到真正的透明效果)、透明度混合(alpha blending)。

对于不透明物体,深度缓冲(depth buffer)就能正确判断物体的遮挡关系。

以上就是关于如何在 Unity 中获取某个对象的依赖关系全部的内容,包括:如何在 Unity 中获取某个对象的依赖关系、如何在unity中获取对象的大小、unity3d 如何获取一个子对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9396627.html

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

发表评论

登录后才能评论

评论列表(0条)

保存