참고자료
- UE 공식 가이드 : https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/CharacterMovementComponent/
- 개인블로그 : https://lifeisforu.tistory.com/304
- 영상 : https://www.youtube.com/watch?v=urkLwpnAjO0&list=PLXJlkahwiwPmeABEhjwIALvxRSZkzoQpk
Character Movement 기본 구조
Character Movement 네트워크 구조
- Check or Input Vector ( from controller.h → [Possess Actor or Binded? ] movementComponent.h? )
- Controlled Character Move (State adjust) ( movementComponent.h → [movementComp→UpdatedComponent] collisionComponent(or any component which have Location)]
- delta Time + input Vector
- [Input] Vector → [Output] Acceleration ( temporary )
- Perform Move
- calc Acceleration → force/Impulse
- Start New Physics
- calc force/Impulse → velocity → location ( depend on movement Mode )
Character movement compoent 구성
movement mode
- character movement component → movement mode
- 틱마다 호출 ( movement mode == phys_... )
- Tick → (root motion, movement, etc...) → StartNewPhysics → <UEnum> MovementMode → Phys{None/Walking 등등}
- Mode 전환 호출
- SetMovementMode( movementmode, custom enum )
- 변환시 처리
- OnMovementModeChanged
- prev movement mode를 기반으로 종료되는 mode에 대한 처리
- 만약 시작될때를 기점으로 하고싶다면, setmovementmode가 호출되는 조건 ( IsClimbing등 별도 변수 )를 기준으로 사용하는 듯
- OnMovementModeChanged
- 틱마다 호출 ( movement mode == phys_... )
Add Force
더보기
void UCharacterMovementComponent::AddForce( FVector Force )
{
if (HasValidData() && !Force.IsZero())
{
if (Mass > SMALL_NUMBER)
{
PendingForceToApply += Force / Mass;
}
else
{
UE_LOG(LogCharacterMovement, Warning, TEXT("Attempt to apply force to zero or negative Mass in CharacterMovement"));
}
}
}
[Character] BP에서 movementComponent는 root component를 제어함
- ACharacter class에서 할당
더보기
ACharacter::ACharacter(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// ...
RootComponent = CapsuleComponent;
// ...
CharacterMovement = CreateDefaultSubobject<UCharacterMovementComponent>(ACharacter::CharacterMovementComponentName);
if (CharacterMovement)
{
CharacterMovement->UpdatedComponent = CapsuleComponent;
CrouchedEyeHeight = CharacterMovement->CrouchedHalfHeight * 0.80f;
}
// ...
}
프레임 내 최종 위치 결정 순서
'Unreal > UE Feature' 카테고리의 다른 글
Projectile & Spline (0) | 2024.05.17 |
---|---|
AI (0) | 2024.05.17 |
Texture (0) | 2024.05.17 |
Modeling (0) | 2024.05.17 |
Physics (0) | 2024.05.16 |