Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

codingfarm

demo room-Construction Script 본문

Unreal 4/Contents Example

demo room-Construction Script

scarecrow1992 2020. 7. 14. 15:41

해당 프로젝트에서 여러 컨텐츠를 보이기 위한 공간이다.

 

블루프린트로 기능이 작성되어있으며 아래에서 주요 기능을 확인하자.

 

Construction Script

0과 1이라는 분기점이 2개가 형성된다 먼저 0 분기점으로 가보자

 

"ThisRoomSize" 라는 정수형 변수를 0으로 만든다.

"OffsetList" 라는 실수형 배열을 clear 한다.

"RoomSizes"라는 정수형 배열을 clear 한다.

사실상 변수들을 초기화 시키는 작업을 수행한다 볼 수 있다.

 

이제 분기점 1로 가보자.

상당히 큰 규모지만 차근차근 살펴본다

우선 NumberofRooms 정수형 변수의 값을 최소1, 최대30의 값으로 한정짓는다.

이 NumberofRooms는 방이 연달아 몇개까지 있는지를 결정짓는 요소이다.

NumberofRooms가 1일때

 

NumberofRooms가 3일때

즉, 연달아 존재 할 수 있는 방의 수는 최소 1개,  최대 30개라 볼 수 있다.

제한시킨 NumberofRooms의 값에 1을 빼주고 0부터 이 숫자만큼 반복문을 돌린다.

이는 각 방에 별개의 작업을 하기 위한것이라 예상할 수 있다.

NumberofRooms가 1이어서 벽이 막힌 모습
NumberofRooms가 2라서 연결부위에 문이 생긴 모습

 

우선 MainLoopIndex를 반복문의 index 값으로 초기화 시켜주는것을 시작으로 반복문을 진행해 나간다.

반복문은 3개의 시퀀스로 이루어저있다.

0번 시퀀스를 살펴보자

Branch로 들어갈 조건부터 알아보겠다.

isValid는 연결이 완전 차단되었기에 일단 무시하겠다

PerRoomProperties는 DemoRoomStruct 타입의 배열이다.

OverrideSize는 각 방의 크기를 설정한다.

NumberofRooms가 3으로 설정되어있고 각 방의 OverrideSize가 10,5,3으로 설정되었을때

보다시피 각 방의 길이를 별개로 조정 가능함을 확인 할 수 있다.

 

MainLoopIndex는 반복문 초기에 설정했던 현재 반복 횟수에 대한 index 이다.

MainLoopIndex가 가리키는 PerRoomProperties에서 overridesize 값을 구해낸다.

이때 MainLoopIndex가 배열의 크기를 초과해선 안되므로 IsValidIndex와 Branch를 이용해서 조건문을 설정해준다.

즉, 0번 branch에서 하는 일은 MainLoopIndex가 배열 크기내에 있을때만 ThisRoomSize를 PerRoomProperties[MainLoopIndex].OverrideSize 로 초기화한다.

 

이제 1번 branch를 살펴보자

먼저 Offset변수의 값을 0으로 초기화 한다.

SectionWidth는 방내에 각 구역 패널의 크기를 가리키며 1000으로 초기화 되어 있다.

SectionWidth를 detail 패널에서 볼 수 있게끔 임시로 설정하고 수정해보자

SectionWidth.x가 1000일때

 

SectionWidth.x가 1200일때

SectionWidth.x의 값이 커지면 각 구간의 크기가 커저서 구간도 커지는것을 볼 수 있다.

 

이 값에 몇번째 방인지를 나타내는 ThisRoomSize을 곱하고 각 방사이의 연결부위의 길이인 TrimWidth를 더해주면 현재 방 내에서 다음 구역의 패널이 올 위치를 알아낼 수 있다. 이 위치를 ThisOffset 변수에 저장한다.

그리고 OffsetList에 각 방의 총 너비값을 추가한다. 이 값은 순차적으로 추가된다.

이제 최종적으로 방의 위치를 구하기 위해 이전 방들의 너비의 총 합을 구해야한다.

가령 이번 방의 index가 3이라면 0,1,2 번방들의 너비들의 총 합을 구하면 되므로

0~2까지 offsetList에 있는 값들을 하나씩 더해주면 된다.

이렇게 더한값 즉, 방이 오게될 시작 위치를 OffSet 변수에 저장해준다.

 

이제 마지막으로 3번 branch를 살펴보자

굉장히 길지만 결국 여기서 하는일은 앞서 구한

MainLoopIndex : 현재 방의 index

ThisRoomSize : MainLoopIndex번 방의 크기(구간의 갯수)

Offset : MainLoopIndex번 방이 만들어질 시작 위치

이 3개의 값을 기반으로 미리 만들어진 각 함수를 호출하여 방을 형성하는것이라 볼 수 있다.

 

이제 각 함수의 역할에 대해  알아보자.

'Unreal 4 > Contents Example' 카테고리의 다른 글

demo room-Add Loop Section  (0) 2020.07.14
demo room-Add Room Name  (0) 2020.07.14
demo room-Add Room Name  (0) 2020.07.14
Comments