EasyJoyStick使用以及两种操作杆 EasyJoyStick的使用方法,简单的不能再简单 Hedgehog Team-》Easy Touch -》Add Easy Touch For C#

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值