언리얼 엔진 5 / Procedural Dungeons ( 절차적 던전 생성 ) 3 시드와 계단

참고 영상

https://www.youtube.com/watch?v=lNwn2yq6qXg

 

시드를 통해 랜덤 관리하기

무조건 랜덤이 아닌 시드를 입력받아 고정된 던전을 만들수 있는 기능을 추가할려합니다.

우선 변수 2개가 필요합니다. Seed 변수는 입력받는 시드 넘버 입니다. 

Stream 은 시드를 통해 만들어진 랜덤 스트림입니다. ( 사실 잘 모릅니다. )

 

Set Seed

1. 입력 받은 Seed가 -1일 경우에는 Stream을 랜덤으로 만듭니다.

2. -1이 아닐경우엔 Seed 기반으로 랜덤 Stream을 만듭니다.

 

그 후에 기존에 Random Item으로 사용하던 노드들을 Stream기반 랜덤 노드로 변경하고 Stream을연결해 줍니다.

 

계단 추가 하기

만들어둔 로직은 Arrow 컴포넌트가 방의 출구에 붙어있고 거기에 새로운 방을 붙이는 것 이기 때문에 방위에 방을 만들어 계단으로 연결하고 Arrow컴포넌트와 박스 콜리전만 잘 붙이면 던전의 층을 늘릴 수 있습니다. 

 

이런식으로 큐브 스태틱 메시로 만들어보았습니다.

Arrow 컴포넌트만 높이를 잘 맞춰주면 됩니다.

 

던전 생성 액터에 특수 방 배열 추가하기

기존의 일반 방과 같은 배열에 계단을 넣어두면 일반방과 비슷한 빈도로 계단이 생성돼서 어색한 던전이 될 수 있습니다.

그렇기 때문에 특수 방 배열을 만들어 계단을 따로 관리해 주도록 하겠습니다.그리고  계단 방 바리에이션을 조금 추가 하였습니다. ( 입구 개수 다르게 )

 

기본 방을 담을 변수를 추가하고 특수 방을 담을 변수도 추가하였습니다.

기본 기준으로 현재 방의 개수가 20으로 나눠떨어지면 ( 20의 배수 마다 ) 특수 방을 생성하게 하였습니다.

기존에 사용하던 Rooml List는 temp처럼 사용하고 기본 방일 경우에 새로만든 RoomList_Base를 복사하여

특수 방 생성시에는 Special RoomList를 복사하여 방을 생성 합니다.

 

Begin Play

1. 기본 방들을 담긴 배열을 temp ( RoomList )으로 BeginPlay에서복사시켜 줍니다. 

2. Set Seed 이벤트를 호출합니다.

실행화면