1. 리타킷 ㅇㅋ
2. 애님인스턴스ㅇㅋ
3. 애님블루프린트 ㅇㅋ
4. 애님블루프린트 연동ㅇㅋ
5. 앉은 애니메이션 ㅇㅋ
□ 최대한 한클래스어 넣어두지 않고, 분산하기 위해서 노력함
□ 현재 클래스 : AnimInstace, Character, Controller, GameMode
□ 바인딩 함수 위치, 캐릭터 상태, 블루프린트 애니메이션 컨트롤, 핸들링 때문에 시간이 걸림
Character : 스트링 암, 메시
Controller : input bindAxis 되어 있음
AnimInstace: c++와 연동을 해서 bp 연동해서 앉은 애니메이션 처리, Character 방향과 속도를 받고
GameMode : 건들거 없는 거 같음
□ 중요과제는 Crouch관련 함수를 bindAction을 하고, bCrouch를 이용하여 앉은 애니메이션을 처리 하는 것.
▶ Character에서 액션키 바인딩과 bool IsCrouch를 사용했으면 쉬울거 같은데, 한 곳에 코드가 몰릴 거 같아서 안함
▶ 액션키 바인딩은 한 클래스와 관련된 클래스만 일단 이 클래스에서 Controller에서만 바인딩함
▶ bCrouch 애님블루프린트에 노출이 될라면, AnimInstace에 있어야 하거나 핸들링이 필요한거 같음
▶ AnimInstace: c++와 연동을 해서 bp 연동해서 앉은 애니메이션 처리, Character 방향과 속도를 받고
□ 일단 핸들링이 필요한거 같음.
▶ 상태관련 isCrouch를 isDead 캐릭터에서 정의해서 관리를 할까 했지만, 이러면 AnimInstace와 2번 관리를 해야 하고, Controller에서 사용도 어려워져서 안함 -> 실패
▶ AnimInstace에 포인터변수로 Character를 저장해서 사용할려고 했으나 헤더에서 구현클래스(KClass)는 사용이 안됨.
헤더에 kClass 추가하면 연결될 거 같으나, 헤더가 꼬일까봐 안함 -> 실패
▶ bindAction을 Delegate로 사용해봤지만, 뻥남 -> 실패
▶ 앉기 애니메이션을 하다가 ACharacter::Crouch 관련 함수들이 있었으나 -> 실패
▶ 블루프린트에서 isCrouch 가져오기 위해서 여러가지 해봣지만, 캐스팅을 해야 하는데,
이 과정에서 Character 및 Controller 를 얻어 오는 게 번거로웠음 -> 실패
□ bindAction과 앉기 함수
Character 만들어서 핸들링 했으나 안됨
AnimInstace에서 만들어서 핸들링 했으나 안됨
기존부터 바인딩 해왔던 Controller 에서만 되는 거 같음
그래서 AnimInstace에서 변수를 만들고, Controller에서 바인딩함
□ isCrouch 및 SetCrouch (2중 핸들링?)
AnimInstace에서 Character 캐스팅을 해서 받음 속도와 방향벡터를 얻음.
AnimInstace에서 상태관리를 하기로 함
Controller에서 AnimInstace함수를 가지고 와서 바인딩
void UKAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
mycharacter = Cast<ACharacter>(TryGetPawnOwner());
if (!::IsValid(mycharacter)) return;
if (!m_bIsDead)
{
m_fSpeed = mycharacter->GetVelocity().Size();
m_fDir = CalculateDirection(mycharacter->GetVelocity(), mycharacter->GetActorRotation());
}
}
void UKAnimInstance::SetCrouch()
{
if (m_bIsCrouch == false)
m_bIsCrouch = true;
else
{
m_bIsCrouch = false;
}
}
void AKPlayerController::SetupInputComponent()
{
Super::SetupInputComponent();
InputComponent->BindAxis(TEXT("MoveFB"), this, &AKPlayerController::MoveFB);
InputComponent->BindAxis(TEXT("MoveRL"), this, &AKPlayerController::MoveRL);
InputComponent->BindAxis(TEXT("Turn"), this, &AKPlayerController::Turn);
InputComponent->BindAction(TEXT("Crouch"), EInputEvent::IE_Pressed, this, &AKPlayerController::ToggleCrouch);
}
void AKPlayerController::ToggleCrouch()
{
auto pawn = Cast<AKCharacter>(GetPawn());
if (!IsValid(pawn)) return;
auto anim = Cast<UKAnimInstance>(pawn->GetMesh()->GetAnimInstance());
anim->SetCrouch();
}
m_fSpeed = mycharacter->GetVelocity().Size();
위 변수를 이용해서 이동 애니메이션 블렌딩 적용
애니메이션 리소스가 적어서 디테일한 모션 생략하게됨
'Unreal > Game 2 ' 카테고리의 다른 글
5. 점프 애니메이션 (0) | 2019.06.18 |
---|---|
4.1 기존 바인딩 함수 이동 (0) | 2019.06.18 |
3. 플레이어 컨트롤러 (바인딩 방법 2개) (0) | 2019.06.15 |
2. 기본 게임모드 및 기본캐릭터 설정 (0) | 2019.06.14 |
1. 게임준비 및 디버깅로그 세팅 (0) | 2019.06.14 |