Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

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을 조정할 수 있기 때문입니다

 

Type 설명
Simple 스프라이트를 원래 크기대로 렌더링합니다.
Sliced 9-slice 방식으로 스프라이트의 가장자리와 중앙 부분을 구분해 크기를 조정할 때 가장자리가 왜곡되지 않게 합니다. 주로 UI 요소에 사용됩니다.
Tiled 스프라이트를 타일처럼 반복해서 그려줍니다. 긴 배경이나 패턴을 만드는 데 유용합니다.

 

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의

마지막 강의날이네요!

 

이제 거의 다 왔으니

조금만 더 힘내주세요

 

감사합니다!!
 


 

'Challenge' 카테고리의 다른 글

[Day 7] Save The Dog Tutorial 1  (8) 2024.11.13
[Day 6] Flappy Bird Tutorial 5  (0) 2024.11.12
[Day 4] Flappy Bird Tutorial 3  (8) 2024.11.10
[Day 3] Flappy Bird Tutorial 2  (6) 2024.11.09
[Day 2] Flappy Bird Tutorial 1  (1) 2024.11.08