디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

댕댕이 서바이벌 #33 - 길찾기 Mk.2 with Job Sys.(下)

태보미코갤로그로 이동합니다. 2023.11.01 10:10:02
조회 3739 추천 15 댓글 27

개발일지 목록


노션 | 디시



잔말


하나의 일지인데 글이 길어져서 나눈 것이다 보니, 지난 번과 동일하게 #33이에요.

사실 어제 이어서 적었어야 했는데 적다보니 진이 빠져버린거에요.

이런 글을 적다보면 느끼지만 맞춤법을 더 맞춰야 하나

그냥 취향대로 적어야 하나 고민이 되는거에요.

여태까지 지적이 들어오지 않는 것을 보면 하나의 말투로 봐주시는 것 같아 유지중이지만요.

조우


근데 오늘 일어나서 보니 ecs 떡밥은 나때문인가...? 내가미아내...

시무룩



길찾기에 Job System 적용하기


제목 글자 수 제한으로 上/下 편으로 나누었지만,

자세히 하자면 입문/적용 편이 되지 않을까 싶어요.

이번 편에서는 드디어 제 길찾기 알고리즘이 구려서 해결하기 위한 마지막 방법,

멀티쓰레딩으로 처리속도를 높이도록 해보아요.


들어가기에 앞서 제 길찾기는 Cost Field -> Flow Field로 두 개의 과정이 있고,

Cost Field와 Flow Field 만들기 사이에 추가 과정이 하나 있어요.

추가 과정은 몬스터가 지상 타입인지, 공중인지에 따라 2가지 지상/공중 Flow Field가 존재하므로

Cost Field로부터 지상/공중 Flow Field에 동기화 해주는 과정이에요.


자 그럼 Job부터 만들어보도록 해요.



Update Cost Field


Cost Field라는 것은 맵의 타일 별 비용을 가지고 있어요.

제 Cost Field에는 이용자의 수에 따라 비용이 증감한다던지

진흙탕같은 감속 구간이 있다던지와 같은 것은 없고,

단순히 이동 가능/불가능 지점만 판단해요.


이 이동 가능/불가능 지점을 판단하는 방법은 여러가지가 있겠지만,

저의 경우에는 Physcis2D.OverlapCircle 함수를 사용하여 판단해요.

이렇게 한 이유는 Tilemap.GetTile 함수 사용하는 것도 그다지 성능이 좋지 않고,

Tilemap을 사용하지 않고 콜라이더를 부착한 오브젝트를 사용해서 장애물을 배치하는 경우도 있기 때문이에요.


하지만 여기서 문제가 발생 !

Job System에서는 Physcis2D.OverlapCircle 함수를 사용할수가 없어요.

지난 편을 보았다면 "잡 시스템은 무적이고 유니티는 신이다!" 라고 생각했을 수 있겠지만,

사실 이런저런 제약사항이 있는 거에요.

이유에 대해선 직접 알아보도록 하는거에요.


이에 대한 해결 방법으로 잡 시스템에서 제공되는 기능들이 몇가지 있는데,

SpherecastCommand라던지, OverlapSphereCommand 등의 기능들이 있어요.

Overlap시리즈는 아마 유니티 2022버전부터 사용이 가능한 것 같아요.


따라서 아쉽지만 2021버전을 사용하는 제게는 패스.

해결할 수도 있겠지만, 어짜피 지금 성능 개선을 하려고 하는 부분은

cost field가 아닌 flow field거든요.

왜냐하면 cost field는 1개만 사용하는데,

4인 플레이 * 2가지 이동타입이라면 flow field는 8개나 필요한 상황이에요.

cost field에 overlap 함수를 7000번이나 쓰면 너무 성능소모가 심할것 같다 ! 싶겠지만

어짜피 플레이어는 한번에 여러 칸을 이동하는 것이 아니다보니

내부적으로 이동한 칸 만큼 새로워진 칸만 overlap함수를 사용해 충돌체를 감지하고

나머지 칸은 배열을 옮기는 방식으로 최적화를 해 주었어요.


