Unity-赛车Demo

2023-11-04

using UnityEngine;
using System.Collections;

public class CarDrive : MonoBehaviour {

    public WheelCollider wheelColLF;
    public WheelCollider wheelColLB;
    public WheelCollider wheelColRF;
    public WheelCollider wheelColRB;

    public Transform transWheelLF;
    public Transform transWheelLB;
    public Transform transWheelRF;
    public Transform transWheelRB;

    public float motorTorqueMax = 600;
    float motorCurrentTorque = 0;//当前扭矩
    public float steerAngleMax = 25;
    public float brakeTorqueMax = 3000;
    Rigidbody rigid;

    //发动机最大转速
    public float maxEngineRPM = 1500;
    //发动机最小转速
    public float minEngineRPM = 200;
    //档位(车轮半径/发动机齿轮半径)
    public float[] gearRatios; 
    //当前档位编号
    int gearIndex = 0;

    float dangousTime=0;
    Vector3 safePosition;
    Quaternion safeRotation;

    void Start()
    {
        rigid = GetComponent<Rigidbody>();
        Vector3 center = rigid.centerOfMass;//车的重心
        center.y = 0.2f;
        rigid.centerOfMass = center;
        FinalPoint.instance.finalPointEvent += OnFinal;
        CarNumber.instance.startRaceEvent += OnStart;
    }
	public void Drive (float v,float h,float b)
    {
        GearControl();
        motorCurrentTorque = motorTorqueMax * gearRatios[gearIndex];
        //前进
        wheelColLF.motorTorque = motorCurrentTorque * v;
        wheelColRF.motorTorque = motorCurrentTorque * v;

        //转弯
        wheelColLF.steerAngle = steerAngleMax * h;
        wheelColRF.steerAngle = steerAngleMax * h;

        //刹车
        wheelColLF.brakeTorque = brakeTorqueMax * b;
        wheelColLB.brakeTorque = brakeTorqueMax * b;
        wheelColRF.brakeTorque = brakeTorqueMax * b;
        wheelColRB.brakeTorque = brakeTorqueMax * b;

        SetWheelPose(transWheelLF, wheelColLF);
        SetWheelPose(transWheelLB, wheelColLB);
        SetWheelPose(transWheelRF, wheelColRF);
        SetWheelPose(transWheelRB, wheelColRB);

        DangousCheck();
	}

    void SetWheelPose(Transform transWheel,WheelCollider wheelCollider)
    {
        Vector3 pos;
        Quaternion quat;
        wheelCollider.GetWorldPose(out pos, out quat);
        transWheel.position = pos;
        transWheel.rotation = quat;
    }

    void GearControl()
    {
        if (wheelColLF.rpm*gearRatios[gearIndex]>maxEngineRPM)
        {
             gearIndex++;
             gearIndex = Mathf.Clamp(gearIndex, 0, gearRatios.Length - 1);
        }
        if (wheelColLF.rpm*gearRatios[gearIndex]<minEngineRPM)
        {
              gearIndex--;
              gearIndex = Mathf.Clamp(gearIndex, 0, gearRatios.Length - 1);
        } 
    }

    void DangousCheck()
    {
        int countWheelOnGround = 0;
        if(wheelColLF.isGrounded)
            countWheelOnGround++;
        if(wheelColLB.isGrounded)
            countWheelOnGround++;
        if(wheelColRF.isGrounded)
            countWheelOnGround++;
        if(wheelColRB.isGrounded)
            countWheelOnGround++;

        if(countWheelOnGround==4)
        {
            safePosition = transform.position;
            safeRotation = transform.rotation;
        }    
        if (countWheelOnGround <= 2)
            dangousTime += Time.deltaTime;
        else
            dangousTime = 0;
        if (dangousTime>5)
        {
            transform.position = safePosition + Vector3.up * 0.5f;
            transform.rotation = safeRotation;
            dangousTime = 0;
        }
    }
}


