我确信我要找的东西已经在某个地方讨论过了,但我找不到。我想知道围绕我想要构建的系统,通常的最佳实践是什么:
假设我有一个带有数据容器的基类(ScriptableObject是统一的,但可以用标准类推广到C#(:
public class Employee: MonoBehaviour
{
[SerializeField]
protected EmployeeSO _employeeSO;
// ...
}
public class EmployeeSO : ScriptableObject
{
public string employeeName;
}
现在,让我们假设我想从Employee那里继承,以创建一个拥有更多权限的经理:
public class Manager: MonoBehaviour
{
[SerializeField]
protected ManagerSO _managerSO;
// ...
}
public class ManagerSO : EmployeeSO
{
public string role;
}
让ManagerSO从EmployeeSO继承是有意义的IMO-关于特定管理器的所有数据都将在同一个ScriptableObject容器中。
然而,我仍然引用了_emplateSO,它具有误导性并且容易出错。
如果我想保持实际数据的分离,那么进行这种继承的正确方法是什么?
所以我对Unity一无所知,它是serialization
系统,但在C#中,泛型是可行的:
public class Employee<T>: MonoBehaviour where T: class
{
[SerializeField]
protected T _scriptableObject;
}
public class Employee: Employee<EmployeeSO> {
}
public class Manager: Employee<ManagerSO > {
}
您可以使用泛型
public abstract class Person<T> : MonoBehaviour
where T : EmployeeSO
{
[SerializeField]
protected T _personSO;
// ...
}
public class Employee : Person<EmployeeSO>
{
}
public class Manager : Person<ManagerSO>
{
}