Unity3D EasyJoyStick应用 以及两种移动方式解析
来源:互联网 发布:剑灵灵族女捏脸数据 编辑:程序博客网 时间:2024/06/06 06:35
EasyJoyStick使用以及两种操作杆
EasyJoyStick的使用方法,简单的不能再简单
Hedgehog Team-》Easy Touch -》Add Easy Touch For C#
Hedgehog Team-》Easy Touch -》Extensions-》Adding A New Joystick
配置如图:
然后看一下配置,我喜欢掌控性强一些,于是只利用到JoyStick传回来的值,也就是一个Vector2向量。
在PlayerController也就是控制器脚本上加一个引用,然后在Update中接受值即可。
代码: Vector2 axis = joystick.JoystickAxis;
如果想要实现动态操作杆,只需要把 DynamicJoystick 口 挑上就行。
别的没什么难点了。
如果想限制动态操作杆的有效区域设置器Free Area即可。
两种移动方式解析
(1)直观移动方式:
转向立刻生效,指哪走哪
这种比较简单,直接获取方向向量,乘以速度即可
Vector2 axis = joy_stick.JoystickAxis;
float delta_x = axis.x * current_speed * Time.deltaTime;
float delta_y = axis.y * current_speed * Time.deltaTime;
transform.Translate( delta_x, delta_y, 0);
(2)渐变转向移动方式:
在这种方式下,如果你向前走,突然把遥杆向后拉,物件不会直接向后移动,而是会转一个弯,逐渐转向到目标方向,然后移动。
Vector3 normal = (Vector3)axis.normalized;
float cos_theta = Vector3.Dot(player_object.transform.up, normal);
float theta = Mathf.Acos(cos_theta);
float rota = theta * axis.magnitude * ((real_speed > player_data.normal_speed + 0.1f) ? player_data.turn_cof_normal : player_data.turn_cof_acc);
//防抖动
if (theta > 0.1f)
{
Vector3 old = transform.eulerAngles;
if (Vector3.Cross(transform.up, normal).z > 0)
{
old.z += rota;
}
else
{
old.z -= rota;
}
transform.eulerAngles = old;
}
transform.position += transform.up * real_speed * Time.deltaTime;
上面的代码,本质上讲,把移动分解成向前移动,和向拉杆指向方向,逐渐转向。
这里有两个要点,
1是计算操作杆方向和当前物件移动方向的夹角。
利用向量夹角公式计算,也就是通过两个向量的点积计算。
2是计算物件应该延那个方向进行转向,换句话说,需要判断物件应该顺时针转过去,还是要逆时针转过去
这里如果不做处理,那么转向的时候,会出现问题,比如你明明只想向左转60度,却向右转了300度
这里利用到了叉乘的概念,两个向量叉乘,其z轴的值的正负,可以判断两个向量的顺时针,逆时针相对角度关系。
0 0
- Unity3D EasyJoyStick应用 以及两种移动方式解析
- EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#
- 移动应用界面设计注意事项以及移动应用推广方式
- Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种接入方式
- (转)Unity3D 三种移动方式
- UNITY3D中的几种移动方式
- Unity3D之两种方式播放视频
- unity3d两种播放视频的方式
- 关于希尔算法的理解以及两种不同的移动方式
- Android 软件自动更新 (网络XML解析、以及本地xml软件版本两种解析方式)
- xml解析之dom解析以及两种方式的特点
- Json解析两种方式
- 两种xml解析方式
- XML解析的两种解析方式
- Ajax的基础请求以及获取JSON的两种解析方式
- JSON与XML的区别比较以及xml两种解析方式的比较
- Ajax的基础请求以及获取JSON的两种解析方式
- Unity3D 物体移动方式总结
- 第五周项目5--后缀表达式
- JAVA关键字--private protected public default
- 有a、b、c、d 4个异步请求,如何判断a、b、c、d都完成执行?如果需要a、b、c、d顺序执行,该如何实现?
- 几个典型的php小问题
- CAN报文 Intel 格式与Motorola 格式的区别
- Unity3D EasyJoyStick应用 以及两种移动方式解析
- Excel 处理跨表处理
- android4.4 电池管理
- 可以将excel直接转换为word文档的方法
- java的垃圾回收机制例题讲解
- 线段覆盖 dp
- wlan常识
- MySQL查询缓存设置 提高MySQL查询性能
- android电池(五):电池 充电IC(PM2301)驱动分析篇