- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Events;
- using UnityEngine.SceneManagement;
- public class PortalBehaviour : MonoBehaviour
- {
- public Vector3 destination;
- [Tooltip("target scene use -1 to disable it")] public int sceneId = -1;
- [Tooltip("game objects to enable on teleporting")]public GameObject[] entities;
- [Tooltip("the teleport destination becomes relative to the Portal")]public bool relative;
- public UnityEvent<PortalBehaviour,Transform> onTeleported;
- [Tooltip("enables the Collision Detection (Trigger) automatic teleport")]public bool enableAutomaticTeleport = true;
-
- private void OnTriggerStay(Collider collision)
- {
- if (enableAutomaticTeleport)
- {
- if (collision.gameObject.CompareTag("Player"))
- {
- Teleport(collision.transform);
- }
- }
- }
- public void Teleport(Transform target)
- {
- StoredTeleport.position = destination;
- StoredTeleport.teleported = true;
- if (relative)
- {
- target.position = transform.position + destination;
- }
- else
- {
- target.position = destination;
- }
- if (sceneId != -1)
- {
- SceneManager.LoadScene(sceneId);
- }
- if (entities != null && entities.Length > 0)
- {
- foreach (GameObject entity in entities)
- {
- if (entity != null)
- {
- if (!entity.activeSelf)
- {
- entity.SetActive(true);
- }
- }
- }
- }
- onTeleported?.Invoke(this,target);
- }
- }