본문 바로가기
반응형

Unreal/Manual132

Unreal IK(Inverse Kinematics) Rig사용 역 운동학 구현 [Unreal/C++] IK(Inverse Kinematics) Rig사용 역 운동학 구현 언리얼에서 IK를 C++과 2Bone IK를 사용해서 구현했었습니다. [Unreal/C++] IK(Inverse Kinematics) 역 운동학 구현[Unreal/C++] IK(Inverse Kinematics) 역 운동학 구현 언리얼 엔진에서 캐릭터가 언덕이나 계단을 오를 때 발이 바닥을 뚫고 들어가는 모습을 많이 볼 수 있습니다. 이는 캐릭터가 발의 위치가 아닌 충돌체developer-bing-gu.tistory.com 하지만 언리얼 엔진 5에서는 IK를 위한 Rig이 제공됩니다.언리얼 엔진에서 지원하는 IK Rig을 사용하면 기존의 방법보다 더 자연스러운 표현이 가능합니다. 위치를 보간하는 코드는 기존 게시물.. 2024. 1. 15.
Unreal IK(Inverse Kinematics) 역 운동학 구현 [Unreal/C++] IK(Inverse Kinematics) 역 운동학 구현 언리얼 엔진에서 캐릭터가 언덕이나 계단을 오를 때 발이 바닥을 뚫고 들어가는 모습을 많이 볼 수 있습니다.이는 캐릭터가 발의 위치가 아닌 충돌체에 의존하여 서 있기 때문인데 자연스러운 발의 모습을 위해 IK(역 운동학)를 적용시킬 수 있습니다. 언리얼 엔진이나 다른 스켈레톤을 처리하는 툴에서는 정 운동학 (Forward Kinematics)을 사용합니다.Forward Kinematics (FK:정운동학) : 루트에서부터 애니메이션을 계산하는 방식아래 이미지처럼 Root 에서부터 Pelvis -> thigh -> calf -> foot 으로 운동을 계산합니다.반대로 foot 부터 root 방향으로 계산하는 것을 역 운동학 ( .. 2024. 1. 15.
Unreal 잔상 효과 (Afterimage), GhostTrail 만들기 [Unreal/C++] 잔상 효과 (Afterimage), GhostTrail 만들기 언리얼 엔진에서 Animation에 따른 잔상 효과를 구현합니다.잔상효과는 게임의 비쥬얼을 보기 좋게 만들고 퀄리티를 증진시키는데 한 몫 합니다.피하기, 텔레포트, 대쉬 등 여러 애니메이션에 사용될 수 있고 언리얼 엔진에서 지원되는 것이 많아 쉽게 구현할 수 있습니다.   구현하기에 앞서 준비물과 구현 결과물을 소개합니다.준비물1. Skeletal Mesh가 붙어있는 캐릭터 등2. 캐릭터 등을 움직일 애니메이션 몽타주 등 (애니메이션이 없어도 구현이 가능합니다.)결과물1. GhostTrail Actor Script : 캐릭터에서 Spawn을 통해 생성합니다.2. 투명한 Material : 캐릭터 Mesh가 투명하게 보이.. 2024. 1. 15.
Unreal 캐릭터 대쉬, 구르기에 사용할 수 있는 LaunchCharacter [Unreal/C++] 캐릭터 대쉬, 구르기에 사용할 수 있는 LaunchCharacter 언리얼에서 대쉬나 구르기 구현에 Launch Character 함수를 사용할 수 있습니다. 자연스러운 대쉬나 구르기를 사용하고 싶은 경우 Physics Simulation 옵션을 켜고 AddForce, AddImpulse 등을 사용할 수 있습니다. LaunchCharacter(GetActorForwardVector() * 1000, false, false);   #include "GameFramework/Character.h" virtual void LaunchCharacter( FVector LaunchVelocity, bool bXYOverride, bool bZOverride)캐릭터에 보류 중.. 2024. 1. 14.
Unreal 플레이어를 바라보는 방향으로 적 회전 [Unreal/C++] 플레이어를 바라보는 방향으로 적 회전 언리얼 Find Look At Rotation적 캐릭터가 플레이어 캐릭터를 바라보도록 구현ACharacter* target = Status->GetTarget(); // 어떤 방법으로든 플레이어를 가져온다.if (target){ SetActorRotation(UKismetMathLibrary::FindLookAtRotation(GetActorLocation(), target->GetActorLocation()));} 2024. 1. 14.
Unreal FireBall 만들기 [Unreal/C++] FireBall 만들기 언리얼 엔진에서 Particle System을 이용해 FireBall을 구현한다.  FireBall로 쓰일 파티클을 준비해줍니다.액터를 상속받는 클래스를 만들어줍니다. C++에서 필요한 것은 다음과 같습니다.- 충돌을 체크할 SphereComponent와 - 파이어 이펙트를 재생할 Particle System Component- 파이어볼을 움직일 Projectile Movement Component사실상 에디터에서 준비하는 것이 빠르지만 C++로 작업합니다. USphereComponent* SphereCollider; UParticleSystemComponent* ParticleSystem; UProjectileMovementComponent* Project.. 2024. 1. 12.
Unreal 적이나 목적지의 방향 구하기 [Unreal/C++] 적이나 목적지의 방향 구하기 언리얼 엔진에서 A에서 B로 향하는 방향을 알고 싶을 때 사용한다.원거리 무기같은 투사체에 적용하기 좋다.A위치에서 B로 향하는 방향을 알고싶을 때에는B 위치에서 A위치를 빼고 정규화를 해주면 된다. 언리얼에서 Actor의 위치를 가져오는 함수는 GetActorLocation() 이다.나의 경우는 Mesh에 Socket을 붙여놔서 소켓의 위치를 구해야하기 때문에 GetSocketLocation()도 사용했다.GetMesh()->GetSocketLocation("SocketName"); 아래와 같이 B위치에서 A위치를 뺀 Normal Vector를 구하면 -1~1까지의 방향으로 정규화된다.FVector ALocation = GetMesh()->GetSoc.. 2024. 1. 12.
Unreal Mesh Socket 위치에서 SpawnActorDeferred 하기 [Unreal/C++] Mesh Socket 위치에서 SpawnActorDeferred 하기 언리얼 엔진에서 액터를 생성하는 방법입니다. Spawn Actor와 다르게 SpawnActorDeferred는 모든 설정이 완료된 후 FinishSpawning을 호출해주어야 정상적으로 배치됩니다. FVector location = GetMesh()->GetSocketLocation("ThrowSocket"); // 소켓 이름으로 소켓의 위치를 가져온다.FTransform transform(location); // SpawnActorDeferred를 하기 위한 Transform을 설정한다.AFireBall* fireBall = GetWorld()->SpawnActorDeferred(FireBall, transfo.. 2024. 1. 12.
Unreal Particle Object 가져오기 [Unreal/C++] Particle Object 가져오기 언리얼 엔진에서 ParticleSystemComponent를 만들고 Particle Object를 가져와서 ParticleSystemComponent에 있는 Template에 적용시킵니다. 언리얼 엔진에서 파티클 시스템을 사용할 수 있도록 Particle System Component를 지원합니다.ParticleSystemComponent는 #include "Particles/ParticleSystemComponent.h" 헤더에 적용되어 있습니다.// MyActor.hclass UParticleSystemComponent;UCLASS()class MAINPROJECT_API AMyActor : public AActor{ GENERATED_BO.. 2024. 1. 11.
Unreal Collider On/Off 충돌체 켜고 끄기 [Unreal/C++] Collider On/Off 충돌체 켜고 끄기 언리얼 엔진에서 게임을 만들 때 공격 상태에서만 충돌체를 켜는 것이 효율적일때가 많다.위 이미지 처럼 앞에 충돌체를 두면 공격상태가 아님에도 불구하고 실시간으로 충돌처리가 일어난다. 원하는 동작은 박치기를 했을 때 플레이어에게 데미지를 주는 것이다. 불필요한 말들을 제거하고 충돌체를 끄고 켜는 방법을 설명하자면 콜리전의 상태를 바꿔주는 것이다.저 오브젝트 타입은 C++에서 ECollisionEnable에 enum 형식으로 정의되어 있다.NoCollision = 충돌체를 사용하지 않는다.QueryOnly = 이벤트 발생을 위해 사용한다.PhysicsOnly = 물리적 충돌을 위해 사용한다.QueryAndPhysics = 이벤트와 물리적 .. 2024. 1. 11.
Unreal Debug 용 원(Circle) 그리기 [Unreal/C++] Debug 용 원(Circle) 그리기 언리얼 엔진 Debug용 DrawDebugCircle()AiController에서 sight 확인하려고 출력해보았다. FVector center = OwnerEnemy->GetActorLocation(); center.Z -= AdjustCircleHeight; // 원을 그릴 방향까지 지정 앞에서 오른쪽으로 시계방향 DrawDebugCircle(GetWorld(), center, Sight->SightRadius, 300, FColor::Green, false, -1, 0, 0, FVector::RightVector, FVector::ForwardVector);void DrawDebugCircle( const UWorld* InWorld, .. 2024. 1. 11.
Unreal BeginPlay에서 Skeletal Mesh 바꾸기 [Unreal/C++] BeginPlay에서 Skeletal Mesh 바꾸기 생성자가 아닌 곳에서는 StaticLoadObject로 오브젝트를 불러올 수 있다.void AMyCharacter::BeginPlay(){ Super::BeginPlay(); UObject* mesh = StaticLoadObject(USkeletalMesh::StaticClass(), nullptr, L"SkeletalMesh'/Game/CityofBrass_Enemies/Meshes/Enemy/Corpse_Basic/Corpse_Basic.Corpse_Basic'"); GetMesh()->SetSkeletalMesh(Cast(mesh));}      StaticLoadObjectFind or load an object by .. 2024. 1. 9.
반응형