LambFerret's Blog
#5 <스크립트 만들기 - 3 레벨 디자인> 본문
만들어야 하는 상호작용
이동점프사다리- 피격 -> 패배
- 점수 -> 승리
- 적 이동
이제 너굴맨의 행동에 관한것들은 다 만들었다. 그렇다면 이제 게임이 완료되게 만들어 보자
우선 너구리는 적에 한번만 닿아도 죽는다. 또한 계속 죽어서 목숨을 다 쓰는 것이 패배조건이다. 반대로 승리조건은 레벨 내의 점수 아이템을 다 먹게되면 승리하여 다음 스테이지로 넘어가게 된다. 이러한 것들은 게임 UI로 보게 만들어보자. 다행히도 유니티 내에는 내장 UI 모듈들이 있다. 우선은 맨 윗줄에 이걸 적어 넣는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
본인은 이걸 써넣는데에도 엄청난 고생을 하였다. using UnityEngine.UI; 가 제대로 되지 않았기 때문

구글링해서 찾아본 결과 Edit - Preferences - External Tools에 스크립트 에디터를 비쥬얼스튜디오로 하지않았는지 확인하라더라.. 대부분의 케이스에서는 도움이 되는 해답이었겠지만 내 케이스는 아니었다.
이후 많은 방법을 찾아보았지만 궁극적으로 다시 깔아야 한다는 해결법 밖에 없길래 포기하려던 때에 혹시나 하는 마음에 프로젝트 폴더를 정리하였다.

프로젝트 폴더 내에서 폴더들을 제외하고 .vsconfig부터 끝까지 다 지운 후 다시 기동해보았을때 제대로 되었다. 혹시라도 고생하신분 계시면 참고가 되었길 바란다. 아마도 유니티와 비쥬얼스튜디오간의 버전을 잘못 설치하여 이 사단이 난것같다.
using UnityEngine.UI; 을 오류없이 적었을 경우 이제 UI관련 모듈들을 사용할 수 있게 되었다. 이제 나는 이 UI 부분에
목숨, 목숨이 0이라면 게임오버 텍스트, 점수, 점수를 다 먹었다면 게임클리어 텍스트
를 띄우고 싶다.

Hierarchy 에 오른쪽 클릭을 하면 UI-Text를 고를 수 있다. Life, Score, Game over여부 이렇게 세개를 만들어보겠다.

처음에는 무척 당황스러웠다. 커다란 네모는 뭐고 왜 텍스트는 내 게임 화면에 맞지않는거지 내 게임화면에 텍스트를 가져다 붙히면 실행했을때 표기되지 않는다. 몇번의 시행착오를 거친 결과 저 커다란 네모박스에 내 화면이 기준이 된다는 것을 알았다. 위와 같이 텍스트를 배치하면

이쁘지는 않지만 위치는 정확히 원하는 곳에 갔다. text를 처음 만들었을때 Inspector에서 txt를 넣을 수 있다. 하지만 결국에는 스크립트 내에서 제어하게 되므로 표지용 텍스트를 적어두기만 하면 된다. 이제 스크립트를 보자
public class LevelDesign : MonoBehaviour
{
private int myScore;
private int Life;
private Text scoreUI;
private Text lifeUI;
void Start()
{
scoreUI = GameObject.Find("score").GetComponent<Text>();
lifeUI = GameObject.Find("Life").GetComponent<Text>();
}
void Update()
{
myScore = GameObject.Find("NeogulMan").GetComponent<PlayerMovement>().score;
Life = GameObject.Find("NeogulMan").GetComponent<PlayerMovement>().Life;
scoreUI.text = "score! : " + myScore;
lifeUI.text = "life! : " + Life;
if (Life == 0)
{
GameObject.Find("gameover").GetComponent<Text>().text = "GAME OVER";
}
}
}
Text는 UI내 클래스이다. 이를 처음에 초기화하고 Start메소드에서 scoreUI는 Text내에서 이름이 score인 게임오브젝트를 알려준다. 우리는 이러한 텍스트가 게임 내내 나오면서 실시간으로 바뀌길 원하기에 Update안에서 행동하는데 눈여겨볼 부분은 이곳이다.
myScore = GameObject.Find("NeogulMan").GetComponent<PlayerMovement>().score;
PlayerMovement 스크립트 내에서 이름이 NeogulMan이라는 게임오브젝트를 찾아 score변수를 가지고 온다. 이를 myScore에 저장하겠다.
다른 스크립트에 저장된 변수를 가지고 오는 방법이다. 언제든 유용하게 써먹을 수 있는 방법이라고 생각한다. 이렇게 scoreUI.text에 넣고싶은 String을 넣으면 비로소 UI에 원하는 텍스트가 뜨게 된다. 쉽다. 텍스트에 조건을 넣고싶다면 밑의 if절마냥 넣어주면 쉽게 끝난다.


UI위치 찾는데에서 전구운 시간과 모듈을 사용하는것 자체에 들인 시간을 고려하고도 빨리 끝났다. 역시 쉬운파트는 재밌는데 짧다.
다음 포스트에서는 스크립트 부분의 마지막으로 적유닛의 AI를 짜보도록 하겠다.
'게임 개발 > #1 너구리 (2D 플랫포머)' 카테고리의 다른 글
#6 <스크립트 만들기 - 4 몬스터 AI> (0) | 2021.07.19 |
---|---|
#4 <스크립트 만들기 - 2 사다리> (0) | 2021.07.18 |
#3 <스크립트 만들기 - 1 이동, 점프> (0) | 2021.07.14 |
#2 <애니메이션 만들기> (0) | 2021.07.12 |
#1 <2D 플랫포머 맵 제작> (0) | 2021.07.08 |