✔ 일반적인 오브젝트 = Transform : GameObject의 상대 위치, 회전 및 크기를 정의하기 위한 구성 요소를 가짐
✔ UI = Rect Tansform : Transform이지만 개체를 UI 요소로 관리하기 위한 추가 정보를 가지고 있음 아래 보면 Anchors / Pivot 이 추가되있는데, 각각의 정의는 아래와 같다 즉, 큰화면 / 작은화면 상관없이 동일하게 제작하기 위해 기준점을 가지고 포지션을 정한다고 할 수 있음
앵커와 피벗의 정의 (공식문서) 출처 : https://answers.unity.com/questions/1626018/what-is-the-difference-between-transform-and-rectt.html
b. ScoreText에서 Text(UI) 생성하고 Anchor 등 설정하기
0) Text를 생성하기
1) Anchor을 맞추기
min 0, 0.8 / max 1, 1
2) 크기 및 설정하기
left, top, right, bottom, position Z 0
🧡 Anchor / Anchor에 따른 Stretch 이해하기
캔버스 전체 맞추기 = 최소값 0, 최대값 1
위와같이 최소값 0, 최대값 1로 맞춘다면 캔버스 가득 앵커가 맞춰지게 됨 위의 상태에서 객체의 크기를 0으로 맞춰줘서 앵커와 동일하게 하면 아래와 같이 앵커와 크기가 동일해짐!
C. Text에 Score 스크립트 만들기
🧡 static의 개념
간단하게만 적자면, static 을 클래스 밖에서도 클래스에 접근해서 조작할 수 있음
[코드설명]
a) 제어가능한 숫자 score을 선언해 주기
b) 업데이트 함수에 score을 텍스트로 받기
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;publicclassScore : MonoBehaviour{publicstaticint score = 0; // a) voidStart(){}// Update is called once per framevoidUpdate(){GetComponent<Text>().text = score.ToString(); // b) 스코어의 텍스트를 받기}}
d. 파이프를 지나갈 때 점수 올려주는 기능 구현하기
1) 파이프 프리팹 안에 CreateEmpty(ScoreUp) 생성하기
삭제해서 Hierarchy에 없다면 프리팹에서 끌어다 가져오면 됨
2) 충돌을 감지할 Box Collider 2D를 생성하고 위치를 잡아주기
Is Trigger 체크하기
🧡 Collision, Trigger 차이점
✔ Collision 충돌해서 지나가지 못함 ✔ Trigger 관통 가능
3) 변경된 프리팹을 Apply 하고 Hierarchy에서 삭제하기
4) ScoreUp에 ScoreUp 스크립트 생성하기
[코드설명]
a) OnTriggerEnter2D: 트리거에 진입 했을 떄 발동
b) 위에서 Text에 Score스크립트에서 전역으로 선언한 score 변수를 1점씩 올림
publicclassScoreUp : MonoBehaviour{privatevoidOnTriggerEnter2D(Collider2D other){// a) Score.score++; // b) }}
5) 여기까지의 결과물
파이프가 중간부터 나오는건 이후에 수정했다 (왜 몰랐지..)
8. GameOver Scene 만들기
a. SampleScene 을 PlayScene으로 rename
b. File -> New Scene (Basic 2D) 으로 새로운 씬 생성
이름 : GameOverScene
폴더 경로 : PlayScene
c. GameOverScene 설정하기
0) Canvas 추가하기
1) Canvas -> Panel 생성하고 Panel 에 배경이미지 넣어주기
2) Color로 살짝 어둡게 설정
3) Panel안에 Image 추가해서 GameOver 생성하기
Preserve Aspect 로 비율 맞춰주기
4) Anchor로 크기 맞추기
Anchor : min 0.1, 0.8 / max 0.9, 1
Left, Top , posX 등 모두 0으로 맞추기
5) Score(text) 생성 후 Anchor, 크기 맞추기
Anchor : min 0.1, 0.7 / max 1, 0.8
Left, Top , posX 등 모두 0으로 맞추기
색상, 내용, 크기, 정렬 맞춰주기
6) 위 Score 복사 후 BestScore 생성하기
Anchor 알맞게 조절해주기
7) Button(UI) 생성하기
Anchor : min 0, 0.4 / max 1, 0.5
Left, Top , posX 등 모두 0으로 맞추기
안에 자동으로 생성되는 Text는 삭제하기
위까지 했으면 잘 저장하고 PlayScene으로 넘어가기
9. Scene 전환하기
a. Scene 전환 타이밍 알기
기본적으로, 파이프와 새가 부딪혔을때 게임이 종료되어야 함으로, 새가 가지고 있는 스크립트에 충돌 함수를 넣어주면 됨!
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;publicclassReplay : MonoBehaviour{publicvoidReplayGame(){SceneManager.LoadScene("PlayScene");}}
3) Button에 있는 On Click()에 위에서 작성한 Replay 객체를 넣어주기
4) Replay 객체가 가지고 있는 속성 ReplayGame()을 설정하기
b. CurrentScore스크립트 만들기
1) Score에 CurrentScore Script를 생성함
2) CurrentScore 작성
[코드설명]
a) 현재 사용하고 있는 텍스트를 올라가고 잇는 점수로 넣어줌
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;publicclassCurrentScore : MonoBehaviour{// Start is called before the first frame updatevoidStart(){GetComponent<Text>().text = "Score : " + Score.score.ToString(); // a)}}
c. Score 초기화, Best Score 생성하기
1) 시작할 때 점수가 유지되어서 실행되니, Start() 함수에 점수를 초기화 하는 코드를 넣어줌
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;publicclassBestScore : MonoBehaviour{// Start is called before the first frame updatevoidStart(){GetComponent<Text>().text = "BestScore : " + Score.bestScore.ToString(); // a)}}