VR穿戴设备 - Pico - 输入系统 - 走跑切换

挥动手柄前进,根据快慢切换走跑

using UnityEngine;
using Pvr_UnitySDKAPI;

public class AlternatingSwingMovementController : MonoBehaviour
{
    public float walkSpeed = 3.0f;
    public float runSpeed = 6.0f;
    public float positionThreshold = 0.1f; // 挥动位置阈值
    public float timeBetweenSwings = 1.0f; // 两次挥动之间的最小时间间隔

    private float currentSpeed;
    private Transform leftControllerTransform;
    private Transform rightControllerTransform;
    private Vector3 lastLeftPosition;
    private Vector3 lastRightPosition;
    private float lastLeftSwingTime;
    private float lastRightSwingTime;

    void Start()
    {
        // 获取左右手柄的 Transform
        leftControllerTransform = Pvr_ControllerManager.controllerlink0.transform;
        rightControllerTransform = Pvr_ControllerManager.controllerlink1.transform;

        // 初始化上一帧的手柄位置信息
        lastLeftPosition = leftControllerTransform.position;
        lastRightPosition = rightControllerTransform.position;
    }

    void Update()
    {
        // 检查左手柄的挥动
        CheckSwingInput(leftControllerTransform, ref lastLeftPosition, ref lastLeftSwingTime);

        // 检查右手柄的挥动
        CheckSwingInput(rightControllerTransform, ref lastRightPosition, ref lastRightSwingTime);

        // 根据当前速度移动角色
        MoveCharacter();
    }

    void CheckSwingInput(Transform controllerTransform, ref Vector3 lastPosition, ref float lastSwingTime)
    {
        // 获取当前时间
        float currentTime = Time.time;

        // 计算挥动位置
        float positionChange = Vector3.Distance(lastPosition, controllerTransform.position);

        // 检查挥动的时间间隔和位置变化
        if (positionChange > positionThreshold && currentTime - lastSwingTime > timeBetweenSwings)
        {
            // 根据挥动位置变化切换移动速度
            currentSpeed = (currentSpeed == walkSpeed) ? runSpeed : walkSpeed;
            lastSwingTime = currentTime; // 更新上一次挥动的时间
        }

        // 更新上一帧的手柄位置信息
        lastPosition = controllerTransform.position;
    }

    void MoveCharacter()
    {
        // 获取角色的移动输入
        float horizontalInput = leftControllerState.ray.x; // 这里可以选择其他手柄的输入
        float verticalInput = leftControllerState.ray.y; // 这里可以选择其他手柄的输入

        // 计算移动方向
        Vector3 movement = new Vector3(horizontalInput, 0.0f, verticalInput);

        // 根据当前速度移动角色
        transform.Translate(movement * currentSpeed * Time.deltaTime);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值