【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?

2023-11-21 14:59

本文主要是介绍【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity游戏demo

🅰️Unity3D赛车游戏



文章目录

    • 🅰️Unity3D赛车游戏
    • 前言
    • 🎶(==A==)系统的优化——漂移
        • 😶‍🌫️效果对比:
        • 😶‍🌫️漂移的实质:
    • 🎶(==B==)系统的优化——转向 ,阻力 和 制动
        • 😶‍🌫️阻力优化
        • 😶‍🌫️转向优化
        • 😶‍🌫️制动优化
    • 🅰️


前言


😶‍🌫️版本: Unity2021
😶‍🌫️适合人群:Unity初学者
😶‍🌫️学习目标:3D赛车游戏的基础制作
😶‍🌫️技能掌握:



🎶(A系统的优化——漂移


  • 插件工具
    在这里插入图片描述
😶‍🌫️效果对比:

  • 加上漂移代码
    在这里插入图片描述
  • 未加漂移代码、
    在这里插入图片描述
😶‍🌫️漂移的实质:

拦截后轮运动,发生滑动,我们向前行驶时车轮的摩擦力更大,而侧向行驶时车轮的摩擦力则非常小

  • 相关参数
    在这里插入图片描述
  • 🥶重要参数官方手册解释

描述轮胎的摩擦属性_WheelFrictionCurve

关节弹簧_JointSpring

轮式碰撞机悬架弹簧_WheelCollider.suspensionSpring

在这里插入图片描述

  • 关键代码:
    //漂移相关public void Drift(){//漂移平滑因素drfitSmoothFactor = 0.7f * Time.deltaTime;if (InputManager.InputManagerment.handbanl)//如果按下空格刹车{//给轮胎侧向和前滑摩擦属性初始化赋值sidewaysFriction = wheels[0].sidewaysFriction;forwardFriction = wheels[0].forwardFriction;float velocity = 0;//侧滑摩擦特性的极值 =  侧滑渐进点打滑的力 = 前滑摩擦特性的极值 = 前滑渐进点打滑的力 = sidewaysFriction.extremumValue = sidewaysFriction.asymptoteValue = forwardFriction.extremumValue = forwardFriction.asymptoteValue//前滑摩擦特性的极值 向 漂移参数*手刹系数 平滑移动= Mathf.SmoothDamp(forwardFriction.asymptoteValue, driftFactor * handBrakeFrictionMultiplier, ref velocity, drfitSmoothFactor);for (int i = 0; i < 4; i++){//将初始化好的摩擦特性赋给车轮wheels[i].sidewaysFriction = sidewaysFriction;wheels[i].forwardFriction = forwardFriction;}//侧滑摩擦特性的极值 =  侧滑渐进点打滑的力 = 前滑摩擦特性的极值 = 前滑渐进点打滑的力 = 1.1fsidewaysFriction.extremumValue = sidewaysFriction.asymptoteValue = forwardFriction.extremumValue = forwardFriction.asymptoteValue = 1.1f;//给前轮增添前轮的额外抓地力for (int i = 0; i < 2; i++){wheels[i].sidewaysFriction = sidewaysFriction;wheels[i].forwardFriction = forwardFriction;}//刚体额外添加向前的牵引力rigidbody.AddForce(transform.forward * (Km_H / 400) * 10000);}else  //未按下刹车的状态{//给轮胎侧向和前滑摩擦属性初始化赋值forwardFriction = wheels[0].forwardFriction;sidewaysFriction = wheels[0].sidewaysFriction;forwardFriction.extremumValue = forwardFriction.asymptoteValue = sidewaysFriction.extremumValue = sidewaysFriction.asymptoteValue= ((Km_H * handBrakeFrictionMultiplier) / 300) + 1;for (int i = 0; i < 4; i++){wheels[i].forwardFriction = forwardFriction;wheels[i].sidewaysFriction = sidewaysFriction;}//检查后轮打滑量以控制漂移for (int i = 2; i < 4; i++){//声明轮胎接触信息WheelHit wheelHit;//得到轮胎接触地面的信息wheels[i].GetGroundHit(out wheelHit);smoke//if (wheelHit.sidewaysSlip >= 0.3f || wheelHit.sidewaysSlip <= -0.3f || wheelHit.forwardSlip >= .3f || wheelHit.forwardSlip <= -0.3f)//    playPauseSmoke = true;//else//    playPauseSmoke = false;//当侧身滑 轮胎向侧向打滑的信息if (wheelHit.sidewaysSlip < 0) //向右边打滑时driftFactor = (1 -InputManager.InputManagerment .horizontal ) * Mathf.Abs(wheelHit.sidewaysSlip);if (wheelHit.sidewaysSlip > 0)//向左边打滑时driftFactor = (1 + InputManager.InputManagerment.horizontal) * Mathf.Abs(wheelHit.sidewaysSlip);}}}

🎶(B系统的优化——转向 ,阻力 和 制动


😶‍🌫️阻力优化

静止时空气阻力我们设置大一点
运动时我们的空气阻力就设置小一点

在这里插入图片描述

😶‍🌫️转向优化

在这里插入图片描述

因为当速度越快的时候转向的角度若还是还速度慢的时候转向的角度一样很容易出现过度侧滑和大角度漂移

😶‍🌫️制动优化

  • 手刹管理优化前代码 如下

在这里插入图片描述

  • 优化后:

—— 为什么这样,刹车这么小能刹住吗?
可以我们的自动变速器会自动减慢速度

 //手刹管理public void HandbrakControl(){for (int i = 0; i < wheels.Length; i++){//将车轮的制动力度初始化wheels[i].brakeTorque = brakVualue ;}//当按后退键时 速度大于10 km/h 制动力为500if (InputManager.InputManagerment .vertical  < 0){brakVualue = (Km_H  >= 10) ? 500 : 0;}else if (InputManager.InputManagerment.vertical == 0 && (Km_H <= 10 || Km_H  >= -10)){brakVualue = 10;}else{brakVualue = 0;}//------------刹车效果平滑度显示------------for (int i = 0; i < slip.Length; i++){WheelHit wheelhit;wheels[i].GetGroundHit(out wheelhit);slip[i] = wheelhit.forwardSlip; //轮胎在滚动方向上打滑。加速滑移为负,制动滑为正}}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


这篇关于【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403076

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can