制作小地图首先需要两个贴图:第一个贴图是小地图的背景贴图,它应当是从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. Apache虚拟目录

    Apache虚拟目录  1.打开Apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#! 2.在httpd.conf 末尾 ...

  2. 使用java的Calendar对象获得当前日期的上几个度开始、结束时间

    思路: 先获得当前季度的开始和结束日期,在当前日期的基础上往前推3个月即上个季度的开始和结束日期 /** * @param flag true:开始日期:false:结束日期 * @return */ ...

  3. SQL SERVER while循环

    在SQL数据库中,可以通过WHILE实现循环,下面就将为您介绍SQL循环执行while控制,希望对您提升WHILE的使用水平能够有些帮助. WHILE Boolean_expression    { ...

  4. SQL2008安装提示"Microsoft visual studio 2008早期之前的版本"解决(这是我认为最简单有效的方法)

    作者:冰封 日期:2013-10-18 原文地址:http://www.skywj.com/thread-9230-1-1.html 在安装SQL Server的时候提示 Microsoft visu ...

  5. 使用正则表达式统计vs项目代码总行数[转]

    怎么统计VS2008中工程的总共代码行数?怎么统计VS2008中工程的总共代码行数?在一个大工程中有很多的源文件和头文件,我如何快速统计总行数? ------解决方案----------------- ...

  6. XML&DTD&XML Schema学习

    XML(eXtensible Markup Language)可扩展的标记语言.xml在web service编程中尤为重要.在网络传输中可以作为传输数据的载体.xml作为元语言,它可以用来标记数据. ...

  7. Pintos-斯坦福大学操作系统Project详解-Project1

    转载请注明出处. 前言:  本实验来自斯坦福大学cs140课程,只限于教学用途,以下是他们对于Pintos系统的介绍:  Pintos is a simple operating system fra ...

  8. Centos 6.5 RedHat 6 安装mysql

    所需文件列表, 这些文件在安装光盘内的Packages文件夹内, 也可以到MySQL官方网站下载其他版本(需要FQ). 将这些文件放在/usr/loca/src文件夹: -.el6.x86_64.rp ...

  9. gooflow0.6的流程设计

    为何使用gooflow:1.兼容性好 2.扩展点很多可以个性化设计 3.配有api文档 4.json格式的数据传输 gooflow0.8版 由于最近项目需要,急需设计一个流程,考虑到时间问题,和用户个 ...

  10. 登录超时,给出提示跳到登录页面(ajax、导入、导出)

    一.一般页面登录超时验证,可以用过滤器filter,如下: package com.lg.filter; import java.io.IOException; import javax.servle ...