[유니티] 스크린샷과 스포이드 + 슬라임 액체 다이브
프로그래밍

[유니티] 스크린샷과 스포이드 + 슬라임 액체 다이브

제작중인 게임에 슬라임과 같은 색상의 액체로 점프하면 슬라임이 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