【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车

在这里插入图片描述


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

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

👨‍💻 本文由 秩沅 原创

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

🅰️Unity3D赛车游戏



文章目录

    • 🅰️Unity3D赛车游戏
    • 前言
    • 🎶(==A==)车辆模型——如何制作一个合格的汽车实现简单的移动
      • 😶‍🌫️<font color=red>1.导入车辆模拟模型。进行贴图,放置。
      • <font color=red>😶‍🌫️2. wheel clider车轮碰撞器的添加
      • <font color=red>😶‍🌫️3.尺寸的适应
      • 😶‍🌫️<font color=red>4,运动测试
    • 🎶(==B==)车辆模型——用代码实现车轮的动画
        • 错误示范:
        • 解决措施:
        • 正确示范:
        • 原理:
        • 完整代码
    • 🎶(==C==)车辆模型——相机的跟随
        • 😶‍🌫️效果:
    • 🎶(==D==)车辆模型——调节阻力
    • 🅰️


前言


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


🎶(A车辆模型——如何制作一个合格的汽车实现简单的移动


😶‍🌫️1.导入车辆模拟模型。进行贴图,放置。


在这里插入图片描述



😶‍🌫️2. wheel clider车轮碰撞器的添加


注意项:车轮碰撞器的添加 和车轮模型必须分开
在这里插入图片描述

在这里插入图片描述

😶‍🌫️3.尺寸的适应


尺寸的适应
在这里插入图片描述

在这里插入图片描述


🪶问题集结

问题1:放置模型时 为什么有紧贴地面和 随机再空中的两种情况——Mesh colider的存在

问题2:为啥会被弹飞——质量太小被车轮顶飞

问题3:车辆为啥会抖动——未添加BoxColider碰撞器或者四个车轮碰撞器的位置不一致

要加一个车身Bosch leader碰撞器就不会抖动了

在这里插入图片描述


😶‍🌫️4,运动测试


在这里插入图片描述

知识百科:什么是扭矩?
扭矩是指发动机运转时从曲轴端输出的平均力矩,俗称为发动机的“转劲”,是 发动机性能 的一个重要参数,扭矩越大,发动机输出的“劲”越大,曲轴转速的变化也越快,汽车的爬坡能力、起步速度和加速性也越好。

在这里插入图片描述


  • 前后左右的运动
public class WheelMove : MonoBehaviour
{//四个轮子的碰撞器public WheelCollider[] wheels ;//扭矩力度public float motorflaot = 200f;//转向力度public float steerflaot = 20f;//初始化三维向量和四元数private Vector3 wheelPosition = Vector3.zero;private Quaternion wheelRotation = Quaternion.identity;private void FixedUpdate(){wheelsAnimation();//垂直轴不为0时if (Input.GetAxis("Vertical") != 0) //当按下WS键时生效{for (int i = 0; i < wheels.Length; i++){wheels[i].motorTorque = Input.GetAxis("Vertical") *motorflaot;}          }else  //否则归0{for (int i = 0; i < wheels.Length; i++){wheels[i].motorTorque = 0;}}//水平轴不为0时if (Input.GetAxis("Horizontal") != 0) //当按下AD键时生效{for (int i = 0; i < wheels.Length - 2 ; i++)  //只针对前轮{wheels[i].steerAngle = Input.GetAxis("Horizontal") * steerflaot;}}else  //否则归0{for (int i = 0; i < wheels.Length - 2; i++)  //只针对前轮{wheels[i].steerAngle = 0;}}}}

🎶(B车辆模型——用代码实现车轮的动画


错误示范:

在这里插入图片描述
在这里插入图片描述

解决措施:

  wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward  );

正确示范:

在这里插入图片描述

  • 关键代码
//车轮动画相关public  void wheelsAnimation(){for (int i = 0; i < wheels.Length ; i++){//获取当前空间的车轮位置 和 角度wheels[i].GetWorldPose(out wheelPosition, out wheelRotation);//赋值给wheelMesh[i].transform.position = wheelPosition;print(wheelRotation);wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward  );           }}

原理:

将车轮的网格模型他的位置和车轮碰撞器的空间位置和空间旋转角度相同步。达到车轮的滚动和转向动画效果。

————————————在这里插入图片描述

完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  车轮的运动和动画相关
//___________创建者:_______秩沅________
//_____________________________________
//-------------------------------------
public class WheelMove : MonoBehaviour
{//四个轮子的碰撞器public WheelCollider[] wheels ;//网格的获取public GameObject[] wheelMesh;//扭矩力度public float motorflaot = 200f;//转向力度public float steerflaot = 20f;//初始化三维向量和四元数private Vector3 wheelPosition = Vector3.zero;private Quaternion wheelRotation = Quaternion.identity;//辅助变量private Vector3 off;private void FixedUpdate(){wheelsAnimation();//垂直轴不为0时if (Input.GetAxis("Vertical") != 0) //当按下WS键时生效{for (int i = 0; i < wheels.Length; i++){//扭矩力度wheels[i].motorTorque = Input.GetAxis("Vertical") *motorflaot;}          }else  //否则归0{for (int i = 0; i < wheels.Length; i++){wheels[i].motorTorque = 0;}}//水平轴不为0时if (Input.GetAxis("Horizontal") != 0) //当按下AD键时生效{for (int i = 0; i < wheels.Length - 2 ; i++)  //只针对前轮{//转向角度wheels[i].steerAngle = Input.GetAxis("Horizontal") * steerflaot;}}else  //否则归0{for (int i = 0; i < wheels.Length - 2; i++)  //只针对前轮{wheels[i].steerAngle = 0;}}}//车轮动画相关public  void wheelsAnimation(){for (int i = 0; i < wheels.Length ; i++){//获取当前空间的车轮位置 和 角度wheels[i].GetWorldPose(out wheelPosition, out wheelRotation);//赋值给wheelMesh[i].transform.position = wheelPosition;print(wheelRotation);wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward  );}}
}

🎶(C车辆模型——相机的跟随


【Unity每日一记】摄像机相关代码API大全


😶‍🌫️效果:

摄像机需要实现跟随。车同步移动,旋转。并且滑动鼠标滑轮可以调节与车辆之间的摄影距离。

在这里插入图片描述


关键API:
Quaternion.AngleAxis
Quaternion.LookRotation
Mathf.Clamp
____________________在这里插入图片描述


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 相机的跟随
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class CameraFllow : MonoBehaviour
{//目标物体public Transform target;//鼠标滑轮的速度public float ScrollSpeed = 4f;//Y轴差距参数public float Ydictance = 0f; public float  Ymin = 0f;public float  Ymax  = 4f;//Z轴差距参数public float Zdictance = 4f;public float Zmin = 4f;public float Zmax = 8f;//相机看向的角度 和最終位置public float angle = -25 ;public Vector3 lookPosition;void LateUpdate(){//Z轴和Y轴的距离和鼠标滑轮联系Ydictance += Input.GetAxis("Mouse ScrollWheel") * ScrollSpeed;Zdictance += Input.GetAxis("Mouse ScrollWheel") * ScrollSpeed;//設置Y軸和x轴的滚轮滑动范围Ydictance = Mathf.Clamp(Ydictance , Ymin ,Ymax );Zdictance = Mathf.Clamp(Zdictance , Zmin, Zmax );//确定好角度,四元数 * 三维向量 = 三维向量lookPosition = Quaternion.AngleAxis(angle, target .right) * -target.forward ;//更新位置transform.position = target.position + Vector3.up * Ydictance - lookPosition  * Zdictance  ;//更新角度transform.rotation = Quaternion.LookRotation(lookPosition);}
}

🎶(D车辆模型——调节阻力



调节车轮碰撞器的阻力__ 若不增大轮胎的阻力,主要当车辆速度过快时。会因为。车辆打滑而失控。也会因为惯性。从而无法。自动停下。


--------------------在这里插入图片描述
在这里插入图片描述

🅰️


⭐【Unity3D赛车游戏制作】【一】初步导入,资源很哇塞

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

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

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

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

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

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

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


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


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 学习笔记

C# 学习笔记 Chapter 1 C# 基础部分Section 1 类与命名空间Part 1 命名空间 NameSpacePart 2 类 Class Section 2 基本元素Section 3 数据类型Part 1 什么是类型&#xff1f;Part 2 类型在 C Sharp 中的作用Part 3 C Sharp 中的数据类型 Section 4 变量、对象与内存Part 1 变量…

k8s扩缩容与滚动更新

使用kubectl run创建应用 kubectl run kubernetes-bootcamp \> --imagedocker.io/jocatalin/kubernetes-bootcamp:v1 \> --port8080 端口暴露出去 kubectl expose pod kubernetes-bootcamp --type"NodePort" --port 8080 使用kubectl create创建应用 kubect…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

【C++】红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的插入操作四、红黑树的验证五、红黑树和AVL树的比较六、代码 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从…

设计模式(9)建造者模式

一、 1、概念&#xff1a;将一个复杂对象的构造与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象&#xff0c;这些对象内部构建间的顺序通常是稳定的&#xff0c;但对象内部的构建通常面临着复杂的变化&#xff1b;建造…

[SpringBoot3]Web服务

五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发&#xff0c;可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行&#xff0c;不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…

indexDB入门到精通

前言 由于开发3D可视化项目经常用到模型&#xff0c;而一个模型通常是几m甚至是几十m的大小对于一般的服务器来讲加载速度真的十分的慢&#xff0c;为了解决这个加载速度的问题&#xff0c;我想到了几个本地存储的。 首先是cookie,cookie肯定是不行的&#xff0c;因为最多以只…

Vue的Ajax请求-axios、前后端分离练习

Vue的Ajax请求 axios简介 ​ Axios&#xff0c;是Web数据交互方式&#xff0c;是一个基于promise [5]的网络请求库&#xff0c;作用于node.js和浏览器中&#xff0c;它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在…

SpringBoot +Vue3 简单的前后端交互

前端&#xff1a;Vue3 创建项目&#xff1a; npm create vuelatest > cd <your-project-name> > npm install > npm run dev 项目结构图如下&#xff1a; 1、查看入口文件内容&#xff1a;main.js 代码如下&#xff1a; import ./assets/main.css impor…

自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam

&#x1f600;前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c…

攻防世界-Web_php_include

原题 解题思路 php://被替换了&#xff0c;但是只做了一次比对&#xff0c;改大小写就可以绕过。 用burp抓包&#xff0c;看看有哪些文件 flag明显在第一个PHP文件里&#xff0c;直接看

飞天使-k8s基础组件分析-pod

文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里&#xff0c;会因为容器里个别进程出问题而出现蝴蝶效应&#xff0c;pod 是更高级的处理方式pod 如何共享相…

【李群李代数】李群控制器(lie-group-controllers)介绍——控制 SO(3) 空间中的系统的比例控制器Demo...

李群控制器SO(3)测试 测试代码是一个用于控制 SO(3) 空间中的系统的比例控制器。它通过计算控制策略来使当前状态逼近期望状态。该控制器使用比例增益 kp 进行参数化&#xff0c;然后进行一系列迭代以更新系统状态&#xff0c;最终检查状态误差是否小于给定的阈值。这个控制器用…

摩托车外廓尺寸检测软件

本系统为摩托车外廓尺寸检测软件&#xff0c;该系统共涉及两种测量方法&#xff1a;自动测量和手动测量&#xff0c;旨在测量出每一台摩托车的外廓尺寸&#xff0c;包括但不限于摩托车的车长、车宽、车高、轮距、前悬、后悬、前伸距等需要测量的参数&#xff0c;可通过运行软件…

二、Kafka快速入门

目录 2.1 安装部署1、【单机部署】2、【集群部署】 2.2 Kafka命令行操作1、查看topic相关命令参数2、查看当前kafka服务器中的所有Topic3、创建 first topic4、查看 first 主题的详情5、修改分区数&#xff08;注意&#xff1a;分区数只能增加&#xff0c;不能减少&#xff09;…

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-SVM鲸鱼算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程…

【C++】早绑定、析构与多态 | 一道关于多态的选择题记录

今天在和群友聊天的时候看到了一道很坑的题目&#xff0c;分享给大家 1.看题&#xff01; 先来看看题目 struct Dad { public:Dad(){ echo();}~Dad(){ echo();}virtual void echo() {cout << "DAD ";} };struct Son:Dad { public:void echo() const override…

Java后端开发面试题——微服务篇总结

Spring Cloud 5大组件有哪些&#xff1f; 随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway Ribbon负载均衡策略有哪些 ? RoundRobinRule&…

vue 项目在编译时,总是出现系统崩的状态,报错信息中有v7 或者 v8 的样式-项目太大内存溢出

vue 项目在编译时&#xff0c;总是出现系统崩的状态&#xff0c;node 命令框也会报错&#xff0c;如下图&#xff1a;有v7 或者 v8 的样式。 原因分析&#xff1a; 分析&#xff1a;遇到与上面图片相似的问题&#xff0c;我们要首先要想到是否是 有关内存的问题&#xff0c;当然…

传输层协议——TCP(下)

文章目录 1. listen的第二个参数2. 滑动窗口3. 流量控制4. 拥塞控制5. 延迟应答6. 捎带应答7. 面向字节流7.1 粘包问题 8. TCP异常情况10. TCP小结 1. listen的第二个参数 listen的第二个参数&#xff0c;叫做底层的全连接队列的长度&#xff0c;算法是&#xff1a;n1&#xf…