大家在放不同UI到root里面的时候,可能会发现一个问题,有时候一些UI会莫名其妙的移动位置。导致原本已经排好对齐的UI又乱了。

这时候就要用到NGUI的anchor脚本了,这个脚步用的是非常普遍的。

Anchor简单点来说是实现GUI的对齐功能的。

我已前一章做的登录界面为例

上面可以看到我已经为每个UI都添加了一个UIAnchor脚步。可以在菜单栏添加,也可以在inspector的addcomponent里,如下图

下面我们来看看anchor的脚步参数

其中Container如果你不设置的话,默认是以上面的UICamera为对齐目标。如果设置了container。就如我上面设置了container是sprite。

也就是我登录界面的背景。那他后面的offset设置将会以sprite为目标来移动。

Side的意思就是中心点,分上下左右等8个中心点。大家可以自己调试下。

Relative Offset是相对位移。从最左边移到最右边x的值改变只是从0到1。

而pixel Offset是像素位移。以像素值移动。

说了那么多,实践才是真理啊。

还有一个带有UISprite脚步的都会有这个


也是anchor的一种。后面四个参数的意思是

Target's Left的意思是左边边界以UIRoot的左边为准,加上100个像素。无论你窗口怎么变化,这个sprite的四个边界始终距离Root的四个边界为100,-50,100,-50.。

(不知说得大家明白不,还是自己测试下就知道了。请见谅。。。。。)

大家可以试着加label,button,sprite等UI。


按钮事件脚步
创建一个脚步名为UIDataHandler.cs。脚步代码如下

using UnityEngine;
using System.Collections;
 
public class UIDataHandler : MonoBehaviour
{
    public UIInput nameInput;
    public UIInput psInput;
    public GameObject loginBtn;
    public GameObject registerBtn;
    public UILabel tipLabel;
 
        void Start ()
    {
            //侦听按钮事件
        UIEventListener.Get(loginBtn).onClick = clickHandler;
        UIEventListener.Get(registerBtn).onClick = clickHandler;
        }
         
    void clickHandler(GameObject go)
    {
 
        if(go.name=="loginButton")
        {
            Debug.Log("登录:" + nameInput.label.text + "," + psInput.label.text);
            tipLabel.text = "用户名:" + nameInput.label.text + ",密码:" + psInput.label.text;
             
        }
        if (go.name == "registerButton")
        {
            Debug.Log("注册:"+nameInput.label.text + "," + psInput.label.text);
            tipLabel.text = "用户名:" + nameInput.label.text + ",密码:" + psInput.label.text;
        }
    }
         
        void Update ()
    {
         
        }
}


把这脚本挂载在UI Root上,然后分别给参数赋值


运行测试,忘input里写东西。点击按钮你就可以看到控制台有东西了。

有些要想要最新版本的NGUI。在这里给大家发个下载链接:


       http://pan.baidu.com/s/1nt1JtcX