본문 바로가기

전체 글

(103)
[Unreal] UClass, UObject을 컴파일 타임과 런타임에서 초기화 개요언리얼에서는 컴포넌트, UClass, UObject, Actor와 같은 객체들을 초기화하는 방법이 서로 달라 코딩을 하면서 어려움이 발생한다. 이러한 문제를 해결하기 위해 각종 초기화 방법을 정리하여 조금이나마 이해하고자 한다.CDO (Class Default Object)언리얼에서 클래스를 다룰 때 중요한 분기점은 컴파일 타임과 런타임으로 나눌 수 있다. 실제로 언리얼에서는 생성자 함수를 CDO를 만드는 데 사용하며, 이는 언리얼 오브젝트를 생성할 때마다 매번 초기화하지 않고, 기본 인스턴스를 미리 만들어 복제하기 위해 만든 것이다. 실제로 블루프린트는 CDO 기반으로 뷰포트가 생성되는 것을 볼 수 있다.생성과 복제의 차이오브젝트를 생성하는 것과 복제하는 것은 차이가 없어 보인다. 실제로 생성하나 ..
[Unreal] 애니메이션 연결(달리기, 던지기) 달리기 애니메이션 달리기 애니메이션을 연결하려면 Mesh 컴포넌트의 디테일에서 Animation의 Anim Class에 작성한 Animation BluePrint를 할당한다.해당 애니메이션은 Speed를 기준으로 동작하는데, 이 변수를 서버에서 받아 사용하므로 클라이언트에서는 값이 갱신되지 않아 오류가 발생한다. 이를 해결하기 위해 코드를 수정해야 한다. US_Character.hUFUNCTION(NetMulticast, Reliable)void SprintStart_Client();UFUNCTION(NetMulticast, Reliable)void SprintEnd_Client(); US_Character.cppvoid AUS_Character::SprintStart_Server_Implementati..
[Unreal] 애니메이션 에셋 생성 캐릭터의 다양한 움직임간에 전환이 이뤄지도록 제어하는 에셋 언리얼 엔진에서 블렌드 스페이스는 두 입력 값에 따라 애니메이션을 블렌딩할 수 있는 특별한 에셋으로, 여러 애니메이션을 1차원 또는 2차원 그래프로 구성해 블렌딩할 수 있다. 가로, 세로축 원하는 값 설정 우측 하단 Asset Browser을 통해 상태 가져오기 하단 중간 그래프에 상태 옮긴 후 가로, 세로축 설정 컨트롤을 통해 Preview Value를 통해 지정된 위치에 상태를 view에서 확인 가능던지기 애니메이션을 제생하는 데 사용되는 에셋 애니메이션 몽타주는 여러 애니메이션을 결합하고 블루프린트에서 특정 부분을 선택적으로 재생할 수 있게 해주는 에셋이다. 우측 하단에 있는 Asset Browser을 하단 중간의 그래프의 DefaultGr..
[Unreal] US_WeaponProjectileComponent.cpp 코드 분석 SceneComponent를 상속받은 스크립트 US_WeaponProjectileComponent를 생성하여 작성했습니다.입력 연결void UUS_WeaponProjectileComponent::BeginPlay(){ Super::BeginPlay(); const ACharacter* Character = Cast(GetOwner()); if (!Character) return; if (const APlayerController* PlayerController = Cast(Character->GetController())) { if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSu..
[Unreal] US_BaseWeaponProjectile.cpp 코드 분석 SphereCollisionSphereCollision = CreateDefaultSubobject("Collision"); // Collision 가져오기SphereCollision->SetGenerateOverlapEvents(true);// 오버랩 이벤트 활성화SphereCollision->SetSphereRadius(10.0f); // Collision 크기 설정SphereCollision->BodyInstance.SetCollisionProfileName("BlockAll");SphereCollision->OnComponentHit.AddDynamic(this, &AUS_BaseWeaponProjectile::OnHit); // 충돌 이벤트 바인딩RootComponent = SphereColli..
[Unreal] US_Minion.cpp (체력) 사망처리void AUS_Minion::PostInitializeComponents(){ ... OnTakeAnyDamage.AddDynamic(this, &AUS_Minion::OnDamage); ...}void AUS_Minion::OnDamage(AActor* DamagedActor, float Damage, const UDamageType* DamageType, AController* InstigatedBy, AActor* DamageCauser){ Health -= Damage; if (Health > 0) return; if (SpawnedPickup) { GetWorld()->SpawnActor(SpawnedPickup, GetAc..
[Unreal] 경보 시스템 코드 분석 이번 코드는 단순히 주위에 미니언이 존재하는지 확인 후, 거리에 따라 플레이어를 같이 추적하는 코드를 작성한다. AI 캐릭터가 메시지를 보내는 작업은 매우 간단하다. 게임 모드가 서버에 있는 한, 게임 내의 모든 액터에서 접근할 수 있기 때문이다.US_Minion.cppvoid AUS_Minion::Chase(APawn* Pawn){ ... if (const auto GameMode = Cast(GetWorld()->GetAuthGameMode())) { GameMode->AlertMinions(this, Pawn->GetActorLocation(), AlertRadius); }} GameMode에서 AlertMinions()를 실행하여 미니언에게 플레이어 위치를 알려주..
[Unreal] 소음, 감지 코드 분석 US_Character.cpp...#include "Components/PawnNoiseEmitterComponent.h"...AUS_Character::AUS_Character(){ ... NoiseEmitter = CreateDefaultSubobject(TEXT("NoiseEmitter")); NoiseEmitter->NoiseLifetime = 0.01f; ...}void AUS_Character::Tick(float DeltaTime){ ... if (GetCharacterMovement()->MaxWalkSpeed == GetCharacterStats()->SprintSpeed) { auto Noise = 1.f; i..