【发布时间】:2017-09-27 12:26:24
【问题描述】:
我正在寻找一种方法来禁用在 Unity 编辑器中附加我的 MonoBehaviour 组件的可能性。 所以我不希望我的组件出现在用户可见的任何地方。
原因是我从带有AddComponent<T>() 的脚本手动附加了这个组件。所以这更像是一个方便的问题,我只是不希望用户认为他必须手动添加我的组件才能让我的插件工作。 (如果他仍然这样做,那不会造成任何麻烦。再说一次,这只是方便)
精度
我正在编写一个库(dll 插件),所以我不能使用与我的组件不同的文件命名技巧,但这正是我正在寻找的效果。
我还尝试将我的类简单地设置为内部类,因为它确实是这样,程序集应该是唯一可以访问该组件的组件。但是,我担心即使使用内部类从 MonoBehaviour 继承也会使组件在编辑器中可用...
HideInInspector 属性似乎不适用于类。
我正在使用RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad) 从静态方法调用AddComponent,因此我不会依赖任何其他行为。
这是一个相当大的挑战,如果我们能找到答案,那就太奢侈了。 任何想法?非常感谢
【问题讨论】:
-
它是运行时 AddComponent 还是 EditorScript?在运行时执行它可能是用户的性能问题 - 如果它不会导致任何问题,可能会让用户决定用户是否要手动添加它?
-
是的,它在运行时,但只有一次,当第一个场景加载时。公平地说,我正在为服务编写一个库,所以如果他下载我的库,那已经是因为他希望我的行为在那里......
-
我明白了!不幸的是,我没有你的问题的答案。你不能用
[RequireComponent( typeof(YourScript) )]代替AddComponent吗? -
并非如此。我的组件是从
RuntimeInitializeOnLoadMethod实例化的,所以我没有任何其他 MonoBehaviour 可以坚持