Unity飞行代码 超仿真 保姆级教程

本文使用Rigidbody控制飞机,基本不会穿模

效果

飞机飞行

这是一条优雅的广告

如果你也在开发飞机大战等类型的飞行游戏,欢迎在主页搜索博文并参考。

搜索词:Unity游戏(Assault空对地打击)开发。

脚本编写

首先是完整代码。

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FlightCtrl : MonoBehaviour
{
    private float rotationSpeed = 5f;
    private float rollSpeed = 1f;
    private float minSpeed = 40f;
    private float maxSpeed = 200f;

    private float moveSpeed = 100f;
    private Rigidbody rb;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    private void FixedUpdate()
    {
        Move();
        Yaw();
        Pitch();
        Roll();
    }
    
    private void Move()
    {
        float move = Input.GetAxis("Vertical");
        moveSpeed += move;
        if (moveSpeed < minSpeed)
            moveSpeed = minSpeed;
        else if (moveSpeed > maxSpeed)
            moveSpeed = maxSpeed;
        rb.velocity = transform.forward * moveSpeed;
    }

    private void Yaw()
    {
        if (Input.GetMouseButton(0))
        {
            float yaw = Input.GetAxis("Mouse X");
            Vector3 newTorque = new Vector3(0f, yaw * pitchSpeed, 0f);
            rb.AddRelativeTorque(newTorque);
        }
    }

    private void Pitch()
    {
        if (Input.GetMouseButton(1))
        {
            float pitch = Input.GetAxis("Mouse Y");
            Vector3 newTorque = new Vector3(pitch * pitchSpeed, 0f, 0f);
            rb.AddRelativeTorque(newTorque);
        }
    }

    private void Roll()
    {
        float roll = Input.GetAxis("Horizontal"); // A, D/上, 下(-1, 1)
        Vector3 newTorque = new Vector3(0f, 0f, -roll * rollSpeed);
        rb.AddRelativeTorque(newTorque);
    }
}

分块解析

rotationSpeed:后续有用,请根据实际情况来调整数值,控制偏航和俯仰的转向速度。

rollSpeed:同理,控制横滚的速度。

moveSpeed:前进的速度,初始为100f。

min/maxSpeed:最低/高速。

rb:Rigidbody组件。

cs 复制代码
private float rotationSpeed = 5f;
private float rollSpeed = 1f;
private float minSpeed = 40f;
private float maxSpeed = 200f;

private float moveSpeed = 100f;
private Rigidbody rb;

用处:获取Rigidbody组件,用rb表示。

cs 复制代码
private void Start()
{
    rb = GetComponent<Rigidbody>();
}

更新时:进行飞机的 前后移动、偏航、俯仰、横滚(如果需要操作)。

cs 复制代码
private void FixedUpdate()
{
    Move();
    Yaw();
    Pitch();
    Roll();
}

move:通常获取键盘的 W 和 S 键,或者方向键的上下箭头,W上(1)、S(下)(-1)。

加速或减速。

限制速度。

设置刚体速度:方向为物体的前方,速度为moveSpeed。

cs 复制代码
private void Move()
{
    float move = Input.GetAxis("Vertical");
    moveSpeed += move;
    if (moveSpeed < minSpeed)
        moveSpeed = minSpeed;
    else if (moveSpeed > maxSpeed)
        moveSpeed = maxSpeed;
    rb.velocity = transform.forward * moveSpeed;
}

当左键按下时,执行偏航操作(左右转动)。

获取鼠标的横向位置移动(左右移动)(左-1右1)

yaw * rotationSpeed,直接用yaw力太大或太小,需要乘一个数控制大小。

给刚体添加转向方向。

cs 复制代码
private void Yaw()
{
    if (Input.GetMouseButton(0))
    {
        float yaw = Input.GetAxis("Mouse X");
        Vector3 newTorque = new Vector3(0f, yaw * rotationSpeed, 0f);
        rb.AddRelativeTorque(newTorque);
    }
}

以此类推。

cs 复制代码
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()
{
    float roll = Input.GetAxis("Horizontal"); // A, D/上, 下(-1, 1)
    Vector3 newTorque = new Vector3(0f, 0f, -roll * rollSpeed);
    rb.AddRelativeTorque(newTorque);
}
相关推荐
k4m7v2pz11 小时前
Godot 4 窗口拉伸黑边与变形:stretch 配置全解析
数码相机·游戏引擎·godot·2d游戏·黑边·stretch·画面比例
Behaviour1 天前
Unity 手游网络同步技术
网络·unity·c#·游戏引擎
niuniudengdeng1 天前
Unity手游APK去广告实战:华为渠道包反编译、广告拦截与“网络不佳“弹窗修复全记录
unity·游戏引擎
k4m7v2pz1 天前
Godot 4 嵌入式试玩窗口尺寸与适配策略详解
编辑器·游戏引擎·godot·游戏开发·嵌入式运行
Behaviour1 天前
Unity UI循环列表UIScrollViewContent实现
ui·unity·c#·游戏引擎
_ZHOURUI_H_2 天前
Unity EasyECS:并不是所有字段都适合 SoA,Unity 项目中应该怎样拆数据
游戏·unity·性能优化·架构·游戏引擎
惊鸿醉2 天前
Unity 实战:用讯飞 WebAPI 做一个“说普通话、播方言“的语音程序
unity·c#·游戏引擎·语音识别
WarPigs3 天前
Unity未激活的物体无法响应事件?
java·unity·游戏引擎
玖玥拾3 天前
Unity3D RPG 入门项目(十一)主角完整战斗、怪物自动刷新、四大类型技能系统
游戏·3d·unity·游戏引擎
Behaviour3 天前
Unity AI 生态横评对比:官方 AI Beta / Unity CLI / 团结 Codely / 社区 MCP 四大阵营选型
人工智能·unity·ai·游戏引擎·aigc·ai编程