100 lines
3.0 KiB
C#
100 lines
3.0 KiB
C#
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<Renderer>();
|
|
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<Camera>(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;
|
|
}
|
|
}
|
|
}
|
|
} |