[Unity3d]自制圆形小地图

继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向。

效果图                                                                                                                         




右上角就是小地图,上面有个红色小箭头就是代表主角人物所在场景中的位置,箭头的方向就代表人物所面向的方向。

实现步骤                                                                                                                     

1.俯视图的制作

首先,我们将Scene场景调成俯视的角度

然后在创建一个Plane,然后点击该对象,在Inspector属性窗口将MeshRenderer取消,

并且在场景中会发现有绿色的网格,


然后记录网格所在的位置,并且取消MeshCollider,用截图工具截取这网格所在的位置,截出一张一模一样大小的图片,这就是我们小地图的来源。截取好了之后记得将MeshCollider勾选上,后面会在代码中需要计算人物所在的位置,也就正是通过这网格文件来计算的。

2.代码的编写

using UnityEngine;
using System.Collections;

public class map : MonoBehaviour {

    public Texture map1;//小地形图  
    public Texture jueseTexture;//标识角色的图片  
    float juesePosX = 0;
    float juesePosY = 0;
    public GameObject player;//角色  
    public GameObject plane;//地形  
    float planeWidth;//地形的宽  
    float planeHeight;//地形的高  

    float angle = 0; //人物旋转的角度

    void Start()
    {
        //获取地形的宽高  
        planeWidth = plane.GetComponent<MeshFilter>().mesh.bounds.size.x * plane.transform.localScale.x;
        planeHeight = plane.GetComponent<MeshFilter>().mesh.bounds.size.z * plane.transform.localScale.z;
        print("width+heith:"+planeWidth + ", " + planeHeight);
        print("bounds:" + plane.GetComponent<MeshFilter>().mesh.bounds);
    }
    void OnGUI()
    {
        GUI.DrawTexture(new Rect(Screen.width-map1.width, 0, map1.width, map1.height), map1);

        GUIUtility.RotateAroundPivot(angle, new Vector2((Screen.width - map1.width)+juesePosX + 5, juesePosY + 5));

        GUI.DrawTexture(new Rect((Screen.width - map1.width)+juesePosX, juesePosY, 10, 10), jueseTexture);
    }


    void Update()
    {
        print("people:" + player.transform.position.x + "," + player.transform.position.y);
        print(1);
        //根据palyer在plane的比例关系,映射到对应地图位置。  
        juesePosX = map1.width * player.transform.position.x / planeWidth + map1.width / 2;
        juesePosY = map1.height * (-player.transform.position.z) / planeHeight + map1.height / 2;

        print("x:" + juesePosX + "y:" + juesePosY);

        angle = player.transform.eulerAngles.y-90;
        print("angle:" + angle);
    } 
}

将该脚本拖放到Plane上,参数说明:JueseTexture是指小地图中箭头的图片,Player是人物模型的Controller,Plane是指当前带网格的Plane,Map1是指小地图的图片。

当然还有一种KGFMapSystem的插件,用来制作小地图就更炫更专业了,这里只是一个粗糙的小地图。你也可以尝试用一下更专业的插件来开发。
更专业的插件开发小地图请看:http://blog.csdn.net/dingxiaowei2013/article/details/18669919

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:375151422        cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================

 

转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/18571083


附加:添加遮罩实现圆形小地图

效果:

实现步骤:

1.准备一个场景的缩略小地图,用相机照着,相机呈现出来的相投影到RenderTexture上


2.新建遮罩shader

Shader "Custom/Mask" {
 Properties 
 {
  _MainTex ("Main Texture", 2D) = "white" {}
  _Mask("Mask Texture",2D)="white"{}
 }
 SubShader 
 {
     Tags{"Queue"="Transparent"}
  Lighting On
  Zwrite off
  Blend SrcAlpha OneMinusSrcAlpha
  pass
  {
  SetTexture[_Mask]{combine texture}
  SetTexture[_MainTex]{combine texture,previous}
  }
 }
}
3.新建一个材质球,并附上上面的shader,选择对应的白色圆形遮罩图和相机呈的相RenderTexture


4.将刚刚创建的材质赋给UITexture【NGUI】即可


  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Unity3D是一款强大的游戏开发引擎,可以用于制作各种类型的游戏,包括小地图。小地图可以帮助玩家在游戏中快速定位自己的位置,了解周围的环境和目标位置。下面是制作Unity3D地图的步骤: 1.首先,需要创建一个小地图的背景图。可以使用2D图片或者3D模型作为地图的背景。根据游戏的需求选择合适的背景。 2.接下来,创建一个摄像机对象,并将其设置为渲染到一个RenderTexture上。RenderTexture是一个可以用于将某个摄像机渲染的图像输出到纹理的类。在这个RenderTexture上设置小地图的尺寸和位置。 3.将创建的摄像机对象添加到主摄像机上。这样可以实现将主摄像机的渲染图像投影到小地图的背景图上。 4.创建地图上的角色或者目标的图标。可以使用2D图片或者3D模型作为图标,根据游戏需求选择合适的样式。 5.根据角色或者目标的位置,将图标放置在小地图的对应位置上。可以通过坐标转换等方式将世界坐标转换为小地图上的坐标。 6.在游戏进行中,更新小地图上的角色或者目标的位置。可以通过实时获取角色或者目标的位置信息,然后将图标移动到对应的位置。 7.可以在小地图上添加一些标记物,比如重要地点、敌人位置等。这样可以帮助玩家更好地了解游戏世界的结构和情况。 通过以上步骤,就可以制作出一个基本的Unity3D地图。当然,在实际制作中还可以根据游戏的需求进行一些定制和优化,比如添加一些特效、增加互动功能等,以提升游戏体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值