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

这篇具有很好参考价值的文章主要介绍了【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


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

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

👨‍💻 本文由 秩沅 原创

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

⭐🅰️Unity3D赛车游戏⭐




⭐前言⭐


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


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


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


【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#



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


注意项:车轮碰撞器的添加 和车轮模型必须分开
【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

😶‍🌫️3.尺寸的适应


尺寸的适应
【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


🪶问题集结

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

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

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

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

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


😶‍🌫️4,运动测试


【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

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

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


  • 前后左右的运动
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)车辆模型——用代码实现车轮的动画


错误示范:

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#
【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

解决措施:
  wheelMesh[i].transform.rotation = wheelRotation * Quaternion .AngleAxis (90,Vector3 .forward  );
正确示范:

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

  • 关键代码

    //车轮动画相关
    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  );           
        }
        
    }
原理:

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

————————————【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

完整代码
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大全


😶‍🌫️效果:

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

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


关键API:
Quaternion.AngleAxis
Quaternion.LookRotation
Mathf.Clamp
____________________【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#


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赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#
【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#

⭐🅰️⭐


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

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

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

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

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

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

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

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


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


【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车,# unity简单游戏demo制作,游戏,汽车,unity,游戏引擎,游戏开发,c#文章来源地址https://www.toymoban.com/news/detail-675720.html


到了这里,关于【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D赛车游戏优化篇】【十】汽车粒子特效和引擎咆哮打造极速漂移

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者进阶 😶‍🌫️学习目标:3D赛车游戏的基础制作 😶‍🌫️技能

    2024年02月09日
    浏览(18)
  • 【Unity3D赛车游戏】【四】在Unity中添加阿克曼转向,下压力,质心会让汽车更稳定

    !在这里插入图片描述 👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者 😶‍🌫️学习目标:3D赛车游戏的基础制

    2024年02月11日
    浏览(13)
  • 使用Unity3D制作2D游戏的重点做法

    官网上有提供一个 2D游戏的教学范例 ,这个游戏只不过把镜头摆放在横向位置跟随角色移动,游戏内物件运动时固定一个轴不动,使他像横轴式的2D游戏来玩,本质上其实还是个3D游戏,所以如果没有3D建模的话不就没办法做2D游戏了?其实这些并没有定论,就看制作者如何运

    2024年02月11日
    浏览(13)
  • Unity3D项目之游戏场景小地图制作

    创建一个场景资源,可在asset store资源商店下载,选择心仪场景。 链接:https://assetstore.unity.com/?locale=zh-CN 添加一个对象GameObject,命名为player,子物体包括:主摄像机,角色,后面步骤会添加一个plane。 添加一个地图摄像机,命名为MapCamera。修改属性projection为OrthoGraphic;Size为

    2024年02月11日
    浏览(17)
  • Unity3d 制作一个简单的NPC对话系统

    ​ 最近在自己写一个比较小的项目,虽然自己是一个策划,但是程序方面我觉得也是很有必要学一学的。 ​ 经过了接近一年的学习,也终于是可以独自写一些小的系统了。 ​ 这次自己写了一个比较简单的NPC对话系统,供大家参考。 进入对话区域 开始对话 Inspector面板可调

    2023年04月08日
    浏览(12)
  • Unity3D学习之UI系统——用NGUI制作游戏登陆界面

    会省略一些东西,可以看我的NGUI的博客 设置UI分辨率自适应 设置Root 的层级 和摄像机渲染的层级为UI 主摄像机不渲染UI 一般都是美术给一个示意图,然后按示意图上拼面板 3.1.1 制作图集 制作两个新图集 3.1.2 拖面板 检查DrawCall 3.1.3 面板基类 创建面板基类, 首先设置成单例

    2024年02月19日
    浏览(12)
  • Unity3D制作一个会移动的方块(还不会移动照相机)

    学习 Unity3D 这么久了,如果你还不会制作一个按下 WASD 就可以移动的方块的话,那么你的学习将没有一点成就感,我学习的时候,我决定 先学习移动 ,这样我就会对 Unity 更加感兴趣,学习起来的动力会更为充足 先创建一个项目,名为move,如果你手头有一个随便乱用的项目

    2024年02月14日
    浏览(14)
  • 使用Unity3D创建一个立方体(Cube)游戏对象并启动Unity

    Unity3D是一个强大的游戏开发引擎,可以用来创建各种类型的游戏和交互应用程序。在本文中,我们将探讨如何使用Unity3D创建一个立方体(Cube)游戏对象,并启动Unity编辑器。 首先,确保你已经安装了Unity3D并且已经在你的计算机上成功启动。然后,按照以下步骤进行操作:

    2024年02月05日
    浏览(17)
  • 如何在 Unity3D 制作一杯水 LiquidVolume插件 水杯 烧瓶液体

    这款插件功能非常强大,你可以做烧杯装液体,啤酒,鱼缸,甚至是制作一个池塘. Shader的类型与功能都很齐全,基本上可以满足你想要大部分的效果. 这款插件我做了中文翻译,对于英文不是很好的童鞋会有帮助,至少一目了然,大概知道这个参数是做什么的. 参数截图 效果 与原版插件

    2024年02月02日
    浏览(14)
  • Unity3D 如何把全部游戏逻辑都放到lua层实现详解

    Unity3D是一款非常流行的游戏开发引擎,它支持C#、JavaScript和Boo等脚本语言。然而,有时候我们可能希望将全部游戏逻辑都放到Lua层实现,这样可以更方便地进行游戏逻辑的修改和调试。本文将详细介绍如何使用Unity3D将全部游戏逻辑都放到Lua层实现。 对啦!这里有个游戏开发

    2024年01月16日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包