따라서 Job을 사용하지 않으니 핵심적인 부분만 보고 가도록 해요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F0d5e63ec-ab97-4c9f-9243-0481f4b1d456%2F20.png?table=block&id=767e6188-925c-404a-b942-c6e78eea0642&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2

UpdateCostField 함수를 사용하여 코스트 필드를 매 프레임마다 업데이트 해줘요.

이 때 위치가 변하지 않았다면 업데이트 하지 않아요.

위치가 변하여 업데이트 시에는, 이동 거리가 범위보다 클 경우 전체 다시 업데이트,

범위 이내일 경우에는 일부 업데이트 및 옮기기 작업을 해주어요.


이 때, 좌표들은 유니티 잡 시스템과 함께 사용하기 위해 Vector2Int가 아닌 int2를 사용해 주었어요.

따라서 int2를 int index로 바꿔주기 위한 Flatten 함수도 존재해요.



Reset Flow Field Job


아쉽게도 Cost Field는 Job을 사용하지 못했지만,

Flow Field는 정말로 데이터 작업 뿐이므로 사용이 가능해요.

그 중 위에서 설명한 Cost Field로부터 Flow Field를 초기화 해주는 잡을 만들어보아요.


https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2Fdd5225f4-3421-4afd-9e68-71ee61a9c6a9%2FSnap_(3).png?table=block&id=f971461e-5305-4012-8bc9-c90af464d186&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2

cost Field의 값을 갖고있는 native array 하나,

flow field에게 작성해주기 위한 native array,

지상 타입인지, 공중 타입인지를 위한 Option 값 세가지만 있으면 돼요.


이를 이용해 cost field 해당 셀의 값에 옵션 값이 들어있으면 Collider로 체크를 해주어요.


당연하게도 셀과 셀 사이 종속성이 존재하지 않으므로 ParallelFor을 사용하였고요.


이제 이것을 사용하는 방법은 아래와 같아요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2Fb8777297-591a-487f-a8ab-86960be99999%2FSnap_(5).png?table=block&id=933c62c7-6f9e-4203-9b2b-0fde3fbcaeed&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2

만약 플레이어가 길찾기 범위 밖에 존재하게 되는 경우에는 reset 작업을 해주기만 하고 flow field 업데이트는 하지 않아요.

그렇게 되는 경우 flow field에는 초기값만 존재하게 되고, 적들은 초기값일 경우 마지막 방향을 유지하도록 해주었어요.



Update Flow Field Job


드디어 이번 일지의 핵심적인 부분이에요.


먼저 각 타일들을 Cell이라는 구조체로 만들어 거리와 방향을 담아주었어요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F9a0e9ccf-562f-479d-87c4-6891268278db%2FSnap_(7).png?table=block&id=19e01d8b-3dbc-4467-90d4-7b87d5c1d40b&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2


그리고 Update Flow Field Job인데,

경로 설정을 해주는 부분은 잡작업이고 이쁘지도 않으므로 생략.

큐에다가 인접 셀을 접근해서 처음 접근할 시 enqueue해주는 작업을 반복하며

BFS의 방식으로 Flow Field를 만드는 작업이에요.


relative Point라는 것은 해당 flow field를 가진 플레이어의 위치라고 생각하면 될 것 같아요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F81fd9d9d-9197-4e9b-b08c-b93dfedf24d4%2FSnap_(6).png?table=block&id=a614d042-9da8-42f2-ab72-e7e609cebb8c&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2


결국 위 reset job과 이어져서 아래와 같은 flow field update 함수가 완성되었어요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F2f699484-d94f-4433-a736-a89410801478%2FSnap_(8).png?table=block&id=b7f5abcc-21dc-4fe2-a3be-4052b8cb1f48&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2



활용


그럼 이제 위의 Job들을 활용해보아요.

길찾기를 시작하면, 매 프레임마다 Cost field를 업데이트 할 수 있는지 체크하여 업데이트 해주고,

각 플레이어마다 플로우 필드 클래스가 하나씩 할당되어 있는데,

요것의 위치가 변경되었거나 코스트 필드가 변경된 경우 flow field를 업데이트 !

