250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 파이썬reference
- touchdesigner GPU
- ableton live 10
- 터치디자이너 파이썬
- 터치디자이너 timeline
- TDableton
- touchdesigner particle
- 파이썬
- touchdesinger
- 터치디자이너 참조
- 터치디자이너 python
- 터치디자이너 튜토리얼
- particleGPU
- TouchDesigner
- touchdesigner displace
- 터치디자이너 Instancing
- 터치디자이너 함수
- 파이썬 if
- 터치디자이너
- 터치디자이너 if
- 터치디자이너 클론
- 터치디자이너 오퍼레이터
- 터치디자이너 강의
- 터치디자이너 replicator
- 터치디자이너 에이블톤
- 터치디자이너 interface
- displace
- 터치디자이너 list
- 터치디자이너 reference
- 터치디자이너 인터페이스
Archives
- Today
- Total
caLAB
[유니티] 다수의 UI 캔버스 관리하기 본문
728x90
유니티 작업을 하다보면 다수의 UI캔버스를 관리해야 되는 작업을 하는 경우가 오게 된다.
예를들면 키오스크 작업이나 키오스크 작업? 이러한 것을 매우 쉽게 관리하는 간단한 방법을 정리하고자 한다.
우선 캔버스 하위에 만들고 싶은 UI캔버스를 만들어둔다. 이 다수의 캔버스는 Managers Game Object에서 활성 상태가 관리된다.
게임 오브젝트에 Active Manager 스크립트를 추가해준다.
아래 코드는 Active Manager에 관련된 코드이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class monitorActiveManager : MonoBehaviour
{
private static monitorActiveManager _instance;
public static monitorActiveManager Instance { get { return _instance; } }
public GameObject Idle;
public GameObject Guide;
public GameObject Guide2;
public GameObject CountDown;
public GameObject Black;
public GameObject Fin;
private mPageInfo CurrentPageInfo;
public int CurrentPage = 0;
void Start()
{
if (_instance == null)
{
_instance = this;
}
}
public void SetCurrentPage(mPageInfo pageInfo)
{
CurrentPageInfo = pageInfo;
CurrentPage = (int)CurrentPageInfo;
Idle.SetActive(false);
Guide.SetActive(false);
Guide2.SetActive(false);
CountDown.SetActive(false);
Black.SetActive(false);
Fin.SetActive(false);
if (CurrentPageInfo == mPageInfo.Idle)
{
Idle.SetActive(true);
}
else if (CurrentPageInfo == mPageInfo.Guide)
{
Guide.SetActive(true);
}
else if (CurrentPageInfo == mPageInfo.Guide2)
{
Guide2.SetActive(true);
}
else if (CurrentPageInfo == mPageInfo.CountDown)
{
CountDown.SetActive(true);
}
else if (CurrentPageInfo == mPageInfo.Black)
{
Black.SetActive(true);
}
else if (CurrentPageInfo == mPageInfo.Fin)
{
Fin.SetActive(true);
}
}
}
페이지에 대한 정보를 다른 곳에서 접근할 수 있도록 따로 스크립트를 생성한다.
Manager에 직접 접근해서 pageInfo를 받는 것보다. 이름만 확인할 수 있도록 빼주는 것이 더 방어적인 방식.
외부 스크립트에서 매니저에 직접 접근해서 이것저것 건드리지 못하게 하고 딱 접근해야 되는 페이지들의 이름 정보만 공개함.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum mPageInfo
{
Idle,
Guide,
Guide2,
CountDown,
Black,
Fin
}
각각의 UI에는 해당 UI에 관련된 스크립트를 만들어 준다.
특정 시간 이후 자동으로 다음 UI로 넘어가도록 작업해두었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class mIdle : MonoBehaviour
{
public float time = 3.0f;
void Start()
{
StartCoroutine("nextPage");
}
IEnumerator nextPage()
{
yield return new WaitForSeconds(time);
monitorActiveManager.Instance.SetCurrentPage(mPageInfo.Guide);
}
}
이렇게 UI작업을 하면, Manager에서 UI들의 전환을 관리하면서 기능을 분리하여 작업을 깔끔하게 진행할 수 있다.
728x90
반응형
'Unity > 유니티 개발' 카테고리의 다른 글
[유니티] OSC sender, receiver (0) | 2021.09.26 |
---|---|
[유니티] OpenCV+ Face Detection (2) | 2021.09.24 |
pinch Interaction 시뮬레이션(zoom, rotation) (0) | 2021.08.25 |
유니티 깃헙 연동해서 팀프로젝트 하기 feat. markDown글쓰기 (0) | 2021.08.24 |
screenToWorldPoint 마우스 컨트롤 위치로 gameobject움직이기 (0) | 2021.08.06 |
Comments