我正在Unity中创建一个游戏,我有2个类,我想根据布尔值为该变量分配2个不同的类,以便以后按自己的意愿使用该类,这是到目前为止的代码给出想法,我正在寻找什么,甚至有可能完成?谢谢
public GeneticController geneticController;
public GeneticDriver geneticDriver;
public Object Genetic;
void Start() {
if (RaceSelect.SelectedRace == 2) {
Genetic = geneticDriver;
} else {
Genetic = geneticController;
}
}
void FixedUpdate() {
float steer = (float)(Genetic.Steering);
Steering(steer);
}
此刻,它只是说Object没有一个名为“ Steering”的变量。遗传应该是哪种类型?
答案 0 :(得分:1)
我在这里假设GeneticController
和GeneticDriver
都实现了Steering
属性?如果是这样,特别是如果它们具有其他共同的属性和方法,则实现此目标的正确方法是重构这些类,以便它们共享一个公共接口。
public interface ISteering
{
float Steering {get; set;}
}
public class GeneticController : ISteering
{
public float Steering{ get; set; }
}
public class GeneticDriver: ISteering
{
public float Steering{ get; set; }
}
为此,您可以将变量Genetic
设置为ISteering
类型。
public ISteering Genetic;
但是,如果“转向”是它们唯一的共同点,那么我建议您重新考虑一下总体设计。如果这两个类不共享或很少共享通用函数,则它们可能不需要共享变量。
答案 1 :(得分:0)
您是否尝试过使用派生到您的2个子类中的基类?
类似的东西:
public class BaseClass
{
public float Steering {get;set;}
}
public class GeneticController : BaseClass
{
}
public class GeneticDriver : BaseClass
{
}
然后您执行以下操作(并且不需要强制转换):
BaseClass Genetic
void Start()
{
if (RaceSelect.SelectedRace == 2)
{
Genetic = geneticDriver;
} else
{
Genetic = geneticController;
}
}
void FixedUpdate()
{
float steer = Genetic.Steering;
Steering(steer);
}
您也可以将BaseClass设置为接口。这取决于两个派生类之间是否具有通用功能。