메피카타츠의 블로그
Tactical Combat System 개발일지 5 - 진영 구분 추가, 적군 추가, 근처의 적군 탐색 기능 추가 본문
오늘은 다른 것에 앞서서 어제 땜빵해놓은 부분을 보완하는 작업을 했다.
어제 Entity를 Key로, GameObject를 Value로 해서 컴포넌트를 그때그때 가져와서 이동이나 회전, 애니메이션 처리를 해줬는데, 그 부분을 따로 class로 분리하는 작업을 먼저 했다.
using UnityEngine;
namespace Script.ClientLib
{
public class EntityView : MonoBehaviour
{
private static readonly int IsMoving = Animator.StringToHash("IsMoving");
private Animator _animator;
private Animator Animator => _animator ??= GetComponent<Animator>();
public void OnPositionChanged(Vector3 position)
{
transform.position = position;
}
public void OnDirectionChanged(Vector3 position)
{
if (position == Vector3.zero)
return;
transform.rotation = Quaternion.LookRotation(position);
}
public void OnStartMoving()
{
Animator.SetBool(IsMoving, true);
}
public void OnStopMoving()
{
Animator.SetBool(IsMoving, false);
}
}
}
class 이름을 좀 고민했는데, 이름 짓는 데에는 GPT가 도움이 많이 되서 물어봤고, 비교적 명확하다고 생각되는 EntityView라는 이름을 지었다. 클라이언트에서 보여주는 이동이나 회전, 애니메이션 처리는 앞으로 이 class에서 담당할 예정이다. 또한, Key로 entity를 가지고 있었는데, 이제는 entityId라는 uint값을 활용하도록 했다.
그리고 Entity에서 가지고 있던 ModelScale 정보는 클라이언트에서만 필요로 하기 때문에 ModelSettings로 분리했다.

Entity class에 기본 능력치를 추가해줬는데, 지금 보니 이러면 캐릭터들이 똑같이 움직이고, 똑같이 공격하고, 똑같이 죽을 것 같아서 EntityData에 세팅할 수 있도록 수정해야 할 것 같다.


진영 구분 추가는 간단하게 enum을 하나 추가했다. 좌측에서 시작하는 진영이 Blue, 우측에서 시작하는 진영이 Red로 일단 간단하게 구분을 해놓았다.




그리고 Entity가 주변의 적군을 찾아올 수 있도록 하는 코드를 만들었다. 결국에는 BattleMap에서 받아와야 할 텐데, Event라고 하기는 애매해서 별도로 IBattleMapContext를 만들어서 필요한 정보만 받아올 수 있도록 하였다.
그리고, 기존에는 적군 탐색 후 적정 거리에서 공격할 수 있도록 이동하는 것을 계획했었으나, 고려할 부분이 다소 많은 듯 하여 일단 범위 내에 들어오면 공격하는 것으로 간단하게 구현하기로 계획을 변경했다.
고려할 부분이 많은 것에 대해 풀어보자면 아래와 같다.
1. 적이 시야 범위인 거리 10 이내에 들어왔다.
2. 내 사거리가 5니까 여기서 5를 더 가면 되나?
3. 근데 적의 사거리도 5니까 적도 5만큼 다가올 것 같다.
4. 그럼 중간에 사거리 내에 들어오니까 멈추든가 위치를 바꿔야 하는데, 이동이 부자연스러워질 수 있다.
5. 자연스러운 포지션 선정을 위해서는, 나와 적이 서로 합의를 본 위치로 이동을 해야 한다. (...)
그래서 어떻게 보면 Entity 혼자서 결정할 부분이 아니고, BattleMap에 "전투에 돌입했는데, 내가 이동할 최적의 위치를 정해서 알려줘" 같은 요청을 해야 하지 않을까 싶은 생각이 든다. 아무튼 그렇다보니, 간단하게 구현될 내용은 아닌 것 같아 일단 사거리 내에 들어오면 공격하는 방식으로 간단하게 구현하고, 추후 디테일 작업 때 개선할 생각이다.
오늘까지 작업된 내용은 아래와 같다.
해당 위치에 멈추게 한 건 아니고, 좌측 진영 기준 이전 영상과 목적지는 같은데, 이동을 하다가 사거리 내에 적이 들어와서 전투를 하려고 이동을 멈춘 것이다.
이제 토, 일, 월 3일에 걸쳐 공격/사망/전투 종료 기능을 구현하여 간단한 전투 시스템 구현을 마무리지어야 한다. 애니메이션을 컨트롤 해줄 class가 필요할 것 같고, 상태 머신도 필요할 것 같다. 그리고 구현 과정에서 'Entity는 생각 및 요청만 하고, 결정은 BattleMap이 한다' 같은 느낌으로 생각을 하고 있는데, 그러면 이동 처리도 바꿔야하나, 이 기준이 맞나 조금 고민이 되는 부분도 있다. 솔직히 집중이 그렇게 잘 되지는 않고 있고, 쉽지는 않지만 어찌저찌 진행은 되고 있는 것 같다. 이런 자세라면 월요일까지... 다소 엉성하더라도 전투가 돌아가긴 하지 않을까? 하는 기대를 해본다.
'개발 > 개발일지' 카테고리의 다른 글
| Tactical Combat System 개발일지 7 - Projectile 처리 추가 (1) | 2026.02.11 |
|---|---|
| Tactical Combat System 개발일지 6 - Entity 상태 전이 추가, 공격/사망/전투 종료 구현 (0) | 2026.02.10 |
| Tactical Combat System 개발일지 4 - 이동할 때 움직이는 애니메이션, 정지하면 Idle 애니메이션 재생 (0) | 2026.02.05 |
| Tactical Combat System 개발일지 3 - 클라/서버 공통으로 사용 가능한 이동 시스템 구현 (0) | 2026.02.04 |
| Tactical Combat System 개발일지 2 - 단기 목표에 대한 계획과 일정 수립 (0) | 2026.02.03 |