gpt4 book ai didi

c# - 如何通知组件或子游戏对象已添加到游戏对象

转载 作者:太空狗 更新时间:2023-10-29 22:01:11 25 4
gpt4 key购买 nike

Component 添加到 GameObject(甚至是子 GameObject)时,是否可以通知我(可能通过某些方法/事件引发)?

我希望在编辑器中发生某些事件时收到通知(可能在某些编辑器脚本中),例如:

  • 一个组件已经附加到一个GameObject实例
  • 组件已被附加Prefab
  • GameObject 已成为另一个 GameObject 实例的

这可能吗?如果是的话怎么办?


编辑

我找到了一个关于育儿问题的代表:EditorApplication.hierarchyWindowChanged

根据文档,它被称为:

Called whenever the scene hierarchy has changed.

This is transform.parent changed, gameObject.name, creating a new game object, etc.

我仍然不明白是否有一种方便的方法来了解层次结构中的哪个对象已更改。

最佳答案

您可以在(仅限编辑器的)关卡编辑场景中向对象添加组件:

#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;

public class LevelEditorHelper : MonoBehaviour
{
LevelEditorHelper()
{
EditorApplication.hierarchyWindowChanged -= MyHierarchyChangedCallback;
EditorApplication.hierarchyWindowChanged += MyHierarchyChangedCallback;
}

private static void MyHierarchyChangedCallback()
{
Debug.Log("Hierarchy has changed");
}
}
#endif

然后在回调中您可以访问当前选择的对象(添加的对象将成为事件选择):

GameObject activeObj = Selection.activeGameObject;
if(activeObj != null) {
...

现在您可以检查它的父对象以查看它是否匹配任何其他对象,并执行其他检查以确保这实际上是您感兴趣的事件(记住它也会被调用以进行各种其他层次结构更改),然后您可以调用另一个函数来执行您想要的任何操作。

注意:这对于游戏场景不会按原样工作,如果您直接使用关卡编辑器脚本编辑游戏场景,那么您需要更加小心放置 #if UNITY_EDITOR 并考虑如何删除不必要的组件(可能在 Start 中或如果可能的话在构建时),或者如果你不做任何事情就把它留在那里我很高兴。在我的例子中,我的关卡编辑器是一个仅限编辑器的场景,它将编辑器场景的特定子集保存为在游戏中使用的场景。

关于c# - 如何通知组件或子游戏对象已添加到游戏对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15634781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com