chat是这样说的,你看看是不是类似的问题:
这个问题出现的原因是在ScriptableObject的构造函数中调用了Load函数,而ScriptableObject的Load函数是不能在构造函数中调用的。
解决这个问题的方法是将Load函数的调用移到ScriptableObject的Awake或OnEnable等生命周期函数中。这样可以确保在调用Load函数时,对象已经完全初始化。
以下是一个简单的例子:
using UnityEngine;
[CreateAssetMenu(fileName = "MyScriptableObject", menuName = "Custom/MyScriptableObject")]
public class MyScriptableObject : ScriptableObject
{
// 其他变量和方法...
void OnEnable()
{
// 在这里调用Load函数或其他需要延迟初始化的操作
Load();
}
void Load()
{
// 在这里执行加载逻辑
Debug.Log("Loading data...");
}
}
在这个例子中,Load函数被移动到了OnEnable函数中,确保了在ScriptableObject被激活时调用,而不是在构造函数中调用。这样就避免了 “Load is not allowed to be called from a ScriptableObject constructor” 的问题。