마지막으로 위 잡들이 종료되었다면 메인쓰레드를 진행해요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2Fcbb0262c-3685-499d-b6e1-c472eb0c2d34%2FSnap_(9).png?table=block&id=60ecb51a-01b8-40f5-971c-07bc53db26c8&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=2000&userId=&cache=v2



완성 !


이렇게 해서 완성 !

그럼 다들 성능이 얼마나 개선되었는지 궁금할거에요.

그 전에 결과물 한번 확인하고 가도록 해요.



7ef3d72fe3f206a26d81f6e74185716d3e6f

용량 때문에 사이즈를 많이 줄여버렸는데, 언덕 아래를 보시면 화살표가 바뀌는걸 더 잘 보실 수 있어요.



참고로 공중형 적은 언덕을 무시하고 날아다닐 예정이에요.

두가지 Flow field를 아래 짤에서 확인하실 수 있어요.

79f3d72fe3f206a26d81f6e146827c68b450


마지막으로 대망의 4인 플레이 !

78f3d72fe3f206a26d81f6e4448075694ab5

8개의 플로우 필드가 아주 잘 적용되는 것을 확인할 수 있어요.




성능


마지막으로 성능이 얼마나 개선되었는지 빌드 후 확인해보아요.

먼저 기존 시스템으로 실사용할 약 7000개의 타일기준으로

코스트 필드 + 플로우 필드 * 4인 플레이 * 2가지 이동타입을 갱신하는 경우

약 4ms의 소요시간이 발생해요.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F06020a30-3371-4628-b417-1f70f6f4cc3f%2F22.png?table=block&id=b528a73f-b26e-4db0-8d74-193b71de2587&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=1710&userId=&cache=v2


그럼 이제 개선된 작업을 확인해보아요.

조건은 위와 동일.

https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F31c28810-f3cd-4738-812e-f78997a05706%2F4120db71-191e-4415-b739-6ffb55f3c20f%2F21.png?table=block&id=3f91ce55-213d-4bde-a062-af98f9c45031&spaceId=31c28810-f3cd-4738-812e-f78997a05706&width=1700&userId=&cache=v2

0.5ms 소요.


???


0.5ms 소요.



허걱


4ms -> 0.5ms

허걱허걱허걱허걱허걱허걱


엄청나게 많이 줄어든 것을 확인할 수 있어요.

하지만 우린 한가지 간과한 것이 있어요.

바로 코스트 필드 작업은 잡을 사용하지 않았다는 것.

두 소요시간에는 코스트 필드 작업이 깔려있으므로

실제로 줄어든 시간은 90%이상이라는 것.



결론


유니티 잡... 사용할수 밖에 없는 시스템이에요.

물론 이런 대량의 데이터 처리가 아닌 이상 굳이 안써도 컴퓨터 성능은 뛰어나니 걱정할 필요 없지만요.

다음에도 이런 생산적인 주제가 일지 주제가 되면 좋을 것 같아요.


그럼

안냥


근데 디시 사진 첨부 왜이리 안되는거임?



출처: 인디 게임 개발 갤러리 [원본 보기]

추천 비추천

15

고정닉 6

