1、效果呈现:

b站视频链接:https://www.bilibili.com/video/BV1cU4y1m7jE?share_source=copy_web

注:视频中的实现均纯代码,无动画。

2、操作说明:

自动驾驶操作:AD控制左右旋转,WS控制升降,飞机自动往前行驶。此驾驶模式飞机更平稳,飞机自动回位。

手动驾驶操作:鼠标控制旋转升降,按住X飞机往前行驶。此驾驶模式飞机更灵活。

按Tap键切换驾驶模式。

3、效果实现:

Game窗口分辨率:1920*1080。

Hierarchy面板设置,Player空物体挂PlayerControl脚本(源码在下面)和Rigidbody,在空物体下挂模型Model,以Model命名(脚本中会找这个Model),场景中的相机挂在此物体下。

底下是源码,纯手撸,创作不易,点个赞谢谢谢谢谢!!!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerControl : MonoBehaviour
{private Transform model;private Rigidbody rb;private float moveSpeed = 0;//自动驾驶行驶速度private float getAxisAD;//键a,d控制左右 horizontalprivate float getAxisWS;//键w,s控制升降 verticalprivate float xRotation;private int rSpeed = 3;private int maxHAngle = 70;//水平翻转最大角度private int maxVAngle = 30;//数直翻转最大角度private float smoothing = 2;private bool isHandCtr = false;//以下是自动驾驶的参数float xPosPercent=0;float yPosPercent=0;private void Awake(){model=transform.Find("Model");rb = this.GetComponent<Rigidbody>();}private void FixedUpdate(){if(isHandCtr){AddSpeed();}else{moveSpeed = Mathf.Lerp(moveSpeed, 10, Time.deltaTime * 2);}rb.velocity = transform.forward * moveSpeed;}private void Update(){SwitchCtr();if (isHandCtr){HandCtrl();}else{AutoCtrl();}}private void SwitchCtr(){if (Input.GetKeyDown(KeyCode.Tab)){isHandCtr = !isHandCtr;Restitution();}}/// <summary>/// 加速/// </summary>private void AddSpeed(){if (Input.GetKey(KeyCode.X)){moveSpeed = Mathf.Lerp(moveSpeed, 15, Time.deltaTime * 2);}else{//moveSpeed = Mathf.Lerp(moveSpeed, 10, Time.deltaTime * 2);moveSpeed = Mathf.Lerp(moveSpeed, 0, Time.deltaTime * 2);}}private void AutoCtrl(){InputSmoothing();AutoTurnModel();AutoRiseOrDown();AutoLeftOrRight();}/// <summary>/// 自动驾驶调参/// </summary>private void InputSmoothing(){getAxisAD = Mathf.Lerp(getAxisAD, Input.GetAxis("Horizontal"), Time.deltaTime * smoothing);//adgetAxisWS = Mathf.Lerp(getAxisWS, Input.GetAxis("Vertical"), Time.deltaTime * smoothing);//ws}/// <summary>/// 自动驾驶飞机升降/// </summary>private void AutoRiseOrDown(){xRotation = Mathf.Lerp(xRotation, 30 * Input.GetAxis("Vertical"), Time.deltaTime * rSpeed);}/// <summary>/// 自动驾驶飞机左右旋转/// </summary>private void AutoLeftOrRight(){transform.rotation = Quaternion.Euler(new Vector3(-xRotation, transform.localEulerAngles.y + Input.GetAxis("Horizontal"), 0));}/// <summary>/// 自动驾驶调模型偏转/// </summary>private void AutoTurnModel(){model.localEulerAngles = new Vector3(-getAxisWS * maxVAngle, model.localEulerAngles.y, -getAxisAD * maxHAngle);}private void HandCtrl(){SetPercent();HandTurnModel();HandRiseOrDown();HandLeftOrRight();}/// <summary>/// 手动驾驶调参/// </summary>private void SetPercent(){xPosPercent = ((Input.mousePosition.x / Screen.width)-0.5f)*2;//获取鼠标横轴的百分比yPosPercent = (Input.mousePosition.y / Screen.height)-0.3f;//获取鼠标纵轴的百分比}/// <summary>/// 手动驾驶调模型偏转/// </summary>private void HandTurnModel(){model.localEulerAngles = new Vector3(-yPosPercent * maxVAngle, model.localEulerAngles.y, -xPosPercent * maxHAngle);}/// <summary>/// 手动驾驶飞机升降/// </summary>private void HandRiseOrDown(){xRotation = Mathf.Lerp(xRotation, 60 * yPosPercent, Time.deltaTime * rSpeed);}/// <summary>/// 手动驾驶飞机左右旋转/// </summary>private void HandLeftOrRight(){transform.rotation = Quaternion.Euler(new Vector3(-xRotation, transform.localEulerAngles.y + xPosPercent, 0));}private void Restitution(){xPosPercent=0;yPosPercent=0;getAxisAD=0;getAxisWS=0;}
}

