본문 바로가기

Unreal/언리얼 엔진 5로 개발하는 멀티플레이어 게임(Book)

(47)
[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..
[Unreal] US_MinionSpawner.cpp 코드 분석 미니언 스포너 초기화void AUS_MinionSpawner::BeginPlay(){ Super::BeginPlay(); if (SpawnableMinions.IsEmpty()) return; if (GetLocalRole() != ROLE_Authority) return; for (int32 i = 0; i GetWorldTimerManager().SetTimer()는 Tick()이 프레임마다 동작하는 것과 달리, 지정된 시간 간격으로 반복적으로 호출된다. 추가적으로 각 인자마다 설정할 수 있는데, 순서대로 FTimerHandle, UserClass* 객체, 반복 시간, 반복 호출 허용 여부, 시작 시간을 설정할 수 있다. 스폰void AUS_MinionS..