디시인사이드 갤러리

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

갤러리 본문 영역

[📜일지] 댕댕이 서바이벌 #9 - Experience Point

태보미코갤로그로 이동합니다. 2023.03.24 18:28:37
조회 1063 추천 17 댓글 22
														

엄청난 속도로 개발중인 것 같아 뿌듯하지만 4월 출시가 목표인데 진행도가 느린 상황이다.

어제 작성한 뉴비 수준의 최적화 글이 실베로 가버렸는데,

보여준 게 없어서 아쉽긴 하지만 지난 실베에 비해 반응이 늘어난 걸 보면 몬스터 수가 많으니 뭔가 느낌이 있나보다.

얏호


오늘의 결과물 !

7ded8868f2d73ab64e81d2b628f175683b376b963ab3




들어가기에 앞서

먼저 지난 번 개발일지는 최적화가 주제였는데 추가된 내용만 잠깐 짚도록 하겠다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590c928a948af91734dd928bab995800607c6fe9d15ac440

물리 엔진은 내가 건드릴 것이 별로 없다보니 데미지 표기 개수 제한 정도만 적용하게 되었다.

여러가지 피드백을 받았고 감사하며 노션에 메모해 두는 중이다 !

그 중 https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=113886&s_type=search_name&s_keyword=.EC.97.B0.EC.96.B4.ED.9A.8C.EB.AC.B4.EC.B9.A8

이것을 적용해보라는 이야기가 있어 적용해보았고,

정확히 테스트는 해보지 않았으나 에디터 상에서 플레이 시 10%정도 성능 향상이 있는 듯 하다.


이 외에 추가된 사항으로는 크리티컬, 일반 데미지 애니메이션 Dotween->animator로 변경 완료,

사용중이던 데미지 표기를 재사용 시 애니메이션 재시작을 해주었다.

위 짤보다 훨씬 자연스럽게 변했고 이후 첨부된 짤에서 확인이 가능하다.


그 외에 최적화를 한 가지 더 진행해주었는데,

TMP.text = "데미지" 요런 식으로 적용해주던 것을 TMP.SetCharArray()방식으로 변경해주었다.

요렇게 변경해준 이유는 가비지가 생성되기 때문.

뭐 이런 쓸데없는걸 신경쓰냐 할 수 있지만 간단하게 해결할 수 있는 것이니

데미지 표기도 많이나오는 서바이벌류인만큼 없으면 좋은 것 아닐까?

구현은 간단하므로 코드를 잠깐 짚고 넘어가겠다.


먼저 TMP 확장 메서드이다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec780961130ddade398cc9cad9512e5a4a6ca9cc3e55a3101

데미지가 얼마나 나올지는 모르겠으나 10000까지는 나오지 않게 설계할 예정이다.

따라서 5개짜리 char 배열을 선언해주고 뒤에서부터 정수 한 자리씩 배열에 담아준 뒤에,

SetCharArray에 시작 index부터 길이만큼 배열과 함께 보내준다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec7edfa1330d4ec6677058a5dacf7d08c0976af455cac56

이후 사용할 곳에서 이 확장메서드를 이용하면 끝.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec7edfa1330d4ec6677058a0caefdd48c5c20a8455cac46

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec7edfa1330d4ec6677058a58fdfcd6860c25aa455cac94

빌드 후 테스트해보면, SetCharArry 이용 시 가비지가 발생하지 않는다.





Experience Point

오늘 개발일지의 주제인 경험치 !

영어로 써두니 그럴듯해 보인다.

하지만, 요즘 시대에는 너무 영어를 남1용하니 주의하도록 하자.


메커니즘에 대해 이런저런 고민을 많이 해보았다.

실제 플레이 시에는 어떨 지 모르겠으나 나름대로 뱀서를 플레이하며 아쉽다고 느낀 부분을 개선해보았다.

우선 필요한 기능은 크게 3가지가 존재한다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec780961130ddade398cc9cad9540b7a8fe99cd91e55ad1f5

정리, 흡수, 배치다.

지난 번 페어리 테일즈 개발을 하면서 막무가내 식으로 개발을 하기보다는

만들 기능에 대해 한번 작성을 해보고

그 기능을 실행하는 주체와 조건 등을 짚어보고 구현하는 것이 훨씬 수월하다고 느꼈다.

또, 객체지향적으로? 딱 자신의 역할 정도만 수행하도록 구현하는 것이 코드가 난잡해지지 않는 듯 했다.

아직도 부족하지만 협업은 몰라도 혼자서는 꼬이지 않고 개발하기 더 좋아지는 방향으로 발전중인 듯 하다.


