프로젝트PF - StateComponent와 PlayableCharacter 의 통신 (1)

지용현·2023년 7월 25일

프로젝트PF

목록 보기
7/30
post-thumbnail

1. 설계

왼쪽 Shift를 누르고 있으면 Running, 때면 Walking 상태로 바꾸기를 구현 할 것이다.

Shift 키 누름 -> PlayableCharacter에서 StateComponent의 SetState(Running)함수 실행 -> StateComponent에서 State 바꾼 뒤 델리게이트 BroadCast -> PlayableCharacter에서 델리게이트에 바인딩 되어 있는 SetRunningMode 함수 실행

Shift 키 땜 -> PlayableCharacter에서 StateComponent의 SetState(Walking)함수 실행 -> StateComponent에서 State 바꾼 뒤 델리게이트 BroadCast -> PlayableCharacter에서 델리게이트에 바인딩 되어 있는 SetWalkingMode 함수 실행

2. 구현

  • LeftShift InputAction 생성, StateComponent(Actor Component) 생성

(State Component의 객체 생성)

  • InputAction (IA_LeftShift) 생성

(bool 값)

  • InputMappingContext에 LeftShift 생성

  • StateComponent의 OnStateChanged 델리게이트에 바인딩 할 함수와 Walking, Running State 일 때 실행 할 함수 생성

( IICharacter 인터페이스에 생성했으나 이런 것 까지 인터페이스화 해야하나 싶은 생각이 조금 든다. )

( LeftShift의 Pressed시 함수와 Released시 함수 생성, IICharacter 인터페이스에 만든 함수들 override )

( 위 함수들의 내용 )

  • Action 바인딩과 델리게이트 바인딩

( Input Action 바인딩인데 UE4 때는 Pressed와 Released가 있었던 것으로 기억하는데 여기선 Started와 Completed로 구현 할 수 있었다. 이 것 말고도 다른 방법도 있을 것 같다. )

( StateComponent의 OnStateChanged 델리게이트에 만든 함수 바인딩 )

3. 결과

계획 한 대로 Shift를 꾹 누른 상태에선 Running 상태가 되고 속도가 빨라진다.
꾹 누르고 있더라도 Pressed 함수는 한 번만 실행이 된다.
Shift를 때면 Walking 상태가 되고 걷기 속도가 된다.

4. 다음 할 것

  • 아무 움직임 입력 없을 시 Idle 상태로 바꾸기 구현 ( Move InputAction에 바인딩해서 구현해볼까? )
  • Input Action에 바인딩 해서 State변환이라면 Jumping 상태도 추가 할 수 있을 것 같다. 추가해보기
  • WalkSpeed와 RunningSpeed의 변수화
  • 개선 할 구조 있을지 생각해보기 ( Shift 누를 시 Set State갔다가 다시 델리게이트로 Character 와서 함수 실행하는 과정이 옳은지 생각해볼것 )
  • Walking -> Running, Running -> Walking 과정에서 속도가 뚝 뚝 하고 바뀌는걸 서서히 느려지거나 서서히 빨라지는걸 구현해보기 ( 나중에 해도 됨 )
profile
게임 개발자 지망생

0개의 댓글