๐ก C++๋ก ์กํฐ์ Transform์ ์กฐ์ํด๋ณด์.
C++์ ์ฌ์ฉํด์ ๋ ๋ฒจ์ ๋ฐฐ์นํ ์กํฐ๋ฅผ ์์ง์ฌ ๋ณด๊ฒ ์ต๋๋ค.
1. C++ ์ฝ๋๋ก ์กํฐ ์์ฑ
2. ์กํฐ Transfrom ์กฐ์
3. ์กํฐ ํ์ ๊ฐ์
์์ฑํ ์กํฐ์ Transform์ ์กฐ์ ํด์ ๋ ๋ฒจ์์ ๊ฐ์ง๊ณ ๋์ ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฅผ ์์ฉํ๋ฉด ์ฌ๋ฐ๋ ์ฅ์ ๋ฌผ๋ค์ ๊ตฌํํ ์ ์์ ๊ฒ๋๋ค.
์ฐ์ ํ์ฌ ์กํฐ์ ์์น๋ฅผ ๋ฐ์ FVector๋ณ์์, ์ด๋์๋๋ฅผ ์ ์ฅํ FVector๋ณ์๋ฅผ ํ๋์ฉ ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ์กํฐ์ ์์ง์์ ๊ตฌํํ Moveํจ์๋ฅผ ์ ์ธํ๊ฒ ์ต๋๋ค.
public:
UPROPERTY(VisibleAnywhere,Category=MyValue)
FVector currentLocation;
UPROPERTY(EditAnywhere, Category = MyValue)
FVector moveSpeed;
void Move(float DeltaTime);
currentLocation์ ์กํฐ์ ํ์ฌ ์์น๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ทธ ํ moveSpeed์ DeltaTime์ ๊ณฑํ ๊ฐ์ currentLocation์ ๋ํด์ค ํ,
๊ทธ ๊ฐ์ ์๋กญ๊ฒ ์ ์ฉํด์ฃผ๋ฉด ์กํฐ์ ์์น๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.
void AMyActor::Move(float DeltaTime)
{
currentLocation = GetActorLocation();
currentLocation += moveSpeed * DeltaTime;
SetActorLocation(currentLocation);
}
Tick์์ Move()๋ฅผ ํธ์ถํ๊ณ DeltaTime์ ์ธ์๋ก ๋๊ฒจ ์ฃผ๊ฒ ์ต๋๋ค.
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
Move(DeltaTime);
}
โ์ ์ฅ ํ ์ปดํ์ผโ ํด์ฃผ์๋ฉด ๊ฐ moveSpeed์ ๊ฐ์ ๋ฐ๋ผ ์กํฐ์ ์์น๊ฐ ๋ณํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์กํฐ ์ด๋๊ณผ ๊ฐ์ด ํ์ ๊ฐ์ ์ ์ฅํ๊ณ , ์ ๋ฌํ ๋ณ์๋ฅผ FRotator๋ก ํ๋์ฉ ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค.
public:
// ์๋ต
UPROPERTY(VisibleAnywhere, Category = MyValue)
FRotator currentRotation;
UPROPERTY(EditAnywhere, Category = MyValue)
FRotator rotateSpeed;
void Rotate(float DeltaTime);
};
Rotation()๋ Move()์ ๋์ผํ ๋ก์ง์ผ๋ก ์์ฑํด์ฃผ์ธ์.
void AMyActor::Rotate(float DeltaTime)
{
currentRotation = GetActorRotation();
currentRotation += rotateSpeed * DeltaTime;
SetActorRotation(currentRotation);
}
Tick()ํจ์์์ DeltaTime์ ์ธ์๋ก ๋๊ฒจ์ฃผ๊ณ ,
Move()์ ํจ๊ป ํธ์ถํด์ค๋๋ค.
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
Move(DeltaTime);
Rotate(DeltaTime);
}
โ์ ์ฅ ํ ์ปดํ์ผโ ํ ๊ฐ์ ๋ฐ๋ผ ์กํฐ๊ฐ ํ์ ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ๊ทธ๋ฐ๋ฐ ์์ ๋ฐฉ์์ผ๋ก ํ์ ์ ๊ตฌํํ๋ ์กํฐ์ Roll์ด ์ต๋ 180๋๊น์ง๋ง ํ์ ์ ํ๊ณ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ์ด์๊ฐ ์์ต๋๋ค.
์ด์ ๋ํ ์ค๋ช ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๋ค์ ํฌ์คํ ์์ ์งํํ๊ฒ ์ต๋๋ค.
1. C++ ์ฝ๋๋ก ์กํฐ ์์ฑ
2. ์กํฐ Transfrom ์กฐ์
3. ์กํฐ ํ์ ๊ฐ์