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(); 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(); // 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(); } }