SW 중심대학 OSS GIT 서버 새로운 리포
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.

80 lines
2.6 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.Interaction.Toolkit;
using DG.Tweening; //DOTween 네임스페이스
using UnityEngine.Assertions;
public class FadeTeleportationProvider : TeleportationProvider
{
public Image fadeScreen;
public Color fadeColor = Color.black;
public float fadeDuration = 0.5f;
// Start is called before the first frame update
void Start()
{
startLocomotion += FadeTeleportationProvider_startLocomotion;
endLocomotion += FadeTeleportationProvider_endLocomotion;
fadeScreen.color = fadeColor;
}
private void FadeTeleportationProvider_startLocomotion(LocomotionSystem obj)
{
print("Start Locomotion");
//페이드아웃이 끝나면 Teleport 함수를 실행해라
fadeScreen.DOFade(1f, fadeDuration).OnComplete(Teleport);
}
private void FadeTeleportationProvider_endLocomotion(LocomotionSystem obj)
{
print("End Locomotion");
fadeScreen.DOFade(0f, fadeDuration);
}
protected override void Update()
{
//텔레포트 요청
if (!validRequest || !BeginLocomotion())
return;
}
void Teleport()
{
print("Begin TeleporT!!!");
//실제 텔레포트 하는 부분
var xrRig = system.xrRig;
if (xrRig != null)
{
switch (currentRequest.matchOrientation)
{
case MatchOrientation.WorldSpaceUp:
xrRig.MatchRigUp(Vector3.up);
break;
case MatchOrientation.TargetUp:
xrRig.MatchRigUp(currentRequest.destinationRotation * Vector3.up);
break;
case MatchOrientation.TargetUpAndForward:
xrRig.MatchRigUpCameraForward(currentRequest.destinationRotation * Vector3.up, currentRequest.destinationRotation * Vector3.forward);
break;
case MatchOrientation.None:
// Change nothing. Maintain current rig rotation.
break;
default:
Assert.IsTrue(false, $"Unhandled {nameof(MatchOrientation)}={currentRequest.matchOrientation}.");
break;
}
var heightAdjustment = xrRig.rig.transform.up * xrRig.cameraInRigSpaceHeight;
var cameraDestination = currentRequest.destinationPosition + heightAdjustment;
xrRig.MoveCameraToWorldLocation(cameraDestination);
}
EndLocomotion();
validRequest = false;
}
}