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

news2024/12/24 8:41:11

在这里插入图片描述


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

👨‍💻 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.coloradmin.cn/o/916838.html

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

相关文章

程序员35岁的破局之道

微信公众号访问地址&#xff1a;程序员35岁的破局之道 近期热推文章&#xff1a; 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索(含源码) 4、基…

用Cmake build OpenCV后,在VS中查看OpenCV源码的方法(环境VS2022+openCV4.8.0) Part II

用Cmake build OpenCV后&#xff0c;在VS中查看OpenCV源码的方法 Part II 如何下载和安装openCV和Cmake可以看这篇文章。 用Cmake build OpenCV后&#xff0c;在VS中查看OpenCV源码的方法&#xff08;环境VS2022openCV4.8.0&#xff09; Part I_松下J27的博客-CSDN博客 下面我…

网络安全(黑客)入门

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全…

1782. 统计点对的数目

给你一个无向图&#xff0c;无向图由整数 n &#xff0c;表示图中节点的数目&#xff0c;和 edges 组成&#xff0c;其中 edges[i] [ui, vi] 表示 ui 和 vi 之间有一条无向边。同时给你一个代表查询的整数数组 queries 。 第 j 个查询的答案是满足如下条件的点对 (a, b) 的数…

【SpringCloudAlibaba】Nacos服务注册和配置中心配合nginx负载

文章目录 概述注册中心POMYML启动类 CAP配置中心POMYML启动类ConfigClientControllerNacos中的匹配规则三种方案加载配置示例 集群部署概述部署模式修改derby为mysql配置cluster.conf编辑Nacos的启动脚本startup.sh&#xff0c;使它能够接受不同的启动端口Nginx的配置&#xff…

以软件定义存储实现存力与算力的协同,应对 AI 时代数据挑战

本文根据 XSKY 星辰天合高级副总裁张旭明在“算力与前沿技术创新发展论坛”上的演讲内容整理&#xff0c;略有删节。 算力与前沿技术创新发展论坛以“算力创新跃迁 赋能数字经济”为主题&#xff0c;8 月 17 日在汕头召开&#xff0c;该论坛由工业和信息化部、广东省人民政府主…

养号自动化,指纹浏览器和RPA机器人解除烦恼

在这个充满科技魔力的时代&#xff0c;社交媒体已经成为人们生活的一部分&#xff0c;而Facebook更是我们分享欢乐、联络亲友的重要平台。然而&#xff0c;随之而来的是一个棘手的问题&#xff1a;如何保持账号的活跃度&#xff0c;而又不被沉重的养号工作压垮&#xff1f;别担…

Linux centos7 统计文本文件中所有单词

统计文本文件中高频词是常见操作&#xff08;参考文章&#xff1a;Linux centos7 高频词统计&#xff09;。而查找并统计文本文件中共有多少单词&#xff08;独立字符串&#xff0c;包括中文或数字串&#xff09;也是一项很好地实践项目。 本文主要应用命令替换、循环结构、so…

POSTGRESQL 如何用系统函数来诊断权限问题

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

H36M VS 3DPW datasets

1采集设备方面 H36M使用了高精度的多视角摄像机动态捕捉系统获得了非常准确和连贯的3D关节坐标标注。 3DPW使用了单目摄像机与IMU的复合传感系统进行采集,存在一定程度的标注噪声。 2场景环境方面 H36M主要针对室内定向动作,背景单一简洁。 3DPW重点是室外复杂环境中人的自…

第九章,社区侧栏

9.1添加实战课程 <template><div v-if="slides.length" class="carousel slide" @mouseover="stop" @mouseout="play"><div class="carousel-inner"><transitionenter-active-class="animated…

测试基础|一文了解,这5种不同类别的软件测试工具都有啥用

介绍&#xff1a;对于任何希望确保其数字产品的质量和性能的企业来说&#xff0c;软件测试工具都是宝贵的资产。从桌面应用程序到Web平台&#xff0c;软件测试工具提供了一整套功能&#xff0c;可帮助开发人员在潜在问题成为代价高昂的问题之前识别并解决它们。彻底的测试变得至…

Filter+Listener

文章目录 1. Filter1.1 Filter快速入门1.2 Filter执行流程1.3 Filter拦截路径1.4 案例 2. Listener JavaWeb 三大组件 Servlet Servlet 是在服务器端执行的 Java 类&#xff0c;用于处理客户端请求和生成响应。它可以接收HTTP请求并返回HTTP响应&#xff0c;通常用于处理Web应用…

DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用

查看原文>>>DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要…

“赛意力量SNP”南京站深探智改数转新境界 精典回顾

7月28日&#xff0c;“赛意力量全国行”来到中国科技的创新中心之一&#xff0c;同样也是专精特新“小巨人”成林的城市——江苏南京&#xff0c;以“芯片”为纽带&#xff0c;聚焦高科技企业未来发展的大方向&#xff0c;带领嘉宾深度挖掘智改数转领域的新思考与新路径。通过沙…

WordArt Designer:基于用户驱动与大语言模型的艺术字生成

AIGC推荐 FaceChain人物写真开源项目&#xff0c;支持风格与穿着自定义&#xff0c;登顶github趋势榜首&#xff01; 前言 本文介绍了一个基于用户驱动&#xff0c;依赖于大型语言模型(LLMs)的艺术字生成框架&#xff0c;WordArt Designer。 该系统包含四个关键模块:LLM引擎、…

OpenCV中QR二维码的生成与识别(CIS摄像头解析)

1、QR概述 QR(Quick Response)属于二维条码的一种&#xff0c;意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低&#xff0c;还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的&#xff0c;在移动支付、电影票、…

接口经典题目

​ White graces&#xff1a;个人主页 &#x1f649;专栏推荐:《Java入门知识》&#x1f649; &#x1f649; 内容推荐:继承与组合&#xff1a;代码复用的两种策略&#x1f649; &#x1f439;今日诗词:人似秋鸿来有信&#xff0c;事如春梦了无痕。&#x1f439; 目录 &…

7个好用的网络写作神器,助你提升写作能力

在如今数字化时代&#xff0c;网络写作已经成为许多人日常工作和创作的一部分。为了提高写作效率和质量&#xff0c;许多网络写作神器应运而生。本文将介绍7个优秀的网络写作工具&#xff0c;帮助你提升写作能力&#xff0c;提高创作效率&#xff0c;实现卓越的文笔。 …

(4)将固件加载到没有ArduPilot固件的主板上

文章目录 前言 4.1 下载驱动程序和烧录工具 4.2 下载ArduPilot固件 4.3 使用测试版和开发版 4.3.1 测试版 4.3.2 最新开发版本 4.4 将固件上传到自动驾驶仪 4.5 替代方法 4.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本&#xff08;Copter-3.6, Pl…