본문 바로가기

취미로 하는 게임코딩_gameCodingAsHobby/유니티unity로 게임 만들기

유니티33_게임 제작 과정 11_적 랜덤 위치 소환

이번에는 게임의 완성도를 높일 수 있도록 코드를 수정해본다.

 

화면 크기 조정

 

Game 뷰의 크기를 바꿀 수 있다.

 

새로 만들고 싶으면 +(Add)버튼을 클릭한다.

 

Label(레이블) 이름을 적고 Type(타입)은 Aspect Ratio(영상 비율)로 정한다.

Width(넓이)와 Height(높이)를 정하고 OK버튼을 클릭한다.

 

 

위와 같은 형태가 된다.

 

Enemy 랜덤 위치에 소환

지금까지 적의 위치는 고정된 위치였지만 이것을 랜덤 위치에 나타나게 코드를 수정한다.

 

PrefabManager.cs 스크립트를 편집해야 한다.

 

 

class PrefabManager 안에  struct(구조체)를 만든다.

struct(구조체)는 앞에서 item 랜덤 생성에서 좌표값을 가진 객체를 생성하기 위해  만들었던 방법이다.

 

struct를 이용하여 인스턴스 객체를 만들고 배열에 저장한다.

 

7번줄에서 게임오브젝트 배열 객체를 만들어 변수 EnemyPrefabs에 저장한다.

 

37번줄에서 EnemyRandom메서드를 정의한다.

내용은 item 랜덤 구현과 같다.

42번줄은 Invoke메서드로 현재 메서드를 0.5초 마다 반복하는 코드이다.

적이 설정한 위치에서 반복해서 만들어진다.

그러므로 적이 만들어지는 개수의 조정이 필요하면 숫자(시간)을 늘이면 된다.

 

23번줄 Start메서드에 시작할 때 한번 호출하도록 EnemyRandom메서드를 적어준다.

26,27번줄은 이제 사용하지 않으므로 '주석'으로 처리해 둔다.

 

스크립트를 저장한다.

 

item 랜덤 위치에 소환

Enemy가 제대로 작동하면 Item도 같은 방법으로 처리한다.

ItemManager 클래스를 아래와 같이 수정한다.

 

 

좌표를 추가해서 설정한다.

 

 

ItemRandom메서드를 만들어서 for반복문으로 만들었던 35~37번줄을 복사해서 가져온다.

마지막에 Invoke메서드로 현재 메서드를 2초 마다 반복하도록 설정한다.

 

40번줄에 Start메서드 안에 시작 시 한번 실행하도록 ItemRandom메서드를 적어준다.

 

스크립트를 저장한다.

 

테스트

 

수정했던 스크립트를 모두 저장한 후 테스트 해보자.

 

먼저 적의 크기가 조금 작은것 같아서 Enemy1 , Enemy2 의 크기를 Ship과 같은 크기로 정했다.

 

그리고 Ship 오브젝트가 적과 충돌하면 회전하면서 방향 조정이 어려워졌다.

 

Ship 오브젝트가 충돌해도 회전하지 않게 하려면 Rigidbody 2D컴퍼넌트의 Constraint(통제)에서 Freeze Rotation(회전 금지)를 체크한다.

 

 

구현 했던 기능들은 모두 제대로 작동하는 것 같다.

테스트 완료.