Class 5 - Core Mechanics & UI
在前几节课中,我们已经完成了核心的游戏机制:陨石 (Asteroid) 随机生成、飞船 (Ship) 开火 逻辑,以及子弹 (Projectile) 的追踪 AI。本节课我们将继续完善游戏的核心机制,并且引入新的系统 - 用户界面 (User Interface)。
Class 5 Overview
- 子弹的实时转向与移动
- Explosion 动画触发与销毁
- 用户 UI
- 生命值系统
1. 子弹的实时转向与移动
既然我们已经实现了子弹的追踪 AI,接下来就是处理它的转向和移动逻辑。
Projectile.cs
public class Projectile : MonoBehaviour
{
// 加速度 和 速度目前暂时设为常量
float acceleration = 1f;
float maxSpeed = 2f;
// 调用上节课的追踪 AI,选择最近的敌人
ChooseNearestTarget();
if(target != null)
{
// 求得斜边向量
Vector2 directionToTarget = target.position - transform.position;
// 利用Atan2函数(即反正切函数),求得斜边向量与 x 轴的夹角
// Mathf.Atan2(y, x) 返回的是一个弧度值,我们再用Mathf.Rad2Deg将其转换为float角度值
float angle = Mathf.Atan2(directionToTarget.y, directionToTarget.x) * Mathf.Rad2Deg;
// 转向
// 1. 利用Quaternion.Euler函数,将角度转换为四元数
Quaternion targetRotation = Quaternion.Euler(0, 0, angle);
// 2. 直接刚体旋转
rb.MoveRotation(angle);
}
// 移动
rb.AddForce(transform.right * acceleration);
// 限制速度
rb.velocity = Vector2.ClampMagnitude(rb.velocity, maxSpeed);
}