using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class reflection : MonoBehaviour { public Camera _mainCamera; public Camera _reflectionCamera; RenderTexture _reflectionRenderTexture; public Transform _planner; private Material _palnnerMaterial; // Start is called before the first frame update void Start() { //拿到平面材质 _palnnerMaterial = _planner.GetComponent().material; //创建相机并指定相机渲染目标 _reflectionRenderTexture = new RenderTexture(Screen.width, Screen.height, 24); _reflectionCamera.targetTexture = _reflectionRenderTexture; _reflectionCamera.enabled = true; //将相机渲染的目标赋给材质 _palnnerMaterial.SetTexture("_ReflectionTex",_reflectionRenderTexture); } // Update is called once per frame void Update() { CalcReflectionCameraProperties(); } void CalcReflectionCameraProperties() { Vector3 cameraPosWorldSpace = _mainCamera.transform.position; Vector3 cameraForwardWorldSpace = _mainCamera.transform.forward; Vector3 cameraUpDirWorldSpace = _mainCamera.transform.up; //转换世界坐标系的点到平面的局部坐标系下 cameraPosWorldSpace.y *= -1.0f; cameraForwardWorldSpace.y *= -1.0f; //Vector3 cameraPosPlanarSpace = cameraPosWorldSpace; //_planner.InverseTransformPoint(cameraPosWorldSpace); //Vector3 cameraForwardPlannarSpace = _planner.InverseTransformPoint(cameraForwardWorldSpace); Vector3 cameraUpPlannarSpace=_planner.InverseTransformPoint(cameraUpDirWorldSpace); //cameraPosPlanarSpace.y *= -1.0f; //cameraForwardPlannarSpace.y *= -1.0f; cameraUpPlannarSpace.y *= -1.0f; //cameraPosWorldSpace = _planner.TransformPoint(cameraPosPlanarSpace); //cameraForwardWorldSpace = _planner.TransformPoint(cameraForwardPlannarSpace); cameraUpDirWorldSpace = _planner.TransformPoint(cameraUpPlannarSpace); _reflectionCamera.transform.position = cameraPosWorldSpace; _reflectionCamera.transform.LookAt(cameraPosWorldSpace+cameraForwardWorldSpace*0.1f,cameraUpDirWorldSpace); } private void OnDestroy() { } }