新人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!现在我们就可以用虚拟摇杆来操纵我们的角色啦。
(第一次分享学习心得,可能又错漏,欢迎大佬们指正)