3인칭 시점으로 돌리기 위해서. 상하 설정 및. 무빙 equip등 다시 되돌려 줌

AO Aim같은것 들 설정 할 때 베이스로 바로 설정 하는법

Untitled

해당 넣어줄 Animation 만들 어 준것 들을 전체로 선택 후에 우클릭 → 프로퍼티 매트릭스를 통한 대량 편집

Untitled

Untitled

  1. 이런 방식으로 좌측 AdditiveSettings : 후에 Mesh space → SelectedAnimation frame → 기준 애니메이션 설정

    Untitled

CPlayer.cpp

bUseControllerRotationYaw = false;
GetCharacterMovement()->bOrientRotationToMovement = true;
// 게임 구현 쪽에서 컴포넌트로 관리 해줘야 하는 부분 

Untitled

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);
}

카메라가 앞에 틀어져 있다 정확히 위가 안되니까.

(애니메이션 틀리는 현상)

aim offset만들기

Get Actor Rotation  를 Delta(Rotator) B Pin  에 연결한 뒤, Return Value  를 끌어 놓고 RInterp To  노드를 추가합니다 (그리고 Current 에서 Target 연결을 교체합니다).

Untitled

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();
}