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 做序列帧动画.废话不说了,下面开始.还要在啰嗦一句,首先大家要准备一些序列帧 ...
随机推荐
- iOS 8创建交互式通知
iOS 8提供了一个令人兴奋的新API来创建交互式通知(interactive notifications),它能让你在你的应用之外为用户提供额外的功能.我发现网上还没有关于如何实现它的比较好的示例教 ...
- .Net 与 Java 的服务接口相互调用
本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...
- ASP.NET MVC 4 Ajax上传文件
这两天一直纠结着表单的问题.想在一个表单里实现三个功能: 输入查询条件,点击查询: 导出查询数据: 上传文件: 方法有很多,乱花渐欲迷人眼,尝试了很多,无果.大致说的是,给不同按钮写js代码,在js代 ...
- eclipse创建项目时出现appcompat_v7包及解决办法
Android开发学习总结(三)--appcompat_v7项目说明 一.appcompat_v7项目说明 今天来说一下appcompat_v7项目的问题,使用eclipse创建Android项目时, ...
- AndroidStudio中安装可自动生成json实体类的jar包
第一步:安装gsonjar包, 这样gson包就下载好了.接下来安装能自动生成实体类的插件: 接下来不要忘了重启: 重启后,就可以通过自定义的快捷键 alt+shift+s来打开generate,从而 ...
- typeid关键字
这么看下去太要命了,有太多东西要学了... 而且视频看起来的确费神,费脑,费耳朵. 所以决定由视频驱动转向代码驱动.主攻vs,c++然后先把界面东西做出来,然后在想后面的东西. 所以今天 [先上来看了 ...
- c++与c不太相同的一些地方1
1.c++区别与java的一个地方:C++更多的是一种规范,不同时期的不同标准,提供了不同的语法要求.所以各个厂商在对C++的支持上也做得不尽相同,比如有些语法vs就支持gcc 就支持的差一些,而某些 ...
- jQuery实现jsonp源码分析(京东2015面试)
// Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) { // This tra ...
- 关于SWT常用组件(按钮,复选框,单选框(Button类))
Button是SWT中最常用的组件.Button类的继承关系图: Button类的构造方法是newe Button(Composite parent,int style)它有两个参数: 第一个参数:是 ...
- for循环里面的判断条件
先看下面这段代码,你很容易猜到结果 for(i=0;i<10;i++){ console.log(i); // 结果是打印出 1,2,3,4,5,6,7,8,9 } 再看一下这款代码,也许很容易 ...