手把手教你写Unity3D飞机大战(3)玩家飞机的移动
写在最前面的话
脚本不完美,目前未做到丝滑转弯,今后我可能再出一篇关于转弯优化的博客。
一、效果预览
二、脚本代码
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); 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); 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脚本(刚才写的)。
还有,机场一定要添加碰撞体,不然你想开飞机开到地下去吗?😉
如果你还有疑问,或者对碰撞体等不理解,可以评论私信,看到秒回。
原文地址:https://blog.csdn.net/applelin2012/article/details/143656200
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!