[Unity3d]小地图的制作
2014-02-28 16:15
459 查看
继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向。
右上角就是小地图,上面有个红色小箭头就是代表主角人物所在场景中的位置,箭头的方向就代表人物所面向的方向。
然后在创建一个Plane,然后点击该对象,在Inspector属性窗口将MeshRenderer取消,
并且在场景中会发现有绿色的网格,
然后记录网格所在的位置,并且取消MeshCollider,用截图工具截取这网格所在的位置,截出一张一模一样大小的图片,这就是我们小地图的来源。截取好了之后记得将MeshCollider勾选上,后面会在代码中需要计算人物所在的位置,也就正是通过这网格文件来计算的。
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的插件,用来制作小地图就更炫更专业了,这里只是一个粗糙的小地图。你也可以尝试用一下更专业的插件来开发。
更专业的插件开发小地图请看:/content/754545.html
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ群:858550 cocos2dx QQ群:280818155
====================== 相互学习,共同进步 ===================
转载请注明出处:/content/754548.html
效果图
右上角就是小地图,上面有个红色小箭头就是代表主角人物所在场景中的位置,箭头的方向就代表人物所面向的方向。
实现步骤
1.俯视图的制作
首先,我们将Scene场景调成俯视的角度然后在创建一个Plane,然后点击该对象,在Inspector属性窗口将MeshRenderer取消,
并且在场景中会发现有绿色的网格,
然后记录网格所在的位置,并且取消MeshCollider,用截图工具截取这网格所在的位置,截出一张一模一样大小的图片,这就是我们小地图的来源。截取好了之后记得将MeshCollider勾选上,后面会在代码中需要计算人物所在的位置,也就正是通过这网格文件来计算的。
2.代码的编写
[csharp] view plaincopyprint?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的插件,用来制作小地图就更炫更专业了,这里只是一个粗糙的小地图。你也可以尝试用一下更专业的插件来开发。
更专业的插件开发小地图请看:/content/754545.html
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ群:858550 cocos2dx QQ群:280818155
====================== 相互学习,共同进步 ===================
转载请注明出处:/content/754548.html
相关文章推荐
- Unity3D 学习日记(六) 制作简单的小地图
- Unity3D 小地图的制作
- Unity3D小地图制作脚本
- Unity3D 制作场景地图 插件
- [Unity3d插件KGFMapSystem]非常不错的小地图的制作
- [Unity3d插件KGFMapSystem]非常不错的小地图的制作
- unity3D 制作3D塔防游戏(一) 制作地图
- unity3d简单地图制作
- [Unity3d插件KGFMapSystem]非常不错的小地图的制作
- [Unity3d]小地图的制作
- Unity3D_(插件)使用Camera渲染制作Minimap小地图
- Unity3d-游戏中的小地图制作
- Unity3D_(插件)小地图自刷新制作Minimap小地图
- unity3d实现场景小地图制作
- unity3d-地图制作之云彩飘动
- Unity3D使用NGUI制作小地图
- Unity3D使用NGUI制作小地图
- unity3d简单地图制作
- unity3d制作小地图(MiniMap)的简单Demo
- [Unity3d]使用摄像机制作实时显示小地图