개발일지 목록


#1 - 플레이어 기본 조작

#2 - 무기 기틀 세우기

#3 - 무기 종류 추가 및 업그레이드 구현

#4 - 기본 몬스터

#5 - 몬스터 스폰

#6 - 즉사 공격, 가까운 적 탐색, 데미지 표기

#7 - 플레이어 스텟

#8 - 성능 최적화 (움짤 주의)

#9 - Experience Point

#10 - 넉백 / 미티어 스트라이크

#11 - 경험치 및 레벨업 UI

#12 - HP / SP

#13 - 상호작용 / 타일맵

#14 - 활 무기 개선 및 추가 / 플레이어 팔로우

#15 - 패기 / 길찾기 (1)

#16 - 길찾기 (2)

#17 - 길찾기 (끝)

#18 - 맵 (1)

#19 - 맵 (2) / 공중 유닛

#20 - 맵 (3) / 실내 / 마스크

#21 - 장비 업그레이드 (1)

#22 - 장비 업그레이드 (2)

#23 - 테스트 플레이 & 중간 점검 (1)

#24 - 방패 무기

#25 - 경헝치 오브젝트 개선

#26 - UI / 길찾기 개선

#27 - 파괴 가능한 오브젝트

#28 - 미니 보스 (1)



잡말


안냥

나도 출시 하고싶어...

전시 하고싶어 !!!

그새끼



애니메이션


지난 번에는 셰이더 작업을 해주었고, 이제 활용할 때 !

여러 미니보스를 만들겠지만 지금 만든 미니보스는 미니슬라임큐브라는 친구야.

전 개발일지에서 나온 슬라임들은 그냥 폴짝폴짝 뛰는 것 외에는 특성이 없었지만

미니보스로 나오는 친구들은 다들 생긴것에 맞는 특성을 하나씩 달아줄거고.

이 친구의 패턴은 바로 점액!

플레이어를 따라오며 점액을 흩뿌려.

요것만 있으면 패턴이라기엔 심심하니 귀여운 돌진패턴을 하나 만들어주었어.

들어가기 전에 귀여운 모습먼저 소개해줄게.


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

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

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

각각 공격, 차징/그로기, 이동 애니메이션이야.

너무 귀여운 슬라임이야 !

씹덕



미니보스와 엘리트의 차이점을 주기위해

이전 일지의 댓글처럼 스케일을 더 키워줄수도 있을 것 같아.



구현


먼저 오늘 만들 친구의 패턴을 눈으로 보고 가도록 할게 !

79f3d72fe3f206a26d81f6e74183776867c6




플레이어로부터 너무 멀어지면 재배치,

화면 밖에서 장애물로 인해 다시 튕겨나갈 경우

안으로 들어오는 것 실행 안되도록 하기 등도 있어 !

78f3d72fe3f206a26d81f6e443847169eca7




베이스


코드도 난잡하고 설명하기도 어려울 것 같지만 올려볼게.

읽어주는 분들에겐 항상 감사해.


먼저 엘리트와 미니보스는 패턴이 같고 약간의 속성만 다르다보니

같은 프리팹을 사용할거고, 그러다보니 스크립트는 동일해.

따라서 언커먼 적의 스크립트 기본형을 먼저 짜주었어.


IKnockbackable, IDamagable 인터페이스를 상속하는 부분이야.

미니보스이므로 단순히 데미지받으면 깜빡이고, 넉백되면 그대로 밀려날듯 싶은데

공격 패턴 중에는 넉백당하지 않는다던지라는 경우가 있을 수도 있어서

abstract로 구현하도록 해주었고, 기본적으로 할 일은 Default~함수로 구현해주었어.

매번 상속받고 똑같은 넉백당하는걸 구현해줄 필요는 없으니깐.

virtual로 미리 구현해둬도 되겠지만 상속받고 구현을 해줘야되는 것을 잊을 수 있어 불편하더라고.

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


다음으로는 상태머신을 간단하게 구현해주었어.

상태별로 스크립트를 분할해줄까 싶었는데

어짜피 모든 언커먼은 패턴 1개 + 추가적으론 상속받고 구현해줄수 있고,

이동 / 아이들 / 공격 / 사망 4가지 상태가 있는데 몬스터마다 요거 만들어주면

내가 더 힘들 것 같았어.

그래서 그냥 하나에서 전부 처리하는 걸로 !


세부적인 동작은 상속받고 구현해줄거야.

화면밖에서 생성 후 첫 등장 전까지는 이동만 하고 패턴을 사용 안해줄 거라

Appear이라는 상태가 추가적으로 존재해.

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


Appear상태에서는 기본적인 이동만 해줄것이고,

Move상태에서도 대부분은 기본적인 이동만 할 테니

위 Default~처럼 디폴트 함수를 만들어주었어.


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

