今天我们来讲一下在Unity3D中怎样实现小地图。首先,我们来一起看看终于实现的效果:

要实现小地图效果,须要实现对于小地图和角色的绘制,所以这里须要用到OnGUI()方法,我们一起来看代码:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class CameraScript : MonoBehaviour {
  4. //定义小地图贴图
  5. public Texture MapTexture;
  6. //定义角色标志贴图
  7. public Texture PlayerTexture;
  8. //定义第三人称角色控制器
  9. private GameObject m3rdPersonControl;
  10. public GameObject BulletPos;
  11. public GameObject Bullet;
  12. //定义角色位置
  13. private float mPersonX;
  14. private float mPersonZ;
  15. //定义缩放比例
  16. private float mScale;
  17. void Start ()
  18. {
  19. //获取角色控制器
  20. m3rdPersonControl=GameObject.Find("3rd Person Controller");
  21. //获取角色位置
  22. mPersonX=m3rdPersonControl.transform.position.x;
  23. mPersonZ=m3rdPersonControl.transform.position.z;
  24. //依据小地图和屏幕计算缩放比例
  25. mScale=(200F/Screen.width)<(200F/Screen.height)?(200F/Screen.width):(200F/Screen.height);
  26. }
  27. void Update ()
  28. {
  29. //刷新角色位置
  30. mPersonX=m3rdPersonControl.transform.position.x;
  31. mPersonZ=m3rdPersonControl.transform.position.z;
  32. if(Input.GetMouseButtonDown(0))
  33. {
  34. Vector3 Target=Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y, 1));
  35. Vector3 Dir=Target-m3rdPersonControl.transform.position;
  36. Instantiate(Bullet,BulletPos.transform.position,Quaternion.identity);
  37. }
  38. }
  39. void OnGUI()
  40. {
  41. //在屏幕右上角绘制200x200的小地图贴图
  42. GUI.DrawTexture(new Rect(Screen.width-200,0,200,200),MapTexture);
  43. //以小地图左下角为原点的右手系,角色标示宽度和高度为20
  44. GUI.DrawTexture(new Rect(Screen.width-200+mPersonX*mScale+20,200-mPersonZ*mScale-20,20,20),PlayerTexture);
  45. }
  46. }

在上述代码中,我们设定小地图的宽度和高度均为200。设定角色标示物的宽度和高度均为20,并规定地图向上为正北方向。

我们在初始化方法Start()方法中获取一个角色控制器,以获取角色的位置,并依据小地图和屏幕计算出缩放比例。在OnGUI()方法中我们依据缩放比例来绘制小地图和角色标示物。

而在Update()方法中我们刷新角色的位置。这就是今天的内容啦,希望大家喜欢啊!

转载,本文出处:原文出处

最新文章

  1. .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
  2. Java 素数 prime numbers-LeetCode 204
  3. CSS三种写法的优先级
  4. val()失效
  5. 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
  6. 如何断开所有SQL Server所有的连接
  7. MySQL中利用外键实现级联删除、更新
  8. [转载]SOAPUI压力测试的参数配置
  9. Java容器类概述
  10. Eclipse遇到Initializing Java Tooling解决办法
  11. CSS3渐变(Gradients)-线性渐变
  12. android Spinner 续
  13. Linq Take和Skip详解
  14. linux C/C++开发环境搭建指南
  15. Mysql时间差计算
  16. windows -休眠
  17. JDK下载API文档
  18. Increasing Subsequence (hard version)
  19. 转 ZFC公理系统
  20. 是否应该将SAN上的SQL Server中的user database的data文件, log文件和TempDB文件放在不同的LUN上?

热门文章

  1. codeforces 522D. Closest Equals 线段树+离线
  2. js面向对象的三大特性
  3. hadoop配置及无法移动文件到hdfs故障解析
  4. The request failed with HTTP status 401: Unauthorized.
  5. RFID电子标签的二次注塑封装
  6. N bulbs(规律)
  7. weblogic的ejb远程调用
  8. Jedis中的一致性hash
  9. IOS开发新手教程(一)-数据类型和运算符
  10. WinRT Toolkit 介绍--Control篇