6/22 - 링 ID 1, 2번 & 시너지 적용 방식 변경
오늘은 링 1, 2번을 구현했다. 사실 더 구현할 수 있었는데 내가 0번을 구현할때 아주 아주 큰 실수를 했다는 것을 깨달아서 그걸 고치느라 생각보다 적게 구현했다.
1) 링을 배치할 때 다른 링으로부터 시너지를 받는 경우 범위 계산을 새로 배치한 링 기준으로 해버리는 큰 실수를 저질렀다. 그러니까 범위 4짜리가 배치되어 있는 상태에서 범위 8을 6만큼 떨어진 위치에 새로 배치할때, 새로 배치하는 링은 이전 링의 시너지를 받으면 안된다. 왜냐하면 이전에 있던 링의 범위가 4인데 6만큼 떨어졌으니까. 그런데 멍청하게도 지난번에 구현한 방식은 시너지를 받는다. 근처 링들을 받아오는 GetNearRings() 함수로 얻은 링들은 나의 범위(위의 예시에서는 8)를 기준으로 얻어진거니까!! 해결한 방법은 다음과 같다.
a. GetNearRings()함수는 쓸모가 없다. 링이 공격대상 몬스터들을 받아오는 식과 동일하게 대상을 탐색하는 것은 전혀 옳지 않다. 링과 몬스터의 관계에서는 링의 범위만 중요하지만 링과 링의 관계에는 둘의 범위가 다 필요하다.
b. 그래서 DeckManager에 있는 rings 리스트에 있는 모든 링들에 대하여 Vector2.Distance()로 거리 계산을 해서 올바른 범위인지 양쪽 입장에서 확인한다. 어차피 이제는 링 생성할 때마다 RP 소모값이 증가해서 이전 작인 Ring Summoners만큼 많은 링을 생성할 수 없으므로 괜찮을 것 같다.
c. 거리 계산할 때 콜라이더의 반지름도 넣어야 한다. 그냥 transform.position으로 계산하고 끝내면 실제로는 콜라이더가 범위 내에는 있음에도 링의 중심은 범위 내에 없어서 최종 판정이 범위 밖이라고 될 수 있다.
d. 결론은
i) 새로운 링이 기존 링에 시너지를 적용할 때: Vector2.Distance(새로운 링, 기존 링) <= 새로운 링의 범위+기존링의 콜라이더 반지름
ii) 기존링으로부터 새로운 링에 시너지를 적용할 때: Vector2.Distance(새로운 링, 기존 링) <= 기존 링의 범위+새로운 링의 콜라이더 반지름
가 true이면 링의 종류들에 따라 알맞은 시너지를 적용한다.
2) 위 내용으로 다시 구현한 후 1, 2번 링을 구현했다.
다음에 할일... 뭐, 똑같다. 최대한 링 많이 구현하기. 제발 내일은 오늘 구현한 내용들에서 문제를 발견하지 않았으면 좋겠다. 아냐, 그래도 문제 있는데 발견 못하는 것보다는 오늘같은 일 겪는게 낫지. 처음 구현할때 최소한 방향이라도 맞게 구현해야 하는데 쉽지않다. 더 노력해야겠다.
- 링 ID 3~n 번 구현하기