82 lines
2.6 KiB
C#
Raw Normal View History

2025-07-25 15:29:14 +05:00
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();
}
}