[英]Get components that derive from base class c#
我在ac#环境中工作,正在创建基类,并且希望拥有其他类,如StormyWeather.cs
或SunnyWeather.cs
并让这些类从基类BaseWeather.cs
public class BaseWeather: MonoBehaviour{
public ParticleSystem particleSystem;
public AudioClip weatherAudio;
public string Name;
public float AudioFadeTime = 0.25f;
public float LightDimTime = 0.1f;
public float MinimumIntensity = 0f;
public float MaximumIntensity = 1f;
public float Intensity = 0.25f;
private void Start(){
particleSystem.enableEmission = false;
}
public virtual void Weather (){
if (WeatherSystem.Instance._debugState == DebugLevel.Full) {
Debug.Log (Name + " Starting at: " + Time.timeSinceLevelLoad);
}
particleSystem.enableEmission = true;
}
}
因此, SunnyWeather.cs
可能看起来像这样
public class SunnyWeather : BaseWeather {
public override void Weather(){
base.Weather ();
}
}
我如何查找/获取从BaseWeather.cs
派生的BaseWeather.cs
上的第一个脚本
为了阐明我使用的是统一性, SunnyWeather.cs
将附加到gameObject上,我想知道如何在从BaseWeather.cs
类继承(更好地讲)的BaseWeather.cs
上找到第一个组件
原因是对于每种天气SunyWeather.cs, StormWeather.cs, SnowWeather.cs
我将有多个脚本,如SunyWeather.cs, StormWeather.cs, SnowWeather.cs
,它们均源自BaseWeather.cs
类
编辑:
我目前正在使用它来调用它,但是不知道这样做是否正确GetComponent<BaseWeather>().Weather();
为了回答您的大多数担忧,我可以说是的,您目前正在以正确的方式进行操作,但前提是它符合您的需求 。
GetComponent
将返回与您的查询匹配的第一个组件,在这种情况下,该类型可以由组件类型分配。 这意味着,如果您将基类放入查询中,它将返回您首次出现的派生类型或该类型。
为了确保这是正确的组件,您可以使用检查器视图将其放置在其他组件之上,或者通过调用GetComponents
对其进行过滤,然后遍历所有匹配的组件。
BaseWeather
,如果您有多个BaseWeather
组件,则应使用GetComponents<BaseWeather>
方法,而在任何其他情况下,只要使用GetComponent<BaseWeather>
方法就可以过滤出BaseWeather
组件。
如果我理解这个问题,则可以使用以下方法来识别继承:
(from assemblies in AppDomain.CurrentDomain.GetAssemblies()
from types in assemblies.GetTypes()
where typeof(IWeatherState).IsAssignableFrom(types)
select types
).ToArray();
但是,要获得“第一”,您将需要做一些硬编码,例如队列或堆栈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.