Unity_实现小地图功能

在Unity中,模拟类似英雄联盟和csgo中 左上角小地图的功能

思路:在游戏中,玩家有两个视角,一个是玩家的游戏主视角,一个是小地图的视角,每个视角所看到的画面是不一样的,我们只需要创建两个摄像机,一个摄像机负责渲染玩家视角,另一个摄像机负责渲染玩家小地图视角即可

1.搭建好场景,创建游戏物体,一个平面,一个立方体,一个球体,假设我们的玩家是立方体,给它重命名Player,游戏场景地形就是平面,随便换个材质,使得它显眼一点

 2.在Player和小球身上分别创建子物体Quad,用来代表我们游戏场景中的两个物体 并分别把他们分别都沿Y轴向上平移5,沿X旋转90度,然后缩小一点XYZ,代表Player的Quad换成绿色,代表小球的Quad换成红色

Unity_实现小地图功能_第1张图片

3.思路:前面我们提到,两个摄像机只需要渲染各自的画面就可以实现这个功能,我们先看一下此时的游戏画面Unity_实现小地图功能_第2张图片

 上图,这是我们主摄像机所渲染出来的画面,我们只需要再创建一个小摄像机,并把他平行于地面,俯视着看我们的场景,并且在小摄像机中我们只负责看绿色和红色以及地面不就可以了吗,这样两个摄像机各司其职,主摄像机看主要画面,小摄像机看红绿两点即可

4.由上图可以看到,将小摄像机设为Player的子物体,并设置好位置,沿X旋转90度,垂直于地面,再将Y轴拉高一点,这样就差不多是小地图的视角了(PS:因为创建了一个新的摄像机默认深度为0,而我们主摄像机深度为-1,Game视图里那个摄像机深度大就设为Game里的画面,我们还要把主摄像机的深度改为1就行),做好以上后,还需要把小摄像机改为正交,不是透视相机,避免近大远小

 

 5.我们的小摄像机只需要看代表Player和小球的绿红两点和地面就行,不需要看到两个游戏物体,这时我们在将他们的层级改变一下,两个Quad置为UI层,Plane置为Water层,游戏物体Player和小球默认Default层,将小摄像机只渲染UI和Water层,主摄像机只渲染Default和Water层,这样就好啦!

Unity_实现小地图功能_第3张图片

Unity_实现小地图功能_第4张图片

Unity_实现小地图功能_第5张图片

 6.看下效果,小窗口是小摄像机,Game是主摄像机,大致完成了,先让Player动起来试一试是否成功,给Player添加一个move脚本

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

public class move : MonoBehaviour
{
    
    void Update()
    {
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");
        transform.Translate(new Vector3(x, 0, y) * Time.deltaTime * 10);
    }
}

 

基本成功了,但这只是我们在编辑器里看到的,还需要让他显示在游戏画面Game视图中,才能达到真正的效果,如何去做,最后几步go on

7.在Assets中创建一个Render Texture,将Render Texture拖入小摄像机Target Texture中,这时小摄像的渲染的画面就会显示在Render Texture里面了

Unity_实现小地图功能_第6张图片

8.创建一个RawImage 重命名为Map 将场景先转换为2D 然后改变位置和大小 如图

Unity_实现小地图功能_第7张图片

 9.再将Render Texture里面的画面给我们的Map,因为Render Texture存放的是小摄像机的画面,然后我么将Render Texture又给了Map,这样Map里面显示的就是小摄像机的画面了,也就实现了小地图

Unity_实现小地图功能_第8张图片

 10.最后我们运行,至此,小地图功能实现

Unity_实现小地图功能_第9张图片

你可能感兴趣的:(Unity,unity,学习,游戏引擎)