using UnityEngine;
using System.Collections;

public class UserInput : MonoBehaviour {

    CarDrive carDrive;
	void Start () {
        carDrive = GetComponent<CarDrive>();
	}

    float accelerator = 0;//油门
    float accelAddSpeed = 0.2f;
	void Update () {
        float v = Input.GetAxis("Vertical");
        float h = Input.GetAxis("Horizontal");
        float b = Input.GetAxis("Jump");//刹车
        if (Mathf.Abs(v)>0.5f)
        {
            accelerator += v * accelAddSpeed*Time.deltaTime;
        }
        else
        {
            accelerator = 0;
        }
        accelerator = Mathf.Clamp(accelerator, -0.2f, 1);
        carDrive.Drive(accelerator, h, b);
	}
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity-赛车Demo 的相关文章

  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • SpringBoot整合ELK教程

    SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch Logstash Kibana 组合起来可以搭建线上日志系统 本文主要讲解使用 ELK 来收集测试框架产生的日志 Elasticsearch 用于存储
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • 利用input上传图片以及文件视频音频等

    这里说的input指的就是我们常用的
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • Tornado websocket 演示的 Nginx 配置?

    有人可以向我提供 Tornado websocket 聊天演示的 Nginx 配置吗 该演示位于 tornado demos websocket 像这样的配置将起作用 events worker connections 1024 http
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • 5g信号频率是多少赫兹_我家WiFi也有“5G”,这是5G信号吗?

    大家都知道5G吧 5G是最近很火热的名词 大家都知道它和手机有关系 有些小伙伴在用手机和电脑连WiFi的时候 也能看到一些WiFi名字后面跟着一个 5G 这个 5G 是平时说的那个5G吗 答案是 否 5G是 5th generation m
  • 服务器拷贝文件工具,windows命令行下也有好工具(四)-拷贝文件到多台服务器...

    做系统管理员 经常需要从本机向多台服务器拷贝文件 或者从多台服务器向本机拷贝文件 如果使用windows界面 要一次次的点击鼠标进行操作 太麻烦了 在linux下可以使用scp命令 用一个脚本就可以解决 当然每次都要输入口令 也可以命令行带
  • [Python]网络爬虫 urllib爬虫案例

    urllib爬虫案例 爬取公众号文章中的图片 第1步 确定公众号文章的地址 以微信公众号 Python小屋 里的一篇文章为例 文章标题为 报告PPT 163页 基于Python语言的课程群建设探讨与实践 地址为 https mp weixi
  • Hadoop Mapreduce编程之Reduce端join实现

    1 数据准备 movies dat 数据格式 movieid moviename movietype ratings dat 数据格式 userid movieid rating timestamp 2 Mapper端开发 1 定义必要的变
  • virtualbox 清理磁盘占用空间

    目录 1 虚拟系统整理 2 压缩磁盘 1 虚拟系统整理 Windows虚拟机 下载sdelete工具 执行下面的命令 sdelete z c Linux虚拟机执行下面的命令 sudo dd if dev zero of EMPTY bs 1
  • 软件设计师考试内容复习(二)

    一 层次化存储结构 二 Cache Cache的功能 提高CPU数据输入输出的速率 突破CPU与存储系统间数据传输带宽限制 在计算机存储系统体系中 Cache是访问速度最快的层次 使用Cache改善系统性能的依据是程序的局部性原理 如果以
  • docker 镜像容器导入导出、查看日志、拷贝文件命令

    1 本地文件拷贝到docker 容器中 参考 docker cp root pcl pcl 1 8 1 tar gz 7ff95b333e12 docker cp root lib64 a 7ff95b333e12 2 docker从容器里
  • 蓝桥杯决赛真题——国王的遗产

