유니티는 'OnGUI()'를 작성해서 호출되면 GUI표시됩니다.
근데 유니티에는 GUI 관련 플러그인이 많아서 그런지 다른 자료들이 뒤섞여 있어서 정작 필요한 자료 찾기가 힘들었다는 문제가 ㅎㅎㅎ
먼저 스크립트 파일을 하나 만들어서 다음과 같이 작성합니다.
using UnityEngine;
using System.Collections;
public class claGUI : MonoBehaviour
{
private int m_nCount = 0;
private TextMesh m_tmText;
void Start ()
{
m_tmText = (TextMesh)GameObject.Find("txtCount").GetComponent(typeof(TextMesh));
}
void OnGUI()
{
if (GUI.Button(new Rect(0
, 0
, 60
, 30)
, "버튼"))
{
//버튼 클릭시 작동할 코드.
++m_nCount;
//Text 출력.
m_tmText.text = "Count = " + m_nCount;
}
}
}
'OnGUI()'에 'GUI' 클래스의 메소드를 이용하여 GUI에 UI를 추가 할 수 있습니다.
(참고 : 유니티 스크립트 레퍼런스 - GUI )
버튼과 같이 피드백이 있는 UI의 경우 위에 코드처럼 'if'문을 이용하여 클릭 시 적용될 코드를 만들 수 있습니다.
보통 GUI는 시작부터 계속 표시되어야 하므로 메인 카메라에 스크립트를 추가합니다.
테스트해보면 게임 스크린에만 GUI가 표시되는 것을 알 수 있습니다.
거기다 스크립트로 GUI를 구성하다 보니 빌드 타임에서는 GUI를 볼 수 없습니다.
GUI가 보이는 화면의 크기는 3D 공간이 아니기 때문에 크기가 언제나 일정합니다.
이 일정하다는 의미는 화면에 보이는 영역을 말하는 것이죠.
그러니 GUI를 배치하기 위해서 화면의 정보가 필요합니다.
화면의 정보는 'Screen'로 받아 올 수 있습니다.
'Screen'를 이용하여 4개의 변의 중앙에 버튼을 배치해 봅시다.
using UnityEngine;
using System.Collections;
public class claGUI : MonoBehaviour
{
private int m_nCount = 0;
private TextMesh m_tmText;
void Start ()
{
m_tmText = (TextMesh)GameObject.Find("txtCount").GetComponent(typeof(TextMesh));
}
void OnGUI()
{
//레프트 버튼.
if (GUI.Button(new Rect(0
, (Screen.height / 2)
, 30
, 30)
, "◀"))
{
m_tmText.text = "◀";
}
//업버튼.
if (GUI.Button(new Rect(Screen.width / 2
, 0
, 30
, 30)
, "▲"))
{
m_tmText.text = "▲";
}
//라이트버튼.
if (GUI.Button(new Rect(Screen.width - 30
, (Screen.height / 2)
, 30
, 30)
, "▶"))
{
m_tmText.text = "▶";
}
//다운버튼.
if (GUI.Button(new Rect((Screen.width / 2)
, Screen.height - 30
, 30
, 30)
, "▼"))
{
m_tmText.text = "▼";
}
}
}
이 코드를 적용하면 화면크기가 어떻든 화면크기에 비례해서 버튼이 자리를 잡습니다.
코드를 테스트해봅시다.
스킨기능이라든가 GUI 오브젝트들 사용법 같은 것들은 다른 포스팅에서 설명하도록 하죠 ㅎㅎㅎ
원래 이 포스팅의 목적은 GUI 작성 자체이기 때문입니다.
전체 소스입니다.