using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace Beyond { [RequireComponent(typeof(Renderer))] [ExecuteInEditMode] public class Portal : MonoBehaviour { public Portal secondPortal; public Camera camera; private Renderer renderer; private Camera mainCamera; public enum PortalType { PORTAL_A, PORTAL_B }; public PortalType portalType = PortalType.PORTAL_A; private RenderTexture rt; private Material mat; private bool isEnabled = false; private GameObject player; public bool useMainCamera = false; private void Awake() { mainCamera = Camera.main; if (camera) { rt = new RenderTexture(512, 512, 16, RenderTextureFormat.ARGB32); rt.Create(); camera.targetTexture = rt; } } // Start is called before the first frame update void Start() { renderer = GetComponent(); mat = renderer.material; mat.SetTexture("_BaseMap", secondPortal.camera.targetTexture); player = GameObject.FindGameObjectWithTag("Player"); } private void InitPortals() { secondPortal.portalType = (PortalType)((int)(portalType + 1) % 2); if (camera == null) { camera = GameObject.Instantiate(mainCamera, this.transform); } } // Update is called once per frame void Update() { #if UNITY_EDITOR if (!EditorApplication.isPlaying) { if (secondPortal) { if (secondPortal.portalType == portalType) { InitPortals(); } } } #endif if (Application.isPlaying) isEnabled = (player.transform.position - transform.position).magnitude < 10f; else { isEnabled = false; } if (isEnabled) { secondPortal.camera.enabled = true; if (useMainCamera) { camera.transform.position = mainCamera.transform.position; camera.transform.rotation = mainCamera.transform.rotation; } secondPortal.camera.transform.localPosition = camera.transform.localPosition; secondPortal.camera.transform.localRotation = camera.transform.localRotation; //secondPortal.camera.transform.localPosition = transform.InverseTransformPoint(mainCamera.transform.position); //secondPortal.camera.transform.localRotation = Quaternion.Inverse(transform.rotation) * mainCamera.transform.rotation; } else { secondPortal.camera.enabled = false; } } } }