Menu
CoddyTech

回顾:模块化炮塔

本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 5 课,共 64 课。

challenge icon

挑战

简单

为 Turret1 构建武器。TurretControl 和 Cannon 已准备就绪。

  1. 在 Ammo 中编写 public bool Take():消耗一发炮弹并返回 true,或者记录 name + " is empty" 并返回 false。
  2. 将 Weapon 设为抽象类,并添加 [RequireComponent(typeof(Ammo))],将 Fire() 设为没有函数体的 protected abstract。
  3. 在 cooldown 期间,Pull() 不执行任何操作;否则,如果 Take() 返回真值,就重置冷却时间并调用 Fire()。

按下运行并持续开火,直到炮弹用完。然后点击检查。

亲手试试

using UnityEngine;

// 所有炮塔武器共有的部分。
public class Weapon : MonoBehaviour
{
    public GameObject shellPrefab;
    public float cooldown = 1f;

    public void Pull()
    {
        // 等待冷却结束,从 Ammo 中取出一枚炮弹,然后开火
    }

    // 每种武器都有自己的开火方式。
    protected virtual void Fire()
    {
    }

    // 从炮塔视角看,炮弹从这里沿炮塔朝向飞出。
    protected void Launch(Vector3 offset)
    {
        Instantiate(shellPrefab, transform.position + transform.rotation * offset, transform.rotation);
    }
}

Unity 游戏架构中的所有课

自己练习: Unity 在线编辑器