사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
[Day 5] Flappy Bird Tutorial 4
GamJia 2024. 11. 11. 21:10
오블완 챌린지 5일차
빼빼로데이이지만 친구가 없어서
가장 사랑하는 나에게
셀프 빼빼로를 사준 GamJia 입니다 어제 강의에 이어서Flappy Bird를 만들어 보겠습니다
어제 기둥 움직이고 Coroutine으로
instantiate 및 destroy 하는 과정을 진행했는데요
배경(바닥)도 움직이더라구요???
근데 바닥 X Scale이 조금 작은거 같아서
사이즈를 조금 키워줬습니다
일단 Sprite Renderer의 Draw Mode를
Simple에서 Tiled로 변경하고
width를 15로 늘려주었습니다
Rigidbody의 Auto Scaling을 활성화 해주었고
Pipe와 동일한 내용의 Ground라는 class를
만들어서 할당해주었습니다
왼쪽은 그냥 X Scale을 늘렸을 때 오른쪽은 Draw Mode를 변경하고 width를 조정했을 때
왜 그냥 X Scale을 늘리지않고
저런 방법을 썼냐면 바닥 부분의 패턴이 반복
되어있기에 이 방법을 사용하면 패턴을 유지하면서
자연스럽게 Scale을 조정할 수 있기 때문입니다
https://docs.unity3d.com/kr/2018.4/Manual/class-SpriteRenderer.html
스프라이트 렌더러 - Unity 매뉴얼
Sprite Renderer 컴포넌트는 Sprite 를 렌더링하고 스프라이트가 2D 및 3D 프로젝트의 씬에 시각적으로 표시되는 방식을 제어합니다.
docs.unity3d.com
어제 만든 Pipe Manager는 지우고
그냥 Background Manager라고 통합한
class를 하나 만들어서 넣어주었습니다
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BackgroundManager : MonoBehaviour { [SerializeField] GameObject pipe; // pipe Prefab을 지정 [SerializeField] GameObject ground; // ground Prefab을 지정 private Coroutine pipeCoroutine = null; private Coroutine groundCoroutine = null; void Start() { if (groundCoroutine == null) { groundCoroutine = StartCoroutine(SpawnGroundCoroutine()); } } void Update() { if (Input.GetMouseButton(0)) { if(pipeCoroutine==null) { pipeCoroutine = StartCoroutine(SpawnPipeCoroutine()); } } } IEnumerator SpawnPipeCoroutine() { while (true) { Vector3 spawnPosition = new Vector3(4, Random.Range(0, 2f), 0); GameObject newPipe = Instantiate(pipe, spawnPosition, Quaternion.identity, transform); Destroy(newPipe, 5f); yield return new WaitForSeconds(2.5f); } } IEnumerator SpawnGroundCoroutine() { while (true) { Vector3 spawnPosition = new Vector3(0, -4, 0); GameObject newGround = Instantiate(ground, spawnPosition, Quaternion.identity, transform); Destroy(newGround, 5f); yield return new WaitForSeconds(3f); } } }
바닥은 게임 시작 전 부터
계속 이동하지만 기둥은 화면을 한번
클릭해야 나오기 때문에
GetMouseButton을 했을 때(마우스를 클릭하고)
Pipe Spawn Coroutine이 시작 되게 해주었습니다
update에서 coroutine null 검사를 한 이유는
만약에 저걸 안하면 클릭할 때마다
coroutine이 시작되기 때문에
저게 없으면 이런 모습이 됩니다
이제 UI 작업을 위해 Canvas를 하나 만들어주겠습니다
Canvas 설정은 이미지를 참고해주세요
Canvas에는 UIManager라는 class를 만들어서
연결해주도록 하겠습니다
빈 Image Object를 만들어서 로고 Sprite를
연결했는데.. 뭔가 좀 이상하죠??
그럴 때는 Image의 Set Native Size를
클릭해주면 원래 비율로 돌아온답니다
그리고 보니까 원작의 Text에는
저렇게 Outline이 있더라구요
그래서 Legacy Text가 아니고
Text Mesh Pro로 작업해주겠습니다
Legacy Text에는 Outline 속성이 없습니다
근데 분명 제일 처음에 font를 다운로드 받아서
폴더에 넣어놨음에도 불구하고
다운로드 받은 폰트가 안 보이는데요
TextMeshPro용 폰트로 변환을 하지 않았기 때문입니다
Window / TextMeshPro / Font Asset Creator 들어가서
원하는 폰트를 넣고 Generate Font Altas를
클릭해준 다음 저장하면 됩니다
저장한 폰트와 Wrapping 설정을 변경해주고
밑에 있는 Extra Setting에서
Outline의 Thickness를 1로 설정해주겠습니다
오늘은 여기까지 하고
GitHub에 Commit하는걸로
마무리 하겠습니다!
벌써 내일 Flappy Bird의
마지막 강의날이네요!
이제 거의 다 왔으니
조금만 더 힘내주세요
감사합니다!!