Untiy相机实现游戏透视效果

前言:(说一些废话)小伙伴们在玩网游类似CF、吃鸡等枪战游戏时,最想拥有的肯定最厉害的武器,然而最厉害的武器其实是知己知彼,当你知道了对方的位置时,那这局对战就毫无悬念了。今天我们就简单的制作一个类似游戏透视外挂的一个效果。(如果你们学会了去搞游戏外挂被搞了不要提我哦,哈哈,我只提供技术,觉得还可以的话就关注我哦~)

效果图:

最终效果,前面是相机渲染到Plane上的画面
最终效果,前面是相机渲染到Plane上的画面
蓝色遮挡后面有不同颜色的Cube
蓝色遮挡后面有不同颜色的Cube

原理:

下面简单说一下原理:
首先第一步就是对相机的处理,将相机的画面渲染到物体上,这一步很简单,但也是必需 的一步。
第二步就是对相机进行处理(Shader)
第三步调整相机位置达到想要的效果
下面开始制作:

1.相机制作(主相机和透视相机)

主相机可以看到所有层级的物体,并显示在Plane上,透视相机只能看到指定层级的物体,显示在Plane上,达到透视的效果。

1.1 主相机制作

1.1.1 创建一个Camera,不要用自带的MainCamera,简单调整参数 或者默认参数即可

在这里插入图片描述

1.1.2 创建一个RenderTexture,命名如上图,并添加到相机上
1.1.3 创建一个Plane,相机画面会渲染到Plane上面,属性如下

在这里插入图片描述

1.1.4 创建一个材质球,一个Shader,挂载到创建的Plane上面 如上图:
Shader "Custom/_MainTex"
{
    Properties
    {
		_MainTex("Texture", 2D) = "white" {}
        _LuminosityAmount("GrayScale Amount", Range(0.0,1.0)) = 1.0
    }
    SubShader
    {
	   Pass
		{
			CGPROGRAM
			#pragma vertex vert_img
			#pragma fragment frag
			#pragma fragmentoption ARB_precision_hint_fastest

			#include "UnityCG.cginc"

			sampler2D _MainTex;
			fixed _LuminosityAmount;

			fixed4 frag(v2f_img i) : SV_Target
			{
				fixed4 renderTex = tex2D(_MainTex, i.uv);

				float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;

				fixed4 col = lerp(renderTex, luminosity,_LuminosityAmount);

				return col;
			}
			ENDCG
		}
    }
}

1.1.5 主相机完成 效果图如下 可以将相机作为Plane的子物体,调整相机角度,效果像照相机一样

在这里插入图片描述

1.2 透视相机制作

1.2.1 创建一个新的Camera,命名为Camera(1)

修改相机参数如下:
在这里插入图片描述
其中的CullingMask为你要透视看到的物体的层级,物体的层级在之前就要手动设置好。TargetTexture 需要新建一个RenderTexture 拖入到这里
在这里插入图片描述
然后为这个相机添加一个脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShaderTestDeapth : MonoBehaviour
{
    public Material _MatDeapth;
    // Start is called before the first frame update
    void Start()
    {
        
    }
    /// <summary>
    /// Unity自带渲染相机API
    /// </summary>
    /// <param name="src"></param>
    /// <param name="dest"></param>
    public virtual void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        Graphics.Blit(src, dest, _MatDeapth);
    }
}

在这里插入图片描述
其中的_MatDeapth 为一个新建材质
在这里插入图片描述

1.2.2 创建一个新的Plane用来渲染透视相机的画面,创建一个新的材质球,新的Plane上面挂载一个材质球

在这里插入图片描述
Base(RGB)Trans(A)处为刚才新建的RenderTexture拖入进来就OK了。

1.2.3 最后的提示

层级一定要先设置好,主相机看到的应该是所有Layer 透视相机根据你的需要来选择看到的层级,我选择的是只看Cube这种模型,我给他自己分的一个层级用来测试。
相机的位置,我做的是两个相机的视野还有大小位置都是一样的,重叠的两个相机,只不过分工不同而已,还有重要的一点就是 透视的相机要放在主相机下面,作为主相机的子物体。
如图:
在这里插入图片描述

如果跟我的层级一样的话可以实现最终效果,透视的效果。

2.结尾

最后一步,如果两个相机重叠的话,只需要一步,把透视相机的Y轴 在我这里是Y轴稍微增加一点点0.01就可以,意思就是透视相机要显示在前面,先看到透视相机的画面,然后后面是主相机看到的画面,这样才能达到想要的效果。小伙伴们可以根据自己的需要来调试,不懂的可以问我哈。

~~欢迎转载关注评论,谢谢阅读。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值