코드 리팩토링을 하기전에는
이런 식으로
전략 패턴으로 상속 받으면서 적의 이동이나 공격을 처리했었음.
근데 이번에 ECS로 구조를 바꾸면서,
전략 패턴을 움직임의 세부적인 로직만 따로 "EnemyMovementAISystem"이라는 별도의 시스템으로 분리해서 관리하도록 바꿨음.
코드를 요약하자면
"EnemyMovementAIComponentBase.cs":
- 모든 적 움직임 AI의 베이스가 되는 추상 클래스.
- 공통적으로 필요한 MoveDuration 같은 프로퍼티가 들어있음.
"EnemyMovementAISystem.cs":
- 적마다 이동 로직을 분류해서 처리함.
"EnemyData.cs":
- 적 데이터를 ScriptableObject로 관리.
- EnemyMovementAIComponentBase 변수를 만들고, 에디터 코드로 아래 사진처럼 클래스 타입과 생성자 값을 인스펙터에서 간편하게 설정 가능하도록 했음.
이런 식으로 인스펙터에서 간편하게 설정할 수 있음.
EnemyMovementWaitAIComponent로 예시 (MoveDuration동안 움직이고, WaitDuration동안 기다림)
아직 애니메이션을 적용하지 않아서 어색하긴 한데 기능은 아주 잘 동작함.
Attack도 마찬가지로 적용할 예정
근데 애니메이션은 또 어떻게 적용할지 막막..
장비 교체하면 보이는것도 그걸로 바뀌나요? - dc App
네네 아직 기능은 없는데 만들 예정입니당
캐릭터 에셋이 그걸 지원해요?? - dc App
에셋이 아니라 2인 개발이라서, 같이 개발하는 아트 담당 친구가 직접 그려줍니다
아 제가 말한거는 그 이동 모션도 프레임 여러개있을건데 그 프레임마다 각 장비도 각각 그려주시나요 아트분이?? 이런식이면 작업량이 상당할거같은데 저도 2d 게임 만들면서 이부분 때문에 엄청 고민을 했어서 4방향 캐릭일때도 그렇고.. - dc App
4방향이라서 작업량이 많긴 할 텐데 고맙게도 해준다네요 ㅎㅎ
그러면 예를 들엇니 공격 모션 스프라이트 5개 이동 모션 스프라이트 5개 ~~~ 10개 이런식으로 있다 그러면 장비 하나당 20개씩 스프라이트 주신다는걸까요? 아트분이?? - dc App
예를 들어서 - dc App
아 제가 잘못 이해했네요 예를 들어, 캐릭터가 칼을 들고 있을 때 등 뒤에 무기가 보이도록 하려면, 각 이동 스프라이트마다 무기를 직접 그려넣는 게 아니라, 캐릭터 스프라이트와 무기 스프라이트를 따로 만들어서 코드상으로 서로 붙어 있는 것처럼 보이게 하는 방식입니다!
이렇게 하면 캐릭터의 모든 프레임마다 무기를 따로 그릴 필요가 없겠죠? 그림도 코드처럼 재활용할 수 있습니다!
그러면 무기는 애니메이션 컨트롤러가 없고 캐릭터 이동 anim 파일의 각 프레임에서 무기나 장비같은거의 피벗이나 위치를 조정하신다는 말씀이 맞나요?? - dc App
음 그것도 사람마다 하기 나름이긴 한데 전 Animation Clip에 있는 Animation Event로 처리합니다.
캐릭터 이동 Animation Clip에서 무기 스프라이트 교체나, 위치 조정같은 걸 할 수 있게 함수를 호출시켜주는 것이지요
그러면 상의 같은경우에는 앞면,뒷면,옆면 3개만 스프라이트가 있음 되는거 맞나요?? - dc App
네 맞습니다