viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc85ae38bed574660b22545dbdd3f756f76d18c43e506c1a0b15aae218a4c3cb2c86


위와 같은 효과를 내고 싶어서 꽤 고민했습니다.


우선 해당 장소로 들어왔다는 것을 어떻게 인식할 수 있을까 고민해봤는데 현재 위치를 계속 비교하는 것보다 Collider를 쓰는게 더 나을 것 같다고 판단했습니다.


입구에 BoxCollider를 배치해서 OnTriggerEnter2D가 호출되면 장소가 바뀌는 것으로 인식하려고 했으나

Trigger가 발동되어도 안으로 쭉들어가지 않고 그대로 다시 나와버리면 장소는 바뀌었다고 인식하지만 실제로는 바깥에 있게 되는 문제가 발생했습니다.


이걸 어떻게 해결해야할까 고민해보다가 OnTriggerExit2D가 호출되었을 때 Player의 위치를 비교해서 해당 장소의 안쪽에 위치한다면 안으로 이동한 것으로,

바깥에 존재한다면 바깥으로 나간것으로 인식하도록 했습니다.


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc85ae38bed574660b22545dfc86a3519d6e1ec41e8e06def8e4eabc2621b7ac195fca7a21a3d2

이 때 필요한 것이 해당 장소의 좌측상단, 우측하단의 좌표입니다. 그래서 자식오브젝트에 좌표를 표시할 더미 오브젝트를 생성했습니다.

LeftTop과 RightBottom을 실제 해당 장소의 좌측 상단, 우측 하단에 위치시켰습니다.

*** 나중에 맵의 데이터들을 외부에 저장하게 된다면 Place의 위치, LeftTop, RightBottom의 좌표들을 전부 저장하는게 가능한 것인지 잘 모르겠습니다.


이렇게 해서 Player가 특정 장소의 안쪽으로 들어갔는지, 혹은 바깥으로 나갔는지 판단할 수 있게 되었습니다.


이제 다음으로 해야할 일은 해당 장소에 존재하는 InteractableObjects(상호작용 가능한 오브젝트들이라 이름 붙였습니다.)을 활성화 해주고

다른 장소의 InteractableObjects를 비활성화 해주는 것입니다.


그러기 위해선 특정 장소가 자신의 바깥 장소를 알고 있어야 합니다. 그렇게 되면 아래의 두 가지 경우로 모두 처리할 수 있게 됩니다.

1. 특정 장소로 들어갔다 -> 해당 장소의 오브젝트 활성화 + 바깥 장소의 오브젝트 비활성화

2. 특정 장소에서 나왔다 -> 해당 장소의 오브젝트 비활성화 + 바깥 장소의 오브젝트 활성화


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced8ffa11d02831dfaf0852456fb219302713c4cc85ae38bed574660b22545dfc86a3519d6e1ec41e8e06def8e4eaec7373b1f91d0b9a7a455130


장소를 나타낼 오브젝트에 위와 같은 변수를 갖는 스크립트 Place를 추가해주었습니다.

placeName은 해당 장소의 이름, outerPlaceName은 해당 장소의 바깥 장소의 이름, description은 화면에 표시할 이름입니다.

결국 장소, 오브젝트 등등의 데이터들을 외부에 따로 저장해두어야하기 때문에 바깥 장소의 이름과 오브젝트 모두 저장할 수 있도록 했습니다.

FindPlace라는 메소드를 이용해 리스트에 존재하는 장소 오브젝트들을 하나하나 비교하며 outerPlaceName을 placeName으로 갖는 오브젝트를 참조했습니다.

*** 후에 맵을 생성하는 부분을 따로 만들게 되면 그 때 FindPlace를 사용해 바로 outerPlace를 참조하도록 하고 outerPlaceName은 저장하지 않을 생각입니다.


아직 초보라 미숙한 점이 많습니다. 다른 분들의 생각을 들어보고자 글을 쓰려고 한거라 이런 부분을 구현하는데 있어서 더 좋은 방법을 알고 계시다면 알려주시면 너무 감사하겠고 어떤 식으로 하면 더 효율적일 수 있을지 같이 고민해봤으면 좋겠습니다.