1abcdc2aa5f720a763afdab058c12a3aa16f11ec7c6a8802f9ab26d2

내가 만들 게임은 2D 게임이기 때문에, 보이는 건 이렇게 벽처럼 보이더라도, "빛을 비추어 막힌부분을 그림자로 처리한다"라는 당연한 개념을 적용 할 수 없음. 
펼쳐놓은 종이에 빛을 비춘다고, 그림자가 생기는 건 아니니까. 그래서 고민을 좀 하다가 약간의 꼼수를 사용하기로 함.

1eb5d122eac507897babdabc18d4377340751be8c2a0ae8ea8bd2fb13afe63

위와 같은 장소의 벽 오브젝트를 보이지 않게 하고 타일만 볼 수 있게 했음. 자세히 보면 푸른 외곽선이 보일꺼임. 이건 타일인데, 2D에 그림자를 구현하기 위한 꼼수의 일종임
이 방식을 활용하면, 내가 직접 그림자를 지정하기 때문에, 실외에 해당하는 벽들만 선별적으로 그림자를 그려줄 수 있음.



1eb5d122eac5788f63bed1b058c12a3aff32dbc2d78bd578e7a0fc

우선 이런 식으로, 벽의 위치에 대응하는 그림자를 사전에 그려둠.



1eb5d122eac5078b6fb1d7b213c36a2dba0c62523f6033db938877877737

위의 푸른 선 타일과 대응하는 프리팹을 1대1로 두어서, 해당 타일이 존재하는 위치의 벽 오브젝트의 자식 오브젝트로 대응되는 프리팹을 생성하여 넣는 방식으로 구현 했음.


게임에는 또한, 시간 개념이 존재하기 때문에, RefreshShadows 메서드를 턴 시작 시점에 이벤트로 등록하여, 그림자의 형상을 바꿀 수 있게 해놓았음.




1eb5d122eac507876dabdfba189f3433e810941c3cea141d17abadf8


각 그림자 오브젝트는 이런 스크립트를 부착해서, ModifyOnTime이 Invoke 될 때, 일괄적으로 실행하도록 함.


이제 구현한 걸 한번 테스트 해보도록 하자.



아침

1eb5d122daff37b460b6d8b258c12a3a249af1305373428dc6518314


점심


1eb5d122dafc37a960f1c6bb11f11a396b9d2faba22ba56b32


저녁


1eb5d122daf33eb26badd8ba19df6a2d42d9165b447f9991dd97bfcad429


1eb5d122dafc31a166ab98a518d6040373c11e1d0b4d445a769b

나중에 화면 어둡게 하는 필터 넣을거고, 밤이라 그림자는 없음.


이제 반벽이나, 유리벽같은 놈들은 또 새로운 그림자를 그려야겠지 ㅋㅋ 신난다!