3

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 주류 모델하면 매출 폭등시킬 것 같은 아이돌 스타는? 운영자 26/01/05 - -
공지 실시간베스트 갤러리 이용 안내 [4492/2] 운영자 21.11.18 16325058 706
394582
썸네일
[이갤] 이준석 "'키보드 워리어' 전락 한동훈, 유효타 없어"
[20]
ㅇㅇ갤로그로 이동합니다. 17:45 617 19
394580
썸네일
[주갤] 암 걸린 시어머니가 너무 얄미워요...
[30]
갓럭키갤로그로 이동합니다. 17:40 1414 4
394579
썸네일
[싱갤] 군침군침 세계 유명 디저트
[48]
수인갤러리갤로그로 이동합니다. 17:35 2666 19
394577
썸네일
[이갤] 공수처, '전산 조작' 의혹 최재해 기소요구
[8]
NiKe갤로그로 이동합니다. 17:30 649 0
394576
썸네일
[카연] 프론트걸 14화
[9]
사가스갤로그로 이동합니다. 17:25 826 15
394574
썸네일
[해갤] [단독] 김건희, ‘반클리프 목걸이’ 받고 “아주 예뻐“
[76]
ㅇㅇ갤로그로 이동합니다. 17:20 1771 10
394573
썸네일
[미갤] 해외주식 투자 과열에…"마케팅 자제하라" 결국...jpg
[96]
빌애크먼갤로그로 이동합니다. 17:15 3767 25
394571
썸네일
[중갤] 국힘 “이혜훈, 사회 초년생 세 아들 재산만 47억…영종도 땅 투기 의혹
[104]
00갤로그로 이동합니다. 17:10 3360 18
394568
썸네일
[싱갤] 싱글벙글 충북 청주에서 발견된 도난차량
[67]
나메리카와_쟈갤로그로 이동합니다. 17:00 15555 63
394567
썸네일
[야갤] 롯데리아 신메뉴...침착맨 버거 가격 ㄹㅇ...jpg
[340]
Adidas갤로그로 이동합니다. 16:55 20579 273
394565
썸네일
[특갤] 보스턴 다이내믹스, 차세대 휴머노이드 로봇에 구글 AI 탑재
[106]
회색갤로그로 이동합니다. 16:50 3205 31
394564
썸네일
[미갤] sk브로드밴드 근황
[122]
윤어게인y갤로그로 이동합니다. 16:45 7285 33
394562
썸네일
[등갤] 샌 골고니오 등산후기(재도전)
[47]
모씨갤로그로 이동합니다. 16:40 993 23
394561
썸네일
[싱갤] 싱글벙글 mh세대에게 일침놓는 사람
[610/6]
ㅇㅇ갤로그로 이동합니다. 16:35 21184 177
394559
썸네일
[중갤] 2025년 베스트 게임 TOP10..JPG
[229]
ㅇㅇ갤로그로 이동합니다. 16:30 11778 62
394558
썸네일
[8갤] "제2의 푸바오 만드려고?" 李정부, 中에 판다 추가 대여 제안
[224]
8갤러(121.182) 16:25 5543 33
394556
썸네일
[새갤] 안성기 조문한 배현진, 미소에 밝은 정장 ‘싸늘’
[253]
ㅇㅇ갤로그로 이동합니다. 16:20 10588 63
394553
썸네일
[이갤] 전담재판부 법 공포…윤석열·위헌 논란 격화
[91]
NiKe갤로그로 이동합니다. 16:10 2699 12
394552
썸네일
[싱갤] 싱글벙글 유명한 해적판 만화가 사라진 이유
[193]
니도모에갤로그로 이동합니다. 16:05 9917 35
394550
썸네일
[야갤] 아직도 네 냄새가 교사와 불륜 아내…상간소 하면 위자료는 남편 돈으로
[72]
감돌갤로그로 이동합니다. 16:00 8998 27
394549
썸네일
[미갤] 일본 지진 ㄷㄷㄷ
[151]
Mane갤로그로 이동합니다. 15:55 10857 17
394547
썸네일
[이갤] SK하이닉스 호재에 코스피 사상 첫 4,500 돌파
[254]
NiKe갤로그로 이동합니다. 15:50 5875 21
394546
썸네일
[루갤] 日 화장실 '집단 괴롭힘' 영상 확산... 전직 수사 1과 형사 우려
[95]
묘냥이갤로그로 이동합니다. 15:45 6824 21
394544
썸네일
[싱갤] 싱글벙글 0.4%확률도 방심하면 안되는 이유
[91]
코호쿠롱싸갤로그로 이동합니다. 15:40 11097 67
394543
썸네일
[야갤] 실시간 철도카페 난리난 코레일 굿즈.jpg
[116]
ㅇㅇ(106.101) 15:35 12433 17
394541
썸네일
[해갤] 하청업체 폭행 호카 총판 대표, 취재가 시작되자.jpg
[122]
ㅇㅇ(106.101) 15:30 5583 35
394540
썸네일
[이갤] 통일교 '정교유착' 검·경 합수본 가동
[35]
NiKe갤로그로 이동합니다. 15:25 1385 1
394537
썸네일
[코갤] 시진핑 회담 중국의 요구사항과 그에 따른 대가를 알아보자
[512]
ㅇㅇ(106.101) 15:15 7095 142
394535
썸네일
[군갤] 트럼프, "덴마크는 중국 러시아 상대로 그린란드 지킬 능력 안 된다"
[325]
케이크갤로그로 이동합니다. 15:10 7827 69
394534
썸네일
[싱갤] (고전)싱글벙글 오버워치 경쟁전 만화.rnanhwa
[49]
치즈돈까쓰갤로그로 이동합니다. 15:06 5620 78
394532
썸네일
[의갤] 의대 24,25학번들, "더블링 개선하라"
[132]
ㅇㅇ(110.11) 15:00 8916 115
394531
썸네일
[냉갤] 불 없이 요리하라는 미션을 다르게 해석한 윤남노
[93]
ㅇㅇ(175.119) 14:55 10921 12
394529
썸네일
[야갤] "위안부는 매춘부"…전국 돌며 '소녀상 모욕 챌린지' 벌인 男
[389]
감돌갤로그로 이동합니다. 14:50 8944 83
394526
썸네일
[이갤] "월급 빼고 다 오르네"…국민연금 지급액 올해 2.1% 인상
[150]
Exterminatus갤로그로 이동합니다. 14:40 7818 42
394525
썸네일
[이갤] 전격 체포된 마두로, 뉴욕 법정 출석
[132]
NiKe갤로그로 이동합니다. 14:35 5836 46
394523
썸네일
[싱갤] 재능도 없고 친구도 없고 싱붕이같았던 ufc 고트.jpg
[73]
ㅇㅇ갤로그로 이동합니다. 14:30 7480 15
394520
썸네일
[야갤] 엘베 담배 냄새, 숨 못 쉬겠다 민원 넣자 너 몇호냐? 협박한 흡연자
[346]
감돌갤로그로 이동합니다. 14:20 10218 47
394519
썸네일
[이갤] 美 기습 전 '마두로 몰락' 올인…내부정보 의혹
[72]
NiKe갤로그로 이동합니다. 14:15 6153 14
394517
썸네일
[카연] 흙수저 어드벤처 -6-
[55]
지존박실짱짱맨갤로그로 이동합니다. 14:10 4521 140
394516
썸네일
[싱갤] 유튜브 댓글 난리난 잘생긴 남자들 많다는 장소들.jpg
[466]
ㅇㅇ갤로그로 이동합니다. 14:05 22752 54
394514
썸네일
[기갤] [단독] 조세호 복귀 소식에…폭로자 “와이프와 찍은 영상 공개할 것”
[233]
긷갤러(118.129) 14:00 16624 129
394513
썸네일
[야갤] 미성년자 5명 성폭행 40대 카페주인 홍채정보로 코인 가입도
[214]
Fila갤로그로 이동합니다. 13:55 16240 172
394511
썸네일
[완갤] 엔비디아 루빈의 성능이 공개됐대
[82]
분노의라스갤로그로 이동합니다. 13:50 10561 31
394510
썸네일
[기갤] "님은 개만도 못하시죠"…정희원, '을질'의 전말
[176]
ㅇㅇ(106.101) 13:45 8416 19
394508
썸네일
[싱갤] 싱글벙글 번호 못따서 후회된다는 영포티형님
[294]
Maturelove갤로그로 이동합니다. 13:40 17759 53
394507
썸네일
[냉갤] 흑백 썰 풀면서 노젓는 냉부해 ㅋㅋㅋ
[45]
ㅇㅇ(175.119) 13:35 11001 64
394505
썸네일
[야갤] 배우 꿈꾸며 오디션 보러 갔는데…"유명해지고 싶으면 벗어라"
[187]
감돌갤로그로 이동합니다. 13:30 11500 27
394504
썸네일
[이갤] 법정 증언 폭로: 윤석열 '계엄' 직접 시사
[176]
NiKe갤로그로 이동합니다. 13:25 4459 30
394502
썸네일
[특갤] 현재 난리난 핀란드 스타트업 전고체 배터리 성능 논란
[332]
ㅇㅇ갤로그로 이동합니다. 13:20 11488 77
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2