스펀지 블록
게임 내 스펀지 블록을 리팩토링하자
현 상황
왠진 모르겠지만 갑자기 스펀지 타일 위에서 플레이어 State가 Fall에서 Idle이나 Move로 돌아오지 않는다
그 외 급하게 만드느라 콜라이더 처리 등 정확한 설계 및 구현이 필요한 상태
들어가야할 기능
- 몬스터들은 통과하지 못함
- 같은 색상일 때 플레이어만 통과 가능
- 물감이 칠해지지 않음
1. 몬스터들은 통과하지 못하지만 색이 같은 플레이어는 통과할 수 있는 오브젝트
어떤 방법을 써야할까 되는대로 생각해봤다
1. Sponge Tile의 Collider를 플레이어의 색상에 따라 키고 끈다
문제점: 콜라이더 자체를 키고 끄면 몬스터들도 통과할 수 있음
해결법
1. 스펀지 블록엔 IsTrigger가 켜진 Collider를 둔다
몬스터들은 앞에 벽이 있는지 Raycast를 사용해 체크하고 있는데
스펀지 블록의 Layer를 Ground로 하여 벽으로 인식하게 한다
? 현재는 벽 콜라이더를 따로 스크립트로 제어하지 않고 오브젝트에 Collider와 Rigidbody를 붙여 충돌하게 해놨는데
몬스터 아래 스펀지 블록이 있을 경우 IsTrigger가 켜져있으므로 따로 Raycast 처리 등을 해서 인식 시켜야함
이럴거면 걍 처음부터 콜라이더, 이동 등 모든걸 Kinematic, 스크립트로 콜라이더 등 충돌 처리 해주는게 나을 것 같다
=> 비효율적. 기각
2. 유니티에서 제공하고 있는 2D Game Kit의 아래로 내려갈 수 있는 플랫폼처럼 만들기
2D Game Kit을 보면 플레이어가 아래키를 누른 후 점프를 하면 아래로 내려갈 수 있는 플랫폼이 있다
결국 이것도 아래로 내려가기 위해 플레이어 <-> 플랫폼 간에 충돌이 잠시동안 사라진다는 건데
찾고있는 것과 비슷하단 생각에 어떻게 구현되어 있는지 찾아보았다
유니티는 Platform Effector, Area Effector 등 여러가지 Effector 기능을 제공하는데
Platform Effector 2D의 Collider Mask에 플레이어 Layer를 추가, 제거하며 내려갈 수 있도록 구현되어 있었다
Collider Mask!!! 사실 스펀지 블록을 처음 만들 때부터 IsTrigger가 아니라 저걸 찾고있었다
Effector에 이런 기능이 있는지는 잊고있었네 어쨌든
결론
스펀지 블록에 Platform Effector 2D를 추가하고
플레이어 색상에 따라 스펀지 블록 Effector의 Collider Mask에 Player Layer를 추가, 제거하기
2. 물감이 칠해지지 않아야 한다
현재도 MetalGround Tag가 달린 오브젝트는 물감이 칠해지지 않는데
스펀지 블록의 Tag를 MetalGround로 둬서 사용하고 있다
Tag들도 한번 정리를 해야하는데..
3. 왜 플레이어 상태가 돌아오지 않는가
현재는 Collision Stay 함수 내에서 벽과 충돌시 충돌 방향들이 저장되고 이에따라 여차저차 되어있는데
왜 안되지?? 하고 열심히 로그를 찍어봤더니..
충돌한 Collision2D의 ContactPoint2D.normal이 로그엔 Vector2(0, 1)로 뜨지만
실제 반환하는 Y값은 0.999999였고..
해당 값을 Vector2.up과 비교하면서 같지 않다고 나오는 현상이었다.
이는 부동소수점의 오류인데 이 때문에 float을 권장하지 않고 decimal로 처리를 해야한다 등등 여러 이야기가 있지만
지금 이 값으로 연산을 하는데 연산 오류가 생긴다던지 하는게 아니라 값의 비교 처리만 하면 되므로
값을 반올림해서 비교하고 있다.
결론
x, y 값을 반올림 후 값 비교
번외
플레이어만 통과할 수 있는 젤리같은 느낌을 주면 어떨까 싶어서
말캉말캉한 액체 느낌을 주기 위해 셰이더를 공부하고 있다
16일 제작현황
유튜브에 있는 Distortion Shader를 보고 따라 만들어봄
'프로젝트 > Color Lim 개발일지' 카테고리의 다른 글
2021-06-21 개발일지 (0) | 2021.06.22 |
---|---|
2021-06-18~20 개발일지 (0) | 2021.06.19 |
2021-06-13 개발일지 (0) | 2021.06.14 |
2021-06-12 개발일지 (0) | 2021.06.13 |
2021-06-09~11 개발일지 (0) | 2021.06.11 |