제작중인 게임에 슬라임과 같은 색상의 액체로 점프하면 슬라임이 Dive상태가 되는 시스템이 있는데
원래는
1. 액체 Shoot -> 충돌한 벽에 액체 생성,
2. 슬라임이 벽에 충돌 -> 벽에 액체가 있는지 체크 -> 액체 색이 슬라임 색인지 체크 -> 색이 같다면 Dive상태
이렇게 진행되면서 오브젝트 풀 등을 사용하지 않고 생성만 계속되는 상황이었다.
나는 이 상황이 매우 신경쓰였는데..
1. 액체가 벽에 닿음 -> (데칼처럼) 벽에 슬라임 액체모양의 자국을 남김 //하나의 Texture로 통합
2. 슬라임이 벽에 충돌 -> 벽 색이 슬라임 색인지 체크 -> 색이 같다면 Dive
이런식으로 진행하고 싶어 며칠동안 셰이더를 공부하였지만
아무래도 이 속도론 게임 완성이 더뎌질 것 같아 Stain System 에셋을 사용하였다.
Stain System에는 Mesh를 사용하는 법과 Bitmap을 사용하는 법 두가지가 존재한다.
아마 둘다 Particle을 사용하여 얼룩을 생성하는 것 같은데..
여기서 문제가 생겼다.
1. 벽에 묻은 부분적인 얼룩 Particle의 색을 얻어오는 법을 잘 모르겠음
한개의 파티클 내에 일부분의 색을 알 수 있는 법이 있을까..?
그래서 방법을 바꿨다.
1. 플레이어 In Air 상태일 때
2. 상하좌우 Ray Check (땅이 있는지)
3. 스크린샷 and 스포이드(부딪힌 방향의 벽 색상)
4. 벽 색상이 같다면 Dive상태로 변환
기존보다 성능도 괜찮고 적용도 쉽겠지 생각했던 것과 달리
스크린샷 기능까지 사용해서 벽의 색을 알아내야하는 과정이라..
마냥 쉬운 일은 아니었다.
성능을 테스트해보면서 더 나은 방법이 있는지 알아봐야 할 것 같다.
+스크린 캡쳐 기능이 따로 있길래 써봤는데.. 스크린의 높이와 너비를 따로 조정해 줘야 하는지
위치가 이상해서 스포이드 기능이 다른 위치를 뽑아냈다.
현재는 스크린 높이, 너비로 새 Texture2D를 만들고
ReadPixels, Apply 후 GetPixel로 Color를 얻어와 플레이어의 Color와 비교하는 방식을 사용중이다.
좀 더 간단한 방법이 있는지는 더 찾아봐야 할 것 같다.
'프로그래밍' 카테고리의 다른 글
Replacement Shader (0) | 2022.12.26 |
---|---|
[BoxCast 시각화] (0) | 2022.10.19 |
Animator Override Controller (0) | 2022.08.01 |
[Git Hub] 진행중인 프로젝트 새 repositories에 올리기 (0) | 2021.03.12 |
[유니티] World Space 캔버스 (0) | 2021.01.15 |