gpt4 book ai didi

c# - 使用嵌套类作为 Unity3D 组​​件

转载 作者:行者123 更新时间:2023-11-30 21:45:03 24 4
gpt4 key购买 nike

我使用的是Unity 5.4.2f2 Personal,我写了一个类似下面的C#脚本:

using UnityEngine;
using System;

public class Outer : MonoBehaviour {

// Some public outer fields

public class Inner : MonoBehaviour {
// Some public inner fields
}

}

我希望能够将 OuterInner 附加到场景中的游戏对象。不幸的是,Inner 不会在 Unity Inspector 中显示为可用脚本,即使我将 [Serializable] 添加到它也是如此。我知道很多人可能会说如果我试图让嵌套类对外界可见,我的设置有问题,但为了这个问题,我只想知道这 是否可以 完成。即,是否有任何方法可以使嵌套类可用作 Unity 组件?

最佳答案

This answer是错误的!

至少它只是半正确的:

好的,是的,如果您的目标是通过 Inspector 的 Add Component 按钮使用和添加此组件,那么NO它需要放在一个单独的具有匹配类名的脚本文件!

但是,如果您仅通过脚本在运行时添加该组件,那么您实际上可以做到这一点!

Unity 本身就是这样做的,例如在Dropdown组件中(摘自用Rider反编译的源码)

public class Dropdown : Selectable, IPointerClickHandler, ISubmitHandler, ICancelHandler
{
protected internal class DropdownItem : MonoBehaviour, IPointerEnterHandler, ICancelHandler
{
...
}

...
}

(Selectable 继承自UIBehaviourUIBehaviour 继承自MonoBehaviour)

由于这种嵌套,在运行时稍后在 Inspector 中看起来像这样

enter image description here

但绝对有可能!

为了证明这一点,您可以轻松地做同样的事情,例如

public class TEST : MonoBehaviour
{
private class NESTED : MonoBehaviour
{
[SerializeField] private int someInt;
[SerializeField] private Transform someReference;
}

[ContextMenu("Add NESTED component")]
private void AddNested()
{
gameObject.AddComponent<NESTED>();
}
}

所以你可以看到,即使在播放模式之外的编辑时间,我也可以通过上下文菜单简单地添加这个“隐藏”组件

enter image description here

它仍然是序列化的,并且在关闭并重新加载场景后仍然存在:

enter image description here

关于c# - 使用嵌套类作为 Unity3D 组​​件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40515023/

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