간단하게 흡수 기능부터 구현해보았다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590cd6dec7edfa1330d4ec6677058a09a8f5d1820977ff455cacce

플레이어의 자석, 아이템은 콜라이더와 릿지드바디 강체로 구성되어 있다.

이 때 충돌 외에는 쓸모가 없으므로 범위에서 획득 감지 이후에는 물리 기능은 이용하지 않기 위해 simulated를 꺼주었다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590c928a948af91734dd92dcfb9b5c53622c69e9d15ac440

결과물은 이렇게 뱀서의 그 톡 튀었다가 빨려들어오는 느낌이 잘 구현되었다.

옛날 게임들에 이런 자석이 많이 있었던 것 같은데,

개인적으로 좋아하는 효과이고 뱀서에서 보면서 붉은 경험치가 빨리 들어오길 바라는 마음과 함께 즐거움을 느꼈다.


간단하게 구현해보았으니 세부적으로 구현해보았다.

Dotween을 사용하면 편리하긴 하지만 경험치 획득이 자주 일어나는데

이 때마다 dotween을 생성하고 완료를 대기하기에는 gc나 성능면에서 좋지 않다고 판단했다.

따라서 transform을 직접 조작해주었고,

Easing은 Dotween에서 잘 구현되어있으므로 빼와서 사용했다.

결과물만 보여주자면,

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590c928a948af91734dd92dbf1c00f07332168e9d15ac440

통 튀어나가고 점점 빠른 속도로, 이후 일정속도로 다가오는 모습이 마음에 든다 !

획득은 물리 충돌 사용할 필요 없이 어짜피 transform으로 조작하기 때문에

sqrMagnitude가 일정 거리 이하일 경우 획득판정을 내리도록 했다.


이 때 너무 먼 거리의 아이템은 빨려들어오지 않고 즉시 사용되는 방식으로

아이템 매니저 쪽에서 처리해줄 것이다.


다음으로 풀링 적용 및 몬스터 드랍 및 몬스터 경험치량만큼 적용해주도록 했다.

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590c928a948af91734dd92d9fbc95d07302e38e9d15ac440

해당하는 양만큼 잘 드롭하고 잘 빨려들어온다.viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cea82fa11d0283167b3609c5c7cf1dd93c16821866607a25b977709005c590c928a948af91734dd92d6fb9b5851347d38e9d15ac440

한번에 빨려들어오는 모습이 기분이 좋다.



이대로 끝내면 좋겠으나, 최적화라는 문제가 남아있다.

가만히 서서 끝없이 경험치를 드롭하면 언젠간 게임이 터져버릴테니깐...

따라서 지난 번에 구현한 개수가 제한된 오브젝트 풀(전부 사용중일 시 오래된 오브젝트 재사용)과

onbecamevisible함수를 이용하여

현재 화면에 존재하는 경험치의 수를 제한하고,

전체 존재하는 경험치의 수도 제한해준다.

7ded8468f2d73ab64e81d2b628f1756bc35711582c



이 때에도 이런저런 고민이 많았다.

뱀서같은 경우 드롭되지 않는 것으로 플레이하며 알고있었는데,

이번에 검색하며 찾아보니 드롭되는것이 아니라

화면 바깥의 경험치에 누적되어 그것을 먹게 될 때 한번에 여러번의 레벨업이 발생하는 것이었다.

개인적으로 이 방법은 마음에 들지 않았다.

플레이하며 여지껏 드롭이 되지 않는줄 알았을뿐더러 뜬금없이 빨간보석 하나에 여러번의 레벨업이 이해할수 없었기 때문이다.

따라서 나는 화면내 경험치가 최대일 때 존재하는 경험치들에게 누적시켜주기로 하였다.

7ded8568f2d73ab64e81d2b628f1706e78c81053ae

10개 미만일 경우에 마석이 드롭되며 이상일 경우 마석에 경험치가 누적되어 하얀색에서 점점 진해진다.

랜덤이긴 하지만 시간이 지나면 평균과 같아질 것이기 때문에 큰 문제는 없을 듯 하다.


다음으로 마석(경험치)이 최대치로 존재할 때 화면에 보이지 않는 마석을 정리해주도록 했다.

주변 오브젝트를 체크해서 가까운 마석끼리 뭉쳐주는 방법도 있겠으나

그리 정교할 필요 없는 작업이라 현재 상황에서 제일 가볍다고 판단되는 방법으로 진행했다.

풀에서 pop했을 때 사용중인 마석인 경우 보이지 않을 때, 다음으로 pop된 보이지 않는 마석과 합쳐주고

