모의고사를 보고 와서 또 오랜만에 글을 남긴다.
이번에는 전에 말했었던 장소 구별에 대해서 코드를 짜봤다.
일정 범위 이내로 들어가면 상호작용이 가능해지도록 마을을 구성했는데,
true, false로는 쉽게 코드를 구성할 수 있었으나
무슨 장소인지까지 전달하기 위해서는 더 많은 아이디어가 필요했다.
(다양한 장소가 있어서 겹치면 안되기 때문에 복잡함)
그래서 나는 각 장소마다 bool 값을 받아서 상위 클래스에서 그걸
처리하여 Player에게 보내주면 어떨까라는 생각을 했고,
오늘은 그 아이디어를 코드로 옮겨서 성공시켰다.

간단하게 그림으로 나타내보았다.
각 장소마다 조건을 따져서 플레이어가 근처에 있는지 판단한 다음
매니저로 보내서 어디가 가장 가까운지와 가까운곳이 얼마나 되는지를 판단한다.
마을에서 장소 상호작용의 범위가 2개 이상 겹치게 하지 않을거지만,
0개일 경우와 1개일경우가 존재해서 PlaceCount라는 변수로 표현했다.
0개면 주변에 상호작용 가능한 장소가 없는 경우이고,
1개면 주변에 1개 있는 경우이다.
상호작용의 범위를 겹치게 해놓지 않을거라서 2개 이상이라면 무언가
잘못된 것이다. 이걸 판단함으로써 각 장소마다 다른 함수를 추가해서
모두 다 다른 이벤트를 구현하는 것이 가능해졌다.

이제 이렇게 상호 작용 가능한 장소 주변으로 다가가면,
Player 스크립트의 "IsPlayerInRange"가 true로 바뀌고
Place Name이 "PlayZone"으로 바뀐다. (저 원의 이름)

이제 swith-case 문으로 PlaceName만 확인해서
미리 만들어놓은 함수를 실행시켜두면 여러 장소에서의 각기 다른 실행이
확장성 좋고 완벽하게 만들어지게 되는 것이다.
내일? 아니면 다음 개발은 아마도 마을을 구성하는 장소들을 기획하거나,
미리 함수를 만들어두는 정도의 작업이 될 것 같다.
근데 코딩만 며칠간 했으니까 오랜만에 다시 마을을
기획해보는 것도 나쁘지 않을 것 같다. 친구들의 의견을 들으며
기획하면 항상 재밌고 새로운 아이디어가 많이 나오는 것 같다.
void CheckPlayerInRange(List<Place> list) {
List<bool> PlayerInPlace = new List<bool>();
int trueCount = 0;
string NearPlaceName = "None";
for(int i = 0; i < list.Count; i++) {
PlayerInPlace.Add(list[i].PlayerInRange);
}
for(int i = 0; i < PlayerInPlace.Count; i++) {
if(PlayerInPlace[i]) {
NearPlaceName = list[i].gameObject.name;
trueCount++;
}
}
if(trueCount > 1) {
print("Something Went Wrong!");
} else if(trueCount == 1) {
player.IsPlayerInRange = true;
player.PlaceName = NearPlaceName;
} else {
player.IsPlayerInRange = false;
player.PlaceName = "None";
}
}
새로 만든 Manager가 player에게 주변의 위치를 알려주는 코드다.
꽤 어렵게 완성하게 되었는데, 아직은 더 좋은 아이디어가 없다.
나중에 리팩토링 할 때 고치면 되지 않을까 싶다.
오늘은 50줄 정도 만든 것 같다.
그래도 뭔가 할 일이 딱딱 잡혀있고 할때마다 해내고 있어서
의욕이 꺼지지도 않았고 꽤나 성취감도 느끼고 있다.
오늘은 여기까지 하겠다.
다음 개발도 순주롭길.
'일지' 카테고리의 다른 글
소원의 섬 - 6편 (1) | 2024.09.08 |
---|---|
소원의 섬 - 5편 (2) | 2024.09.07 |
소원의 섬 - 3편 (0) | 2024.08.31 |
소원의 섬 - 2편 (0) | 2024.08.27 |
소원의 섬 - 1편 (0) | 2024.08.26 |
댓글