最近参与的老师科研项目的软件基本完成了,接下来会慢慢在csdn上面介绍项目功能模块的实现思路以及部分算法,完整的得等到老师汇报完成结项后才能展示,到时候会更新的o((>ω< ))o。

       话不多说,本篇主要讲述用pico手柄摇杆去控制人物的动作。我们设定现在想要通过手柄摇杆去控制模型人的走动,那么该功能就主要包含有人物动作逻辑制作和脚本控制动作发生停止两大部分。

1.人物动作的制作

为了方便我是在mixamo(在线免费动画角色网站)上下载的带有动画的模型再导入到unity中的,很推荐新手通过它辅助在unity中实现第一个人物动作。在unity项目栏中增添动画编辑器后,将带有动画的模型加入到其中,添加参数并选择气味bool类型(此处只有两个动作,动和静止,符合bool类型逻辑):

如图所示是我导入后的动画器界面,要注意的是两个颜色的mixamo_com代表两个模型,橙色为带有走动的模型,而灰色是静止不带有任何动作的模型,并在两模型中添加上过渡。动作逻辑为,某个契机(摇杆变位)后动作发生,走动动画开始演示,接收到停止信号后过渡到停止静止模式。

2.脚本统筹整理功能

using UnityEngine;
using UnityEngine.XR;

public class ControllerScript : MonoBehaviour
{
    public Transform model; // 控制的模型
    public float speed = 1.0f; // 控制移动速度
    public float rotationSpeed = 300.0f; // 控制转向速度
    private Animator animator; // Animator组件

    private XRNode inputSource;
    private InputDevice device;

    void Start()
    {
        inputSource = XRNode.RightHand; // 右手柄控制也可换为XRNode.LeftHand
        device = InputDevices.GetDeviceAtXRNode(inputSource);
        animator = model.GetComponent<Animator>(); // 获取Animator组件
    }

    void Update()
    {
        // 获取手柄的摇杆输入
        if (device.TryGetFeatureValue(CommonUsages.primary2DAxis, out Vector2 inputAxis) && inputAxis != Vector2.zero)
        {
            Vector3 moveDirection = new Vector3(inputAxis.x, 0, inputAxis.y).normalized;

            // 控制角色转向
            Quaternion targetRotation = Quaternion.LookRotation(moveDirection, Vector3.up);
            model.rotation = Quaternion.RotateTowards(model.rotation, targetRotation, rotationSpeed * Time.deltaTime);

            // 控制角色移动
            model.position += moveDirection * speed * Time.deltaTime;

            // 更新Animator中的运动参数,即上一步中你命名的bool类型的那个参数
            animator.SetBool("isWalk", true);
        }
        else
        {
            // 当没有输入时,停止动画并恢复到静止状态
            animator.SetBool("isWalk", false);
        }
    }
}

最终导出后为软件后你就可以拿上手柄体验成果啦,有错误问题欢迎指出大家一起学习进步,下图是我的软件截图(姿势有点搞笑),红色的是手柄射线:

更多推荐