Unity模拟3D飞机驾驶(稳定版和灵活版)相关推荐

  1. Unity 3d飞机游戏制作1

    Unity 简单的飞机控制器脚本 前言 前几天突发奇想的想做一个3d飞机游戏,于是先自己写了一下简单的控制器,发现效果不是很好.之后浏览了一下网上的资源发现免费的不全,别的要钱.只好自己设计了.下面是 ...

  2. 使用Unity制作3D驾驶游戏

    使用Unity制作3D驾驶游戏 Unity2021 专业游戏设计 课程英文名:Make a Driving Game in Unity 08.2021 此视频教程共22.0小时,中英双语字幕,画质清晰 ...

  3. Unity学习笔记:Unity 3D 飞机大战

    Unity学习笔记:Unity 3D 飞机大战 1.打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体 然后创建C#脚本,挂载到飞机上. 2.给飞机创建子弹,让子弹成为预制体 ...

  4. Unity实现模拟仿真飞机起飞降落效果

    Unity实现模拟仿真飞机起飞降落效果 前言 在最近的项目中,我实现了一个简单的飞机起飞.降落功能,运用了初中物理速度.加速度,以及Unity的Translate函数实现的.实现的难度一般,效果还可以 ...

  5. 模拟3d星空python_python模拟3D星空动画turtle版右出

    以下是部分代码预览: """ 模拟3D星空-海龟画图版-星星从右边出来,这个程序让很多星星从右边出来,越大的速度越快,越小的速度越慢.所以这样就模拟了一种3D效果. &q ...

  6. 《Unity 4 3D开发实战详解》一6.7 物理引擎综合案例

    本节书摘来异步社区<Unity 4 3D开发实战详解>一书中的第6章,第6.7节,作者: 吴亚峰 , 杜化美 , 张月霞 , 索依娜 责编: 张涛,更多章节内容可以访问云栖社区" ...

  7. Unity牧师与魔鬼小游戏(动作分离版)

    Unity牧师与魔鬼小游戏(动作分离版) 前言 这是中大计算机学院3D游戏编程课的一次作业,在这里分享一下设计思路. 主要代码上传到了gitee上,请按照后文的操作运行. 项目地址:https://g ...

  8. 虚拟现实技术应用到物流领域?Unity实现3D立体仓储可视化

    虚拟现实技术应用到物流领域?Unity实现3D立体仓储可视化 介绍 视频介绍 项目介绍 登陆验证 提升机模拟 穿梭车模拟 项目结果及应用 项目资料: 介绍 随着物流领域的发展,立体仓储技术越来越成熟. ...

  9. 软件工程第二次作业:基于Unity的3D魔方实现

    基于Unity的3D魔方实现 王化明(2012211757).吴静(2012211523)  一.背景: 魔方,英文名为Rubik's Cube,又叫魔术方块,也称鲁比克方块.是匈牙利布达佩斯建筑学院 ...

最新文章

  1. 什么时候是找工作的最佳时期? | 原力计划
  2. C#中接口和方法的运用(Fourteenth Day)
  3. Zabbix监控Windows客户端设置
  4. SM30里如何输入物料号自动带出物料描述
  5. oracle ebs技术开发,Oracle EBS应用架构技术方案.pdf
  6. 利用HTTP watch观察SAP CRM WebClient UI popup window
  7. 线程同步以及yield()、wait()、Notify()、Notifyall()
  8. 第四课-Log的使用
  9. 你能否列出与 Elasticsearch 有关的主要可用字段数据类型?
  10. docker容器不支持中文编码
  11. pytorch分布式报错 “tensor must be non-overlapping and dense“
  12. 如何在Eclipse 中查看(如Objects)的源代码
  13. 分析电商直播带货系统源码的架构干货篇
  14. 三人表决器程序c语言,“三人表决器”逻辑功能PLC程序设计(有梯形图 指令表)...
  15. win7时间同步出错的解决方法
  16. 面试之防火墙软硬件架构
  17. Delphi著名皮肤控件库大全
  18. 公网远程访问连接Minecraft我的世界服务器 - MCSM控制面板
  19. C# 进行 Starlink 仿真03:72轨道面 * 22颗卫星 F相位因子==11 的Walker星座,创建3168条星间链路,并与 icarus 论文的Python结果相对比。
  20. Cesium面积测量之思路解析加源码

热门文章

  1. 打几折怎么用计算机算,九折怎么算计算方法 打9折是多少
  2. P23 (**) Extract a given number of randomly selected elements from a list.
  3. 想做社群营销,没有流量怎么办?流量增长,微信粉丝裂变倍增方法在这里!
  4. 360安全卫士网管版流量监控:轻松管理企业带宽
  5. JS及CSS实现省市区三级联动
  6. python 仿真 电力系统自动化_解析电力系统自动化仿真技术的现状和展望
  7. ABAP查看表更改记录的方法
  8. mac 安装npm_13个npm 快速使用开发技巧
  9. java dto是什么_java中DTO与DAO的问题
  10. MSSQL之二十二 CLR及SQL