- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个自定义编辑器窗口。我有一堆具有 RectOffset 属性的类。这些是常规类,不是从 ScriptableObject
或 Monobehaviour
继承的。
我对它们进行序列化和反序列化。当我反序列化时,我使用 Activator.CreateInstance(Type, Object[]); 动态实例化它们,例如:
public void OnAfterDeserialize() {
Vector2 dropPosition = new Vector2(10, 10);
Control child = (Control)Activator.CreateInstance(typeof(Button), dropPosition);
child.Name = child.InitName;
TestRectOffset = new RectOffset(0, 0, 0, 0);
}
但在这种情况下,Unity3d 给我一个错误,我必须使用 OnEnable()
来实现 RectOffset
。
set_left is not allowed to be called during serialization, call it from OnEnable instead. See "Script Serialization" page in the Unity Manual for further details. UnityEngine.RectOffset:.ctor(Int32, Int32, Int32, Int32)
当然我没有这个方法。我的类将具有多个属性,这些属性必须在 OnEnable
中获取值,但这是不可能的,因为它们是动态实例化的。
我应该怎样做才能模拟 OnEnable
行为?如何使用Activator.CreateInstance
实例化一个对象而不出错?
最佳答案
我现在制作了自己的非常简化的类(class)并且它有效:
[Serializable]
public class RectOffsetSeralizable {
public int Top { get; set; }
public int Left { get; set; }
public int Right { get; set; }
public int Bottom { get; set; }
public RectOffsetSeralizable() : this(0, 0, 0, 0) { }
public RectOffsetSeralizable(RectOffset rectOffset) {
Top = rectOffset.top;
Bottom = rectOffset.bottom;
Left = rectOffset.left;
Right = rectOffset.right;
}
public RectOffsetSeralizable(int left, int right, int top, int bottom) {
Top = top;
Bottom = bottom;
Left = left;
Right = right;
}
public RectOffset ToRectOffset() {
return new RectOffset(Left, Right, Top, Bottom);
}
public override string ToString() {
return $"RectOffset (l:{Left} r:{Right} t:{Top} b:{Bottom})";
}
}
但是,如果我将使用另一个需要在 OnEnable() 方法中初始化的内置 Unity 类 - 我将不得不为它们创建越来越多的剩余类我的目的
关于unity-game-engine - 是否有 OnEnable() 方法的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50968226/
所以我正在创建一个“聊天机器人”插件,该插件会自动向聊天消息发送捐赠链接和其他有用的消息,我知道我可能需要将其放入 public void onEnable void ,但是我不知道如何让它在发布另一
我有一个公开课,在那个课上我有: Msg msg = new Msg(); 但是我无法从类的 public void 方法访问 msg。 如果我: 每次使用时,将 Msg msg = new Msg(
根据文档,AppWidgetProvider 类的生命周期由 Android 平台管理。该文档还指出生命周期方法 onEnabled() 仅被调用一次。但是那些因为 Android 平台回收内存而被删
场景 1: 设备已加载 我添加第一个小部件 OneX -> 调用启用 | Galaxy Tab -> 不调用 onEnabled。 场景 2: 设备已启动,小部件已显示在屏幕上。 OneX -> 调用
我在触发 AppWidgetReciever 的 onEnabled 和 onDisabled 方法时遇到问题。我指定了操作,我还在 onRecieve 方法中记录了每个操作,但我得到的仅有的两个操作
我有显示来自内容提供商的数据的小部件。我想知道内容提供者中的数据何时发生变化。据我所知,方法是 context.getContentResolver().registerContentObserver
我正在制作一个自定义编辑器窗口。我有一堆具有 RectOffset 属性的类。这些是常规类,不是从 ScriptableObject 或 Monobehaviour 继承的。 我对它们进行序列化和反序
我的错误日志在第 13 行(在我的 MainClass 中)显示有一个 NPE。 我的主类: package me.p250; import org.bukkit.configuration.file
我尝试将 onEnabled 方法与 QnAMakerRecognizer 一起使用,以便我可以拥有多个 QnAMakerRecognizer,并可以选择启用和禁用哪些。我尝试遵循此example并尝
我正在研究原始 PowerControl Widget (SettingsAppWidgetProvider) 的一段源代码,我发现了以下方法: @Override public vo
我无法构建我的应用程序,因为我遇到了这个错误: Error:(117, 5) error: method does not override or implement a method from a
由于我使用 AlarmManager 执行定期小部件更新,因此我需要确保 onEnabled 和 onDisabled 能够可靠地工作。 但是,我意识到它们有时不会被触发。我不是唯一面临此问题的人。
我是一名优秀的程序员,十分优秀!