利用Input System实现手机虚拟摇杆

新人unity自学,想来分享一下我的第一个demo攻克的难点

下面是鄙人的拙见:

下载配置Input system后,第一步在project窗口创建一个InputAction

 点击进入创建好的Action,创建属于你的actionmap

 之后在中间的actions创建一个action(我这边取名Move),然后最右边一栏中ActionType选择Value(因为我们需要的是传入值), 

之后Path选择leftstick即可(记得要保存)

 在Inspector窗口勾选生成一个InputAction脚本,这样前期设置就完成了(如不懂可以参考【【unity教程】如何使用新Input System(键盘、鼠标、触摸屏、手柄)【中文字幕】】 https://www.bilibili.com/video/BV1tg411j7ni/share_source=copy_web&vd_source=8941ab3e4140479f5f13ee2fa1dc6d92)

好了,终于到重头戏代码了!!

在创建了一个C#脚本后第一步,一定要引用一个命名空间(这很重要!不信我就报错给你看)

using UnityEngine.InputSystem;

 创建一下之后需要的东西(移动速度,获取CharacterController,获取InputActionReference)

 public float movespeed = 5f;
 private CharacterController controller;

[SerializeField] private InputActionReference UsemoveAction;
 
void Start()
    {
        controller = GetComponent<CharacterController>();
    }

 我们使用ReadValue来读取移动时的参数,然后将其用于移动,然后把写好的方法放入Update就大功告成啦

 void Update()
    {
        Move();
    }
private void Move()
    {
        Vector2 InputV2 = UsemoveAction.action.ReadValue<Vector2>();
        Vector3 playerMove = new Vector3
        (InputV2.x * movespeed*Time.fixedDeltaTime, 0,         
         InputV2.y * movespeed* Time.fixedDeltaTime);
        playerMove = transform.TransformDirection(playerMove);//将移动向量转换为角色本地坐标系下的坐标
         controller.Move(playerMove);
    }

返回我们的角色这边,挂载一个playerInput,Default Map选择我们刚刚设置的Action Map。对了!我这边用的是PlayerController来控制角色移动,所以别忘了给角色挂一个CharacterController组件

 之后,编辑我们的脚本数据,我这边因为脚本写了一些别的东西,我们现阶段只用我们之前创建好的。UseMove Action选择我们创建的Action

最后就是最基础的UI创建,创建一个image挂个unity自带的On-Screen Stick脚本,脚本的第一个是改变摇杆的活动范围,第二个要设置成LeftStick【GamePad】

Ok!现在我们就可以用虚拟摇杆来操纵我们的角色啦。

(第一次分享学习心得,可能又错漏,欢迎大佬们指正)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值