82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using System.Collections;
|
|
using Polyart;
|
|
using UnityEngine;
|
|
|
|
public class Teleportation : MonoBehaviour
|
|
{
|
|
|
|
[Header("Teleportation Settings")]
|
|
[SerializeField] private Transform teleportTarget;
|
|
[SerializeField] private float teleportDelay = 0.5f;
|
|
|
|
LoadingScene loadingScene;
|
|
|
|
|
|
|
|
void Start()
|
|
{
|
|
loadingScene = LoadingScene.Instance;
|
|
if (loadingScene == null)
|
|
{
|
|
Debug.LogError("LoadingScene instance not found. Ensure LoadingScene is initialized before Teleportation.");
|
|
}
|
|
}
|
|
|
|
|
|
void OnTriggerEnter(Collider other)
|
|
{
|
|
// Check if the player entered the trigger
|
|
FirstPersonController_Polyart player = other.GetComponent<FirstPersonController_Polyart>();
|
|
if (player != null && teleportTarget != null && loadingScene != null)
|
|
{
|
|
Debug.Log($"Teleportation triggered! Target: {teleportTarget.position}");
|
|
StartCoroutine(TeleportPlayer(player));
|
|
}
|
|
else
|
|
{
|
|
if (player == null) Debug.LogWarning("Player not found in trigger");
|
|
if (teleportTarget == null) Debug.LogWarning("Teleport target not assigned");
|
|
if (loadingScene == null) Debug.LogWarning("LoadingScene instance not found");
|
|
}
|
|
}
|
|
|
|
IEnumerator TeleportPlayer(FirstPersonController_Polyart player)
|
|
{
|
|
// Disable player movement
|
|
player.DisablePlayer();
|
|
|
|
// Start fade to black
|
|
yield return StartCoroutine(loadingScene.FadeCoroutine(0f, 1f));
|
|
|
|
// Wait for the specified delay
|
|
yield return new WaitForSeconds(teleportDelay);
|
|
|
|
// Get the CharacterController component
|
|
CharacterController characterController = player.GetComponent<CharacterController>();
|
|
|
|
// Safely teleport the player
|
|
if (characterController != null)
|
|
{
|
|
// Disable CharacterController temporarily for teleportation
|
|
characterController.enabled = false;
|
|
player.transform.position = teleportTarget.position;
|
|
characterController.enabled = true;
|
|
|
|
Debug.Log($"Player teleported to: {teleportTarget.position}");
|
|
}
|
|
else
|
|
{
|
|
// Fallback if no CharacterController
|
|
player.transform.position = teleportTarget.position;
|
|
Debug.Log($"Player teleported to: {teleportTarget.position} (no CharacterController)");
|
|
}
|
|
|
|
// Start fade out from black
|
|
yield return StartCoroutine(loadingScene.FadeCoroutine(1f, 0f));
|
|
|
|
// Re-enable player movement
|
|
player.EnablePlayer();
|
|
}
|
|
|
|
}
|