Unreal

6. Moving Object & Trig Function(삼각함수)

Kelvin의 게임개발 2023. 12. 8. 00:20
728x90
반응형

1. SetActorLocation & SetActorRotation

 

SetActorLocation : 원하는 Actor를 원하는 위치로 이동시킨다

 

원하는 타겟 위치 (FVector)를 인자로 가진다

 

SetActorLocation(FVector(0.f, 0.f, 50.f));

SetActorLocation() : 원하는 위치 (FVector), 해당 Actor를 움직일 때 다른 오브젝트에 충돌하는지 감지하고 충돌한다면 직전에 멈추게 할지 (bool), FHitResult*, ETeleporType을 인자로 가진다 (추후에 자세히 설명)

 

SetActorRotation : 원하는 Actor를 원하는 회전값만큼 회전시킨다

 

원하는 회전값 (FRotator), 이 Actor가 충돌 콜리젼이 허용될 때 회전이 이 Actor에 붙어있는 다른 파트에 물리적 영향을 미치게 할 것인지 아닌지 (bool)을 인자로 가진다 (true면 Actor회전을 단순 teleport로 처리하여 붙어있는 다른 파트에 영향을 미치지 않고 false일 경우 영향을 미친다 ex) chain같은게 붙어 있을 때 teleport physics가 false이면 펄럭거리지만 true일 경우 그렇지 않다)

 

SetActorRotation(FRotator(0.f, 45.f, 0.f));

SetActorRotation() : 원하는 Actor를 원하는 회전값만큼 회전시킨다

 

원하는 회전값 (FRotator or FQuat), ETeleportType을 인자로 가진다 (ETeleportType이 BP에서의 TeleportPhysics와 같음)

 

FRotator는 Pitch(Y), Yaw(Z), Roll(X)로 구성되어 있다 (Vector와 X,Y,Z 순서가 다르다)

 

 

2. Actor World Offset

 

AddActorWorldOffset : 원하는 DeltaVector값 만큼 Actor의 위치에 더하여 이동한다

 

DeltaVector값 (FVector), Sweep (bool), Teleport (bool)을 인자로 가진다

 

AddActorWorldRotation : 원하는 DeltaRotator값 만큼 Actor의 회전에 더하여 회전한다

 

DeltaRotator값 (FRotator), Sweep (bool), Teleport (bool)을 인자로 가진다

 

AddActorWorldOffset(FVector(1.f, 0.f, 0.f));

AddActorWorldRotation(FRotator(0.f, 1.f, 0.f));

AddActorWorldOffset(), AddActorWorldRotation() : 원하는 DeltaVector, DeltaRotator값 만큼 Actor의 위치/회전에 더하여 이동/회전 시킨다

 

DeltaVector/Rotator 값 (FVector, FRotator or FQuat), Sweep (bool), FHitResult*, ETeleportType를 인자로 가진다

 

(Sweep, Teleport는 위의 설명과 동일한 기능임)

 

 

ProjectSetting -> Framerate -> Use Fixed Framerate를 true로 변경 후 Frame을 기입하면 해당 Frame을 고정으로 시뮬레이션 할 수 있다 (tick에서 처리 시 기능이 frame별로 다르기 때문에 사용한다)

 

단 이는 시뮬레이션이고 실질적으로는 Tick()의 DeltaTime을 이용해야 한다

void AItems::Tick(float DeltaTime) //DeltaTime은 Frame <-> Frame 사이의 간격
{
	Super::Tick(DeltaTime);
	
	float MoveSpeed = 50.f; //미리 속도를 지정

	AddActorWorldOffset(FVector(MoveSpeed * DeltaTime, 0.f, 0.f)); //지정된 속도 * DeltaTime으로 Frame에 관계없이 일정한 속도를 유지할 수 있다
}

 

 

3. Trig Function (삼각함수)

 

Hypotenuse (빗변), Opposite ( θ 의 반대편 변), Adjacent ( θ 와 빗변에 인접한 변)을 의미한다

 

Sin(θ) = OPP / HYP

Cos(θ) = ADJ / HYP

 

반지름이 1인 UnitCircle을 대상으로 봤을때 원의 둘레를 이동하는 과정에서 Hyp의 길이는 항상 1이며 생성되는 각도는 θ가 된다

이때 OPP의 길이는 Sin( θ )가 된다 (Sin( θ )는 OPP / 1이기 때문에)

결국 y값은 Sin( θ )가 되게 된다

 

같은 방식으로 ADJ의 길이는 Cos( θ )가 되며 x값은 Cos( θ )가 되게 된다

 

이때 원의 둘레는 2π이고 이 의미는 360도 = 2π rad (radian)이라는 의미가 된다

(단위 원에서 한바퀴를 돌 때 이동한 거리 = 2π rad)

ex) 90도면 π/2 rad이고 45도면 π/4 rad이다

 

이를 Sin파 그래프로 그리면 아래와 같은 그림이 나오게 된다

θ값이 π/2 (90도)면 Y값은 1이된다 (이때 Y값은 Sin(θ))

θ값이 3π/2 (270도)면 Y값은 -1이된다 이러한 공식을 반복하여 지속적인 sin그래프가 나타나게 된다

 

cos파 그래프도 마찬가지이다 θ값이 π/2 (90도)면 X값은 0이된다 (이때 X값은 Cos(θ))

θ값이 3π/2 (270도)면 X값은 0이된다 이러한 공식을 반복하여 지속적인 cos그래프가 나타나게 된다

 

이러한 sin, cos은 BP와 코드에서 사용이 가능하다

 

Sin(Degree), Sin(Radian) : input으로 들어온 값에 대한 Sin값을 반환한다

 

Cos(Degree), Cos(Radian) : input으로 들어온 값에 대한 Cos값을 반환한다

 

void AItems::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	RunningTime += DeltaTime;

	float DeltaZ = FMath::Sin(RunningTime * 5.f) * 0.25f; //0.25는 진폭, 5.f로 sin파의 속도를 조절할 수 있다
	float DeltaZ = FMath::Cos(RunningTime * 5.f) * 0.5f;
}

FMath::Sin(), Cos() : 넣어줄 각도값 (Double or float)를 인자로 가진다

 

 

 

728x90
반응형

'Unreal' 카테고리의 다른 글

8. The Pawn Class (1)  (179) 2023.12.15
7. Expose Variable & Function, Template Function, Components  (137) 2023.12.14
5. Actor Class & Debug(2)  (42) 2023.12.05
4. Actor Class & Debug(1)  (1) 2023.12.05
3. Reflection System  (1) 2023.11.18