Menu
CoddyTech

射击

Coddy Unity 塔防游戏 课程的第 9 课,共 25 课。

塔会向目标发射Projectile。弹丸使用 MoveTowards 飞向目标,并在目标移动时跟随它,命中后对其造成伤害。它不需要知道自己击中的是 Enemy:它会查找 IDamageable,也就是任何可以受到伤害的对象都能使用的接口,因此任何实现了该接口的对象都可以成为射击目标。

弹丸飞行期间,目标可能会死亡。被销毁的 Unity 对象与 null 比较时结果相等,因此弹丸会先检查 target == null,然后销毁自己。

目前,塔每秒发射一次。它会记录下一次发射的时间:

if (Time.time >= nextShot)
{
    Fire();
    nextShot = Time.time + 1f;
}
challenge icon

挑战

中等

防御塔每秒射出一次箭。

  1. Enemy 实现了 IDamageable:TakeDamage(int amount) 会从 health 中扣除相应数值,当生命值降至 0 或更低时销毁敌人。
  2. Projectile:Launch(Transform target, int damage) 会保存这两个参数;Update 会以 speed 飞向目标,抵达时调用 TakeDamage(damage) 并销毁自身;目标消失时也会销毁自身。
  3. Tower:添加 public int damage = 2; 和 [SerializeField] private Projectile projectilePrefab;;按照上面的方式,从 transform.position + Vector3.up 的位置发射。

按下 Play:箭会飞出,Grunt 会倒下。然后点击 Check。

亲手试试

using UnityEngine;

// 稍后实现:从塔飞向目标的弹丸。
public class Projectile : MonoBehaviour
{
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器