개발 고수 선생님들
대부분 범위안에 가까운 적 찾는건 physics2d를 이용해서 distance거리로 비교하고 찾잖아요
가장 가까운적 찾는건 쉬운데 주변에 가까운 적 5명을 찾고싶다 이러면 어떤 방식으로 구현하는게 좋을까요
구글링해도 잘 안나오더라고요
개발 고수 선생님들
대부분 범위안에 가까운 적 찾는건 physics2d를 이용해서 distance거리로 비교하고 찾잖아요
가장 가까운적 찾는건 쉬운데 주변에 가까운 적 5명을 찾고싶다 이러면 어떤 방식으로 구현하는게 좋을까요
구글링해도 잘 안나오더라고요
닿은애들전부저장해서 가까운순으로찾으면됨
근데 그건 너무 비효율적이지않나요? 그런 방법밖에 없나
어차피 주변에라봤자 10마리 안팎아님? 뱀서면 30마리정도 한놈찾는거 5번 반복하는거임그냥
일단 그렇게 구현해볼게용 감사합니다
어떤 게임이냐, 얼마나 자주 호출하는냐에 따라 다르죠
뱀써라이크를 만들고있는데 자주 호출하긴합니다.
자주 호출하고 심지어 뱀서면 physics 사용은 별로 추천드리고 싶진 않지만.. 성능 무관하고 간단하게 예시를 보여드리자면
Collider2D[] colls = Physics2D.OverlapCircleAll(playerPos, searchRadius, enemyLayerMask); List<(float distance, Collider2D col)> enemiesWithDist = new(); foreach (var col in colls) { float dist = Vector2.Distance(playerPos, col.transform.position); enemiesWithDist.Add((dist, col)); } enemiesWithDist.Sort((a, b) => a.distance.CompareTo(b.distance)); var closest5 = enemiesWithDist.Take(5);
뱀서가 적이 많은 게임이라서 Physics2D 호출을 자주하면 안좋아서 미리 주변 적을 일정 간격으로 캐싱하고, 캐싱된 데이터를 기반으로 가까운 적을 탐색하거나 하는 방식이 좋을 것 같네요
상세하게 설명해주어서 감사합니다. 그러면 physics를 제외하고 범위안에 적 캐치를 하려면 어떤 방식으로 구현해야할까요?? 코드 설명해주라는게 아니라 그냥 방식만 물어봅니다.
앗 감사합니다.
제가 고수는 아니라, 제 방식이 정답도 아니고 더 좋은 방법이 있을 수도 있지만 저라면 적을 관리하는 EnemyManager를 두고, GameObject들을 가져와서 foreach 돌리면서 계산하거나, 적 개체가 플레이어와 특정 거리 안에 들어오면 이벤트를 발생시키는 방식으로 구현할 것 같습니다
30명이면 걍 포문 돌리고 좀 많아질 것 같으면 쿼드트리