로그라이크 게임 제작 06
Summary
맵 로드시 랜덤 디자인 패턴을 적용하여 다양한 맵을 구현하는 방법을 설명합니다. 여러 패턴을 enum으로 정의하고, 맵 이동 시 랜덤으로 활성화하여 다채로운 경험을 제공합니다. 코드는 GameObject 리스트를 초기화하고, 맵 이동 시 랜덤 패턴을 불러오는 기능을 포함합니다.
enum 으로 여러개의 패턴 디자인을 넣어두고
기존 프리팹에는 전부 비활성화 해둠
맵이 이동했을때 랜덤으로 비활성화해둔 패턴 중 하나가 즉 enum의 요소중 하나가 case문으로 (확률) 활성화되도록하여 다채로운 맵이라고 느껴지게함
랜덤맵 디자인이 저장될 GameObject 리스트를 선언 및 초기화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| //Reposition.cs
// ... 프리팹 보관할 변수
public GameObject[] prefabs;
// ... 풀 담당을 하는 리스트들
//리스트도 프리팹의 개수만큼 생성되어야하니 배열로 선언해준다
List<GameObject>[] prefabsList;
void Awake()
{
//리스트기때문에 new를 만들어줘야함
//List 배열의 크기는 prefabs배열과 동일하기때문에 배열에 Prefabs의 길이를 넣어준다
prefabsList = new List<GameObject>[prefabs.Length];
//for문으로 배열 내부 오브젝트들을 모두 초기화해준다
for (int index = 0; index < prefabsList.Length; index++)
{
//각각의 리스트들도 전부 초기화해줌
prefabsList[index] = new List<GameObject>();
}
}
|
맵이 이동할때마다 저장된 디자인패턴을 랜덤으로 불러오는 기능을 **randTile()**
함수로 선언
Awake() 에도 포함시켜야합니
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| //Reposition.cs
void moveMap()
{
Vector3 mapSize = groundSize.transform.localScale;
Vector3 playerPos = GameManager.instance.player.transform.position;
Vector3 tilePos = transform.position;
void setRandTile()
{
for (int index = 0; index < prefabsList.Length; index++)
prefabs[index].SetActive(false);
prefabs[Random.Range(0, prefabsList.Length)].SetActive(true);
}
float diffX = Mathf.Abs(playerPos.x - tilePos.x);
Vector3 playerDir = GameManager.instance.player.inputVec;
float dirX = playerDir.x < 0 ? -1 : 1;
//맵이 이동할때마다 맵 디자인이 랜덤으로 변합니다
if (diffX >= (mapSize.x * 3))
{
transform.Translate(Vector3.right * dirX * (mapSize.x * 5));
**randTile();**
}
}
**//prefab에 등록한 프리팹을 초기화하고 랜덤으로 Active 하는 코드
void randTile()
{
for (int index = 0; index < prefabsList.Length; index++)
prefabs[index].SetActive(false);
prefabs[Random.Range(0, prefabsList.Length)].SetActive(true);
}**
|
💬 댓글
GitHub 계정으로 로그인하여 댓글을 남겨보세요. GitHub 로그인
🔧 댓글 시스템 설정이 필요합니다
GitHub Discussions 기반 댓글 시스템을 활성화하려면:
GISCUS_SETUP_GUIDE.md
파일의 안내를 따라 설정 완료Repository 관리자만 설정할 수 있습니다. 설정이 완료되면 모든 방문자가 댓글을 남길 수 있습니다.