关于ngui角色信息跟随我们其实要学习很多的知识。因为在一些网络游戏中,我们就常常可以看到角色的上方显示着角色的名称,等级,血量等信息。它们可以跟随角色移动,并且可以显示和隐藏。所以今天我们就来学习一下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,作为我们的角色。场景设置如图
4. 编写UI跟随角色控制脚本脚本。对于实现方法,我们可以有以下思路。首先我们想要清楚,我们想要实现的是UI跟随Cube移动。这里我们就要考 虑,UI要得到Cube在屏幕上的坐标位置。然后再根据位置做相应的移动。我们知道在Unity中,Camera. WorldToScreenPoint和Camera. ScreenToWorldPoint可以分别将世界坐标和屏幕坐标相互转换。有了思路我们就可以动手写代码。代码比较简单,我已经在后面注释了,大家可 以一目了然。
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 = 0; //由于NGUI 2D界面的Z轴都为0,这里我们将坐标修改为0.只取其X,Y坐标。
transform.position = pos; //将修改过的坐标赋给UI界面。这里指Panel_CharacterInfo
}
}
5. 将脚本赋给Panel_CharacterInfo,设置目标物体为Cube,Worldcamera为Main Camera,guicamera设置为NGUI的Camera。完成后点击运行,我们可以看到,UI已经在跟随物体移动了。