그 마석을 새로 사용해주는 방식이다.

7ded8668f2d73ab64e81d2b628f1756bd23b0111fe

이동속도를 증가시키고, 움짤 용량을 제한하기위해 fps를 낮추었다.

확인하기는 힘들지만 최대 20개의 마석을 드롭가능하도록 했고,

지나온 길의 마석이 최대치에 도달함에 따라 서로 합쳐져 색상이 진해진 것을 볼 수 있다.


결과물

테스트를 위해 조작해둔 플레이어의 이속이 너무 빨라서 따라오지 못하긴 하지만

조금 더 게임같은 모습이 된 것 같다 !

빌드하여 플레이해보았고 괜찮아보인다.


마석이 작아서 잘 안보일 수 있는데 의도한 바이고, 화면을 가리는 것을 원하지 않아 눈에 거슬리지 않는 것이 목표이다.

7ded8868f2d73ab64e81d2b628f175683b376b963ab3

시간관계상 글을 더 정리하지 못해 불편했다면 양해바라며,

다음으로는 최적화해 둔 것들을 기존 오브젝트에도 적용시켜주고

플레이어 체력과 UI쪽을 조금 작업해줄 듯 싶다.

안냥

자동등록방지

추천 비추천

17

고정닉 4

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기
자동등록방지

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2853 설문 연인과 헤어지고 뒤끝 작렬할 것 같은 스타는? 운영자 24/04/22 - -
154955 공지 주딱호출벨 [59] 에뚜갤로그로 이동합니다. 24.03.14 1227 2
114838 공지 🐣질문 글엔 말머리를 답시다🐣 [9] 로도타갤로그로 이동합니다. 22.12.15 4157 8
52873 공지 게임제작 초심자를 위한 글 모음 [9] Goranic갤로그로 이동합니다. 20.07.02 61873 50
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [13] 흉황갤로그로 이동합니다. 23.04.11 10732 16
108991 공지 인디게임개발 갤러리 규칙 - 질문 전 필독!! [23] 로도타갤로그로 이동합니다. 22.09.30 11470 17
158237 💬 요새 잠을 못잤더니 뇌가 이상해졌나? ㅇㅇ(203.254) 07:52 30 0
158236 💬 유니티 텍스트 사용시 무조건 캔버스 써야함? [2] ㅇㅇ(112.160) 07:49 29 0
158235 💬 아키라같은 색감+아트랑 작업하고싶다 ㅇㅇ(118.221) 06:35 36 0
158234 💬 일찍 일어나는 새가 ㅇㅇ갤로그로 이동합니다. 06:28 35 1
158233 💬 좋은 아트로 작업하고 싶다. ㅇㅇ(124.216) 04:42 52 2
158231 💬 일찍 일어나는 새가 ㅇㅇ(218.152) 04:21 42 0
158230 💬 배치 줄이는 최적의 최적화 방법 [1] ㅇㅇ갤로그로 이동합니다. 03:50 84 0
158229 💬 [팀원 모집] 방치형 2D RPG 만드실 기획자 분 구합니다. ㅇㅇ(222.238) 02:42 80 0
158228 📚정보 버천지 주의) 홀로인디 개발자 로보클로와의 인터뷰 번역 [1] solish갤로그로 이동합니다. 02:19 125 2
158227 💬 메이플월드 상위 10명 150억... [4] ㅇㅇ(218.152) 01:41 195 0
158226 💬 애드몹 광고 게재 제한 걸렸다 [1] ㅇㅇ(59.5) 01:35 59 0
158225 🐣질문 유니티 3D 오브젝트 배치관련 해서 질문있음 ㅇㅇ갤로그로 이동합니다. 01:10 79 0
158224 🐣질문 무료로 캐릭터 일러스트 ai 그려주는 사이트 있나요? [2] ㅇㅇ(125.141) 04.23 168 0
158223 🐣질문 게임좀 만들려는데 [4] ㅇㅇ갤로그로 이동합니다. 04.23 176 0
158221 📜일지 플머가 한달동안 아트(픽셀)를 직접 배워서 나온 결과물 [16] 릴리충갤로그로 이동합니다. 04.23 468 17
158220 💬 게기스 오픈채팅 들어가 있는 사람? [2] ㅇㅇ(119.70) 04.23 107 1
158219 🐣질문 velocity 벡터의 길이 질문 [1] ㅇㅇ(182.222) 04.23 63 0
158218 💬 그냥 일반 클라이언트 개발자는 주로 무슨 업무함? [4] ㅇㅇ(114.202) 04.23 122 0
158217 💬 챗지피티가 추우면? [4] ㅇㅇ갤로그로 이동합니다. 04.23 132 1
158216 💬 unity addressable 기능 쓰는 사람 질문 하나만 받아주셈 [2] ㅇㅇ(220.117) 04.23 109 0
158215 💬 유니티 GPGS 설정이 자꾸 초기화 됨 ㅇㅇ(175.206) 04.23 38 0
158214 🐣질문 유니티) urp 2d 광원이 빌드하면 특정 조건에서 빛이 안남 [4] ㅇㅇ(1.231) 04.23 97 0
158213 💬 뉴비of뉴비인데 유니티 게임서버 질문좀 [5] ㅇㅇ(119.196) 04.23 110 0
158212 💬 작업중 [6] 사슴발레리나갤로그로 이동합니다. 04.23 196 1
158211 🐣질문 언리얼 UI 에 표시할 데이터 저장 어캐함?? [2] 라라루라갤로그로 이동합니다. 04.23 77 0
158210 📚정보 디지펜 아카데미? C++ 기반 게임 엔진 제작 부터 ㅇㅇ(1.251) 04.23 116 0
158209 🐣질문 어드레서블 질문! [2] ㅇㅇ(14.52) 04.23 87 0
158208 💬 새로운 기술 [11] 봄네코갤로그로 이동합니다. 04.23 543 16
158207 🐣질문 유니티로 게임 다 만들고 마지막에 모바일 pc 나눠서 낼수 있음? [2] ㅇㅇ갤로그로 이동합니다. 04.23 136 0
158206 💬 오늘 만들다가 생긴 웃긴 버그 [7] asdf(175.198) 04.23 307 2
158205 💬 격겜 히트박스 같은건 유니티에서 어케 구현하나요 [1] ㅇㅇ(210.100) 04.23 122 0
158204 💬 에셋안에 있는 c#파일분석하는방법좀 ㅇㅇ(222.104) 04.23 62 0
158203 📢홍보 비주얼노벨 겨울소녀 개발일지 [5] 겨울소녀갤로그로 이동합니다. 04.23 365 10
158202 💬 겜 공식 디코방 팠는데 [20] ㅇㅇ(121.128) 04.23 350 0
158201 💬 이런 게임 만들어보고 싶은데 질문좀 [9] 목화향갤로그로 이동합니다. 04.23 238 0
158200 💬 님들은 요즘 앱러빈 애드몹 중 어떤거 씀? [2] ㅇㅇ(175.192) 04.23 58 0
158198 💬 여기는 맨날 뉴비만 드글드글하냐 [6] ㅇㅇ(218.152) 04.23 264 0
158197 🐣질문 뉴비인데 보통 언제쯤 c# 공부하게 됨? [2] ㅇㅇ(115.136) 04.23 143 0
158196 📚정보 2024 BIC 참여 인원 모집 lov2r갤로그로 이동합니다. 04.23 219 0
158195 🐣질문 인디게임 개발하시는 분들은 커뮤니티는 어떤식으로 관리하시나요? [17] 개발고민(112.169) 04.23 314 0
158194 💬 공겜에 핏자국 있으면 19금 걸림? [1] ㅇㅇ(124.62) 04.23 124 0
158193 💬 새내기 C언어 중간 시험 보고 왔는데 [21] Achie$갤로그로 이동합니다. 04.23 232 0
158192 🐣질문 mip level에 대해 ai한테 물어봤는데 의심스러워서 맞는지 좀봐주세 [2] ㅇㅇ(182.217) 04.23 103 0
158191 💬 일지관련해서 난 그게 ㄹㅇ 충격이었음 [2] ㅇㅇ(182.211) 04.23 228 0
158189 📜일지 게임 타이틀 그렸어 (퍼리 주의) [6] 닌거갤로그로 이동합니다. 04.23 249 4
158188 🐣질문 유니티에서 이펙트트마다 Audio Source 넣는건 좀 별로일까?... [2] asdf(175.198) 04.23 92 0
158187 💬 에디터루프 프로파일링 하는 법 ㅇㅇ(58.122) 04.23 50 1
158186 🐣질문 구현 관련해서 고민중이다 RIP갤로그로 이동합니다. 04.23 71 0
158185 💬 Transform을 바꾸면? ㅇㅇ갤로그로 이동합니다. 04.23 84 0
158184 📚정보 [경기콘텐츠진흥원] 24년 경기게임 해외진출지원 참가기업모집(~5/20) 오늘내일개발자(124.111) 04.23 189 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2