내가 만들 게임은 2D 게임이기 때문에, 보이는 건 이렇게 벽처럼 보이더라도, "빛을 비추어 막힌부분을 그림자로 처리한다"라는 당연한 개념을 적용 할 수 없음.
펼쳐놓은 종이에 빛을 비춘다고, 그림자가 생기는 건 아니니까. 그래서 고민을 좀 하다가 약간의 꼼수를 사용하기로 함.
위와 같은 장소의 벽 오브젝트를 보이지 않게 하고 타일만 볼 수 있게 했음. 자세히 보면 푸른 외곽선이 보일꺼임. 이건 타일인데, 2D에 그림자를 구현하기 위한 꼼수의 일종임
이 방식을 활용하면, 내가 직접 그림자를 지정하기 때문에, 실외에 해당하는 벽들만 선별적으로 그림자를 그려줄 수 있음.
우선 이런 식으로, 벽의 위치에 대응하는 그림자를 사전에 그려둠.
위의 푸른 선 타일과 대응하는 프리팹을 1대1로 두어서, 해당 타일이 존재하는 위치의 벽 오브젝트의 자식 오브젝트로 대응되는 프리팹을 생성하여 넣는 방식으로 구현 했음.
게임에는 또한, 시간 개념이 존재하기 때문에, RefreshShadows 메서드를 턴 시작 시점에 이벤트로 등록하여, 그림자의 형상을 바꿀 수 있게 해놓았음.
각 그림자 오브젝트는 이런 스크립트를 부착해서, ModifyOnTime이 Invoke 될 때, 일괄적으로 실행하도록 함.
이제 구현한 걸 한번 테스트 해보도록 하자.
아침
점심
저녁
밤
나중에 화면 어둡게 하는 필터 넣을거고, 밤이라 그림자는 없음.
이제 반벽이나, 유리벽같은 놈들은 또 새로운 그림자를 그려야겠지 ㅋㅋ 신난다!
ㅁㅊ 시간따라 그림자 바뀌네
캬
개고수... ㄷㄷㄷ