本文介绍游戏中小地图的制作过程。
实现原理:在角色正上方设置一个镜头垂直向下的跟随摄像机,把摄像机拍摄到的画面投影到小地图上。
Step1:创建地图摄像机
在资源文件新建一个Render Texture,命名为miniMapTexture。
Render Texture是一种可以渲染的材质,可以当作摄像机拍摄到的动态画面的载体。
新建一个Camera作为角色(摄像机跟随对象)的子物体,命名为miniMapCamera,把miniMapTexture拖到Target Texture。
①Position:摄像机位置
②Projection:设置摄像机投影方式为正射投影
③Size:摄像机的投影范围(小地图的缩小放大)
④Target Texture:投影的载体
Step2:设置地图UI
新建一个Image,命名为mapMask,拖遮罩图到①。添加组件Mask。Mask组件的作用是将地图不想显示的部分遮住,比如一般小地图的形状都是圆形的,那么Source Image应该是一个圆形图像,这样就只会显示圆形中的部分。
①Source Image:用来遮罩的图片,通常是一个黑色的圆形
②Show Mask Graphic:是否显示遮罩图,可选

新建一个Raw Image作为mapMask的子物体,拖miniMapTexture到Texture字段

Step3:设置地图图标
新建一个Quad(3D Object/Quad)作为角色的子物体,设置属性如图。
Layer设置为MiniMap层(自行创建),另外地图摄像机的Culling Mask字段只勾选该层和场景层,即不显示图标和场景以外的物体。
同理,MainCamera不应勾选MiniMap层。

到这里,一个小地图基本完成了,但运行后发现地图的方向不是固定的,而是随角色移动而变换。这是因为摄像机作为角色的子物体,方向会跟随角色变化,解决方法是让摄像机成为一个单独的独立物体,这就需要另外编写脚本控制摄像机跟随角色。

脚本很简单,只需让摄像机在x、z轴上的位置与角色保持同步就可以了。
至于y轴(摄像机高度),由于角色的position.y有可能会产生变化,决定了摄像机的position.y不可以是一个常量。
float posX = Player.instance.transform.position.x; //角色的position.x
float posZ = Player.instance.transform.position.z; //角色的position.z
OffsetY = Player.instance.transform.position.y + 20; //摄像机与角色的偏移距离
Vector3 pos = new Vector3(posX, OffsetY, posZ);
transform.position = pos;
浙公网安备 33010602011771号