【Unity】8.4 扩展UnityGUI

分类:Unity、C#、VS2015 ide

建立日期:2016-04-27 函数

1、简介

有不少种方法能够补充和扩展 UnityGUI 以知足您的需求。你能够混合和建立控件,而且能够有多种方法来规定用户 GUI 输入的处理方法。 spa

2、复合控件

GUI 中可能会出现各类状况,但老是同时出现两种类型的控件。例如,你可能会使用水平滑块建立经过角色控制的屏幕(Character Creation)。此时,全部这些滑块都须要提供一个标签 (Label) 来识别,这样玩家才能知道它们是调节什么的。这种状况下,能够将 GUI.Label() 的每一个调用与 GUI.HorizontalSlider() 的调用配对,或者建立一个同时包含标签和滑块的复合控件 (Compound Control) 。 code

例如: blog

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    private float mySlider = 1.0f;

    void OnGUI () {
        mySlider = LabelSlider (new Rect (10, 100, 100, 20), mySlider, 5.0f, "Label text here");
    }

    float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText) {
        GUI.Label (screenRect, labelText);

        // <- 将滑块推至标签末端
        screenRect.x += screenRect.width; 

        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }
}

效果以下:get

image

在这个示例中,调用 LabelSlider() 并传递正确的参数将使标签 (Label) 与水平滑动条 (Horizontal Slider) 配对。编写复合控件 (Compound Controls) 时,请务必记住在函数结束时返回正确的值以使其交互。 string

3、静态复合控件

使用静态 (Static) 函数,你能够为本身建立完备的复合控件集。这样你就不须要在同一脚本中使用函数时声明此函数。 it

using UnityEngine;
using System.Collections;
public class CompoundControls : MonoBehaviour
{
public static float LabelSlider (Rect screenRect, float sliderValue, float sliderMaxValue, string labelText)
{
        GUI.Label (screenRect, labelText);
        //将滑块推至标签末端
        screenRect.x += screenRect.width; 
        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }
}

经过将上述示例保存至 CompoundControls 脚本,只需简单地键入 CompoundControls.LabelSlider() 并提供变量,就能够从其余任何脚本中调用 LabelSlider()。 io

4、复杂的复合控件

你还能够将复合控件 (Compound Controls) 变得更具创造力。即让它们按照你喜欢的方式排列和分组。下面的C#代码示例建立一个可以重复使用的 RGB 滑块: class

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    public Color myColor;

    void OnGUI () {
        myColor = RGBSlider (new Rect (10,10,200,10), myColor);
    }

    Color RGBSlider (Rect screenRect, Color rgb) {
        rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0f, 1.0f);

        // <- 将下个控件向下移动一点以免重叠
        screenRect.y += 20; 
        rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0f, 1.0f);

        // <- 将下个控件向下移动一点以免重叠
        screenRect.y += 20; 

        rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0f, 1.0f);
        return rgb;
    }
}

效果以下:

image

为了展现复合控件如何在其余复合控件中使用,如今让咱们在它们各自上方建立复合控件。为此,咱们将像上面那样建立一个新的 RGB 滑块,但使用“标签滑块”(LabelSlider) 来实现。这样就总有一个标签使咱们能够分辨出哪一个滑块对应哪一种颜色:

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour {

    public Color myColor;

    void OnGUI () {
        myColor = RGBSlider (new Rect (10,10,200,30), myColor);
    }

    Color RGBSlider (Rect screenRect, Color rgb) {
        rgb.r =  CompoundControls.LabelSlider (screenRect, rgb.r, 1.0f, "Red");

        // 将下个控件向下移动一点以免重叠
        screenRect.y += 20; 
        rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0f, "Green");

        // 将下个控件向下移动一点以免重叠
        screenRect.y += 20; 

        rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0f, "Blue");

        return rgb;
    }    
}

这段代码的效果以下:

image
相关文章
相关标签/搜索