所以我有一个数据脚本:
[CreateAssetMenu(menuName="MyData", fileName="GoData")]
public class MyData : ScriptableObject
{
[SerializeField] private List<GameObject> myObjects;
public List<GameObject> MyObjects { get { return myObjects; } }
}
只是一堆游戏对象的容器。该容器应该像这样传递到可编写脚本的对象中:
public class SomeAwesomeScript : ScriptableObject, ISomeAwesomeInterface
{
public MyData myData;
public SomeAwesomeScript Init(...)
{
//initializations, since we cant use constructors when using ScriptableObject
}
public void DoSomeAwesomeShit()
{
DoSomethingWith(myData.MyObjects);
}
}
现在DoSomeAwesomeShit
是在ISomeAwesomeInterface
中定义的,实际实现应该是实现该方法的每个其他类唯一的。
然后在这样的单一行为中使用SomeAwesomeScript:
public class SomeAwesomeBehaviour : MonoBehaviour
{
private ISomeAwesomeInterface awesomeness;
void Start()
{
//initialising awesomeness
}
void Update()
{
//...
awesomeness.DoSomeAwesomeShit();
//some code, changing awesomeness to other ISomeAwesomeInterface based on some condition maybe
}
}
这里的问题是我无法将MyData
分配给SomeAwesomeScript
,因为
Default references will only be applied in edit mode
因此,当我启动统一程序时,MyData为null。
有没有办法解决这个问题?还是我被迫将“ MyData”部分硬编码到每个ISomeAwesomeInterface
中编辑:
那些脚本不必继承ScriptableObject
我在此处进行此设计的唯一原因是,因为我需要将List分配给我的SomeAwesomeScript(以及ISomeAwesomeInterface的所有其他实现),除了使那些脚本继承ScriptableObject之外,似乎没有其他方法