갤러리 이슈박스, 최근방문 갤러리
개념글 리스트
1/3
- [단독]'비밀경찰서' 지목된 중식당 대표, 중국 공작원 정황 포착 ㅇㅇ
- [ 대학교때 첫 연애한 ssul. 3 ] 고탐
- 딸배 스쿠터로 ㅈ나게 비비기 (스쿠터 사진 2장) ㅇㅇ
- 벨브 공식 유튜브에 공개된 카스2 영상...youtube ㅇㅇ
- 누누티비 운영자 흑화...jpg ㅇㅇ
댕댕이 서바이벌 #8 - 성능 최적화 (움짤 주의)
- 관련게시물 : 댕댕이 서바이벌 #6 - 즉사 공격, 가까운 적 탐색, 데미지 표기- 관련게시물 : 댕댕이 서바이벌 #5 - 몬스터 스폰- 관련게시물 : 댕댕이 서바이벌 #3 - 무기 종류 추가 및 업그레이드 구현- 관련게시물 : 댕댕이 서바이벌 #2 - 무기 기틀 세우기- 관련게시물 : 댕댕이 서바이벌 #1 - 플레이어 기본 조작- 댕댕이 서바이벌 #7 - 플레이어 스텟점점 더 복잡해져가는 시스템 !어지러워서 쓰러져버릴 것 같아 !뒤돌아보기 무서워 !지난 개발일지에서는 아래 짤처럼 즉사 공격, 가까운 적 탐색, 데미지 표기를 구현했어.데미지 표기는 되고 있으나 플레이어 스텟이 존재하지 않아 데미지는 없는 상황이지.따라서 미뤄왔던 플레이어 스텟을 구현해주었어.먼저 플레이어 스텟 기반이 될 클래스.사실 이번 게임도 큰 스토리, 세계관, 게임 시스템 틀 정도만 생각하고 시작했어.그렇기에 세부적인 기획이 존재하지 않고, 이상한 부분이 존재할 수 있어.플레이어 스텟은 뱀서라이크인 만큼 뱀서의 스텟을 기반으로 만들었고 이후에 바뀔 듯 해.몇 가지 고민했던 부분에 대해 이야기해보자면,1. 플레이어의 체력 float플레이어의 체력을 float로 설정해주었는데 뱀서라이크 사진이나 짤 보면 데미지가 큰 경우에 지저분해보이더라고.개인적으로 1234k 이런식으로 데미지 붙는것도 좀 유치해보이기도하고.몬스터 수가 많은 만큼 데미지 표기도 화면에 많이 출력되는데 시야를 방해하지 않았으면 좋겠더라고.그래서 데미지 또한 크지 않은 수가 될건데 12에서 10%면 1.2니 정수로는 1이 되어버려 소수점 단위를 버리는 것을 방지하고자 했고초당 체력 회복 시에 소숫점 단위 계산을 용이하게 하기 위하여 float로 설정해보려고 생각했어.이런 장르 게임은 처음이라 잘 모르겠는데 보통 이렇게 하나?2. statsincreaseperlevel이 클래스는 해당 캐릭터의 레벨당 스텟 증가량이야.게임 시스템을 조금 고민해보았는데아마도 탕탕특공대처럼 스테이지 외부 캐릭터 선택 창에서 캐릭터를 강화해줄 시스템이 있는게 재밌다고 느꼈어.스테이지 내에서 무기를 선택하는 레벨이 아닌 캐릭터 레벨을 올려 강화하는 시스템을 넣어줄 것이고레벨을 올리면 캐릭터 기초 스텟이 증가할 예정이야.물론, 뱀서의 전체 스텟 강화해주는 시스템도 있을거고.이렇게 되면 결국 레벨이 많이 증가하면 1번에서 방지하고자 했던 숫자가 커지게 될 텐데적당 선에서 만렙을 설정하고자해.뱀서처럼 캐릭터 별 고유 무기를 해당 캐릭터 일정레벨 달성 시 해금되어 아이템 풀에서 나오도록 해줄거야.적고나니 항상 느끼지만 말만 길어지는 것 같네...이해해주길 바라.다음은 해당 캐릭터의 데이터를 담아둘 스크립터블 오브젝트.별것 없어.이제 플레이어 쪽에서는 현재 데이터에서 선택되어있는 캐릭터를 읽어서 위 데이터를 읽어올 예정이야.지금은 없는 캐릭터 선택창에서 캐릭터를 선택하고 이 값을 플레이 데이터에 담아두고스테이지 시작 시 해당 데이터를 참조해서 캐릭터 데이터를 가져오도록 할 거야.이 방식 외에 다른 방식은 잘 모르겠더라고.요런 식으로 어드레서블을 이용해서 데이터를 가져오는데 문제가 생겼어.플레이어 스텟의 데쉬 게이지 양을 이용하는 UI나플레이어 스텟을 받아 데미지를 계산하는 무기 쪽에서저 addressable로 플레이어 스텟을 로드하기 전에 스텟을 받아오는 문제야.어떡할까 하다가 그냥 그런 경우에는 위에 IsReady함수가 참이 되기 전까지 대기시키거나 유니티이벤트를 이용했어.이런 식으로 플레이어 스크립트의 Start함수에서 로드가 완료되면 데쉬 게이지 최대치 갱신 이벤트를 invoke시키도록.무기 스크립트에서는 요런식으로 무기의 데이터를 로드하고 플레이어 스텟이 로드되어있지 않으면 대기 후에 스텟을 계산해.이것도 일단 생각한 방법이라 나중에 바뀔수 있어.어쨌거나 요렇게 해서 간단하게 데이터 생성 완료 !아직 전부 구현된 것은 아니라서 필요한 값만 입력해보았어.댕댕이 이름은 하얀색이니깐 백구야.투사체에서는 이런식으로 데미지와 크리티컬 등을 초기화 해주는데,나는 화살 하나가 셋을 공격했을 때 각각에게 데미지와 크리티컬이 다른 것보다는크리티컬 공격인 화살이라면 그 셋 모두에게 크리티컬 공격을 하는것이 좋아서활성화 시에 스텟을 계산해주도록 했어.이 때 항상 데미지가 동일한건 심심하니깐 랜덤값을 조금 주었고.일단 현재 필요한 스텟 구현은 끝 !일단 대충 구현해두느라 누덕누덕 붙어버려서 코드 리팩토링을 해야 할 때가 된 것 같아.다음은 결과물 !그 전에 지난 개발일지로부터 약간의 수정사항도 있어.데미지 표기를 요런식으로 해주었는데 숫자가 위로 서서히 올라가는게데미지가 여러번 뜰 경우 보기에는 낫겟지만사실 뱀서류가 몬스터가 너무 많다보니 데미지도 위로 올라가면 화면이 난잡해보이는 느낌이더라고.따라서 조금 느낌을 바꿔줬어.나쁘지 않은 느낌.그리고 크리티컬일 시에는 조금 강조 효과를 주었는데일반 숫자는 아래에서 위로 등장, 크리티컬은 위에서 아래로 등장해.위 움짤에 보이듯이 방패를 든 고블린도 추가해주었어.최종 결과물 !지금 몬스터가 다 녹색이라 그런지 아니면 꾸며둔게 없어서인지글씨체도 좀 두꺼운 느낌이고 약간은 마음에 안 들어.다음에는 다른 종의 몬스터 하나를 더 추가해보도록 할게.그리고 드디어 경험치를 구현할 예정이야 !그럼 안녕.+ 댓글 내용 추가타겟프레임레이트 60으로 설정해두었고, 기본적인 풀링은 적용되어있음.캔버스는 월드캔버스 하나.초당 적 60마리 생성 중.적은 캡슐콜라이더로 되어있음.1000마리정도 다같이 부대끼면 물리가 저정도 차지하는듯.최적화는 밸런스맞추고 빌드까지 해보고 실제 플레이 후 나중에 알아보는걸로 !-댕댕이 서바이벌 #8 - 성능 최적화 (움짤 주의)지난 번 개발일지 마지막은 요렇게 데미지 표기, 플레이어 스텟 등의 작업이 완료되었었다.댓글로 성능 관련 질문을 받게되었는데,대략 텍스트가 많이 표시되면 렉 걸리지 않느냐, 대량의 몬스터도 괜찮은가 였다.간단히 점검을 해 보았다.프로파일러도 볼 줄 모르고 물리, 렌더링 관련 지식이 없으므로 양해바람.먼저 데미지가 한번에 대량으로 나오게되면, 순간적으로 프레임이 치솟는게 보인다.하늘색으로 하이라이트된 부분이 데미지 관련하여 캔버스에 렌더링 되는데에 차지하는 소요시간이다.데미지 텍스트는 월드 스페이스 캔버스에 tmp를 오브젝트 풀링을 이용해 생성해준다.두트윈을 이용하였고, 크리티컬, 일반 데미지 각각 두개의 시퀀스를 가지고있다보니데미지 표기가 많아질수록 두트윈 시퀀스도 500개이상으로 늘어나버린다.시퀀스를 끝내면 풀에 다시 넣어주는 작업까지.가비지도 많이 생성되고, 프레임도 불안정하고, 이런저런 문제가 있는 상태다.아래와 같은 순서로 변경해주었다.1. 두트윈 대신 애니메이터 이용 => 풀링에 넣어주는 것은 애니메이션 이벤트 이용애니메이션 이벤트는 ide 상에서 어디서 참조되고 호출되는지 체크하기가 힘들어서 사용을 지양했는데,가비지도 발생되지 않고 성능도 지금보다 좋아보여서 변경했다.애니메이터 behaviour는 좀 별로인 것 같았다.2. TMP Text UI에서 TMP Text로 변경 => 캔버스 사용이 의미가 없는 듯 하고 풀링 시 오브젝트를 껏다 켜는 것이 아닌mesh renderer enabled 를 제어3. 데미지 텍스트의 양 제한 => 동시에 일정 개수만 존재 가능, 이후 필요 시 가장 먼저 사용했던 오브젝트를 사용결과 아래와 같다.텍스트 개수를 제한한 것이 효과가 가장 크긴 하겠지만위 1번 2번 변경을 하며 가비지 생성이 줄어들었으니 다 긍정적인 거 아닐까?기존과 비교하여 프레임 드롭이 사라졌다 !참고로 빌드 시에는 성능이 훨씬 좋으므로나같은 뉴비는 일단 개발하고 성능걱정해도 괜찮을 것 같다.컴퓨터 사양에 따라 다르겠지만 화면을 가득 채운상태로 대략 1000개 이상의 dynamic 콜라이더가 비벼도 멀쩡해보인다.프레임 제한을 해제해두었다.데미지 표기 개수를 제한해도 크게 거슬리지 않는 느낌?개수를 제한하는 오브젝트 풀은 요런 식으로 구현해주었다.실제 게임 플레이 시에는 최대 600마리정도 존재할 것이므로성능에 대한 걱정보단 역시 구현이나 빨리 해야겠다는 경험이었다.뉴비인지라 잘못된 부분이 있을 수 있으니 양해바라며, 쓴 말 좋은거에요.
작성자 : 태보미코고정닉
댓글 영역