EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#
2017-09-21 10:07
519 查看
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)直观移动方式:
转向立刻生效,指哪走哪
这种比较简单,直接获取方向向量,乘以速度即可
(2)渐变转向移动方式:
在这种方式下,如果你向前走,突然把遥杆向后拉,物件不会直接向后移动,而是会转一个弯,逐渐转向到目标方向,然后移动。
上面的代码,本质上讲,把移动分解成向前移动,和向拉杆指向方向,逐渐转向。
这里有两个要点,
1是计算操作杆方向和当前物件移动方向的夹角。
利用向量夹角公式计算,也就是通过两个向量的点积计算。
2是计算物件应该延那个方向进行转向,换句话说,需要判断物件应该顺时针转过去,还是要逆时针转过去
这里如果不做处理,那么转向的时候,会出现问题,比如你明明只想向左转60度,却向右转了300度
这里利用到了叉乘的概念,两个向量叉乘,其z轴的值的正负,可以判断两个向量的顺时针,逆时针相对角度关系。
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轴的值的正负,可以判断两个向量的顺时针,逆时针相对角度关系。
相关文章推荐
- 【C#】深度理解虚方法 继承 以及接口的简单使用
- C# 多线程 简单使用方法以及常用参数
- c#使用webBrowser,控制页面、提交表单的两种方法
- C# 不能使用的方法
- .NET 使用C#两种发送邮件的方法
- 登录页面验证码的简单实现,以及getOutputStream() has already been called for this response异常的解决方法
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种是面向专业用户的专业版。用户使用EXPRESS版本开发游戏完全免费,并且可以随意在PC上发行,不过用该工具开发的游戏若是在360上网络发行,就需要交纳99美元的年费。
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
- C#中从数据库查询记录的方法分类( 一般使用两种方法):
- 求1+2+3+...+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句
- RSS制作(C#) - 使用XML DOM和XmlTextWriter(见评论)两种方法
- 关于C#Winform线程调用窗体的使用方法以及窗体的单一显示
- 每天学习一算法系列(12) (求1+2+…+n,不能使用乘除法,for、while、if 、else、switch、case 等关键字以及条件判断语句)
- c#使用webBrowser,控制页面、提交表单的两种方法
- C#基础篇 重写与重载,以及其中设计的虚方法和抽象方法的使用和区别
- csshover.htc 以及简单使用方法(解决IE6下 :hover 在其他标签下无效问题)
- 【练习】题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句
- 在C#中使用sqlClient和Odbc两种连接方法调用存储过程简述
- RSS制作(C#) - 使用XML DOM和XmlTextWriter(见评论)两种方法