1. 레벨의 벽 구성하기 🧱
게임 레벨에 벽을 만들어 플레이어의 이동 경로를 제한하고, 공간을 구조화할 것이다
1.1 Horizontal Wall과 Vertical Wall 생성
- Cube 생성: GameObject 메뉴에서 3D Object > Cube를 선택하여 Cube 오브젝트를 만든다.
- 크기 조정: Transform 컴포넌트에서 Scale을 조정하여 벽의 크기를 정한다. Horizontal Wall은 x축을 길게, Vertical Wall은 z축을 길게 조정한다.
1.2 벽 배치
- 평행이동: Ctrl 키를 누른 상태로 오브젝트를 옮기면 1 단위로 평행이동이 가능하다. 이를 통해 벽을 정확한 위치에 배치할 수 있다.
- 배치 팁: 레벨의 그리드와 벽의 크기를 맞추면, 정확한 배치가 수월하다.
1.3 Collider 설정
- Collider 컴포넌트: 플레이어 오브젝트(공)이 벽을 뚫지 못하게 하려면, 벽 오브젝트에 Collider 컴포넌트가 필요하다.
- Collider 타입: Box Collider를 사용하여 벽의 형태와 일치하게 설정한다.
2. 부모-자식 관계로 오브젝트 구조화하기 👨👧
레벨 디자인한 객체들을 하나의 오브젝트 안에 묶으면, 관리가 편리해진다.
2.1 'Level' 오브젝트 생성
- Empty GameObject: GameObject 메뉴에서 Create Empty를 선택하여 빈 오브젝트를 생성한다.
- 이름 변경: 생성한 빈 오브젝트의 이름을 'Level'로 변경한다.
2.2 자식 오브젝트로 묶기
- 오브젝트 선택: 레벨에 사용된 모든 오브젝트를 선택한다.
- 부모로 설정: 선택한 오브젝트들을 'Level' 오브젝트 위로 드래그 앤 드롭하여 자식 오브젝트로 만든다.
2.3 관리의 장점
- 단일 선택: 'Level' 오브젝트를 선택하면, 자식 오브젝트 전체를 한 번에 선택할 수 있다.
- 변경의 일관성: 부모 오브젝트의 속성을 변경하면, 자식 오브젝트도 동일하게 변경된다.
이러한 부모-자식 관계는 레벨의 여러 구성 요소를 효과적으로 관리하고, 일관된 변경을 적용하는 데 도움이 된다.
3. 플레이어가 이동시킬 박스 구성하기 📦
플레이어가 밀 수 있는 박스는 게임의 중요한 요소로, 퍼즐 해결에 사용된다. 다음은 박스를 만드는 과정이다.
3.1 ItemBox 오브젝트 생성
- Cube 생성: GameObject 메뉴에서 3D Object > Cube를 선택하여 Cube 오브젝트를 만든다.
- 이름 변경: 오브젝트의 이름을 'ItemBox'로 변경한다.
3.2 Rigidbody 컴포넌트 추가
- Rigidbody 컴포넌트: 'ItemBox' 오브젝트에 Component 메뉴에서 Physics > Rigidbody를 추가한다. 이를 통해 물리 엔진이 박스에 영향을 미칠 수 있다.
3.3 박스 배치
- 박스 크기 조정: Transform 컴포넌트에서 Scale을 조정하여 원하는 크기로 만든다.
- 박스 위치 설정: 레벨 디자인에 맞게 박스를 배치한다.
4. 카메라의 시점과 배경 설정하기 🎥
카메라의 시점과 Clear Flag 설정은 게임의 시각적 표현에 중요한 역할을 한다.
4.1 메인카메라 선택
- 메인카메라 선택: Hierarchy 창에서 'Main Camera' 오브젝트를 선택한다.
4.2 카메라 시점 변경
- 시점 조정: Transform 컴포넌트에서 Position과 Rotation을 조정하여 원하는 시점을 설정한다.
4.3 Clear Flag 변경
- Clear Flag 속성: Camera 컴포넌트에서 Clear Flags 드롭다운 메뉴를 열고 'Solid Color'를 선택한다. 이 설정은 카메라가 렌더링 전에 화면을 단색으로 지우는 방식을 변경한다.
4.4 배경 색상 변경 (선택 사항)
- 배경 색상: Solid Color를 선택한 경우, Background 속성에서 색상을 선택하여 배경 색상을 변경할 수 있다.
이러한 설정을 통해 게임의 카메라 시점을 조절하고, 렌더링 방식을 변경하여 게임의 시각적 표현을 제어할 수 있다.
5. 박스의 회전 제어하기 🔄
플레이어가 박스를 밀 때, 대각선 방향으로 밀면 박스가 회전하는 현상을 막고 싶을 수 있다. 이를 위해 다음 단계를 수행한다.
5.1 Rigidbody 컴포넌트 선택
- Rigidbody 컴포넌트 접근: ItemBox 오브젝트의 Rigidbody 컴포넌트에 접근한다.
5.2 Constraints 설정
- Freeze Rotation 체크: Rigidbody 컴포넌트의 Constraints 섹션에서 'Freeze Rotation' 옵션을 체크한다. X, Y, Z 축을 모두 선택하여 회전을 제한한다.
이 설정을 통해 플레이어가 박스를 밀어도 박스가 회전하지 않고, 오직 평행이동만 수행하게 된다.
6. 재사용 가능한 Prefab 구성하기 🏗️
Prefab은 재사용 가능한 게임 오브젝트의 템플릿이다. 동일한 오브젝트를 여러 번 사용해야 할 때 유용하다.
6.1 Prefab 생성
- Hierarchy에 있는 오브젝트 선택: 재사용하려는 오브젝트를 Hierarchy 창에서 선택한다.
- Assets로 드래그: 선택한 오브젝트를 Assets 창으로 드래그하여 Prefab을 생성한다.
6.2 Prefab 사용
- Prefab 끌어오기: Assets 창에서 Prefab을 선택하고, Hierarchy 또는 Scene 뷰로 끌어다 놓는다.
Prefab를 사용하면 씬에서 여러 번 사용할 오브젝트를 빠르게 복제하고, 일관된 설정을 유지할 수 있다.
7. 게임 종료 지점 표시하기 🎯
게임 레벨의 종료 지점을 나타내는 오브젝트를 만드는 방법은 다음과 같다.
7.1 EndPoint 오브젝트 생성
- EndPoint 오브젝트 생성: 원하는 3D 오브젝트를 만들고, 이름을 'EndPoint'로 변경한다.
7.2 좌표계 설정
- Global 좌표계로 설정: Transform 컴포넌트에서 좌표계를 Global로 설정한다.
7.3 Collider 컴포넌트 설정
- Collider 컴포넌트 추가: EndPoint 오브젝트에 Collider 컴포넌트를 추가한다.
- Is Trigger 체크: Collider 컴포넌트의 'Is Trigger' 옵션을 체크한다. 이 설정으로 충돌 감지는 하되, 물리적인 막힘은 없게 한다.
이러한 설정을 통해 플레이어가 EndPoint 오브젝트에 도달했을 때 특정 이벤트를 트리거할 수 있게 설정할 수 있다.
🎓 정리
이번 장에서는 Unity에서 소코반 게임의 레벨 디자인을 구성하였다. 벽과 박스의 배치, 카메라 설정, 회전 제어, Prefab 사용법, 그리고 게임 종료 지점의 설정 등 다양한 요소를 다루었다.
전체 구조 및 레벨 디자인