Unity中的常用Find

本文介绍了Unity中使用GameObject.Find、GameObject.FindGameObjectsWithTag/FindWithTag及Transform.Find等方法查找游戏物体的不同方式及其优缺点。GameObject.Find适用于查找激活状态的游戏物体,但性能较低;GameObject.FindGameObjectsWithTag/FindWithTag通过标签查找,性能更优;而Transform.Find则专门用于查找子物体,支持非激活状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、GameObject.Find(string name);

这种方法查找好处是能查到名字为name的gameobject。缺点是不能查找非激活的物体。而且会逐个遍历所有物体。比较浪费性能。不要在任何场景都有这个方法

2、GameObject.FindGameObjectsWithTag(string tag)/GameObject.FindWithTag(string tag);

这两个方法是根据tag来查找游戏物体。同样不能查找隐藏物体,但是因为是在tag集中查找。性能优于上面一种。

3、 Transform.Find(string name);

这个方法是查找自身的子物体。特点是可以查找到非激活状态的子物体。缺点是如果需要查找子物体的子物体还需填写路径。

### Unity 中 `FindReference` 的用法 在 Unity 编辑器脚本中,`SerializedProperty.FindPropertyRelative()` 和 `SerializedObject.FindProperty()` 是两个常用的方法来查找序列化属性中的特定字段。这些方法允许开发者通过名称访问嵌套对象内的属性。 对于 `SerializedProperty.FindPropertyRelative()` 方法而言,在给定父级属性的情况下可以定位到子属性的位置[^1]: ```csharp using UnityEngine; using UnityEditor; public class ExampleEditor : Editor { public override void OnInspectorGUI() { SerializedProperty exampleProp = serializedObject.FindProperty("exampleField"); SerializedProperty nestedProp = exampleProp.FindPropertyRelative("nestedField"); EditorGUILayout.PropertyField(nestedProp); serializedObject.ApplyModifiedProperties(); } } ``` 而当使用 `SerializedObject.FindProperty()` 时,则是从根级别开始搜索整个序列化的对象图以找到指定的名字对应的属性节点[^2]: ```csharp using UnityEngine; using UnityEditor; public class AnotherExampleEditor : Editor { public override void OnInspectorGUI() { SerializedObject so = new SerializedObject(target); SerializedProperty prop = so.FindProperty("someFieldName"); EditorGUILayout.PropertyField(prop); so.ApplyModifiedProperties(); } } ``` 需要注意的是,如果目标属性不存在于当前上下文中,上述两种方式都将返回 null 值;因此建议总是检查返回的结果是否有效再继续操作。 另外值得注意的一点是在某些情况下可能会遇到性能瓶颈问题,特别是在处理大型项目或复杂的数据结构时频繁调用此类函数可能导致效率低下。为了避免这种情况发生,应该尽可能缓存已经获取过的属性引用而不是每次都重新查询它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值