본문 바로가기

유니티 ML Agents/유니티 기초

8. 유니티 화면에 텍스트 표현하기

텍스트 객체 생성


텍스트 객체 생성


점수와 시간을 화면에 표시하기 위해서는 유니티에서 제공하는 UI(User Interface)를 사용해야 한다. UI에서 Text 객체를 사용하면 스크립트에서 점수와 시간을 구해 쉽게 화면에 표시할 수 있다. Text 객체를 생성하기 위해 계층 뷰에서 마우스 오른쪽 버튼을 클릭해 UI 항목에서 Text를 선택하자. Text 객체는 Canvas 객체의 하위 객체로 생성되며 아래에 EventSystem 객체가 함께 생성된다. Canvas EventSystem 객체에 대한 설명은 이 책에서는 생략하겠다. 이제 Text 객체의 이름은 Score라 변경한 다음 인스펙터 뷰에서 톱니바퀴 버튼을 클릭해 Reset 메뉴를 통해 텍스트 객체 위치를 초기화 하자. Game 뷰에서 확인하면 텍스트 객체가 게임 중간에 나타나는 것을 확인할 수 있다.


점수와 시간 표시


텍스트 객체 위치에 수집한 타겟의 개수(Get Count))와 게임이 시작되고 나서 경과된 시간(Time)을 표시해보자.

 

 텍스트 표현을 위한 스크립트


텍스트 표현을 위한 스크립트 생성


스크립트를 플레이어()를 컨트롤하는 PlayerController 안에 넣는다. 구체적으로 어떤 스크립트가 들어가는지 하나씩 살펴보도록 하자.


(1) Text관련 클래스를 사용하기 위해서는 UnityEngine.UI 패키지를 임포트해야 한다.


(2) 제어를 위한 클래스 변수를 선언한다. myScore는 프로젝트에서 텍스트 객체를 찾아서 저장할 변수이다. timeCount는 게임이 실행하고 지나간 시간을 저장한다. getCount는 플레이어가 수집한 타겟의 개수를 저장한다. Finish는 플레이어가 타겟을 모두 수집해서 게임 종료됐는지 여부를 저장한다. 0이면 게임이 계속 진행중이고, 1이면 게임은 종료된 것이다.


(3) GameObject 클래스는 이름으로 객체를 찾을 수 있는 Find 함수를 제공한다. “Score”이름을 가진 객체를 찾고 GetComponent 함수는 객체 내부에 있는 Text 컴포넌트를 가져온다.


(4) 게임이 실행된 후 경과한 시간은 Time.deltaTime으로 계산한다. 실제 시간과는 다소 차이가 있을 수 있지만 나중에 머신러닝을 활용했을 때 성능 향상 정도를 확인해 볼 수 있다.


(5) 플레이어가 타겟을 수집하면 getCount 변수를 1 증가시켜 준다.


(6) 프레임이 바뀔 때 마다 Update 함수에서 호출하는데 Update 함수 내부에서 텍스트 객체에 글씨를 써 주는 SetCountText 함수를 호출한다. SetCountText 함수는 지금까지 수집한 타겟의 개수와 게임이 시작된 이후 경과된 시간을 텍스트 객체에 써주는 역할을 한다.


점수와 시간 표시


게임을 시작해서 키보드 화살표 버튼을 누르면서 공을 움직여 타겟을 수집해보자. 수집된 타겟이 하나 둘씩 증가하면서 GetCount 변수도 증가한다. 8개의 모든 타겟을 수집하면 화면에 You Win 텍스트가 표시된다.


지금까지 모든 내용을 이해한 독자라면 유니티로 기본적인 게임을 만들 수 있는 수준에 이르렀다. 유니티는 어려운 게임 엔진이 아니다. 굉장히 직관적이고 쉽게 만들어져 있기 때문에 기본적인 개념만 알면 간단한 게임을 만들 수 있다. 앞으로 ML 에이전트 개념을 알아보고 기초 예제를 실행해 보면서 스스로 유니티를 활용해 머신러닝 시뮬레이션을 할 수 수준에 도달해보자. 유니티 ML 에이전트를 활용해 환경을 만들기 어려워서 또는 데이터가 없어서 할 수 없었던 머신러닝의 많은 장애물들을 넘을 수 있을 것이다.