博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Unity中自带摇杆与车轮碰撞器的使用
阅读量:7287 次
发布时间:2019-06-30

本文共 3465 字,大约阅读时间需要 11 分钟。

准备

在创建好项目目录的基础上

导入一个第三方的资源包,在Project面板里面

右键---->Import Package---->Custom Package---->easy_touch.unitypackage

导入完成后,会发现菜单栏多了一个Hedgehog Team

Hedgehog Team---->Easy Touch---->Add Easy Touch for C#

 

 

创建摇杆

在Hierarchy面板里面

右键---->创建一个空节点joystick---->给节点添加组件Easy Joystick---->Game视图出现摇杆

 

写一个脚本来打印出摇杆的动态选定坐标,脚本叫test_joystick,挂载在joystick节点下,JoystickTouch (x, y) [-1, 1]

脚本内容:

using UnityEngine;using System.Collections;public class test_joystick : MonoBehaviour {    EasyJoystick joystick;    // Use this for initialization    void Start () {        this.joystick = this.GetComponent
(); } // Update is called once per frame void Update () { Debug.Log(this.joystick.JoystickTouch.x + ":" + this.joystick.JoystickTouch.y); }}

 

 

导入模型和背景

导入赛车资源F1文件夹和篮球场plane贴图到Resources目录下

创建一个game_root节点,把F1---->F1赛车模型预制体拖进game_root,当作它的子节点

创建一个plane平面节点当做game_root的子节点,把篮球场贴纸拖进Scene视图中的plane,就会自动帮我们生成一个材质球并关联到节点上,3D节点都要材质才能显示内容,2D节点只要图片就可以了。

材质plane的shader设置为Mobile Diffuse

 

节点F1的子节点如果没有自动关联好材质球的话,需要手动拖材质球关联它的子节点

把相同名称的材质球拖进子节点的Mesh Renderer的Element中,有多少个Element就拖几次

把F1节点还原为普通节点GameObject---->Break Prefab Instance

 

 

配置车轮参数

为了让赛车能够运动起来,首先要给它一个刚体组件Rigidbody,设置质量Mass为50

为了发生碰撞,我们还需要给赛车添加碰撞器组件Box Collider,设置大小Size为X=2.5,Y=0.5,Z=8,调整它的位置Center的Y=0.5

 

在F1节点下面创建一个空节点phy_wheel,在phy_wheel下面再创建一个轮子节点FL

给FL添加车轮碰撞器Wheel Collider,设置车轮质量Mass为2,弹力Spring为90,阻力Damper设置为45,其他的车轮参数为

1: 添加赛车车体碰撞器;

2: 添加4个车轮碰撞器;
3: 配置车轮参数:
mass: 质量

radis半径

Wheel Dramping Rate 车轮旋转阻尼

Suspension Distance 悬挂高度,就是车轮上下颠簸的上下幅度距离;

Force App Point Distance 悬挂力应用点;

Center 车轮碰撞器中心点,

Suspension Spring 悬挂弹簧:

sprint 弹力 Damper 悬浮速度阻尼

TargetPoint 悬挂中心

向前摩擦与侧向摩擦

Extermum Slip 先前摩擦曲线滑动值

Extermum Point 先前摩擦曲线极值点;

Asymptote Slip 向前渐进线滑动值;

Asymptote Point 前向曲线渐近线点;

stiffness 刚度 控制向前摩擦曲线的倍数;

配置好一个轮子后,再复制三个轮子出来,一个四个轮子FL,FR,BL,BR,然后把轮子节点移动到对应的模型中的四个轮子的位置。

 

 

使车子随着摇杆运动

我们首先创建一个脚本car挂载在F1节点下面来控制车轮随着摇杆的移动而运动

car脚本内容:

using UnityEngine;using System.Collections;public class car : MonoBehaviour {    public WheelCollider fl;    public WheelCollider fr;    public EasyJoystick joystick;    float max_torque = 20;    float max_angle = 30;    // Use this for initialization    void Start () {            }        // Update is called once per frame    void Update () {        // 摇杆的y 控制牵引力,如果牵引力为正,往前开反之往后开        this.fl.motorTorque = this.joystick.JoystickTouch.y * max_torque;        this.fr.motorTorque = this.joystick.JoystickTouch.y * max_torque;        // end        // 摇杆的x 用来控制转向;        this.fl.steerAngle = this.joystick.JoystickTouch.x * max_angle;        this.fr.steerAngle = this.joystick.JoystickTouch.x * max_angle;        // end    }}

设置一下车的助力,这样可以让车自己停下来,设置阻力的话设置车轮阻力和平面材质阻力都不明显,设置F1节点的刚体里面的Drag属性是最明显的。

这时候车已经可以跟着摇杆的方向而运动了,但是模型的图像没有任何变化,车轮没有任何转动和转向。

 

 

控制车轮图像变化

 

1: 刚体质量 50, 轮子质量2 半径是0.64;

2: 弹力 90, 阻力 45;
3: motorTorque:车轮移动的力矩,为正向前,为负向后
4: steerAngle: 车轮的转向角;
5: rmp: 每分钟转多少转;

 

 

 

我们需要再创建一个脚本wheel挂载在四个车轮节点(F1--->Wheel--->BL BR FL FR)下面,来控制轮子图像的变化

wheel脚本里面的内容:

using UnityEngine;using System.Collections;public class wheel : MonoBehaviour {    public WheelCollider phy_wheel;    float rot_degree = 0.0f;    // Use this for initialization    void Start () {            }        // Update is called once per frame    void Update () {        this.rot_degree += ((this.phy_wheel.rpm * 360.0f / 60) * Time.deltaTime);//自转角度        this.transform.rotation = this.phy_wheel.transform.rotation * Quaternion.Euler(this.rot_degree, this.phy_wheel.steerAngle, 0);//做和刚体一样角度的旋转,加上this.rot_degree参数才会绕X轴自转    }}

 

转载地址:http://dkcjm.baihongyu.com/

你可能感兴趣的文章
iOS学习之第二个View使用UITabBarViewController
查看>>
java.lang.UnsupportedOperationException
查看>>
Linux服务器遭受攻击后的处理过程
查看>>
数据库时间小技巧 - 取数据库中时间格式是12小时制的时间,如何显示成24小时制...
查看>>
Kafka基于topic的分区设计
查看>>
监控平台 --- zabbix高级配置
查看>>
解决JS浮点数(小数)计算加减乘除的BUG
查看>>
2016-06-17
查看>>
11-利用思维导图梳理JavaSE-Java的反射机制
查看>>
更多的信息是否就意味着学生更有知识呢?
查看>>
mysqli基本语法
查看>>
某个目录下右键打开cmder
查看>>
angular之ngSanitize
查看>>
DevOps 之 Ansible入门实践(一)
查看>>
escape()、encodeURI()、encodeURIComponent()区别详解
查看>>
GitLab 7.13.x安装和配置<二>--Linux篇
查看>>
mybatis调用oracle存储过程
查看>>
shell练习五
查看>>
踩坑Apache HttpEntity
查看>>
Core Data的使用(二)
查看>>