我正在尝试使用Unity中的MVC模式。我是编程初学者。
陷阱和移动平台使用相同的代码,因此我为它们创建了一个基础。我将代码分为"数据" -class和"方法" -class。
两个对象都移动到A点,然后移动到B点,返回到A点,依此类推。 A点和B点有一个触发器,用于改变平台/陷阱的Movementdirection。
基类保存数据。子类获取数据并填充基础数据。在基类中我有对象:
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
抱歉,我不想发布所有代码行和不相关的内容:)
答案 0 :(得分:1)
我看了你的代码。假设你永远不需要一个" 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;
}
}
}
这样孩子就可以实现父母需要的任何东西,但父母并不需要提供一个没有意义的默认实施。