回顾:模块化炮塔
本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 5 课,共 64 课。
挑战
简单为 Turret1 构建武器。TurretControl 和 Cannon 已准备就绪。
- 在
Ammo中编写public bool Take():消耗一发炮弹并返回true,或者记录name + " is empty"并返回false。 - 将
Weapon设为抽象类,并添加[RequireComponent(typeof(Ammo))],将Fire()设为没有函数体的protected abstract。 - 在
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 在线编辑器