当前位置: 首页 > news >正文

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

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

效果

飞行效果

这是一条优雅的广告

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

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

脚本编写

首先是完整代码。

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组件。

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表示。

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

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

private void FixedUpdate()
{Move();Yaw();Pitch();Roll();
}

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

加速或减速。

限制速度。

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

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力太大或太小,需要乘一个数控制大小。

给刚体添加转向方向。

private void Yaw()
{if (Input.GetMouseButton(0)){float yaw = Input.GetAxis("Mouse X");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()
{float roll = Input.GetAxis("Horizontal"); // A, D/上, 下(-1, 1)Vector3 newTorque = new Vector3(0f, 0f, -roll * rollSpeed);rb.AddRelativeTorque(newTorque);
}

http://www.lryc.cn/news/531538.html

相关文章:

  • DeepSeek蒸馏模型:轻量化AI的演进与突破
  • 使用 sunshine+moonlight 配置串流服务无法使用特殊键
  • 5.角色基础移动
  • 单细胞-第四节 多样本数据分析,下游画图
  • Linux的循环,bash的循环
  • 【DeepSeek开发】Python实现股票数据可视化
  • 华为小米vivo向上,苹果荣耀OPPO向下
  • 毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统
  • el-table表格点击单元格实现编辑
  • 数据结构:时间复杂度
  • SPI(Serial Peripheral Interface)串行外围设备接口
  • Java 8 Stream API
  • 亚博microros小车-原生ubuntu支持系列:21 颜色追踪
  • GESP6级语法知识(六):(动态规划算法(六)多重背包)
  • MySQL 事务实现原理( 详解 )
  • AI协助探索AI新构型自动化创新的技术实现
  • 九. Redis 持久化-RDB(详细讲解说明,一个配置一个说明分析,步步讲解到位)
  • mac连接linux服务器
  • oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区
  • 使用Pygame制作“走迷宫”游戏
  • AJAX案例——图片上传个人信息操作
  • Day35-【13003】短文,什么是双端队列?栈和队列的互相模拟,以及解决队列模拟栈时出栈时间开销大的方法
  • 力扣 55. 跳跃游戏
  • 深入剖析 HTML5 新特性:语义化标签和表单控件完全指南
  • 本地快速部署DeepSeek-R1模型——2025新年贺岁
  • MVC 文件夹:架构之美与实际应用
  • Redis --- 秒杀优化方案(阻塞队列+基于Stream流的消息队列)
  • 如何确认设备文件 /dev/fb0 对应的帧缓冲设备是开发板上的LCD屏?如何查看LCD屏的属性信息?
  • C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程
  • AI与SEO关键词的完美结合如何提升网站流量与排名策略