본문 바로가기
개발자가 되어보자..공부공부

C# 유니티 공부 14 - 2D 슈팅 게임 예제. (Prefabs 프리펩, Instantiate함수, Destroy 함수)

by 묭묭이와소담이 2022. 12. 15.
반응형

0. 핵심.. Prefabs 사용(프리펩)

- 이미지를 추가 후, 다시 Assets 창으로 옮겨주면 Prefabs 형태로 사용 가능.

- 총알 발사 등, 여러 이미지가 들어가는 경우에 이미지를 직접 삽입할 필요가 없이 효율적으로 사용 가능.

 

1. 화면 비율 조정.

- 모바일 빌드를 목표로 하였고, Aspect Ratio 9:19 비율로 제일 먼저 조정.

 

2. 비행기 움직임 및 비행기 애니메이션

3. 비행기 총알 발사

- Instantiate() 함수 이용

Instanitiate(생성되는 오브젝트 종류, 생성되는 오브젝트 위치, 생성되는 오브젝트의 회전)

- 총알이 발사되는 속도는 아래 2가지 변수로 조정.

public float MaxBulletSpeed;
public float CurBulletSpeed;

 

CurBulletSpeed는 Time.Delttime으로 시간이 실시간으로 움직이도록 하였고, MaxBulletSpeed와 같아질때마다 총알을 새로 발사하도록 하였다.

 

4. 비행기 상하좌우 이탈 방지 & 화면을 벗어난 총알 데이터 삭제.

- 상하좌우에 비행기 이탈방지용 Border (empty) 생성.

- RigidBody2D, Colider로만 이탈방지를 했을 경우에는 비행기가 나가려는 힘과 맞물려 자연스러운 모습이 연출되지 않음.

(로직으로 해결)

 

 

- 총알도 마찬가지로 Border(empty)를 생성.

- 총알은 Border에 충돌하였을 때, Destroy() 함수 실행.

 

 

5. 적 비행기 생성, 움직임, 적 총알 발사.

- 비행기 생성되는 시간, 종류를 랜덤으로 설정.

- 비행기 생성되는 시간도  MaxSpawnSpeed와 CurSpawnSpeed로 조정. (플레이어 총알 발사와 원리 동일.)

- 적 비행기 생성은 empty object 생성 후, 배열로 삽입.

- Instantiate() 함수 이용하여 배열로 삽입한 empty object에서 랜덤으로 적이 생성되게 함.

 

 

- 적 총알 발사.. 플레이어 비행기 총알 발사와 원리 동일

 

 

6. 적 타격 & 플레이어 비행기 피격

- 적 비행기의 체력은 Public 변수로 직접 조정

- 플레이어 비행기 총알도 Public 변수로 직접 조정.

- 이후 아래 로직으로 해결.

- 적 비행기의 체력이 없어져 파괴되었을 때, 스코어를 올리는 로직 포함.

 

 

- 플레이어 중복 피격 방지하기 위하여 IsHit라는 bool값 변수 적용.

- 플레이어 비행기 파괴 시, 재생성 되는 로직 포함. (SetActive함수 이용)

- 재생성 되었을 때, 레이어를 이용하여 잠시 무적시간을 갖게 해주는 로직 포함.

- 그 외 플레이어 Life 감소.

 

 

7. UI

- 생명 갯수.

- 점수 확인

- 재도전 버튼


 

★ 애먹은 부분

- 스크립트를 오가며 코딩을 진행하는데, 클래스를 호출하고 초기화 하는 과정에서 애를 많이 먹었음.

일반적으로 상단에서 클래스를 호출하고 Awake 단계에서 초기화를 시켰음.

 

Public GameManager gamemanager;

 

public void Awake()

{

gamemanager=getcomponent<GameManager >();

}

 

하지만 이번에는 prefabs(프리펩)을 사용하면서 프리펩에는 스크립트를 드래그로 집어넣을 수 없음.

그래서 위와 같은 형태가 아닌...아래 형태로 호출 및 초기화 시켰음.

 

Public GameObject gamemanager;

gamemanager gamemanagerlogic = gamemanager.Getcomponent<gamemanager>();

 

 

 

 


 

 

 

 

반응형

댓글