unity2d伪透视效果的实现

请添加图片描述
改变unity的透视模式:Y轴y坐标值越小,越靠前,应该遮挡y坐标值较大的游戏对象,也就是y坐标较小的游戏对象后绘制,就会位于上层。请添加图片描述
调整图像的轴心。

### 使用单个透视相机模拟正交效果 对于希望在同一场景中同时呈现具有不同投影模式的对象——其中一些对象应显示为透视效果而另一些则需表现为正交效果的情况,可以通过特定技术手段达成目标而不必依赖于创建多个摄像机实例。 #### 自定义着色器与材质 针对需要展示成正交视觉风格的物体B,推荐采用自定义材质方案。具体而言,这些材料应当被编程以接收并应用一个专门构建的正交投影矩阵而非默认由Unity提供的透视版本[^2]。此方法允许即使当全局视图设置为透视时,选定实体仍能按照所需的比例关系展现出来,从而有效地消除了距离带来的大小变化影响。 ```csharp using UnityEngine; public class OrthoProjectionMaterial : MonoBehaviour { private Camera mainCam; void Start() { mainCam = Camera.main; } void OnWillRenderObject() { Matrix4x4 projMatrix = GL.GetGPUProjectionMatrix(mainCam.projectionMatrix, false); // 修改投影矩阵使之成为正交形式 float orthoSize = 10f; // 可根据实际需求调整该参数 projMatrix = Matrix4x4.Ortho(-orthoSize * Screen.width / Screen.height, orthoSize * Screen.width / Screen.height, -orthoSize, orthoSize, mainCam.nearClipPlane, mainCam.farClipPlane); Shader.SetGlobalMatrix("_CustomProj", projMatrix); } } ``` 上述脚本会在每次渲染前更新一个名为`_CustomProj`的全局Shader属性,它包含了用于指定正交投影的新矩阵。接着,在对应的Shader文件里,可通过替换原有的`UNITY_MATRIX_P`宏调用来利用这个新的投影变换: ```hlsl sampler2D _MainTex; float4 _MainTex_ST; struct appdata_t { float4 vertex : POSITION; }; v2f vert (appdata_t v) { v2f o; o.vertex = mul(unity_ObjectToWorld, v.vertex); // 转换到世界空间 o.vertex = mul(_CustomProj, o.vertex); // 应用自定义投影矩阵 return o; } fixed4 frag(v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, TRANSFORM_TEX(i.uv, _MainTex)); return col; } ``` 这种方法不仅保持了原有透视相机的功能不变,还使得某些特殊对象能够在同一帧内获得独特的正交视角表现力。 #### URP下的解决方案 若是项目基于通用渲染管线(URP),那么还可以探索更多灵活的选择。例如,可以参照官方文档或示例代码中的`FPSCameraDemoUniversal Rendering Examples`部分,尝试通过修改摄像机视野角度(Field Of View, FOV)来接近理想的正交外观效果;或者深入研究`RenderObjectsPass`类内部逻辑,学习如何临时改变摄像机类型并在完成绘制后迅速复原[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值