Unity中的prefab预制体要加一个父GameObject

Unity中的prefab预制体要加一个父GameObject

为什么?

因为如果你不加,你没法调整物品的中心点,这样不好生成时定位。

Unity中,如果你想要通过C#获取GameObject上某个Prefab类型的子物体,特别是Label类型的,你可以先创建一个公共的委托或者属性来表示获取Label的行为,然后在C#脚本中查找并返回。假设你的Prefab一个固定的标签名字比如"LabelComponent",可以这样做: ```csharp using UnityEngine; public class PrefabFinder : MonoBehaviour { // 创建一个公共委托,用于在找到Label时回调 public delegate void FoundLabel(GameObject labelGameObject); [HideInInspector] // 隐藏这个字段以便外部不会直接访问 public GameObject parentObject; // 保存需要查找的物体 private void Start() { // 检查是否已经找到了Label,如果没有就搜索 if (FindLabel()) { // 如果找到了,调用委托通知外部 OnFoundLabel(labelGameObject); } } // 使用递归搜索Label组件 private bool FindLabel() { foreach (Transform child in parentObject.transform) { if (child.CompareTag("Label") && child.GetComponentInChildren<TextMeshProUGUI>() != null) // 确保是TextMeshProUGUI类型的Label { foundLabel = child.gameObject; return true; } else if (child.GetComponentsInChildren<Prefab>().Length > 0) // 继续检查是否有子Prefab { if (FindLabel()) // 如果子Prefab有Label,则返回true return true; } } return false; } // 当找到Label时触发的事件 public event FoundLabel OnFoundLabel; // 公开这个方法供外部调用,当Label找到时,会自动触发事件 public void TryGetLabel() { if (foundLabel != null) { OnFoundLabel?.Invoke(foundLabel); // 调用委托,传递Label游戏对象 } } // 变量存储找到的Label游戏对象(这里仅作示例,实际应用中可能不需要) private GameObject foundLabel; } ``` 在这个例子中,`OnFoundLabel`是外部可以订阅的事件,`TryGetLabel`方法会被外部调用来尝试获取Label。如果Label存在并且找到了,它会通过事件传递给订阅者。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值