写在最前面的话
脚本不完美,目前未做到丝滑转弯,今后我可能再出一篇关于转弯优化的博客。
一、效果预览
二、脚本代码
using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine;public class Move : MonoBehaviour {public float speed = 0f;void FixedUpdate(){if (speed * 600 < 350) // 不在飞行模式{transform.GetComponent<Rigidbody>().isKinematic = false; // 运动学,会自己掉下去if (Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.W))speed += 0.0015f; // 加速if (Input.GetKey(KeyCode.Backspace) || Input.GetKey(KeyCode.S))speed -= 0.0015f; // 减速if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))if (speed * 6 > 0.8f) // 转弯transform.Rotate(Vector3.up * 0.8f);else // 限制转角transform.Rotate(Vector3.up * speed * 6);if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))if (speed * 6 > 0.8f) // 转弯transform.Rotate(Vector3.up * -0.8f);else // 限制转角transform.Rotate(Vector3.up * -speed * 6);speed -= 0.00025f; // 自动减速if (!(speed > 0f)) // 速度为负数时自动归零speed = 0f;transform.Translate(0f, 0f, speed / 2); // 前进}else // 在飞行模式{transform.GetComponent<Rigidbody>().isKinematic = true; // 运动学,不会自由落体if (Input.GetKey(KeyCode.Space) || Input.GetKey(KeyCode.Q))transform.Rotate(0.275f, 0, 0); // 上升if (Input.GetKey(KeyCode.Backspace) || Input.GetKey(KeyCode.E))transform.Rotate(-0.275f, 0, 0); // 俯冲if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))speed += 0.0015f; // 加速if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))speed -= 0.0015f; // 减速if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))if (speed * 6 > 0.8f) // 同理transform.Rotate(Vector3.up * 0.8f);elsetransform.Rotate(Vector3.up * speed * 6);if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))if (speed * 6 > 0.8f) // 同理transform.Rotate(Vector3.up * -0.8f);elsetransform.Rotate(Vector3.up * -speed * 6);if (Input.GetKey(KeyCode.Z)) // 自转transform.Rotate(0, 0, 1);if (Input.GetKey(KeyCode.X)) // 自转transform.Rotate(0, 0, -1);speed -= 0.00025f; // 自动减速if (!(speed > 0f)) // 同理speed = 0f;transform.Translate(0f, 0f, speed / 2); // 前进}}private void OnGUI(){GUI.Label(new Rect(10, 10, 200, 200), "Speed: " + (int)(speed * 600)); // 显示时速} }
如果你看不懂,可以挂载上去试试:
W:前进
A:左转
S:减速
D:右转
Q:爬升
E:俯冲
Z,X:自转
三、物体设置
1.添加Rigidbody和Box Collider(或者其他碰撞体)
自己去搜。
2.添加Move脚本(刚才写的)。
还有,机场一定要添加碰撞体,不然你想开飞机开到地下去吗?😉
如果你还有疑问,或者对碰撞体等不理解,可以评论私信,看到秒回。