JPG PNG BMP GIF 3 MB
GUI Skin (IMGUI System)

JPG PNG BMP GIF 3 MB

Ada sejumlah cara untuk memanfaatkan dan memperluas sistem IMGUI untuk memenuhi kebutuhan Anda. Kontrol dapat dicampur dan dibuat, dan Anda memiliki banyak leverage dalam menentukan bagaimana input pengguna ke GUI diproses.

Kontrol Senyawa

Mungkin ada situasi di GUI Anda di mana dua jenis kontrol selalu muncul bersama. Misalnya, mungkin Anda membuat layar Penciptaan Karakter, dengan beberapa Slider Horizontal. Semua Slider tersebut membutuhkan Label untuk mengidentifikasi mereka, sehingga pemain tahu apa yang mereka sediakan. Dalam kasus ini, Anda dapat bermitra setiap panggilan ke GUI.Label() dengan panggilan ke GUI.HorizontalSlider(), atau Anda dapat membuat Compound Control yang mencakup kedua Label dan Slider bersama.

/* Label and Slider Compound Control */


// JavaScript
var mySlider : float = 1.0;

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

function LabelSlider (screenRect : Rect, sliderValue : float, sliderMaxValue : float, labelText : String) : float {
    GUI.Label (screenRect, labelText);
    screenRect.x += screenRect.width; // <- Push the Slider to the end of the Label
    sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0, sliderMaxValue);
    return sliderValue;
}


// C#
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);
    
        // <- Push the Slider to the end of the Label
        screenRect.x += screenRect.width; 
    
        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }

}


Dalam contoh ini, memanggil LabelSlider() dan melewati argumen yang benar akan memberikan Label dipasangkan dengan Slider Horizontal. Ketika menulis Kontrol Senyawa, Anda harus ingat untuk mengembalikan nilai yang benar pada akhir fungsi untuk membuatnya interaktif.

The above Compound Control always creates this pair of Controls
Kontrol Senyawa di atas selalu menciptakan sepasang kontrol ini

Kontrol Senyawa Statis

Dengan menggunakan fungsi Static, Anda dapat membuat seluruh koleksi Kendali Senyawa Anda sendiri yang mandiri. Cara ini, Anda tidak harus menyatakan fungsi Anda dalam skrip yang sama yang ingin Anda gunakan.

/* This script is called CompoundControls */


// JavaScript
static function LabelSlider (screenRect : Rect, sliderValue : float, sliderMaxValue : float, labelText : String) : float {
    GUI.Label (screenRect, labelText);
    screenRect.x += screenRect.width; // <- Push the Slider to the end of the Label
    sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0, sliderMaxValue);
    return sliderValue;
}


// C#
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);
    
        // <- Push the Slider to the end of the Label
        screenRect.x += screenRect.width; 
    
        sliderValue = GUI.HorizontalSlider (screenRect, sliderValue, 0.0f, sliderMaxValue);
        return sliderValue;
    }

}


Dengan menyimpan contoh di atas dalam skrip yang disebut CompoundControls, Anda dapat memanggil fungsi LabelSlider() dari skrip lain hanya mengetik CompoundControls.LabelSlider() dan memberikan argumen Anda.

Kontrol Senyawa Elaborate

Anda bisa mendapatkan sangat kreatif dengan Kontrol Senyawa. Mereka dapat diatur dan dikelompokkan dengan cara apa pun yang Anda sukai. Contoh berikut menciptakan RGB Slider yang dapat digunakan kembali.

/* RGB Slider Compound Control */


// JavaScript
var myColor : Color;

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

function RGBSlider (screenRect : Rect, rgb : Color) : Color {
    rgb.r = GUI.HorizontalSlider (screenRect, rgb.r, 0.0, 1.0);
    screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping
    rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0, 1.0);
    screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping
    rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0, 1.0);
    return rgb;
}


// C#
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);
    
        // <- Move the next control down a bit to avoid overlapping
        screenRect.y += 20; 
        rgb.g = GUI.HorizontalSlider (screenRect, rgb.g, 0.0f, 1.0f);
    
        // <- Move the next control down a bit to avoid overlapping
        screenRect.y += 20; 
    
        rgb.b = GUI.HorizontalSlider (screenRect, rgb.b, 0.0f, 1.0f);
        return rgb;
    }
}


The RGB Slider created by the example above
RGB Slider dibuat oleh contoh di atas

Sekarang mari kita membangun Kontrol Senyawa di atas satu sama lain, untuk menunjukkan bagaimana Kontrol Senyawa dapat digunakan dalam Kontrol Senyawa lainnya. Untuk melakukan ini, kami akan membuat RGB Slider baru seperti yang di atas, tetapi kami akan menggunakan LabelSlider untuk melakukannya. Cara ini kita akan selalu memiliki Label memberitahu kami yang slider sesuai dengan warna mana.

/* RGB Label Slider Compound Control */


// JavaScript
var myColor : Color;

function OnGUI () {
    myColor = RGBLabelSlider (Rect (10,10,200,20), myColor);
}

function RGBLabelSlider (screenRect : Rect, rgb : Color) : Color {
    rgb.r = CompoundControls.LabelSlider (screenRect, rgb.r, 1.0, "Red");
    screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping
    rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0, "Green");
    screenRect.y += 20; // <- Move the next control down a bit to avoid overlapping
    rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0, "Blue");
    return rgb;
}


// C#
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");
    
        // <- Move the next control down a bit to avoid overlapping
        screenRect.y += 20; 
        rgb.g = CompoundControls.LabelSlider (screenRect, rgb.g, 1.0f, "Green");
    
        // <- Move the next control down a bit to avoid overlapping
        screenRect.y += 20; 
    
        rgb.b = CompoundControls.LabelSlider (screenRect, rgb.b, 1.0f, "Blue");
        
        return rgb;
    }   
    
}


The Compound RGB Label Slider created by the above code
The Compound RGB Label Slider dibuat oleh kode di atas
JPG PNG BMP GIF 3 MB
GUI Skin (IMGUI System)