그러면 손을 카메라 앞에 놓아야 하는데 어디다 놓는게 적당할까?

 

지금까지는 왼손과 오른손 클래스를 따로 만들어서 했는데

 

그냥 카메라 폰에다가 생성시켜서 쓰는게 편할것같다.

 

그전에 잠깐

로컬 좌표로 카메라 이동시키기 테스트

 

 

 

대충 이렇게 셋 렐레티브 로케이션으로 하면

 

 

 

손 오일러각, 컴포넌트 공간 다룰때 했던것 처럼

월드 좌표계가 아닌 로컬 좌표계로 이동됨

 

카메라 폰 전역계 -65 도 회전시킨 상태에서

위 상대 좌표로 전진시켰을때 나오는 화면 

 

 

 

 

이제 양 손을 카메라 폰에 추가시키자

각 손에 포저블 컴포넌트 만들어서 스켈레탈 메시 등록하기

 

카메라폰 

#pragma once
#include "Components/PoseableMeshComponent.h"

#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "CameraPawn.generated.h"

UCLASS()
class HANDDESKTOP_API ACameraPawn : public APawn
{
	GENERATED_BODY()

public:
	// Sets default values for this pawn's properties
	ACameraPawn();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PoseableMesh)
	UPoseableMeshComponent* HandRight;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = PoseableMesh)
	UPoseableMeshComponent* HandLeft;

};

 

#include "CameraPawn.h"

// Sets default values
ACameraPawn::ACameraPawn()
{
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;



	// 스켈레탈 메시 컴포넌트 생성 및 부착
	ConstructorHelpers::FObjectFinder<USkeletalMesh> TempHandLeftMesh(
		TEXT("SkeletalMesh'/Game/MyContent/Hand_L.Hand_L'")
	);
	HandLeft = CreateDefaultSubobject<UPoseableMeshComponent>(TEXT("HandLeft"));

	HandLeft->SetSkeletalMesh(TempHandLeftMesh.Object);
	HandLeft->SetRelativeLocation(FVector(0, 0, 0));


	// 스켈레탈 메시 컴포넌트 생성 및 부착
	ConstructorHelpers::FObjectFinder<USkeletalMesh> TempHandRightMesh(
		TEXT("SkeletalMesh'/Game/MyContent/Hand_R.Hand_R'")
	);
	HandRight = CreateDefaultSubobject<UPoseableMeshComponent>(TEXT("HandRight"));

	HandRight->SetSkeletalMesh(TempHandRightMesh.Object);
	HandRight->SetRelativeLocation(FVector(0, 0, 0));
}

// Called when the game starts or when spawned
void ACameraPawn::BeginPlay()
{
	Super::BeginPlay();
	
}

// Called every frame
void ACameraPawn::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

// Called to bind functionality to input
void ACameraPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

}

 

 

 

 

이 상태로 빌드하면

일단 손이 추가된걸 볼수있다.

 

손 위치를 정리해야하는데

 

이전에 카메라 0,0,0을 했을때 손 x를 200으로 준걸로 기억하는데 이쯤에 일단 대충 놓으면 될거같고

 

 

 

왼손, 오른손 메시는 서로 반대로 뒤집혀있기때문에

아래만큼 회전시켜줘야한다.

 

왼손 오른손

 

 

 

 

카메라가 이상하게나와서 보니

bp에서 만든 카메라 컴포넌트가 손 하위로 내려간다.

 

 

카메라 컴포넌트도 그냥 c++로 추가

해서 해봣는데

루트컴포넌트가 아니어서그런지 컴포넌트계 기준으로 가지 않고 

원점기준으로 가버린다.

 

 

 

아쉬운대로 액터로케이션 + 포워드 벡터

이용해서

손 앞에 배치하고

 

 

회전 같은 경우에는 set rotation 2번해서는 마지막껏만 적용됨

찾아보니 컴바인 로테이터가 존재하여 사용

 

 

 

회전시 손 따라가기는 해결했으나. 

반정규화된 블라즈 핸드 xy와 월드 공간상 좌표 매칭이 문제

 

 

 

 

 

 

잡기너무힘들다

 

 

 

 

 

잡기 너무힘들어서 정면에 놓고 테스트

정면은 이런식으로 좌표가 되는데

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

회전 재정리

 

https://ghebook.blogspot.com/2020/08/blog-post.html

 

get actor forward vector -> 1, 0, 0

 

yaw -30도 -> 0.866, -0.5, 0

yaw -60도 -> 0.5, -0.86

 

yaw 30도 -> 0.866, 0.5, 0

ywa 60도 -> 0.5, 0.866, 0

 

 

회전하다보니 z축 이동은 지금도 가능하다싶네

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

게임폰은 -341,0,641

 

641 - 450 = 191

 

100은 오프셋 - 해서 위아래 이동 수정

 

 

 

 

 

 

 

 

 

 

잠깐 좌표 상황 정리하고

 

 

 

 

 

 

 

 

 

갯 포워드 백터니 라이트 백터니 대신

그냥 xyz 다합친뒤 rotate vector로 처리

 

 

 

 

 

손따라오는게 이상한데 회전을 원점 중심으로 회전해서 그런듯

이걸 해결할 방법은 대충 이해는 하고있는데 생각만큼 안되서 포기하고

그냥 전체 요소들을 플레이어 시작점을 원점이 되도록 밀어 해결

 

양손 추적 확인 

 

 

 

이제 거의다 구현된듯 하지만 카메라 전 후진에따라 위치 반영을 시켜주지 않았다.

 

카메라와 액터가 원점에 있지만

줌인 줌아웃 에따라 카메라를 전후진 시켜줄것이므로 이에 따라 손위치도 따라가야함

 

 

지금 손은 원점 기준 400 만큼 앞에가있도록 되어있어

원점 대신 카메라 기준 400만큼 앞에 가도록 고쳐야함

 

 

 

 

 

 

카메라 컴포넌트 위치에 따라 손 따라가도록 추적

카메라 폰 자체 위치는  원점 그대로

 

 

 

 

 

 

 

 

 

손 방향 설정

 

 

 

왼손 - 관절 위치 설정, 손 위치 설정

 

오른손 - 관절 위치 설정, 손 위치 설정

 

 

 

 

 

 

 

 

 

+ Recent posts