2024-04-01
깃허브! |
---|
https://github.com/ChangJin-Lee/ARproject |
★ https://github.com/ChangJin-Lee/ToonTank |
느낀점
AddActorLocalOffset의 bSweep에서 목적지 위치로 가는 도중에 중첩을 발생시킬지, 아니면 충돌검사를 해서 충돌했을때 멈추게 할지를 정할 수 있었다. AddActorLocalRotation으로 물체를 회전하는 방법에 대해서 배웠다. FRotator를 쓰는 방법과 FQuat을 쓰는 방법이 있는데 FRotator를 사용해보았다.
이름 | 설명 |
---|---|
DelatLocation | 로컬 공간에서의 위치 변화. |
bSweep | 목적지 위치로 쓸어갈 것인지, 도중에 중첩을 발생시킬 것인지, 무엇인가에 의해 막혔을 때 목표물에 도달하지 못한 채 멈출 것인지 여부. 루트 구성요소만 스윕되어 충돌 차단을 확인하고, 하위 구성요소는 스윕 없이 이동합니다. 충돌이 꺼져 있으면 아무 효과가 없습니다. |
bTeleport | 물리 상태를 순간 이동할지 여부(이 개체에 대해 물리 충돌이 활성화된 경우). true인 경우 이 개체의 물리적 속도는 변경되지 않습니다(따라서 봉제 인형 부분은 위치 변경에 영향을 받지 않습니다). false인 경우 물리 속도는 위치 변화에 따라 업데이트됩니다(래그돌 부품에 영향을 미침). CCD가 켜져 있고 순간 이동하지 않는 경우 전체 스윕 볼륨을 따라 개체에 영향을 미칩니다. |
void ATank::Move(float Value)
{
FVector DeltaLocation = FVector::ZeroVector;
double deltaTime = UGameplayStatics::GetWorldDeltaSeconds(this);
DeltaLocation.X = Value * deltaTime * moveSpeed;
// 2번째 매개변수는 bSweep이고 물체가 부딪치게끔 해준다
AddActorLocalOffset(DeltaLocation, true);
}
private:
UPROPERTY(VisibleAnywhere, Category = "components")
class USpringArmComponent* springarm;
UPROPERTY(VisibleAnywhere, Category = "components")
class UCameraComponent* camera;
UPROPERTY(EditAnywhere, Category = "Movement")
float moveSpeed = 800.0f;
UPROPERTY(EditAnywhere, Category = "Movement")
float turnRate = 80.0f;
void Move(float Value);
void Turn(float Value);
void ATank::Turn(float Value)
{
FRotator DeltaRotation = FRotator::ZeroRotator;
// Yaw = Value * DeltaTime * TurnRate
double deltaTime = UGameplayStatics::GetWorldDeltaSeconds(this);
DeltaRotation.Yaw = Value * deltaTime * turnRate;
AddActorLocalRotation(DeltaRotation, true);
}
void ATank::Move(float Value)
{
FVector DeltaLocation = FVector::ZeroVector;
double deltaTime = UGameplayStatics::GetWorldDeltaSeconds(this);
DeltaLocation.X = Value * deltaTime * moveSpeed;
AddActorLocalOffset(DeltaLocation);
}
https://blog.naver.com/milkysc/221754450137
Roll
- 물체의 X축을 기준으로 회전반경을 나타낸다
Pitch
- 물체의 Y축을 기준으로 회전반경을 나타낸다
Yaw
- 물체의 Z축을 기준으로 회전반경을 나타낸다