큐브를 특정 범위 안에 가두고자 합니다.
물론 눈치채셨겠지만 구의 범위에 가둘 것입니다.
범위를 벗어나면 다시 초기 시작 지점으로 되돌리자 합니다.
구를 범위로 사용하고자 생성했습니다.
하지만 가까이 가면 투명해집니다.
외곽선을 만들 때 이야기했듯이 보통 3D 오브젝트의 경우 뒷면이 보이지 않기에 그리지 않습니다.
그렇다면 뒷면이 보이게 그리면 되겠죠?
Render Face를 Back으로 해준 셰이더를 만들어서 적용해 주면 됩니다.
내부에서만 보이면 되기에 Back을 뒷면만 그리게 해준 것입니다.
찾아보니 3D 모델링 툴에서 만들어오는 방법도 존재합니다.
적용해 주니 겉이 아닌 안에만 그려진 것을 볼 수 있습니다.
빛의 경우에는 기울어진 빛보단 위에서 내리쬐는 것이 나을 것 같아서 수정해 봤습니다.
만약 구가 빛을 받는 것이 싫으시다면 Lit이 아닌 Unlit으로 수정해 주시면 됩니다.
테스트해 볼 경우 이전과 다르게 큐브가 밀려 나가듯 빠져나갑니다.
이유는 구에도 콜라이더가 존재하기 때문입니다.
Is Trigger를 체크해 줍니다.
출처 : https://docs.unity3d.com/ScriptReference/Collider-isTrigger.html
체크해줄 경우 충돌은 하지 않지만, OnTrigger이벤트는 발생시킵니다.
수정해 주니 이전과 같이 차분하게 이동합니다.
구는 범위이기에 그림자가 구 위에 그려지면 안됩니다.
셰이더에서 Receive Shadows를 체크 해제하면 됩니다.
구 위에 그림자가 없는 것을 볼 수 있습니다.
이전에 업데이트에서 프레임 단위로 작동하던 것을 코루틴에서 작동하게 하였습니다.
WaitForSeconds를 활용하여 1초마다 큐브를 발사하게 하였습니다.
큐브가 구에 범위를 벗어나면 OnTriggerExit가 발동됩니다. 좌표를 0, 0, 0으로 옮긴 뒤 다시 Shoot하게 만들었습니다.
즉 1초마다 발사하는 큐브가 범위를 벗어나면 원점으로 돌아와서 다시 발사됩니다.
이 상황이 지속되면 큐브가 쌓이게 되는 것이죠.
이것이 제가 생각했던 게임을 어렵게 하는 요소였습니다.
범위를 벗어난 큐브가 다시 원점으로 돌아오는 것을 볼 수 있습니다.
원래 게임의 구현보단 셰이더 관련된 글을 더 쓰려고 했습니다.
그래서 알쓸유잡도 더 챙겨 보고 외국인이 만든 셰이더도 직접 만들어보고 그렇게 시간을 보냈습니다만 막상 적용해 보니 적절한 셰이더는 아닌 것 같아서 일단 보류했습니다.
프로젝트 자체는 간단한데 공부를 목적으로 하는 거라 공부하는 데 걸리는 시간이 더 많네요. 개인적으로 알아가는 재미가 있어서 좋았습니다.
공부 이외에도 서류 작성이나 면접 등으로 시간을 보냈는데 꽤 알차게 보낸 것 같습니다.