挥动手柄前进,根据快慢切换走跑
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);
}
}