NGUI系列教程五(角色信息跟随)
在一些网络游戏中,我们常常可以看到角色的上方显示着角色的名称,等级,血量等信息。它们可以跟随角色移动,并且可以显示和隐藏。今天我们就来学习一下这些功能的实现方法。
1. 新建unity工 程,导入NGUI插件。对于字体按钮等的制作方法参见以前的系列教程。这里我们直接开始学习制作方法。首先新建一个2DUI,设置UI的层为NGUI。新 建完成后,使用菜单NGUI -->Create a Panel ,在现有Panel的节点下新建一个Panel,命名为Panel_CharacterInfo,作为角色信息面板的根节点。使用Widget Tool创建两个Label,一个命名为Name,另一个为Life。再创建一个Progress Bar,用于显示角色的血量信息。在创建一个建立完成后场景中视图列表如图:

2. 场景设置,现在我们新建一个Plane作为地面,新建一个PointLight用于场景照明,然后再新建一个Cube,作为我们的角色。场景设置如图

3. 为cube添加角色控制器。首先导入角色控制Package。在工程窗口中点击右键,选择ImportPackage,选择 Character Controller。该包包括两个角色控制器,我们先把Cube自带的BoxCollider删除,然后为它添加 FPSInputController,CharacterMotor两个脚本。就完成Cube的角色设置了,点击运行,按下键盘的方向键可以看 到,Cube可以根据我们的按键左右移动。
4.编写UI跟随角色控制脚本脚本。对于实现方法,我们可以有以下思路。首先我们想要清楚,我们想要实现的是UI跟随Cube移动。这里我们就要考 虑,UI要得到Cube在屏幕上的坐标位置。然后再根据位置做相应的移动。我们知道在Unity中,Camera. WorldToScreenPoint和Camera. ScreenToWorldPoint可以分别将世界坐标和屏幕坐标相互转换。有了思路我们就可以动手写代码。代码比较简单,我已经在后面注释了,大家可 以一目了然。
using UnityEngine;
using System.Collections; public class UIFollowTarget : MonoBehaviour
{
public GameObject TargetObject; //目标物体。这里是指Cube
public Camera worldcamera; //世界相机。
public Camera guiCamera; //UI相机
// Use this for initialization
void Start()
{
worldcamera = NGUITools.FindCameraForLayer(TargetObject.layer); //这里是通过物体的层获得相应层上的相机
guiCamera = NGUITools.FindCameraForLayer(this.gameObject.layer); //通过脚本所在物体的层获得相应层上的相机
} // Update is called once per frame
void Update()
{ }
void LateUpdate()
{
Vector3 pos = worldcamera.WorldToScreenPoint(TargetObject.transform.position); //获取目标物体的屏幕坐标
pos = guiCamera.ScreenToWorldPoint(pos); //将屏幕坐标转换为UI的世界坐标
pos.z = ; //由于NGUI 2D界面的Z轴都为0,这里我们将坐标修改为0.只取其X,Y坐标。
transform.position = pos; //将修改过的坐标赋给UI界面。这里指Panel_CharacterInfo
}
}
5. 将脚本赋给Panel_CharacterInfo,设置目标物体为Cube,Worldcamera为Main Camera,guicamera设置为NGUI的Camera。完成后点击运行,我们可以看到,UI已经在跟随物体移动了。

6. 当场景中有很多角色的时候,我们可能有时候只想看我们选中的角色的信息。没有选中的就隐藏,这样的功能大家可以在熟悉了这些之后自己实现。这里提供一个思 路供大家参考:首先定义一个角色信息的类,然后根据当前选择的角色,读取该角色的信息,赋值给UI里的Name life等参数。并且赋值角色的位置信息给UI,这样UI就可以动态的显示在响应角色的位置上。
声明: 本文由(zqcyou)原创编译,转载请保留链接: NGUI系列教程五(角色信息跟随)
NGUI系列教程五(角色信息跟随)的更多相关文章
- CRL快速开发框架系列教程五(使用缓存)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- Android Studio系列教程五--Gradle命令详解与导入第三方包
Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...
- NGUI系列教程四(自定义Atlas,Font)
今天我们来看一下怎么自定义NGUIAtlas,制作属于自己风格的UI.第一部分:自定义 Atlas1 . 首先我们要准备一些图标素材,也就是我们的UI素材,将其导入到unity工程中.2. 全选我们需 ...
- NGUI系列教程三
接下来我们再来看Progress Bar和Slider,对比参数我们可以发现,Progress Bar和slider的明显区别在于slider多一个Thumb选项,这里的Thumb就是我们拖动的时候点 ...
- NGUI系列教程二
接下来我们创建一个Label,NGUI->Open the Widget Wizard,打开widgetTool对话框,在Template中选择Label,确定AddTo右侧选项为panel,点 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...
- (转)NGUI系列教程七(序列帧动画UITexture 和 UIsprit)
NGUI系列教程七(序列帧动画) 今天我给大家讲一下如何使用NGUI做序列帧动画.本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画.废话不说了,下面开始.还 ...
- NGUI系列教程七(序列帧动画)
今天我给大家讲一下如何使用NGUI做序列帧动画.本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画.废话不说了,下面开始.还要在啰嗦一句,首先大家要准备一些序列帧 ...
随机推荐
- void及void指针含义的深刻解析
http://blog.csdn.net/geekcome/article/details/6249151 ----------- void的含义 void即“无类型”,void *则为“无类型指针” ...
- Excel导入导出帮助类
/// <summary> /// Excel导入导出帮助类 /// 记得引入 NPOI /// 下载地址 http://npoi.codeplex.com/rele ...
- maven打包技巧
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package/ "打包"这个词听起来比较土,比较正式的说法应该是"构建 ...
- ubuntu 12.04 lts安装golang并设置vim语法高亮
安装golang sudo apt-get install golang 设置vim语法高亮 sudo apt-get install vim-gocomplete gocode vim-syntax ...
- c# 单例模式[Singleton]之深夜闲聊
都有点记不起认识单例模式(也有叫单件模式的)是在什么时候了,有时候东西认多了不常用的话也经常抛之脑后甚至逐渐从大脑里被移除.不闲扯了,直接入正题吧. 什么是单例模式? 保证在整个应用程序的生命周期中, ...
- iss 防火墙
控制面板\系统和安全\Windows 防火墙\允许的程序 如下图 将万维网服务(HTTP)打勾即可访问你的网站. 转自:http://bbs.pcbeta.com/viewthread-604506- ...
- ###《High-level event recognition in unconstrained videos》
Author: Yu-Gang Jiang, Shih-Fu Chang 事件检测的目标就是自动识别给定视频序列中的感兴趣事件.进行视频事件检测通常很困难,特别是在网络中非限制的视频.在非限制情况下, ...
- [.Net MVC] 使用 log4net 日志框架
项目:后台管理平台 意义:项目开发中提出增加日志功能,对关键的操作.程序运行中的错误信息进行记录,这对程序部署后的调试有很大意义. 注:本文只是对网上搜集的信息进行了整合,以备今后查询. 关键字:.N ...
- 工厂方法(Factory Pattern)
工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类.(注:“决定”不是指模式允许子类本身在运行时做决定,而是指在编写创建者类时,不需要知道实际 ...
- 使用Notepad++将多行数据合并成一行
1.按Ctrl+F,弹出“替换”的窗口: 2.选择“替换”菜单: 3.“查找目标”内容输入为:\r\n: 4.“替换为”内容为空: 5.“查找模式”选择为正则表达式: 6.设置好之后,点击“全部替换” ...