编辑代码

using System;

public class PlanarReflectionTest
{
    private void Start()
    {
        // hold planar material 
        _planaerMat = _planar.GetComponent<MeshRenderer>().material;
        // Create render texture for reflection camera 
        _reflectionRenderTarget = new RenderTexture(Screen.width, Screen.height, depth:24);
        _reflectionCamera.targetTexture = _reflectionRenderTarget;
        _reflectionCamera.enabled = true;
        // Bind material & render texture
        _planarMat.SetTexture(Shader.PropertyToID("_ReflectionTex"), _reflectionRenderTarget);
    }

    private void CalcReflectionCameraProperties()
    {
        // camera properties in World Space 主相机,世界空间下,pos, forward,up
        Vector3 cameraPosWorldSpace = _mainCamera.transform.position;
        Vector3 cameraForwardWorldSpace = _mainCamera.transform.forward;
        Vector3 cameraUpDirWorldSpace = _mainCamera.transform.up;
        
        // Convert properties from world space to planar local space 转换为 平面物体的 local space下的 pos, forward, up 
        Vector3 cameraPosPlanarSpace = _planar.InverseTransformPoint(cameraPosWorldSpace);
        Vector3 cameraForwardPlanarSpace = _planar.InverseTransformDirection(cameraForwardWorldSpace);
        Vector3 cameraUpPlanarSpace = _planar.InverseTransformDirection(cameraUpDirWorldSpace);

        // Reflect in Planar local space, revert in Y direction is OK
        // local space 下,法线是(0, 1, 0),所以只要做y方向取反,得到对称后的pos,forward,up
        cameraPosPlanarSpace.y *= -1.0f;
        cameraForwardPlanarSpace.y *= -1.0f;
        cameraUpPlanarSpace.y *= -1.0f;

        // Convert properties back to world space from planar's local space
        // 把对称后的 平面物体 local space下的 pos,forward, up 转换回 world space 下
        cameraPosWorldSpace = _planar.TransformPoint(cameraPosPlanarSpace);
        cameraForwardWorldSpace = _planar.TransformDirection(cameraForwardPlanarSpace);
        cameraUpDirWorldSpace = _planar.Transformdirection(cameraUpPlanarSpace);

        // Apply properties to reflection camera
        // 把映射回 world space 的Pos,forward,up 应用给 reflection camera
        _reflectionCamera.transform.position = cameraPosWorldSpace;
        _reflectionCamera.transform.LookAt(cameraPosWorldSpace + cameraForwardWorldSpace, cameraUpDirWorldSpace);

    }

}