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 的相关文章

  • UE5学习笔记(一)——界面功能梳理&第一天知识点记录

    学习UE5的第一步 是软件安装 默认是安装好的 由于安装没有太多技术含量 所以就没有专门做记录 这里有个注意点 虚幻引擎是整合在Epic games launcher中的 也就是说开发引擎内嵌在游戏平台上 打个比方 就是如果你要下unity
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • Unity 安卓打包

    Unity打包的方式有很多种 自动打包和手动打包 今天小弟就鼓捣鼓捣unity手动打包 如果想动态打包的话 可以去看其他大佬的帖帖哈 unity打包先配置环境 下载unity的时候可以顺道把unity的安卓包下载下来 如果忘了也没事 可以从
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • c#获取cpu序列号

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • 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
  • 【IMGUI】 各种辅助类 EditorGUIUtility、EditorUtility、GUIUtility、GUILayoutUtility

    EditorGUIUtility class in Editor 继承自 GUIUtility EditorGUI 的各种辅助程序 EditorGUIUtility currentViewWidth 我尝试打印了下这个值和position
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • requirejs Angular 似乎没有注册控制器/服务/等

    我有一个非常简单的 requirejs 和 Angular 演示应用程序 当我运行代码时 就好像 Angular 没有注册 homeController 即使文件确实运行并输出 来自家庭控制器的 Hello 令人沮丧的是几乎没有关于如何解决
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 将文本输入解释为 PHP

    我想让用户测试我的 PHP 类 其中包括裁剪图像和调整图像大小 我希望他们在文本字段中编写 PHP 代码 发送表单 然后运行他们的代码 我怎样才能做到这一点 或者是否还有其他安全的方法可以让用户 任何人 演示 PHP 类 我将使用几乎没有权
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相

随机推荐

  • 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