自学内容网 自学内容网

手把手教你写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)!