AppearEnter을 보면 첫 생성 시 Appear상태에 진입해서 실행되는데,

보여질 때까지 기본 움직임과 방향으로 이동해.

그 이후 추적 상태로 변경하고.

몬스터는 추적 상태에서 공격 상태로 넘어갈지 조건을 체크해줄거야.


멈춘 상태와 이동 상태에서 움직임 제어를 따로 해주는 이유는

넉백을 당하면 이동속도가 -가 되어버리는데,

멈춘 상태에서는 넉백당해서 속도가 -가 되더라도

애니메이션에서 제어중인 이동속도 변수와 관계 없이, 그리고 멈춘 상태로 다시 회복시켜주기 위해서야.



데이터


미니보스와 엘리트는 스텟 차이만 있다 했으므로 패턴에 사용되는 값 데이터가 달라야해.

하나의 스크립트를 사용하니 스크립트에 하드코딩할 수는 없으므로

(적이 엘리트, 미니보스 2개면 괜찮겠지만 요 스크립트 그대로 파생형을 만들수도 있으니깐)

데이터에 패턴에 사용되는 값 데이터를 넣기로 했어.

알아보기 편하게 enum을 사용했는데 이래도 어려운것 같아.

고수들은 어떻게 하는걸까...?

시무룩


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


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

데이터를 받은 걸 이용해서 요런식으로 사용해.

지금은 데이터를 넣어줄 적 생성기가 없다보니 awake에 임시로 배치해두었어.



독장판


독 장판을 영어로 뭐라고 해야될지 모르겠어.

이럴 땐 그냥 알아보기 편하게 한글로 작명해주는게 나을것 같아 !

생성은 독 생성 간격이나 일정 거리를 이동했을 때 해줘.

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

이동한 거리는 현재 속도 * 시간을 해주면 구할 수 있어.

속도가 -가 될 때도 있으니 절대값을 넣어주면 돼 !

와 과학은 대단해 !

과학



추적


추적 패턴은 요런 느낌이야.

시작 시 기본 이동, 방향으로 움직여.

일정 체력 비율로 깍이거나, 일정 시간이 지나면 공격 패턴으로 변경해.

7af3c028e2f206a26d81f6ed40877264



유휴


유휴 상태에서는 이전 상태가 이동이었으면 공격패턴을 위한 대기,
공격패턴이었으면 그로기 상태가 돼.
아마 유휴상태는 대부분 이런식으로 사용될 것 같아.

유휴상태 시작 시에 기본 정지 움직임 제어만 해주고 방향은 업데이트하지않아.

75f3c028e2f206a26d81f6e24e877665



공격



마지막으로 공격 상태는 돌진 패턴이야.

이 때 그냥 돌진하면 벽이 존재하고 화면 밖으로 나가버리면 좀 애매해져버리니

벽과 화면 테두리에서 튕겨나갈거야.


74f3c028e2f206a26d81f6e44680756baa


벽 검사는 이런식으로 해.

레이캐스트만 쏴도 될 것 같긴 한데, 일단은 몸통이 크면 모서리에 걸리면 레이캐스트 하나로 해결이 안될 수 있으니깐

몸체인 콜라이더로 캐스트를 해주었어.

충돌을 몇군데에서 하든 첫번째로 받은 충돌체로만 반사될거야.

수많은 일반 적들 사이에서 돌진할거라 잡몹에게 막히지 않도록

mass값을 높게 줄건데 얼마나 잘 될지는 모르겠어.

이후에 테스트해봐야 알것 같아 !

7ced9e36ebd518986abce8954285746409


마지막으로 화면 밖으로 튕겨나가는 지 검사야.

요건 카메라에 콜라이더 부착하기엔 지저분한 것 같고,

그냥 카메라 뷰포트 함수를 이용해서 해결했어.

상하좌우 방향을 검사해서 x나 y방향을 한번 반대로 바꿔줘.

화면 밖의 벽에 의해 튕겨나갔다가 다시 안으로 들어오는 현상이 무한반복되는 것을 방지하기 위해서

Flag를 사용해주었어.

그리고 플레이어로부터 멀어져서 플레이어 주변으로 재배치되는 경우에는 초기화해주고.


7cec9e36ebd518986abce89547837164f6ee





이렇게해서 대략적인 구현 끝 !

급하게 작성해서 이상한 부분이 있을 수 있으니 양해하길 바라.

다음번 일지는 마무리가 되면 좋겠는데

다운그레이드 하고 리팩토링하면서 아직 복구하지 않은 시스템들 복구해주고

얘네들 죽는 것과 보상 드롭, 스폰,

그리고 완성된 미니보스를 양산해서 돌아오도록 할게 !


마지막으로 귀여운 슬라임 한번 더 보고가.

79f3d72fe3f206a26d81f6e74183776867c6


안냥