2016-12-01 471 views
1

我有一个小模拟的设置脚本。Unity改变GUI颜色/滑块颜色/标签颜色

相机的BackgroundColor是黑色的。当我有一个带有标签的GUI.Horizo​​ntalSlider时,我需要更改Slidercolor。否则,你看不到它。

有人可以告诉我在哪里以及如何设置这些颜色? “ContentColor”, “BACKGROUNDCOLOR” 不工作..

我的代码:

private int planetObjectsCount = 1;   // number of objects in the next scene 
private int skyObjectsCount = 1;   // number of objects in the next scene 
private int spaceObjectsCount = 1;   // number of objects in the next scene 

private void OnGUI() 
{ 
    GUI.color = SetGUIColor(); // Give GUI Elements a default Color 

    planetObjectsCount = Mathf.RoundToInt(GUI.HorizontalSlider(GetGuiRect(Screen.width/2, Screen.height * 2/8), planetObjectsCount, 1, 300));  // The Slider Element - store the value 
    skyObjectsCount = Mathf.RoundToInt(GUI.HorizontalSlider(GetGuiRect(Screen.width/2, Screen.height * 4/8), skyObjectsCount, 1, 100));    // The Slider Element - store the value 
    spaceObjectsCount = Mathf.RoundToInt(GUI.HorizontalSlider(GetGuiRect(Screen.width/2, Screen.height * 6/8), spaceObjectsCount, 1, 100));   // The Slider Element - store the value 

    GUI.Label(GetGuiRect(Screen.width/2, Screen.height * 3/8), "Objects on the Planet: " + planetObjectsCount.ToString());   // The Label for the Slider 
    GUI.Label(GetGuiRect(Screen.width/2, Screen.height * 5/8), "Objects in the Sky: " + skyObjectsCount.ToString());    // The Label for the Slider 
    GUI.Label(GetGuiRect(Screen.width/2, Screen.height * 7/8), "Objects in Space: " + spaceObjectsCount.ToString());    // The Label for the Slider 

    if (GUI.Button(GetGuiRect(Screen.width * 0.85f, Screen.height/2), "Build"))    // Menu Button 
    { 
     PlayerPrefs.SetInt("planetObjectsCount", planetObjectsCount);     // Store the values to the PlayerPrefs 
     PlayerPrefs.SetInt("skyObjectsCount", skyObjectsCount);        // Store the values to the PlayerPrefs 
     PlayerPrefs.SetInt("spaceObjectsCount", spaceObjectsCount);      // Store the values to the PlayerPrefs 
     LoadScene("Ingame");                // Load the simulation 
    } 

    if (GUI.Button(GetGuiRect(Screen.width * 0.15f, Screen.height/2), "Back"))  // Menu Button 
    { 
     LoadScene("MainMenu");                // Back to MainMenu 
    } 
} 

internal Rect GetGuiRect(float xPos, float yPos)    // Return a Rectangle for GUI Elements 
{ 
    float rectWidth = Screen.width/5; 
    float rectHeight = Screen.height/10; 

    xPos -= rectWidth/2; 
    yPos -= rectHeight/2; 

    return new Rect(xPos, yPos, rectWidth, rectHeight); 
} 

internal Color SetGUIColor()         // Set the GUI Color 
{ 
    return Color.cyan; 
} 

回答

0

不太清楚你想要什么。 但我相信你会通过使用GUIStyleGUISkin来解决你的问题。 通过GUIStyle,您可以更改许多特性,如您将使用的字体及其颜色。所以你创建它并设置一个GUI组件来使用它。在GUILabel,例如,你可以通过GUIStyle作为第三个参数:

public static void Label(Rect position, string text, GUIStyle style); 

而且GUISkin是这些GUIStyles在所有的UI组件划分的集合,这样就可以创建一个全新的UI风格。

但是,我认为你应该知道Unity也提供了一个完整的UI system,你可以在不需要代码的情况下抽搐,坦率地说,使用OnGUI会更好。为了举例说明,下面是Unity手册的教学链接,教程如何创建SliderLabel