프로젝트/[조코딩] 플래피버드 클론 게임 개발

[조코딩] 플래피버드 클론 게임 개발 - C2 : 파이프 제작하기

순정법사 2023.02.15
더보기

강의 목차

 

A. 게임 엔진 소개

B. 유니티 설치 및 세팅 (+ VS Code)

👉 C. 플래피버드 클론 게임 개발 

D. 스마트폰 테스트

E. 플래피버드 앱 생성

F. google play 스토어 등록

G. 애드 네트워크의 개념과 애드몹(Admob)

 

C. 플래피버드 클론 게임 개발 -2

6. 파이프 장애물 만들기

a. 파이프 생성하기

아래 파이프 : pipeDown / 위 파이프 : pipeUp

 

아래에서 가져온 이미지를 복사해서 위로 옮겨줌

 

b. 파이프 그룹화 하기

Empty Object(Pipe) 생성 후 위에서 생성해준 파이프를 그룹화해줌 

 

 

+ order in layer 정리해주기 (파이프를 높이자)

 

c. 파이프 움직이는 스크립트 생성

1) 묶어준 파이프에 스크립트를 생성함 (Move)

 

 

2) VSCode를 열고 왼쪽으로 움직이는 Update함수를 작성해줌

 

[코드 설명]

 

a) Vector3.left 는 기본적으로 (-1,0,0) 으로 움직임

b) 기둥 Speed 조절 (유니티에서 조절하기)

c) deltaTime

💥 update 함수의 fps에 따른 문제점 💥

update함수는 1frame마다 실행 = fps가 높으면 더 자주 실행

deltaTime으로 해결 : deltaTime = 1/fps

 

public class Move : MonoBehaviour
{
	// b) 
    public float speed;
    void Start()
    {
        
    }

    void Update()
    {
    	// a) b) c) 
        transform.position += Vector3.left * speed * Time.deltaTime; //(-1,0,0)
    }
}

 

d. 파이프에 부딛치도록 만들기

위에서 생성한  각 파이프에 Box collider 2D를 넣어줌

 

 

e. 파이프 Prefab화 하기

1) Prefab 만들기

 

GameObject를 Assets에 끌어다 놓으면 자동으로 Prefab이 됨 (왼쪽 파란색 정육면체 아이콘) 

 

 

🍯 프리팹과 게임오브젝트의 속성 맞추기

프리펩을 Hierarchy에서 수정하게 된다면 Assets의 Pipe의 설정이 달라지게 됨
이런 경우, 코딩의 오차가 생길 수 있어 맞춰야 함!


a)를 클릭하면 아래와 같은 창이 생성되는데, 여기서 달라진 부분이 있다면  b) Apply All이 뜸
(없으면 No Overrides) b)를 클릭하면 끝!

 

2) 프리팹을 생성했다면, Hierarchy 에서 삭제해주기

 

이유 : 처음 객체부터 프리팹으로 복제할거라 없애줘야 함

 

f. Prefab 생성기 만들기

1) Create Empty (PipeGenerator) 생성하고 Script(MakePipe) 생성

 

 

2) VSCode 파이프 복제 코드 생성하기

 

이건 생성하자마자 유니티에서 바로 연결해주자

 

g. 프리팹  랜덤 복제 코드 작성하기

[코드 설명]

1) timer : fps 속도에 따른 시간 맞추기 위한 변수

     time.deltaTime이 update에 의해 더해져서 n초를 맞출 수 있음

 

2) timeDiff : 전역변수로 속도를 자유롭게 조절하기 위해 public으로 설정

 

3) timer 초기화

 

4) Instantiate() : 파이프를 복제

 

5) 파이프 생성 위치 Random하게 만들기

 

파이프를 조절했을 때 게임 화면에서 나가지 않을 정도로 만들어야 함

유니티에서 최대, 최소값을 확인 후 Random 값으로 y좌표를 수정하면 끝

 

6) 파이프 사라지게 하기

 

Destroy 함수로 삭제함. 사라질 객체, 초를 입력

 

public class MakePipe : MonoBehaviour
{

    public GameObject pipe;
    float timer = 0;    	// 1)
    public float timeDiff;	// 2)

    void Start()
    {
        
    }

    void Update()
    {

        timer += Time.deltaTime;	// 1) 
        if (timer > timeDiff){		
            GameObject newpipe = Instantiate(pipe);	// 4)
            newpipe.transform.position = new Vector3(0, Random.Range(3.12f, 0.84f), 0);	// 5)
            timer = 0;	// 3)
            Destroy(newpipe, 8.0f);	//6) 
        }
        
    }
}

 

 

 


출처 : 조코딩 유튜브