• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

解决ScriptableObject.ctor is not allowed to be called from a MonoBehaviour constructor...

武飞扬头像
野奔在山外的猫
帮助1

开发平台:Unity 2018版本
编程平台:Visual Studio 2018版本
编程语言:CSharp

一、问题描述


  描述
原文 ScriptableObject.ctor is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour ‘脚本名称’ on game object ‘游戏对象名称’.See “Script Serialization” page in the Unity Manual for further details.
翻译 ScriptableObject 不被允许在 MonoBehaviour 中进行实例化相关操作。请在 Awake 或 Start 周期进行实例化操作!更多信息来源:XXX对象上的XXX脚本。你可以从 Unity Manual 获取更多关于 Script Serialization 信息。

备注:这是一处关于 Unity ScriptableObject 实例化问题。

二、场景还原


建立 ScriptableObject 数据存储文件

[CreateAssetMenu(FileName="TreeViewData", MenuName="Assets/Create SO/Tree View SO", 1)]
public class TreeViewData : SciptableObject { }

  如上所示,这是一个服务于 Tree View 的 SO配置数据。使用该类型数据资产应配合使用 CreateAssetMenu() 特性建立创建入口。

在 Mono 中实例化数据文件对象(失败)

  在 Unity CSharp 中,为方便管理与初始化属性对象,可使用 访问类型 类 类名 = new 类型() 进行初始化构建。
对于非需要运行前配置进行空间开辟存储下,显得方便简洁。避免 Awake/Start 等周期进行 new 操作要便捷些许。

public class TreeViewRoot : MonoBehaviour
{
	public TreeViewData Data = new TreeViewData();
}

  但 Unity 中 ScriptableObject 不同于 MonoBehaviour。无法作为组件方式存在。如上图代码所示,最终运行结果将出现核心报错信息。


总结

  • 不支持实例化。但可以通过 Resources.Load 等方法从资产库中加载此 SO 数据使用。
  • 仅作为特别资产文件存在于 Asset/ 目录下(注意:目录下的 StreamingAssets | Plugins 目录也无法存在)。

三、解决方法


方法一:使用 Resouces.Load 加载 已创建 配置 资产完成赋值。

方法二:替换 Class 存储数据内容,完成实例化过程。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgikbhk
系列文章
更多 icon
同类精品
更多 icon
继续加载