You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.1 KiB
48 lines
2.1 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.XR.Interaction.Toolkit;
|
|
|
|
public class LocomotionController : MonoBehaviour
|
|
{
|
|
public XRController leftTeleportRay;
|
|
public XRController rightTeleportRay;
|
|
public InputHelpers.Button teleportActivationButton; //텔레포트 활성화 버튼
|
|
public float activationThreshold = 0.1f; //살짝만 누르면 텔레포트 활성화 되도록
|
|
|
|
//각 손의 텔레포트 활성화 할것인가? => UnityEvent 에서 설정
|
|
public bool EnableLeftTeleport { get; set; } = true;
|
|
public bool EnableRightTeleport { get; set; } = true;
|
|
|
|
public XRRayInteractor leftRayInteractor;
|
|
public XRRayInteractor rightRayInteractor;
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
//각 컨트롤러의 텔레포트를 활성화/비활성화
|
|
if (leftTeleportRay)
|
|
{
|
|
//InteractorRay가 무엇에 닿았는가?
|
|
bool isLeftInteractorRayHovering = leftRayInteractor.TryGetHitInfo(out Vector3 pos, out Vector3 norm, out int posInLine, out bool isValid);
|
|
leftTeleportRay.gameObject.SetActive(CheckIfActivated(leftTeleportRay) && EnableLeftTeleport && !isLeftInteractorRayHovering);
|
|
}
|
|
|
|
|
|
if (rightTeleportRay)
|
|
{
|
|
bool isRightInteractorRayHovering = rightRayInteractor.TryGetHitInfo(out Vector3 pos, out Vector3 norm, out int posInLine, out bool isValid);
|
|
rightTeleportRay.gameObject.SetActive(CheckIfActivated(rightTeleportRay) && EnableRightTeleport && !isRightInteractorRayHovering);
|
|
}
|
|
|
|
}
|
|
|
|
//특정 컨트롤러의 특정 버튼이 눌렀는가? 를 리턴하는 함수
|
|
public bool CheckIfActivated(XRController controller)
|
|
{
|
|
//controller의 활성화 버튼을 activationThreshold 이상으로 눌렀으면, 그 값을 저장하고 리턴
|
|
InputHelpers.IsPressed(controller.inputDevice, teleportActivationButton, out bool isActivated, activationThreshold);
|
|
|
|
return isActivated;
|
|
}
|
|
}
|