Unity-基类应该从子类中获取信息



我正在尝试在Unity中使用MVC模式。我是一个编程初学者。

陷阱和移动平台使用相同的代码,所以我为它们创建了一个基础。我将代码分为"Data"类和"Method"类。

两个对象都会移动到点A,然后移动到点B,再移回点A,依此类推。。A点和B点触发,改变平台/陷阱的移动方向。

基类保存数据。子类获取数据并填充基本数据。在基类中,我有一个对象:

public virtual GameObject MovingObject { get { return null; } }

子类重写返回null的属性,使其返回正确的对象。我试着这样做:

[SerializeField]
private GameObject movingObject;
public override GameObject MovingObject { get { return movingObject; } }

专用变量在编辑器中设置,并将值设置为特性。此属性将信息提供给基类。问题是我得到了空引用,我不知道如何解决这个问题。基类不返回对象。信息在去基地的路上丢失了。。。

我的逻辑错了吗?

如果你需要查看这六个类的整个结构,你可以在上查找

https://github.com/Garzec/MidnightFeast/tree/master/Assets/Scripts/MovingObjects

对不起,我不想发布所有的代码行和未发布的东西:)

我查看了您的代码。假设您永远不需要一个"MovingObjectsController"的实例,那么看起来您需要一个抽象类作为基类。抽象类不能实例化,但它可能需要一个子类(子类)来实现抽象成员,从而不需要在父类中返回null。例如,您可以将控制器定义为:

public abstract class MovingObjectsController
{
protected abstract MovingObjectsData Data { get; }
}

public class PlatformController : MovingObjectsController
{
private MovingObjectsData data;
public PlatformController()
{
this.data = new MovingObjectsData(); //This being whatever data is specific to this object
}
protected override MovingObjectsData Data { 
get 
{
return data; 
}
}
}

通过这种方式,子级需要实现父级所需的任何内容,但父级不需要提供没有意义的默认实现。

最新更新