最终效果如下

Unity小地图圆形怎么做 unity小地图制作教程_ide


箭头会随着任务的移动、旋转而发生移动与旋转,当角色切换到另外的地图中时,相应的地图名称也会发生变换,如布鲁镇变成落日森林;

制作流程

  1. 小地图的资源制作方式
  1. 实时渲染场景:主要是有一个摄像机,它真实的存在于角色的上空,然后显示在小地图上面(通过实时的渲染显示场景,非常精准写实);
  2. 预渲染顶视图+润色:将场景的顶视图先预渲染到一张图片上面,然后由美工进行润色(unity中使用mask充当遮罩,可以取消 showMaskfraphic来将遮罩剔除)
  3. 纯每输制作,通过手绘的方式,将场景中的建筑,地点通过圈、点、箭头来代替
  1. 小地图的UI元素
  2. 小地图的配置与加载
  1. 小地图资源的配置与加载发生在角色进入地图的时候,可以将资源所在路径填充到表格中,然后通过json进行解析,然后在适当的地方进行加载
  1. 小地图与场景的坐标映射
  1. 提前算好地图的长宽,保存到配置表中,然后通过代码进行读取;
  2. 在真实的场景底部可以放置一个同样大小的cube,通过cube来获取场景的大小;
  1. 小地图如何与角色建立关联
    如果想要将整个地图与小地图根据角色的位置产生对应,首先要知道整个地图的长宽,然后需要知道角色在地图中的相对位置,根据相对位置可以得到角色在地图中的比例关系,然后将箭头的轴心轴点(pivot)的位置进行改变,再将相对位置归9,就可以使两者产生关联;
    代码如下
void Update () {

        //接下来就是将小地图的坐标转换到世界坐标上面去
        float realWidthX = this.border.bounds.size.x;
        float realWidthY = this.border.bounds.size.z;

        float minWidthX = this.border.bounds.min.x;
        float minWidthY = this.border.bounds.min.z;

        float relaX = this.currentPlayerTransform.position.x - minWidthX;
        float relaY = this.currentPlayerTransform.position.z - minWidthY;

        minMapMask.rectTransform.pivot = new Vector2(relaX / realWidthX, relaY / realWidthY);
        minMapMask.rectTransform.localPosition = Vector3.zero;
        //对于小地图来说只有x,z两个旋转轴
        //而对于角色来说,是三维的坐标系,所以在我们看来他是按照y轴进行旋转的
        //因此将箭头按照z轴进行和角色按照y轴进行的旋转角度即可
        arrow.rectTransform.eulerAngles = new Vector3(0, 0, -User.Instance.CurrentPlayerGameObject.transform.eulerAngles.y);

	}

注意
在切换地图的时候,由于涉及到更换地图的背景图,所以需要将地图的位置与size进行调整,也就是下面的4.5句代码

private void Init()
    {
        this.minMapName.text = User.Instance.CurrentMap.Minmap;
        if(this.minMapMask.overrideSprite==null)
            this.minMapMask.overrideSprite = MinmapManager.Instance.CurrentMinmapMask();

        this.minMapMask.SetNativeSize();
        this.minMapMask.transform.localPosition = Vector3.zero;

        this.currentPlayerTransform = User.Instance.CurrentPlayerGameObject.transform;

    }

否则可能会出现大小不一致,或者比例不对,或者所在位置不对的情况
至此结束;