默认计划
2341人加入学习
(4人评价)
【唐老狮】Unity中的UI系统之GUI
价格 ¥ 109.00
承诺服务
该课程属于 Unity3d实战就业路线课程套餐
请加入后再学习

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;

public class MainMenu : MonoBehaviour
{
    private static MainMenu instance;

    public GUIStyle gUIStyle;
    public Rect rectStartGame;
    public Rect rectExitGame;
    public Rect rectOpinions;
    public Rect backgroundPicRect;
    public bool opinionsIsSelect;
    public Texture backgroundTex;

    public Rect musicToggle;
    public Rect soundToggle;
    public bool musicToggleIsSelect;
    public bool soundToggleIsSelect;

    public Rect volumeRect;
    public GUIStyle volumeGUIStyle;
    float volume = 50f;

    AudioSource musicAudioSource;
    public AudioClip musicClip;

    private void OnGUI()
    {
        GUI.DrawTexture(backgroundPicRect, backgroundTex);

        if (GUI.Button(rectStartGame, "开始游戏", gUIStyle))
        {
            HidePannel();
            SignIn.ShowPannel();
        }
        opinionsIsSelect = GUI.Toggle(rectOpinions, opinionsIsSelect, "设置", gUIStyle);
        if (opinionsIsSelect) 
        {
            musicToggleIsSelect = GUI.Toggle(musicToggle, musicToggleIsSelect, "音乐开关", gUIStyle);
            soundToggleIsSelect = GUI.Toggle(soundToggle, soundToggleIsSelect, "音效开关", gUIStyle);
            if (musicToggleIsSelect)
            {
                musicAudioSource = this.gameObject.GetComponent<AudioSource>();
                if (musicAudioSource == null)
                {
                    musicAudioSource= this.gameObject.AddComponent<AudioSource>();
                }
                else
                {
                    musicAudioSource.clip = musicClip;
                    volume = GUI.HorizontalSlider(volumeRect, volume, 0, 1);
                    musicAudioSource.volume = volume;
                    musicAudioSource.Play();
                    musicAudioSource.loop = true;
                }
            }
            else if (musicAudioSource != null)
            {
                musicAudioSource.Stop();
            }
        }
        if (GUI.Button(rectExitGame, "结束游戏", gUIStyle))
        {
            QuitMenu.ShowPannel();
        }
    }

    private void Awake()
    {
        instance = this;
    }

    public static void ShowPannel()
    {
        instance.gameObject.SetActive(true);
    }


    public static void HidePannel()
    {
        instance.gameObject.SetActive(false);
    }
}

---------------------

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;

public class QuitMenu : MonoBehaviour
{
    Rect quitMenu = new Rect(200, 150, 200, 100);
    Rect yesQuit = new Rect(20, 40, 50, 20);
    Rect cancelQuit = new Rect(125, 40, 50, 20);

    bool inThisMenu = false;

    private static QuitMenu instance;

    private void Awake()
    {
        instance = this;
        HidePannel();
    }
    private void OnGUI()
    {
        inThisMenu = true;
        quitMenu = GUI.ModalWindow(1, quitMenu, DrawMenu, "是否退出");
    }

    void DrawMenu(int id)
    {
        switch (id)
        {
            case 1:
                if (GUI.Button(yesQuit, "退出"))
                {
                    Application.Quit();
                }
                if (GUI.Button(cancelQuit, "取消"))
                {
                    HidePannel();
                }
                GUI.DragWindow();
                break; 
        }
    }

    public static void ShowPannel()
    {
        instance.gameObject.SetActive(true);
    }

    private static void HidePannel()
    {
        instance.gameObject.SetActive(false);
    }
}
 

[展开全文]

窗口

GUI.Window(窗口ID,rect,DrawWindow委托函数,内容content/string);

第一个参数ID是窗口的唯一ID,不要和别的窗口重复

委托参数是用于绘制窗口用的函数,传入即可

如果需要添加控件,则到DrawWindow(int id)函数里面写

ID的重要作用,除了区分不同窗口,还可以在一个函数中去处理多个窗口的逻辑,通过ID去区分它们,用switch实现

 

模态窗口

让其他控件不再有用,窗口在最上层

GUI.ModalWindow(窗口ID,rect,  DrawWindow委托函数,内容content/string);

 

拖动窗口

GUI.Window(...)   返回值是rect,需要赋值

在委托函数中调用API,GUI.DrawWindow();

重载可以限制窗口上点击拖动的范围

 

[展开全文]

授课教师

游戏开发前端主程

课程特色

视频(31)
下载资料(30)

学员动态

muqianke 加入学习
逐梦鸢行 加入学习
sszs 加入学习