Unreal

[Unreal] 4월 1일 수업정리

k-codestudy 2025. 4. 1. 14:28

문과 의자 상호작용 및 이벤트 디스패처 정리

실습

  • Chair와 Door를 만들어 각각 20과 10을 출력하도록 구현
  • 콜리전을 추가하여 충돌 처리
  • ThirdPersonCharacter에서 이벤트 디스패처를 활용하여 F 키 입력 시 동작 구현

bp_thirdPerson : 이벤트 디스패처를 생성하여 F키를 누를시 호출하게 설정
bp-door : 오버랩 시작시 bp_thirdPerson인지 판단 후 맞다면 바인드하여 10을 호출 / 오버랩 종료시 언 바인드 콜리전 설정은 pawn만 오버랩이고 전부 블럭
bp-chair : 오버랩 시작시 bp_thirdPerson인지 판단 후 맞다면 바인드하여 20을 호출 / 오버랩 종료시 언 바인드 콜리전 설정은 pawn만 오버랩이고 전부 블럭
bp-chair 안에서 F키를 누를시 20이 출력
bp-door 안에서 F키를 누를시 10이 출력
bp-door, bp-chair이 곂쳐있을 경우 10,20이 동시에 출력

핵심 개념 정리

이벤트 디스패처를 사용하는 이유

  • ThirdPersonCharacter에서 F 키 입력 시 특정 액터(Chair, Door)와 상호작용해야 함
  • Chair와 Door는 Actor를 상속받았지만, 서로 다른 클래스 -> 직접 호출이 어려움
  • 이벤트 디스패처를 사용하면 다형성을 적용하여 여러 개체를 하나의 방식으로 처리 가능

함수 포인터와 이벤트 디스패처

  • Chair와 Door는 서로 다른 자료형이지만, 함수 포인터를 사용하면 통합적으로 호출 가능
  • 이벤트 디스패처는 이벤트를 발생시키는 객체와 이벤트를 처리하는 객체를 분리
    -> ThirdPersonCharacter가 키 입력을 받고, Chair나 Door가 이에 반응하도록 설계

이벤트 디스패처 구현 흐름

ThirdPersonCharacter에서 이벤트 디스패처 생성

  • ed-use라는 이벤트 디스패처 생성 (int 값을 인자로 받음)
  • F 키를 누르면 10이 전달되도록 설정

Chair와 Door에서 이벤트를 바인딩

  • ThirdPersonCharacter가 ed-use를 호출하면 Chair와 Door에서 해당 값을 받아 처리

 

이벤트 디스패처 활용 정리

이벤트 디스패처를 활용하는 장점

  • 여러 개의 액터(Door, Chair)가 독립적으로 반응 가능 (1 대 다 구조)
  • ThirdPersonCharacter는 Door와 Chair의 구체적인 내용을 몰라도 상호작용 가능 -> 결합도 감소
  • 코드가 깔끔해지고 유지보수가 쉬워짐

이벤트 디스패처가 필요한 이유

  • ThirdPersonCharacter에서 직접 Door와 Chair를 제어하면 객체 관리가 어렵고 코드가 복잡해짐
  • 충돌(콜리전) 처리는 각 객체에서 수행해야 유지보수와 확장성이 좋아짐
  • 키 입력 처리는 ThirdPersonCharacter에서 발생하지만, 동작은 Door와 Chair에서 수행

 

충돌(콜리전)과 키 입력 처리 흐름

충돌 처리

  • Sphere와 box에 pawn과 오버랩 시 충돌을 감지하도록 설정
  • Chair와 Door 충돌이 발생했을 때만 ThirdPersonCharacter와 상호작용

키 입력 처리

  • ThirdPersonCharacter에서 F 키 입력 시 이벤트 디스패처를 호출
  • Door와 Chair는 이벤트 바인딩을 통해 ThirdPersonCharacter의 이벤트를 수신
  • Door는 10, Chair는 20을 출력

 

액터 시퀀스를 활용한 문 애니메이션

액터 시퀀스를 사용하는 이유

  • 문이 열리는 애니메이션을 간단하게 구현 가능 (Transform 보간)
  • 시퀀서(Sequencer) 탭을 활용하여 직관적으로 편집 가능

애니메이션 구현 방법

Door의 Static Mesh를 선택하고 actor Sequencer 를 컴포넌트에 추가
시퀀서(Sequencer)에서 staticMesh 추가
Transform 애니메이션 추가
회전값(Yaw)와 몇초부터 몇초까지 +를 눌러 정하기
블루프린트에서 애니메이션 실행 코드 추가