Unity3D学习笔记-------小地图制作
制作小地图首先需要两个贴图:第一个贴图是小地图的背景贴图,它应当是从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学习笔记-------小地图制作的更多相关文章
- unity3d学习笔记(一) 第一人称视角实现和倒计时实现
unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...
- Unity3D学习笔记2——绘制一个带纹理的面
目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.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. 渲染 ...
- Unity3D学习笔记4——创建Mesh高级接口
目录 1. 概述 2. 详论 3. 其他 4. 参考 1. 概述 在文章Unity3D学习笔记2--绘制一个带纹理的面中使用代码的方式创建了一个Mesh,不过这套接口在Unity中被称为简单接口.与其 ...
- Unity3D学习笔记6——GPU实例化(1)
目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成两次 ...
- Unity3D学习笔记7——GPU实例化(2)
目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在上一篇文章<Unity3D学习笔记6--GPU实例化(1)>详细介绍了Unity3d中GPU实例化的 ...
- Unity3D学习笔记8——GPU实例化(3)
目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1)&g ...
- Unity3D学习笔记12——渲染纹理
目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...
- NGUI 学习笔记实战——制作商城UI界面
http://www.cnblogs.com/chongxin/p/3876575.html Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我 ...
随机推荐
- yieId浅谈
例子:在不使用yieId时,通常我们都会采取先遍历再把元素加到新的List中 using (var reader = SqlHelper.ExecuteReader("")) { ...
- 判断ios是app第一次启动
首次运行的应用程序加入一些help 或者 宣传动画 现在变的很重要了. 一个有用的例子是发送一个分析实例.这可能是一个很好的方法来确定有多少人下载实用应用程序.有人会说:“但是,嘿,苹果AppStor ...
- CoreAnimation6-基于定时器的动画和性能调优
基于定时器的动画 定时帧 动画看起来是用来显示一段连续的运动过程,但实际上当在固定位置上展示像素的时候并不能做到这一点.一般来说这种显示都无法做到连续的移动,能做的仅仅是足够快地展示一系列静态图片,只 ...
- 给分类(Category)添加属性
遇到一个问题,写了一个分类,但原先类的属性不够用.添加一个属性,调用的时候崩溃了,说是找不到getter.setter方法.查了下文档发现,OC的分类允许给分类添加属性,但不会自动生成getter.s ...
- IO流基础加强
字节流对象:InputStream,OutputStream 缓冲字节流对象:BufferedInputStream , BufferedOutputStream 用法和字符流对象一样,但也有区别, ...
- python模块学习 logging
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...
- JavaScript学习总结【7】、JS RegExp
1.RegExp 简介 RegExp 即正则表达式(Regular Expression,在代码中常简写为 regex.regexp或RE/re/reg),就是使用单个字符串来描述.匹配一系列符合某个 ...
- JavaScript学习心得(一)
一Javascript简介 JavaScript是一种面向对象.弱类型的脚本语言!面向对象编程语言(OOP)意味着你用的几乎所有变量都是对象,对象是一种特殊的变量类型,有自己的子变量(称为属性)及函数 ...
- mysql的字段类型范围必须重视起来
在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...
- 程序集“xxx"中的类型"xxx"的方法“XXXX”没有实现
通过反射调用一个类库时出现这样的报错,检查了一下类中已经实现了此方法,实现的方法如下: public partial class LogList : DockContent, ILogForm { p ...