Unity针对XBOX,SWITCH,PS5手柄的适配踩坑

前言:

记录一点最近在做手柄适配问题的踩坑。

这里推荐一款Unity做手柄适配的插件->Rewired

Rewired官方文档链接Rewired Documentation | Supported Controllers

Rewired插件里面有个是Player类,这个类获取到当前玩家的输入设备,输入的值等。

我用Player.GetAxisRaw和Player.GetAxis发现对手柄而言,这两个API得到的结果都一样,只是在键盘处理上不同,结果如下

区别:

PS5手柄摇杆灵敏区间值

假设图中的圆代表手柄的摇杆,索尼手柄摇杆的灵敏度严格按照圆的方程即x^{2}+y^{2}=r^{2},包括圆内的任意一点。

XBOX和SWITCH摇杆灵敏区间值

XBox手柄和SWITCH手柄并不按照圆的方程。假设划动区域在红色画线区域,即与X轴正半轴夹角45°以内时,摇杆在区间(0,0.5)滑动时X的值会在(0,1)进行插值,Y的值是在(-1,1)上插值,但摇杆在区间(0.5,1]滑动时X的值始终保持1,Y的值是在(-1,1)上插值。

同理假设划动区域在蓝色画线区域,即与Y轴正半轴夹角45°以内时,摇杆在区间(0,0.5)滑动时Y的值会在(0,1)进行插值,X的值是在(-1,1)上插值,但摇杆在区间(0.5,1]滑动时Y的值始终保持1,X的值是在(-1,1)上插值。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity开发敌人的Switch是一种非常常见且有用的技术。在游戏中,敌人通常需要根据不同的游戏状态或事件来采取不同的行动和策略。 敌人Switch的实现方法如下: 首先,我们需要在敌人的脚本中创建一个枚举类型的变量,用于表示不同的状态或事件。例如,我们可以创建一个名为EnemyState的枚举类型,包括Idle、Chase、Attack等状态。 然后,在敌人的Update函数中,我们可以使用Switch语句来根据当前状态来执行相应的行为。通过检测玩家的位置、血量等信息,我们可以根据游戏逻辑来改变敌人的状态。 示例代码如下: ```csharp public class Enemy : MonoBehaviour { enum EnemyState { Idle, Chase, Attack } private EnemyState currentState; void Start() { currentState = EnemyState.Idle; } void Update() { switch (currentState) { case EnemyState.Idle: // 敌人处于空闲状态时的行为 break; case EnemyState.Chase: // 敌人追逐玩家时的行为 break; case EnemyState.Attack: // 敌人攻击玩家时的行为 break; } } // 根据游戏逻辑改变敌人状态的函数 void ChangeState() { if (/* 某个条件成立,需要切换到追逐玩家的状态 */) { currentState = EnemyState.Chase; } else if (/* 某个条件成立,需要切换到攻击玩家的状态 */) { currentState = EnemyState.Attack; } else { currentState = EnemyState.Idle; } } } ``` 通过使用Switch语句和枚举类型来实现敌人的状态切换,我们可以使得敌人的行为更加灵活和复杂。这样,我们可以根据游戏需求,使用不同的状态和行为来提升游戏体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值