📝 24.03.11
struct와 class를 비교해서 설명해주세요.
Struct와 Class는 모두 객체 지향 프로그래밍에서 데이터를 설계, 관리할 때 사용됩니다. 하지만 Struct는 값 형식으로 메모리의 스택에 할당되는 데에 반해, Class는 참조 형식으로 메모리의 힙에 할당된다는 차이점이 있습니다. 또한, Struct는 상속을 지원하지 않지만 Class는 상속을 지원하여 보통 구조체에 비해 복잡한 데이터 및 동작을 표현할 때 사용합니다.
상태 머신에서 가장 중요한 것을 꼽자면 분기점이라고 생각한다.
언제 다른 상태로 전환할 것인지 그 시점을 잘 잡는 것이 중요하다.
걷기를 예로 들면, 이동 키의 입력이 시작되었을 때 걷기 상태로 전환되었다가 이동 키의 입력이 끝나면 다시 초기 상태로 변환한다. 점프를 예로 들면, 땅에서 점프 키를 입력받은 순간에 점프가 시작되었다가 다시 땅으로 돌아오면 초기 상태로 변환한다.
그렇다면 콤보 공격은 어떻게 구상해야 할까?
앞서 구상한 전사 직업의 콤보 공격은 입력이 연속적으로 이루어지지 않고 처음 덱빌딩한 콤보대로 끊이지 않고 공격이 이어져야 한다. 그래서, 이 모든 상태가 끝난 후에야 공격 상태에서 벗어날 수 있다.
즉, 이 애니메이션 컨트롤러의 AttackStop
시점에서 상태가 변환되는 것이 가장 좋다.
PlayerAttackState 스크립트에서 이 시점을 찾아 구현하기 위해 여러 고민을 하였으나, 결국 포기하였다.
그래서 해결한 방법이 바로 애니메이션 이벤트이다. 애니메이션 동작은 없는 AttackStop이라는 애니메이션을 만들고, 0초에 애니메이션 이벤트를 추가해주었다. 여기서 사용된 함수는 아래 스크립트의 StopAttacking()
함수이다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StopAttack : MonoBehaviour
{
public Player player;
public void StopAttacking()
{
PlayerStateMachine stateMachine = player.GetStateMachine();
stateMachine.ChangeState(stateMachine.IdleState);
}
}
스크립트를 통해 구현하면 좋았겠지만, 이것이 가장 깔끔한 정리였다고 생각한다.