3인칭 시점으로 돌리기 위해서. 상하 설정 및. 무빙 equip등 다시 되돌려 줌
AO Aim같은것 들 설정 할 때 베이스로 바로 설정 하는법
해당 넣어줄 Animation 만들 어 준것 들을 전체로 선택 후에 우클릭 → 프로퍼티 매트릭스를 통한 대량 편집
이런 방식으로 좌측 AdditiveSettings : 후에 Mesh space → SelectedAnimation frame → 기준 애니메이션 설정
CPlayer.cpp
bUseControllerRotationYaw = false;
GetCharacterMovement()->bOrientRotationToMovement = true;
// 게임 구현 쪽에서 컴포넌트로 관리 해줘야 하는 부분
CRifle.cpp
void ACRifle::Begin_Equip()
{
AttachToComponent(OwnerCharacter->GetMesh(), FAttachmentTransformRules(EAttachmentRule::KeepRelative, true), HandSocket);
bEquipped = true;
**OwnerCharacter->bUseControllerRotationYaw = true;
OwnerCharacter->GetCharacterMovement()->bOrientRotationToMovement = false;**
}
void ACRifle::End_Equip()
{
bEquipping = false;
}
void ACRifle::Unequip()
{
OwnerCharacter->PlayAnimMontage(UngrabMontage, UngrabMontageSpeed);
}
void ACRifle::Begin_Unequip()
{
AttachToComponent(OwnerCharacter->GetMesh(), FAttachmentTransformRules(EAttachmentRule::KeepRelative, true), HolsterSocket);
bEquipped = false;
**OwnerCharacter->bUseControllerRotationYaw = false;
OwnerCharacter->GetCharacterMovement()->bOrientRotationToMovement = true;**
}
CPlayer.cpp에서 가져온거 셋팅
Direction = CalculateDirection(OwnerCharacter->GetVelocity(), forward);
CAnimInstance.cpp
void UCAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
if (OwnerCharacter == nullptr) return;
Speed = OwnerCharacter->GetVelocity().Size2D();
Pitch = OwnerCharacter->GetBaseAimRotation().Pitch;
IIRifle* rifle = Cast<IIRifle>(OwnerCharacter);
FRotator forward = OwnerCharacter->GetControlRotation();
if (!!rifle)
{
bEquipped = rifle->IsEquipped_Rifle();
if (bEquipped)
forward = OwnerCharacter->GetActorRotation();
}
Direction = CalculateDirection(OwnerCharacter->GetVelocity(), forward);
}
카메라가 앞에 틀어져 있다 정확히 위가 안되니까.
(애니메이션 틀리는 현상)
Get Actor Rotation 를 Delta(Rotator) B Pin 에 연결한 뒤, Return Value 를 끌어 놓고 RInterp To 노드를 추가합니다 (그리고 Current 에서 Target 연결을 교체합니다).
Delta 가 2개의 중간값을 구해준다
발사처리
CRifle.cpp
UPROPERTY(EditDefaultsOnly, Category = "Fire")
class UAnimMontage* FireMontage;
public:
void Shoot();
CRifle.cpp
CHelpers::GetAsset<UAnimMontage>(&FireMontage, "AnimMontage'/Game/Character/Montages/Rifle/Rifle_Fire_Montage.Rifle_Fire_Montage'");
void ACRifle::Shoot()
{
OwnerCharacter->PlayAnimMontage(FireMontage);
}
CPlayer.h
void OnFire();
CPlayer.cpp
PlayerInputComponent->BindAction("Fire", EInputEvent::IE_Pressed, this, &ACPlayer::OnFire);
void ACPlayer::OnFire()
{
Rifle->Shoot();
}