我需要为自己澄清一些事情,所以请多多包涵。
比方说,我想要一个在一段时间后会爆炸的物体。如果该物体在有人手持时爆炸,您将被杀死。
让我们考虑以下实现:
public interface IKillable
{
void Kill();
}
public interface IExplodable : IKillable
{
float TimeLeft { get; set; }
void Timer(float timeToExplode);
}
public abstract class Bomb: IExplodable
{
public float TimeLeft { get; set; }
public void Kill()
{
//Destroy the object
}
public void Timer(float timeLeft)
{
if (TimeLeft <= 0) {
Kill();
}
}
}
如果我也想添加一个具有完全相同功能的“背包”而不是“炸弹”,或者可能爆炸(杀死)的任何其他物品怎么办?
答案 0 :(得分:1)
您可以创建一个抽象ExplodableDevice
类,并从其中继承Bomb
和Backpack
。
答案 1 :(得分:1)
在Unity中,同时建议使用具有为对象提供通用功能的基类。
与其调用类Bomb
,不如调用类ExplodableDevice
(如@zmbq回答),它更通用。但是,我将更明确地指出设备由于计时器而爆炸,因此可能是TimerExplodableDevice
。请注意,基类应该从MonoBehaviour
继承,否则您将无法完全使用这些对象(因为c#不允许多重继承)。
这种实现的一个例子是:
public interface IKillable
{
void Kill();
}
public interface IExplodable : IKillable
{
float TimeLeft { get; set; }
void Timer(float timeToExplode);
}
public abstract class TimerExplodableDevice: MonoBehaviour, IExplodable
{
public float TimeLeft { get; set; }
public virtual void Kill()
{
//Destroy the object
}
public virtual void Timer(float timeLeft)
{
if (TimeLeft <= 0)
{
Kill();
}
}
}
// this should be in a "Devices" folder, or otherwise be called appropriately
public class Backpack : TimerExplodableDevice
{
void Start()
{
TimeLeft = 100;
}
}
// this should be in a "Devices" folder, or otherwise be called appropriately
public class Bomb : TimerExplodableDevice
{
void Start()
{
TimeLeft = 10;
}
}