You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
C#
105 lines
3.2 KiB
C#
6 months ago
|
#if UNITY_STANDALONE_WIN || UNITY_EDITOR
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using Autohand.Demo;
|
||
|
using Valve.VR;
|
||
|
|
||
|
namespace Autohand{
|
||
|
//THIS SCRIPT IS A TEMPORARY DEMO SCRIPT
|
||
|
//BETTER MOVEMENT OPTIONS COMING SOON
|
||
|
public class SteamVRMover : MonoBehaviour{
|
||
|
[Header("TEMP DEMO SCRIPT - Advanced script coming soon")]
|
||
|
[Header("Controllers")]
|
||
|
public SteamVRHandControllerLink moverController;
|
||
|
public SteamVRHandControllerLink turningController;
|
||
|
public SteamVR_Action_Vector2 moverAxis;
|
||
|
public SteamVR_Action_Boolean turnRightButton;
|
||
|
public SteamVR_Action_Boolean turnLeftButton;
|
||
|
|
||
|
[Header("Body")]
|
||
|
public GameObject cam;
|
||
|
private CharacterController controller;
|
||
|
private CapsuleCollider collisionCapsule;
|
||
|
|
||
|
[Header("Settings")]
|
||
|
public bool snapTurning;
|
||
|
public float turnAngle;
|
||
|
public float speed = 5;
|
||
|
public float gravity = 1;
|
||
|
|
||
|
private float currentGravity = 0;
|
||
|
|
||
|
private bool axisReset = true;
|
||
|
|
||
|
Vector3 moveAxis;
|
||
|
float turningAxis;
|
||
|
|
||
|
//Driver
|
||
|
public void LateUpdate(){
|
||
|
if(snapTurning){
|
||
|
bool rightTurn = turningController.ButtonPressed(turnRightButton);
|
||
|
bool leftTurn = turningController.ButtonPressed(turnLeftButton);
|
||
|
turningAxis = 0;
|
||
|
if(rightTurn)
|
||
|
turningAxis = 1;
|
||
|
else if(leftTurn)
|
||
|
turningAxis = -1;
|
||
|
}
|
||
|
else turningAxis = moverController.GetAxis2D(moverAxis).x;
|
||
|
|
||
|
Turning();
|
||
|
|
||
|
|
||
|
moveAxis = moverController.GetAxis2D(moverAxis);
|
||
|
Move(moveAxis.x, moveAxis.z, moveAxis.y);
|
||
|
}
|
||
|
|
||
|
|
||
|
private void Awake(){
|
||
|
gameObject.layer = LayerMask.NameToLayer("HandPlayer");
|
||
|
controller = GetComponent<CharacterController>();
|
||
|
}
|
||
|
|
||
|
|
||
|
public void Move(float x, float y, float z){
|
||
|
|
||
|
Vector3 direction = new Vector3(x, y, z);
|
||
|
Vector3 headRotation = new Vector3(0, cam.transform.eulerAngles.y, 0);
|
||
|
|
||
|
direction = Quaternion.Euler(headRotation) * direction;
|
||
|
|
||
|
currentGravity = Physics.gravity.y * gravity;
|
||
|
|
||
|
if (controller.isGrounded)
|
||
|
currentGravity = 0;
|
||
|
|
||
|
controller.Move(new Vector3(direction.x * speed, direction.y * speed + currentGravity, direction.z * speed) * Time.deltaTime);
|
||
|
}
|
||
|
|
||
|
|
||
|
void Turning(){
|
||
|
//Snap turning
|
||
|
if (snapTurning){
|
||
|
if (turningAxis > 0.7f && axisReset){
|
||
|
transform.rotation *= Quaternion.Euler(0, turnAngle, 0);
|
||
|
axisReset = false;
|
||
|
}
|
||
|
else if (turningAxis < -0.7f && axisReset){
|
||
|
transform.rotation *= Quaternion.Euler(0, -turnAngle, 0);
|
||
|
axisReset = false;
|
||
|
}
|
||
|
|
||
|
if (Mathf.Abs(turningAxis) < 0.4f)
|
||
|
axisReset = true;
|
||
|
}
|
||
|
|
||
|
//Smooth turning
|
||
|
else{
|
||
|
transform.rotation *= Quaternion.Euler(0, Time.deltaTime * turnAngle * turningAxis, 0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#endif
|