Unity 간단 한 UI 프레임 워 크
/*
SIKI UI , json , , , :
1、 json 2、 。 , UIPanelPath ,
Resources UI
*/
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
///
/// UI ,
///
public class UIManager{
private static UIManager instance;
public static UIManager Instance
{
get
{
if (instance==null)
{
instance = new UIManager();
}
return instance;
}
}
private UIManager()
{
Init();
}
private Transform canvasTransform;
private Transform CanvasTransform
{
get
{
if (canvasTransform==null)
{
canvasTransform = GameObject.Find("Canvas").transform;
}
return canvasTransform;
}
}
private Dictionary panelDict; //
private Stack panelStack; //
///
///
///
private BasePanel GetPanel(string panelPath)
{
BasePanel panel;
panelDict.TryGetValue(panelPath, out panel);
if (panel==null)
{
GameObject insObj = GameObject.Instantiate(Resources.Load(panelPath)) as GameObject;
insObj.transform.SetParent(CanvasTransform, false);
BasePanel basePanel = insObj.GetComponent();
panelDict.Add(panelPath, basePanel);
return basePanel;
}
else
{
return panel;
}
}
///
///
///
private void Init()
{
if (panelDict == null)
panelDict = new Dictionary();
if (panelStack == null)
panelStack = new Stack();
}
///
/// ,
///
///
public void PushPanel(string panelPath)
{
if (panelStack.Count > 0)
{
BasePanel topPanel = panelStack.Peek();
topPanel.OnPause();
}
BasePanel panel = GetPanel(panelPath);
panel.OnEnter();
panelStack.Push(panel);
}
///
/// ,
///
public void PopPanel()
{
if (panelStack.Count <= 0) return;
BasePanel topPanel = panelStack.Pop();
topPanel.OnExit();
if (panelStack.Count <= 0) return;
BasePanel nextPanel = panelStack.Peek();
nextPanel.OnResume();
}
}
using UnityEngine;
using System.Collections;
///
/// Resources UI ,
///
public class UIPanelPath {
public const string MAINUIPANEL = "UIPanel/MainUIPanel";
public const string MISSIONCHANGEPANEL = "UIPanel/MissionChangePanel";
}
using UnityEngine;
using System.Collections;
///
/// , ,
///
public class BasePanel : MonoBehaviour {
// CanvasGroup ,
protected CanvasGroup canvasGroup;
public virtual void Awake()
{
canvasGroup = GetComponent();
}
///
///
///
public virtual void OnEnter()
{
}
///
///
///
public virtual void OnPause()
{
}
///
///
///
public virtual void OnResume()
{
}
///
///
///
public virtual void OnExit()
{
}
}
using UnityEngine;
using System.Collections;
///
///
///
public class FrameworkStart : MonoBehaviour {
void Start ()
{
UIManager.Instance.PushPanel(UIPanelPath.MAINUIPANEL);
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class MainUIPanel : BasePanel {
[SerializeField]
private Button missileButton;
[SerializeField]
private Button satelliteButton;
[SerializeField]
private Button spaceportButton;
private void Start()
{
missileButton.onClick.AddListener(OnClickMissileButton);
satelliteButton.onClick.AddListener(OnClickSatelliteButton);
spaceportButton.onClick.AddListener(OnClickSpaceportButton);
}
///
///
///
private void OnClickMissileButton()
{
Debug.Log(" ");
}
///
///
///
private void OnClickSatelliteButton()
{
Debug.Log(" ");
}
///
///
///
private void OnClickSpaceportButton()
{
UIManager.Instance.PushPanel(UIPanelPath.MISSIONCHANGEPANEL);
}
public override void OnPause()
{
canvasGroup.alpha = 0;
}
public override void OnResume()
{
canvasGroup.alpha = 1;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
UGUI 커널 탐구(一) EventSystem이름은 크게 지었지만 실제로 이벤트시스템이 클릭, 키보드 입력, 터치 등 이벤트를 처리하고 관리하는 것이기 때문에 이벤트 시스템인 Input 이벤트시스템이 되는 것이 적절하다. 시스템 입력 모듈표와 현재 입력 모듈....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.