- 先写一个纹理遮罩shader 
- Shader "Unlit/TexMask"  
- {  
-     Properties  
-     {  
-         _MainTex ("Texture", 2D) = "white" {}  
-         _MaskTex("Mask Texture",2D) = "white"{}  
-     }  
-     SubShader  
-     {  
-         Tags {"Queue"="Transparent" "RenderType"="Transparent" }  
-         LOD 100  
-   
-         Pass  
-         {  
-             Blend SrcAlpha OneMinusSrcAlpha  
-             CGPROGRAM  
-             #pragma vertex vert  
-             #pragma fragment frag  
-               
-             #pragma multi_compile_fog  
-              
-             #include "UnityCG.cginc"  
-   
-             struct appdata  
-             {  
-                 float4 vertex : POSITION;  
-                 float2 uv : TEXCOORD0;  
-             };  
-   
-             struct v2f  
-             {  
-                 float2 uv : TEXCOORD0;  
-                 UNITY_FOG_COORDS(1)  
-                 float4 vertex : SV_POSITION;  
-             };  
-   
-             sampler2D _MainTex;  
-             float4 _MainTex_ST;  
-             sampler2D _MaskTex;  
-   
-             v2f vert (appdata v)  
-             {  
-                 v2f o;  
-                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);  
-                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);  
-                 UNITY_TRANSFER_FOG(o,o.vertex);  
-                 return o;  
-             }  
-               
-             fixed4 frag (v2f i) : SV_Target  
-             {  
-                   
-                 fixed4 col = tex2D(_MainTex, i.uv)*tex2D(_MaskTex,i.uv);  
-                   
-                 UNITY_APPLY_FOG(i.fogCoord, col);  
-                 return col;  
-             }  
-             ENDCG  
-         }  
-     }  
- }  
原理就是:初始图片*遮罩图片,需要隐藏的地方,遮罩图片的alpha值为0,需要显示的地方为白色,这里我设置的是一张圆形遮罩,后面就是一张圆形的小地图

2.写一个小地图脚本,用来显示小地图,原理就是在目标头上生成一个摄像机,让摄像机跟随目标,并将看到的俯视图转为小地图的纹理
- using UnityEngine;  
- using UnityEngine.UI;  
- using System.Collections;  
-   
- public class MiniMap : MonoBehaviour {  
-     public Transform target;  
-     private Camera miniMapCamera;  
-     private RenderTexture renderTex;  
-     public Image miniMapTex;  
-       
-     void Start () {  
-         miniMapCamera = new GameObject("MiniMapCamera", typeof(Camera)).GetComponent();  
-         renderTex = new RenderTexture((int)miniMapCamera.pixelWidth, (int)miniMapCamera.pixelHeight, 1);  
-         miniMapCamera.targetTexture = renderTex;  
-         miniMapTex.material.SetTexture("_MainTex", renderTex);  
-     }  
-       
-       
-     void Update () {  
-         miniMapCamera.transform.position = target.position + new Vector3(0, 30, 0);  
-         miniMapCamera.transform.LookAt(target.position);  
-   
-     }  
- }  
3.显示小地图

4.这里功能都写得特别简单粗糙,适当在上面添加一些功能和美术,应该还是蛮好看的