zoukankan      html  css  js  c++  java
  • [Unity3d]小地图的制作

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

    效果图                                                                                                                         

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

    实现步骤                                                                                                                     

    1.俯视图的制作

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

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

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


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

    2.代码的编写

    [csharp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     
    1. using UnityEngine;  
    2. using System.Collections;  
    3.   
    4. public class map : MonoBehaviour {  
    5.   
    6.     public Texture map1;//小地形图    
    7.     public Texture jueseTexture;//标识角色的图片    
    8.     float juesePosX = 0;  
    9.     float juesePosY = 0;  
    10.     public GameObject player;//角色    
    11.     public GameObject plane;//地形    
    12.     float planeWidth;//地形的宽    
    13.     float planeHeight;//地形的高    
    14.   
    15.     float angle = 0; //人物旋转的角度  
    16.   
    17.     void Start()  
    18.     {  
    19.         //获取地形的宽高    
    20.         planeWidth = plane.GetComponent<MeshFilter>().mesh.bounds.size.x * plane.transform.localScale.x;  
    21.         planeHeight = plane.GetComponent<MeshFilter>().mesh.bounds.size.z * plane.transform.localScale.z;  
    22.         print("width+heith:"+planeWidth + ", " + planeHeight);  
    23.         print("bounds:" + plane.GetComponent<MeshFilter>().mesh.bounds);  
    24.     }  
    25.     void OnGUI()  
    26.     {  
    27.         GUI.DrawTexture(new Rect(Screen.width-map1.width, 0, map1.width, map1.height), map1);  
    28.   
    29.         GUIUtility.RotateAroundPivot(angle, new Vector2((Screen.width - map1.width)+juesePosX + 5, juesePosY + 5));  
    30.   
    31.         GUI.DrawTexture(new Rect((Screen.width - map1.width)+juesePosX, juesePosY, 10, 10), jueseTexture);  
    32.     }  
    33.   
    34.   
    35.     void Update()  
    36.     {  
    37.         print("people:" + player.transform.position.x + "," + player.transform.position.y);  
    38.         print(1);  
    39.         //根据palyer在plane的比例关系,映射到对应地图位置。    
    40.         juesePosX = map1.width * player.transform.position.x / planeWidth + map1.width / 2;  
    41.         juesePosY = map1.height * (-player.transform.position.z) / planeHeight + map1.height / 2;  
    42.   
    43.         print("x:" + juesePosX + "y:" + juesePosY);  
    44.   
    45.         angle = player.transform.eulerAngles.y-90;  
    46.         print("angle:" + angle);  
    47.     }   
    48. }  

    将该脚本拖放到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群:858550         cocos2dx QQ群:280818155

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

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

  • 相关阅读:
    ASP.NET MVC 3.0(八): MVC 3.0 传递和保存你的Model
    ASP.NET MVC 3.0(十九): MVC 3.0 实例之使用开源控件实现表格排序和分页
    ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件
    ASP.NET MVC 3.0(十七): MVC 3.0 实例之表格中数据的筛选
    ASP.NET MVC 3.0 学习系列
    ASP.NET MVC 3.0(五): 入手Controller/Action
    ASP.NET MVC 3.0(十五): MVC 3.0 实例系列之表格的排序
    ASP.NET MVC 3.0(十): MVC 3.0 使用 Forms身份验证
    ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
    设计功能与界面的测试
  • 原文地址:https://www.cnblogs.com/tonge/p/Untiy3D.html
Copyright © 2011-2022 走看看