[英]How to programmatically assign two different classes to one variable?
我正在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);
}
目前,它只是說,對象沒有名為“轉向”的變量。 基因應該是哪種類型?
我在這里做出一些假設, 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;
但是,如果“轉向”是它們唯一的共同點,我建議您再看一下總體設計。 如果兩個類不共享或很少共享通用函數,則它們可能不需要共享變量。
您是否嘗試過使用派生到您的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設置為接口。 這取決於兩個派生類之間是否具有通用功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.