制作小地图首先需要两个贴图:第一个贴图是小地图的背景贴图,它应当是从y轴向下俯视截取的贴图;第二个贴图是主角位置贴图,它应当是在背景贴图之上的小型矩形。

 1 using UnityEngine;
2 using System.Collections;
3
4 public class smallMap : MonoBehaviour {
5 // Use this for initialization
6 GameObject plane; //大地图地形对象
7 GameObject cube; //大地图主角对象
8 float mapWidth; //大地图的宽度
9 float mapHeight; //大地图的高度
10 //地图边界检查
11 float widthCheck;
12 float heightCheck;
13 //小地图主角位置
14 float mapcube_x = 0;
15 float mapcube_y = 0;
16 //GUI按钮是否被按下
17 bool keyUp;
18 bool keyDown;
19 bool keyLeft;
20 bool keyRight;
21
22 public Texture map; //小地图的贴图
23 public Texture map_cube; //小地图的主角贴图
24 void Start () {
25 plane = GameObject.Find("Plane");
26 cube = GameObject.Find("Cube");
27 float size_x = plane.GetComponent<MeshFilter>().mesh.bounds.size.x; //得到大地图的默认宽度
28 float scale_x = plane.transform.localScale.x; //得到大地图宽度的缩放比例
29 float size_z = plane.GetComponent<MeshFilter>().mesh.bounds.size.z; //得到大地图的默认高度
30 float scale_z = plane.transform.localScale.z; //得到大地图高度的缩放比例
31 mapWidth = size_x * scale_x;
32 mapHeight = size_z * scale_z;
33 widthCheck = mapWidth / 2;
34 heightCheck = mapHeight / 2;
35 check();
36 }
37
38 // Update is called once per frame
39 void Update () {
40
41 }
42
43 void OnGUI() {
44 keyUp = GUILayout.RepeatButton("向前移动");
45 keyDown = GUILayout.RepeatButton("向后移动");
46 keyRight = GUILayout.RepeatButton("向右移动");
47 keyLeft = GUILayout.RepeatButton("向左移动");
48 GUI.DrawTexture(new Rect(Screen.width - map.width, 0, map.width, map.height), map);
49 GUI.DrawTexture(new Rect(mapcube_x, mapcube_y, map_cube.width, map_cube.height), map_cube);
50 }
51
52 void FixedUpdate() {
53 if (keyUp) {
54 cube.transform.Translate(Vector3.forward * Time.deltaTime * 5);
55 check();
56 }
57 if (keyDown) {
58 cube.transform.Translate(-Vector3.forward * Time.deltaTime * 5);
59 check();
60 }
61 if (keyRight) {
62 cube.transform.Translate(Vector3.right * Time.deltaTime * 5);
63 check();
64 }
65 if (keyLeft) {
66 cube.transform.Translate(Vector3.left * Time.deltaTime * 5);
67 check();
68 }
69 }
70
71 void check() {
72 float x = cube.transform.position.x;
73 float z = cube.transform.position.z;
74 if (x < -widthCheck) {
75 x = -widthCheck;
76 }
77 if (x > widthCheck) {
78 x = widthCheck;
79 }
80 if (z < -heightCheck) {
81 z = -heightCheck;
82 }
83 if (z > heightCheck) {
84 z = heightCheck;
85 }
86 mapcube_x = (map.width / mapWidth * x) + ((map.width / 2) - (map_cube.width / 2)) + (Screen.width - map.width);
87 mapcube_y = map.height - ((map.height / mapHeight * z) + (map.height / 2));
88 }
89 }

Unity3D学习笔记-------小地图制作的更多相关文章

  1. unity3d学习笔记(一) 第一人称视角实现和倒计时实现

    unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...

  2. Unity3D学习笔记2——绘制一个带纹理的面

    目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...

  3. Unity3D学习笔记3——Unity Shader的初步使用

    目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. 渲染 ...

  4. Unity3D学习笔记4——创建Mesh高级接口

    目录 1. 概述 2. 详论 3. 其他 4. 参考 1. 概述 在文章Unity3D学习笔记2--绘制一个带纹理的面中使用代码的方式创建了一个Mesh,不过这套接口在Unity中被称为简单接口.与其 ...

  5. Unity3D学习笔记6——GPU实例化(1)

    目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...

  6. Unity3D学习笔记7——GPU实例化(2)

    目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在上一篇文章<Unity3D学习笔记6--GPU实例化(1)>详细介绍了Unity3d中GPU实例化的 ...

  7. Unity3D学习笔记8——GPU实例化(3)

    目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1)&g ...

  8. Unity3D学习笔记12——渲染纹理

    目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...

  9. NGUI 学习笔记实战——制作商城UI界面

    http://www.cnblogs.com/chongxin/p/3876575.html Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我 ...

随机推荐

  1. js实现FileUpload选择图片后预览功能

    当asp.net的FileUpload选择一个图片后不需要上传就能显示出图片的预览功能, 代码: <%@ Page Language="C#" AutoEventWireup ...

  2. CentOS PHP-5.4.8 编译安装之初体验

    1. 下载5.4.8 版本 [root@Test data] wget http://museum.php.net/php5/php-5.4.8.tar.gz 2. 解压 [root@Test php ...

  3. oracle sql语句

    一.ORACLE的启动和关闭1.在单机环境下要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下su - oracle a.启动ORACLE系统oracle>svrmgrlSVRM ...

  4. hadoop_并行写操作思路

    这篇文章是关于,如何修改hadoop的src以实现在client端上传大文件到HDFS的时候, 为了提高上传的效率实现将文件划分成多个块,将块并行的写入到datanode的各个block中 的初步的想 ...

  5. Java MD5校验

    Java 生成MD5 MD5(Message Digest Algorithm),消息摘要算法,一般用于校验文件的完整性.Java内置已经实现了MD5,与SHA1算法,利用java.security. ...

  6. iOS中判断消息推送是否打开

    根据 [[UIApplication sharedApplication] enabledRemoteNotificationTypes] 的返回值来进行判断,该返回值是一个枚举值,如下: typed ...

  7. 一段C++代码想到的问题

    今天在学习<Unix环境高级编程>,第七章进程环境给出了一个进程的内存分布示意图,从下往上依次为“正文段->初始化数据->未初始化数据(默认初始化为0)->堆(从低地址到 ...

  8. Windowsphone 之xml序列化和反序列化的应用(WebService解析返回的数据DataSet )

    关于Xml的序列化和反序列化: 可以看这篇文章,http://www.cnblogs.com/Windows-phone/p/3243575.html WebService解析返回的数据DataSet ...

  9. Django 基础

    Django 的路由系统 在 django 的 URLconf 配置文件 urls.py 中根据一个 URL 对应 views 的一个函数来处理用户的请求. 1.基本的 urls 对应 urlpatt ...

  10. 正确安装 django-socketio

    直接使用 pip 安装,连 example project 都运行不了... 要正常使用,关键是要使用正确版本的依赖包 Django (1.5.5) django-socketio (0.3.2) g ...