- 관련게시물 : 댕댕이 서바이벌 #3 - 무기 종류 추가 및 업그레이드 구현
- 관련게시물 : 댕댕이 서바이벌 #2 - 무기 기틀 세우기
- 관련게시물 : 댕댕이 서바이벌 #1 - 플레이어 기본 조작
드디어 몬스터를 만들 시간이 되었다.
에셋을 사용하므로 몬스터 종류는 많이 만들 수 있을 것이라 생각되지만
일단 흔한 슬라임으로 시작해보았다.
슬라임의 이동 모션.
요런 식으로 꿈틀거리며 이동하는 타임은 일정 속도로 매 순간 이동하는 것이 아닌
위 사진의 경우에는 점프할 시에만 이동한다.
따라서 애니메이션과 실제 이동의 타이밍을 맞추어 주어야 한다.
스크립트에서 제어하는 방법도 있으나
애니메이터를 사용하는 이상 깔끔하게 애니메이터에서 애니메이션 관련 작업들을 다 해주는 것이 좋다고 판단되었다.
따라서 점프 타이밍에 맞추어 적에게 공통적으로 상속되는 베이스 스크립트에 애니메이션용 이동배수를 설정해주고 세팅했다.
고민했던 부분도 있는데 슬라임이 쉴세 없이 점프해 오는건 뭔가 힘들어보지 않나 싶어서
점프 사이에 idle 모션을 랜덤하게 대기시켜보려 했으나
두가지 타입을 테스트해보니 그냥 계속 점프해도 별 어색함이 없어서 이대로 진행하기로 했다.
매 프레임 각 몬스터가 플레이어로의 방향을 체크해 그 방향으로 이동해주도록 했다.
덤으로 애니메이션도 설정해주었는데,
몬스터 그래픽을 대략 체크해본 결과 좌우반전으로 되어있었다.
오른손에 칼을 들고 있었다면 반대방향은 왼손에 칼든 모습으로 변해버리는
그런 거슬리는 부분이 있지만
좌우반전이어도 명암은 좌우반전이 아니므로 좌우 애니메이션은 따로 설정해주었다.
대다수의 네임드 / 보스 몬스터가 아닌 몬스터는 요 애니메이터의 형식을 따를 예정이므로
일반 몬스터는 애니메이터 오버라이드 컨트롤러와 몬스터 스텟 정도만 바꿔주면
여러 종류의 몬스터로 양산이 가능해질 듯 하다.
넉백을 구현해주었다.
플레이어 투사체에서 OnTriggerEnter 시 충돌체들의 HealthBase 스크립트를 getcomponent하여
Damage를 주는 함수를 호출한다.
인터페이스로 데미지만 구현해주어도 되겠지만
어짜피 데미지 받는 부분은 특별할 일 없는 이상 다 똑같은 구현부일테니
그냥 모노비헤이비어 하나 더 붙여주는 방식으로 했다.
넉백 시에는 무기 스텟의 넉백파워를 이용하여 일정시간동안 플레이어를 향한 반대 방향으로 속도를 제어해주었다.
속도는 OutSine그래프의 형대로 줄어들도록 하여 조금은 자연스러워보이나
Dotween을 사용중이라 몬스터가 수백마리가 되면 성능이 어떨지는 모르겠다.
추가적으로 데미지를 받을 시 몬스터 스프라이트가 깜빡거리게 하고싶었는데
하얀색 머티리얼을 바꿔끼우는 방식이나 현재 머티리얼에서 반짝이게 하기 위한 값을 변동시켜주는 방식 모두
batch 값이 와자작 나버린다.
10정도였던 batch가 80까지 올라가버린다.
왜그런가 하였더니
두 방식 모두 다른 유닛의 머티리얼과 다른 머티리얼이 되어
드로우 콜과 배치 모두 굉장히 높아져버린다.
스프라이트 렌더러의 컬러값을 이용해 셰이더를 작성하면 될 듯 싶은데
셰이더는 정말 하나도 모르는지라 일단은 그냥 기본 머티리얼을 이용해 어둡게 깜빡이기로 세팅.
몇 번 셰이더를 만져보다가 urp 2d light도 사용하게 되지 않을까 싶어 나중에 체크해주도록 하겠다.
이렇게 구현과 최적화를 같이 하려고하니 진행 속도가 느려서
앞으로는 구현을 최우선으로 생각중이다.
몬스터의 체력이 다할 시에는 바로 죽는 애니메이션이 실행된다.
이 때 rigidbody의 simulated만 false로 바꿔주면 알아서 콜라이더도 체크되지 않는다.
일단은 괜찮아보이는데 공격범위가 굉장히 작은듯하다...
플레이어의 Mass값을 다른 몬스터보다 높게 주어 적은 양은 쉽게 밀고갈 수 있다.
하지만 물량이 많다면 밀고가기는 힘들 듯 하다.
마지막으로 몬스터 간의 그림자가 겹치면 alpha값이 더해지는 부분도 굉장히 거슬린다.
찾아본 해결방법은 stencil버퍼를 이용해서 한번만 렌더링되게? 하는 듯 싶은데
이것도 결국 셰이더를 이용해야되서 나중으로 보류...
이것으로 일반 몬스터의 대략적인 구현은 끝.
다음은 몬스터 스포너를 구현해주고
플레이어 스텟과 경험치 드롭을 구현해주어야겠다.
화면 밖으로 나간 몬스터 처리, 몬스터 스폰 메커니즘 등 고민할 것이 많을것 같다.
픽셀이 디게 울렁울렁 거리는데 비디오 설정 확인해보삼
그렇네 해상도 크게하면 저정돈 아닌데 울렁거리네 한번 체크해봐야겠음 원인은 아직 모르겠지만...
확인결과 게임뷰 해상도가 홀수여서 저 ppu 배수가 아니다보니 일그러졌던듯. 짝수해상도로 맞춰보니 울렁거림이 없어짐 !
왤케 고수노 게이야..
고수로 한걸음 더 정진하겠어요.
1. 슬라임 움직임 되게 좋네여 2. 맞았을때 하얀색 깜빡이는거는 몬스터들 공용으로 사용할 Hit Animation 따로 둬서 Sprite 의 컬러값 변경하는 애니를 주면 되지 않을까요? 3. 지금은 수가 적어서 괜찮아 보이는데 가비지 때문에 GetComponent 보다 몬스터 캐시해두고 쓰는게 더 좋을듯 하네여 최적화보다는 구현 우선이시라니까 이건 나중에 문제생기면 고쳐도 될 듯 4. 갠적으로 그림자는 크게 신경 안쓰이는거 같음!
감사합니다. 2. 스프라이트 컬러값을 변경시켜도 결국 flash effect로는 못주다보니 ( 현재 스프라이트보다 하얗게는 못 만드는 ) 셰이더를 작성해서 컬러가 0,0,0일때 기존 스프라이트 색, 컬러가 1,1,1일때 전체 하얀색으로 변경해주는 방식으로 하려고해요. 즉 말씀하신대로 Sprite 컬러값을 변경할 예정인데, 현재 유니티 기본 머티리얼은 컬러값을 변경하더라도 하얀색으로는 바꿀수가 없는것이에요. 혹시 방법이 있다면 알려주시면 감사한거에요.
3. 아 요 부분은 생각을 안했는데 말씀하신대로 공통적인 몬스터들은 hashset나 딕셔너리에 objectid를 키값으로 value를 체력 컴포넌트로 가지고있는 상태에서 ontriggerenter시에 들어오는 collision을 위 자료구조 키값으로 참조해서 접근하면 될 것 같네요. 감사합니다 ! 4. 역시 이건 혼자만의 거슬림요소인듯 ㅠㅠㅠ 셰이더 공부하고나서 한번더 체크해보는걸로... 피드백 너무감사한거에요 !
2. 아 이해했어요 그럼 간단한 방법으로는 -> 하얀색이 아닌 빨간색으로 변경 -> 몬스터 이미지대로 마스크한 하얀색 이미지를 위에 깔아놓고 해당 이미지의 컬러값 변경 근데 쉐이더가 제일 이쁠거 같네요 애초에 두번째 방법도 쉐이더로 하는게 더 쉬울거 같기도....
네 아무래도 쉐이더가 제일 손이 안갈 것 같더라고요. 조언 감사합니다 !
GetComponent는 에디터에서는 가비지 생성되지만 빌드버전에서는 가비지 생성 안 되고 성능만 조금 잡아먹는 정도에요 근데 캐시가 훨씬 나은건 맞음 ㅇㅇ 그리고 특정 버전부터는 에디터에서도 가비지 생성 안된다는듯 결론: 캐싱하자
에디터 빌드버전 다른거 너무 화나는듯 꿀팁 감사 !
슬라임 너무 징그러운데;;
콘네네~! 마타네네…
아니 여기갤은 스킨만 바꿔씌운 뱀서라이크를 몇개나 양산해대는거임?
걍 지맘이지 지 인생도 양산형으로 살면서 남의 인생엔 존나 참견하노 ㅋㅋ
모바일도 양산형 복붙키우기겜 쏟아져나오던데 ㄹㅇ 왜 겜잘알들이 그런거 까는지 알겠다
게임성이 좀...기왕 만드는건데 이렇게 비슷하게 하는건 좀 아니지않나
뱀서 짭인데
무료겜이라 그럴수 잇지 개이들아
저브셈