Unity摄像机镜像翻转

以下可以实现镜头翻转的功能,但是面片部分也会被翻转.

Camera camera = Camera.main;

Matrix4x4 mat = camera.projectionMatrix;

mat *= Matrix4x4.Scale(new UnityEngine.Vector3(-1, 1, 1));

camera.projectionMatrix = mat;

加入以下判定可解决这个问题

public static void MirrorFlipCamera(bool isMirror)
{
     if (isMirror != GL.invertCulling)
     {
         Camera camera = Camera.main;
          Matrix4x4 mat = camera.projectionMatrix;
          mat *= Matrix4x4.Scale(new UnityEngine.Vector3(-1, 1, 1));
          camera.projectionMatrix = mat;
          GL.invertCulling = isMirror;
     }
}

2023年9月6日补充
当GL.invertCulling为true时关闭游戏,会导致重新进入游戏时,虽然GL.invertCulling的值为false,但是渲染效果却是翻转的

需要重新设置一下GL.invertCulling为false才可使渲染恢复

public static void OnGameStart()
{
	GL.invertCulling = false;
}
### 关于Unity中实现水面反射效果的相机脚本 在Unity中创建逼真的水面反射效果通常涉及使用额外的摄像机来渲染倒影图像。为了达到最佳性能和视觉质量,可以采用屏幕空间反射(SSR),特别是在通用渲染管线(URP)下[^1]。 下面是一个简单的C#脚本示例,用于设置专门负责捕捉水体下方场景并将其作为纹理传递给材质使用的辅助摄像机: ```csharp using UnityEngine; public class WaterReflectionCamera : MonoBehaviour { public Camera mainCamera; public RenderTexture reflectionTexture; void Start() { // 设置反射贴图大小 int resolution = 512; reflectionTexture = new RenderTexture(resolution, resolution, 24); // 获取当前对象上的第二个摄像组件实例 var reflCam = GetComponent<Camera>(); if (reflCam != null && mainCamera != null) { // 配置反射摄像参数 reflCam.targetTexture = reflectionTexture; reflCam.fieldOfView = mainCamera.fieldOfView; // 将此游戏对象的位置设为主摄像位置翻转后的Y轴坐标 Vector3 pos = transform.position; pos.y *= -1f; transform.position = pos; // 同步旋转角度 Quaternion rot = transform.rotation; rot.x *= -1f; rot.z *= -1f; transform.rotation = rot; } } void OnPreRender() { // 渲染前同步主摄属性到反射摄上 var reflCam = GetComponent<Camera>(); if(reflCam != null && mainCamera != null){ reflCam.backgroundColor = mainCamera.backgroundColor; reflCam.clearFlags = mainCamera.clearFlags; reflCam.cullingMask = mainCamera.cullingMask; reflCam.depth = mainCamera.depth + 1; } } } ``` 该脚本通过反转`mainCamera`的高度和平移其方向实现了基本的镜像视角模拟。需要注意的是,在实际应用中可能还需要考虑更多细节调整,比如处理透明度、光照等因素的影响。 对于更高级的效果,则建议探索官方提供的解决方案或第三方插件库,这些资源往往已经过优化并且易于集成至现有项目之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值