【发布时间】:2016-01-13 01:31:17
【问题描述】:
序言
所以在过去的几周里,我一直在 Unity Answers 论坛上提出这个问题,但没有一个回复。在我看来,这将是一个相对直截了当的问题,所以我想知道这里是否有人可以帮助我代替那里的答案。
所以我有点进退两难。
目标
我想在我的游戏中为枪支使用继承结构。我想创建一个抽象类(枪),然后有枪的子类(激光、步枪、火箭发射器)从它继承,然后创建这些武器的特定实例。目前我将其作为一个抽象类来执行,因为 Gun 的不同子类实现 Shoot() 函数的方式存在很大差异。 (即火箭发射器将实例化 X 火箭游戏对象,而激光可能会使用射线投射来确定即时命中)。
此外,我希望能够在玩家库存中拥有枪支列表,并且不希望依赖于我的玩家的活动武器来添加和删除脚本。如果我可以按以下方式构建它们,那对我来说很好:
Rifle ActiveWeapon = new Rifle(parameters);
我也不想为玩家提供有限数量的武器,但希望能够在运行时生成它们(例如掉落或制作),所以我也不想写一个固定数量武器脚本。
问题
我遇到的问题是我希望能够利用一些衍生自 MonoBehaviours 的方法,例如:
public override void Shoot ()
{
if (CanShoot)
{
StartCoroutine(Cooldown());
Rigidbody bullet = Rigidbody.Instantiate(BulletPrefab, transform.position, transform.rotation);
... // Addforce etc.
...
}
}
public IEnumerator Cooldown()
{
CanShoot = false;
yield return new WaitForSeconds (FireRate);
CanShoot = true;
}
显然,由于这不是 MonoBehaviour 类,因此我不能使用 Instantiate 等函数来创建项目符号或使用 WaitForSeconds 来错开它们。
我应该如何解决这个问题?
【问题讨论】:
标签: c# inheritance unity3d