Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.XR;
- using UnityEngine.XR.Interaction.Toolkit;
- public class PlayerMovement : MonoBehaviour
- {
- private InputDevice _device_leftController;
- private InputDevice _device_rightController;
- private CharacterController _character;
- private Vector2 _inputAxis_leftController;
- private Vector2 _inputAxis_rightController;
- private GameObject _camera;
- private float speed;
- [SerializeField]
- public bool snapTurningEnabled;
- private bool isSnapTurning;
- void Start()
- {
- _device_leftController = InputDevices.GetDeviceAtXRNode(XRNode.LeftHand);
- _device_rightController = InputDevices.GetDeviceAtXRNode(XRNode.RightHand);
- _character = GetComponent<CharacterController>();
- _camera = GetComponent<XRRig>().cameraGameObject;
- }
- void Update()
- {
- _device_leftController.TryGetFeatureValue(CommonUsages.primary2DAxis, out _inputAxis_leftController);
- _device_rightController.TryGetFeatureValue(CommonUsages.primary2DAxis, out _inputAxis_rightController);
- var inputVector_leftController = new Vector3(_inputAxis_leftController.x, 0, _inputAxis_leftController.y);
- var inputVector_rightController = new Vector3(_inputAxis_rightController.x, 0, _inputAxis_rightController.y);
- float targetAngle = Mathf.Atan2(_inputAxis_leftController.x, _inputAxis_leftController.y) * Mathf.Rad2Deg + _camera.transform.eulerAngles.y;
- var newDirection = Quaternion.Euler(0,targetAngle,0) * Vector3.forward;
- if (inputVector_leftController.magnitude>0.2)
- {
- speed = inputVector_leftController.magnitude * 2.0f;
- }
- else
- {
- speed = 0f;
- }
- if (_inputAxis_rightController.x > 0.2f || _inputAxis_rightController.x < -0.2f)
- {
- if (snapTurningEnabled)
- {
- if (!isSnapTurning)
- {
- transform.Rotate(Vector3.up * 45f * Mathf.Sign(_inputAxis_rightController.x));
- isSnapTurning = true;
- }
- }
- else
- {
- transform.Rotate(Vector3.up * _inputAxis_rightController.x);
- }
- }
- else
- {
- if (_inputAxis_rightController.x <= 0.2f && inputVector_rightController.x >= -0.2f)
- {
- isSnapTurning = false;
- }
- }
- _character.Move(newDirection * Time.deltaTime * speed);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement