游戏界面
创建对象
首先从Unity Asset Store下载飞机模型资源包。
用于制作游戏的优质资源 | Unity Asset Store
我们首先把插件加载到项目中来,然后把飞机模型加入场景中,并把它命名为【Player】。
选中【Player】,添加右边圈出的两个组件:
Rigidbody:模拟物理效果
取消勾选Rigidbody的Use Gravity选项,避免飞机因重力下坠。
Box Collider:用于碰撞和碰撞检测
飞行脚本
数值自己调整!
using UnityEngine;
public class FlightCtrl : MonoBehaviour
{
public Rigidbody rb;
public float moveSpeed = 41f;
public float thr = 0.7f;
public bool spoiler = false;
private float rotationSpeed = 12f; // 旋转速度
private float rollSpeed = 8f; // 横滚速度
private float maxSpeed = 160f; // 最大速度
private float gravityThreshold = 60f; // 飞机重力>升力的边界速度
private float normalDrag = 0.00005f; // 平时的阻力
private float spoilerDrag = 0.00035f; // 开扰流板时的阻力
private float liftForce = 1.25f;
private void FixedUpdate()
{
rb.useGravity = (moveSpeed < gravityThreshold);
if (moveSpeed < gravityThreshold)
rb.AddForce(transform.up * moveSpeed * liftForce); // 下坠
moveSpeed -= moveSpeed * (spoiler == false ? normalDrag : spoilerDrag); // 阻力
float pitchAngle = Mathf.DeltaAngle(0f, transform.eulerAngles.x);
moveSpeed += pitchAngle * 0.0025f; // 爬升减速 俯冲加速
Move();
Yaw();
Pitch();
Roll();
}
private void Move()
{
thr += Input.GetAxis("Vertical") * 0.01f;
thr = Mathf.Clamp(thr, 0f, 1f);
moveSpeed += thr * 0.03f;
moveSpeed = Mathf.Clamp(moveSpeed, 0f, maxSpeed);
rb.velocity = transform.forward * moveSpeed;
}
private void Yaw()
{
float yaw = Input.GetAxis("Horizontal");
Vector3 newTorque = new Vector3(0f, yaw * rotationSpeed, 0f);
rb.AddRelativeTorque(newTorque);
}
private void Pitch()
{
if (Input.GetMouseButton(1))
{
float pitch = Input.GetAxis("Mouse Y");
Vector3 newTorque = new Vector3(pitch * rotationSpeed, 0f, 0f);
rb.AddRelativeTorque(newTorque);
}
}
private void Roll()
{
if (Input.GetMouseButton(0))
{
float roll = Input.GetAxis("Mouse X");
Vector3 newTorque = new Vector3(0f, 0f, -roll * rollSpeed);
rb.AddRelativeTorque(newTorque);
}
}
}