98 lines
2.8 KiB
C#
98 lines
2.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.XR.CoreUtils;
|
|
using UnityEngine;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
|
|
[RequireComponent(
|
|
typeof(ActionBasedContinuousMoveProvider),
|
|
typeof(ActionBasedContinuousTurnProvider),
|
|
typeof(ActionBasedSnapTurnProvider))]
|
|
public class ThirdPersonTeleportController : MonoBehaviour
|
|
{
|
|
|
|
public XROrigin xrOrigin;
|
|
|
|
private ActionBasedContinuousMoveProvider _continuousMoveProvider;
|
|
private ActionBasedContinuousTurnProvider _continuousTurnProvider;
|
|
private ActionBasedSnapTurnProvider _snapTurnProvider;
|
|
|
|
public GameObject cameraContainer;
|
|
public bool switchToContinuous;
|
|
|
|
private bool _lastControllerMoveStatus;
|
|
|
|
private void Awake()
|
|
{
|
|
_continuousMoveProvider = GetComponent<ActionBasedContinuousMoveProvider>();
|
|
_continuousTurnProvider = GetComponent<ActionBasedContinuousTurnProvider>();
|
|
_snapTurnProvider = GetComponent<ActionBasedSnapTurnProvider>();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
|
|
if (StartedMoving())
|
|
{
|
|
Debug.Log("Started Moving");
|
|
|
|
cameraContainer.transform.parent = null;
|
|
cameraContainer.transform.position = xrOrigin.transform.position;
|
|
//Switch to continuous turn while remote controlling.
|
|
if (switchToContinuous)
|
|
{
|
|
_continuousTurnProvider.enabled = true;
|
|
_snapTurnProvider.enabled = false;
|
|
}
|
|
}
|
|
|
|
if (StoppedMoving())
|
|
{
|
|
Debug.Log("Stopped Moving");
|
|
|
|
cameraContainer.transform.SetParent(xrOrigin.transform);
|
|
var originTransform = xrOrigin.transform;
|
|
cameraContainer.transform.position = originTransform.position;
|
|
cameraContainer.transform.rotation = originTransform.rotation;
|
|
|
|
if (switchToContinuous)
|
|
{
|
|
_continuousTurnProvider.enabled = false;
|
|
_snapTurnProvider.enabled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool StartedMoving()
|
|
{
|
|
var controllerStatus = GetControllerStatus();
|
|
|
|
if (controllerStatus && _lastControllerMoveStatus == false)
|
|
{
|
|
_lastControllerMoveStatus = true;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool StoppedMoving()
|
|
{
|
|
var controllerStatus = GetControllerStatus();
|
|
if (_lastControllerMoveStatus && controllerStatus == false)
|
|
{
|
|
_lastControllerMoveStatus = false;
|
|
return true;
|
|
}
|
|
|
|
_lastControllerMoveStatus = controllerStatus;
|
|
return false;
|
|
}
|
|
|
|
private bool GetControllerStatus()
|
|
{
|
|
return _continuousMoveProvider.leftHandMoveAction.action.inProgress ||
|
|
_continuousMoveProvider.rightHandMoveAction.action.inProgress;
|
|
}
|
|
}
|