射击
Coddy Unity 塔防游戏 课程的第 9 课,共 25 课。
塔会向目标发射Projectile。弹丸使用 MoveTowards 飞向目标,并在目标移动时跟随它,命中后对其造成伤害。它不需要知道自己击中的是 Enemy:它会查找 IDamageable,也就是任何可以受到伤害的对象都能使用的接口,因此任何实现了该接口的对象都可以成为射击目标。
弹丸飞行期间,目标可能会死亡。被销毁的 Unity 对象与 null 比较时结果相等,因此弹丸会先检查 target == null,然后销毁自己。
目前,塔每秒发射一次。它会记录下一次发射的时间:
if (Time.time >= nextShot)
{
Fire();
nextShot = Time.time + 1f;
}挑战
中等防御塔每秒射出一次箭。
Enemy实现了IDamageable:TakeDamage(int amount)会从health中扣除相应数值,当生命值降至 0 或更低时销毁敌人。Projectile:Launch(Transform target, int damage)会保存这两个参数;Update会以speed飞向目标,抵达时调用TakeDamage(damage)并销毁自身;目标消失时也会销毁自身。Tower:添加public int damage = 2;和[SerializeField] private Projectile projectilePrefab;;按照上面的方式,从transform.position + Vector3.up的位置发射。
按下 Play:箭会飞出,Grunt 会倒下。然后点击 Check。
亲手试试
using UnityEngine;
// 稍后实现:从塔飞向目标的弹丸。
public class Projectile : MonoBehaviour
{
}
Unity 塔防游戏中的所有课
自己练习: Unity 在线编辑器