簡體   English   中英

如何以編程方式將兩個不同的類分配給一個變量?

[英]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);     

}


目前,它只是說,對象沒有名為“轉向”的變量。 基因應該是哪種類型?

我在這里做出一些假設, GeneticControllerGeneticDriver實現了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM