关于Unity中自带摇杆与车轮碰撞器的使用
准备
在创建好项目目录的基础上
导入一个第三方的资源包,在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<EasyJoystick>();
} // 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 = ;
float max_angle = ;
// 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 / ) * Time.deltaTime);//自转角度
this.transform.rotation = this.phy_wheel.transform.rotation * Quaternion.Euler(this.rot_degree, this.phy_wheel.steerAngle, );//做和刚体一样角度的旋转,加上this.rot_degree参数才会绕X轴自转
}
}
关于Unity中自带摇杆与车轮碰撞器的使用的更多相关文章
- python中自带的三个装饰器
说到装饰器,就不得不说python自带的三个装饰器: 1.@property 将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @propert ...
- 在Unity中使用带碰撞体的TiledMap
虽然最近Unity2018版本推出了自己的瓦片地图,但是这个瓦片地图有点BUG,在场景内把瓦片地图铺好做成预制体,动态生成的时候居然丢失了碰撞体,于是我决定还是使用Tiled软件绘制地图并使用Tile ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
- 关于Unity中的刚体和碰撞器的相关用法(一)
1.创建一个3D工程 2.构造项目文件目录 3.保存场景为game_scene到文件夹scenes中 4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObj ...
- unity中的常遇到的问题
1.使用unity的MovieTexture播放视频在物体上,对象只能在电脑上 2.移动端播放全屏视频 Handheld.PlayFullScreenMovie(),视频文件必须放置在Streamin ...
- 解决Unity中模型部件的MeshCollider不随动画一起运动的问题
Unity的3d游戏开发中,经常遇到需要将模型的某一部分(比如武器),单独做碰撞处理的情况. 导入模型后,给武器部分添加MeshCollider,MeshCollider的Mesh通常包含在模型里,如 ...
- Unity中使用摇杆控制
Unity中使用摇杆控制 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50 ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
随机推荐
- 解决Unity协程无法同步返回的问题
Unity的协程是轻量的异步解决方案,但是每调用一次yield就必须等下一帧才能继续,这一点带来了很多约束. 比如如下代码: void OnEnable() { StartCoroutine(_Do( ...
- Atitti 住房部建设指南
Atitti 住房部建设指南 1. 住房部建设的重要意义2 2. 房屋选址::首要核心要素,环境环境环境!!!2 2.1. 价格要素与地段..2 2.2. 与工作地距离,一般是半小时到一个半小时为好3 ...
- Struts2对值的推断
目的是想将jsp中的input输入: <input class="inputstyle" type="text" value="<s:pr ...
- 行为类模式(十):模板方法(Template Method)
定义 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. UML 优点 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复 ...
- 菜鸟学Java(九)——Servlet的基本配置
学习JavaWeb的人没有不知道Servlet的吧,而要用Servlet就需要在web.xml中进行配置.相信有很多初学者跟我当初一样,对于一些配置参数不是很理解,今天就说说Servlet最基本的配置 ...
- spark 分区
http://stackoverflow.com/questions/39368516/number-of-partitions-of-spark-dataframe
- Replace 在动态sql中的实现
set @stsqlReplace=' update ChgCfm set cfmdate=replace(cfmdate,'''''''',''''), cfmstatu=replace(cfmst ...
- PHP网站环境搭配: Apache Http+PHP+Mysql
Apache Http+PHP+Mysql 环境搭配 1. 先下载上述三个软件 都要下载对应系统的软件,mysql还可以再下载navicat for mysql. 2. 安装Apache Http ...
- 对JSON格式的城市按照拼音首字母排序
需求说明: App应用中最常见的一种操作就是对城市按照拼音首字母排序,以方便选择城市.而已有的json格式的城市数据是没有这种排序的. 已有的json格式的城市数据格式如下[简化之后]: 数据格式说明 ...
- 【FindReport】图表快速部署开发
在线帮助文档:http://help.finereport.com/ 开发部署环境:Java Tomcat 数据可视化工具 大屏动态显示