    标题 国王的遗产 X国是个小国 国王K有6个儿子 在临终前 K国王立下遗嘱 国王的一批牛作为遗产要分给他的6个儿子 其中 大儿子分1 4 二儿子1 5 三儿子1 6 直到小儿子分1 9 牛是活的 不能把一头牛切开分 最后还剩下11头牛 分给
  • 5种开源虚拟化技术推荐

    zz http www oschina net news 14907 5 opensource virtualization soft 论坛 http bbs chinaunix net forum 283 1 html 虚拟化现在已经成为
  • 力扣977-有序数组的平方

    有序数组的平方链接 给你一个按 非递减顺序 排序的整数数组 nums 返回 每个数字的平方 组成的新数组 要求也按 非递减顺序 排序 示例 1 输入 nums 4 1 0 3 10 输出 0 1 9 16 100 解释 平方后 数组变为 1
  • python开发工程师考试_Python开发工程师丨网易游戏

    本期导读 计科校友 榜样说 vol 15 方向很重要 实践出真知 蔡钰莹 Python开发工程师丨网易游戏 软件工程师 广州合明软件科技有限公司 前端开发工程师 广东中科慈航信息科技有限公司 网易游戏 公司简历 网易 NASDAQ NTES
  • SpringSecurity跨域问题,配置了相关配置还是报错

    跨域问题基础配置 跨域的本质是响应头问题 只要加上下述的响应头即可解决跨域 下述1 配置跨域中的代码是通过aop来实现该功能的一种方式 1 配置跨域 正常的跨域配置 Component public class CORSIntercepto
  • 【uni-app项目如何引入 uView组件库】

    uniapp项目引入uView组件库 一 uView官方文档 二 公司项目中引入并使用uView 一 uView官方文档 uView官方文档 二 公司项目中引入并使用uView 第一步 在公司创建完成uniapp项目后引入uView 第二步
  • ESP8266-NodeMCU——使用U8g2库点亮OLED

    前言 U8g2是嵌入式设备的单色图形库 U8g2库提供了大量绘制函数 简单引用即可实现想要的效果 并且适用大部分屏幕驱动 一 软件准备 1 Arduino IDE 2 u8g2库文件 点击跳转 如果在IDE里不能下载就从这下载 解压后放去库
  • C++中同类的不同对象可以相互访问成员(包括私有成员)

    如拷贝 复制 构造函数中 include using namespace std class Data public Data int a x a Data const Data r 调用别对象的函数 x r x void s cout l
  • 【c++】理解模板类型推导

    理解模板类型推导 函数模板 第一种情况 ParamType 是个非通用的引用或者是一个指针 第二种情况 ParamType 是个通用的引用 Universal Reference 第三种情况 ParamType 既不是指针也不是引用 数组参
  • 浅谈Hybrid技术的设计与实现第第2章

    前言 接上文 浅谈Hybrid技术的设计与实现 阅读本文前 建议阅读这个先 上文说了很多关于Hybrid的概要设计 可以算得上大而全 有说明有demo有代码 对于想接触Hybrid的朋友来说应该有一定帮助 但是对于进阶的朋友可能就不太满足了
  • Linux 终端颜色,界面着色

    环境 Ubuntu Liniux终端着色分2块 1 提示符及命令行和输出颜色 2 显示目录和文件 ls命令 颜色 一 提示符及命令行颜色设置 设置PS1命令 可立即生效 e后面为颜色设置部分 32 40m 32为前景色 40为背景色 m 不
  • pandas用均值填充nan_pandas dataframe 填充 NaN(填补缺失值)的方法 fillna 函数使用说明...

    在基于 pandas 的 DataFrame 对象进行数据处理时 如样本特征的缺省值处理 可以使用 DataFrame 对象的 fillna 函数进行填充 同样可以针对指定的列进行填补空值 单列的操作是调用 Series 对象的 filln
  • Unity-赛车Demo

    using UnityEngine using System Collections public class CarDrive MonoBehaviour public WheelCollider wheelColLF public Wh