[UE] 게임 서버 (Listen, Dedicated)
·
언리얼엔진(UE)
1. Listen 서버클라이언트 중 하나가 서버의 역할도 수행ㅡ> 때문에 동기화를 적절히 해주지 않으면 서버의 역할을 하는 클라이언트가 지연시간이 짧아 더 빠르게 상태 변화를 인지하는 공정성의 문제 발생 가능성 O클라이언트가 서버의 역할도 수행하므로 해킹에 취약별도의 빌드 과정 X2. Dedicated 서버호스트가 클라이언트와 분리된 형태Listen 서버에 비해 비교적 보안이 좋음별도의 빌드 필요국내 온라인 게임들은 상시로 열려있는 형태의 서버를 사용 ㅡ> 해킹 취약Dedicated는 통신을 할때만 열고 닫기 때문에 비교적 보안이 좋음3. 서버와 클라이언트의 관계서버에서만 작동되는 로직은 GameMode에 구현클라이언트에서만 작동하는 로직은 HUD,Widget에 구현클라이언트나 서버에서 서로에게 접근하고..
[UE] 몬스터 AI 구현 #10 (프로젝트 완)
·
언리얼엔진(UE)
1. 원거리 몬스터의 비정상적 공격 속도와 발사체 튕김본래 작은 총알을 사용할 때는 설정한 값에 따라 주기적으로 천천히 발사했었음큰 총알을 사용하기 시작하니 갑자기 거리가 가까워지면 공격이 너무 빨라짐현재 비헤이비어 트리에서 타겟을 라인 트레이스를 통해 인식할 수 있으면 abort가 발생해 공격ㅡ> 큰 총알이 시야를 가리게 되면서 abort가 빠르게 여러번 발생해 점점 빨라지는 것으로 추정우측 화면의 콜리전 관련 설정 2개 분량을 모두 Visibility를 Ignore하도록 설정ㅡ> 라인 트레이스도 이를 무시할테니 abort가 너무 자주 발생하지 않을 것공격 속도는 정상화가 되었지만, 화염구가 캐릭터의 앞에서 멈춰버리는 현상 발생이번에는 캐릭터의 몸과 콜리전끼리 부딪혀 밀어내지 않도록 PhsicsBody..
[UE] 몬스터 AI 구현 #9 (피격 반응 애니메이션 및 상태 로직)
·
언리얼엔진(UE)
1. 문제 상황피격 몽타주를 몬스터에 할당 후, 공격을 아무리 해도 피격 반응이 제대로 나오지 않음더불어 단발성으로 공격할 때는 State 업데이트가 정상 수행되나 연속적으로 공격하면 Frozen에서 굳어버리는 현상 발생2. 해결 과정피격 모션float ABaseEnemy::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser){ float ActualDamage = Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser); Health = FMath::Clamp(Health ..
[UE] 몬스터 AI 구현 #8 (원거리 공격 투사체 발사 및 공격 이펙트)
·
언리얼엔진(UE)
1. 투사체 발사 로직RangedEnemy.h// Fill out your copyright notice in the Description page of Project Settings.// Copyright Epic Games, Inc. All Rights Reserved.#pragma once#include "CoreMinimal.h"#include "BaseEnemy.h"#include "RangedEnemy.generated.h"//전방선언class ABaseBullet;/** * */UCLASS()class STARHUNT_API ARangedEnemy : public ABaseEnemy{ GENERATED_BODY()public: ARangedEnemy(); virtual void SetMov..
[UE] 몬스터 AI 구현 #7 (Damage 중복 적용 오류 해결)
·
언리얼엔진(UE)
1. 문제  한 번의 공격 모션 이후 플레이어의 HP가 0으로 떨어지는 상황 발견정확한 문제를 진단하기 위해 Log 추가Log를 통해 확인한 결과 Damage가 여러번 적용되는 상황2. 해결 과정문제와 관련된 코드 일부void AMeleeEnemy::BeginPlay(){ Super::BeginPlay(); //애니메이션 Notify 이벤트 연결 if (UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance()) { AnimInstance->OnPlayMontageNotifyBegin.AddDynamic(this,&AMeleeEnemy::HandleAttackMontageNotify); }}void AMeleeEnemy::HandleAttackMontage..
[UE] 몬스터 AI 구현 #6 (Perception에 따른 상태 변화)
·
언리얼엔진(UE)
1. AI관련 Enum 생성// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "AIEnum.generated.h"UENUM(BlueprintType)enum class EMovementSpeed : uint8{ Idle UMETA(DisplayName = "Idle"), Walking UMETA(DisplayName = "Walking"), Jogging UMETA(DisplayName = "Jogging"), Sprinting UMETA(DisplayName = "Sprinting")};UENUM(BlueprintType)enum cl..
[UE] 몬스터 AI 구현 #5 (AI Percetion)
·
언리얼엔진(UE)
1. AI Perception 및 시각 설정 AIController에서 AIPerception Component를 추가우측 이미지와 같이 시각에 관한 인지 기능 설정Sight Radius: 감지 반경Lose Sight Radius: 감지 이후 해당 반경 벗어나면 인지 상실Peripheral Vision Half Angle 한쪽 눈의 시야 반경 (60 ㅡ> 120)Detection by Affiliation은 팀 관련 설정 (C++에서 사용 가능)Max Age: 시야에서 벗어났을 때, 해당 시간 이후 인지 상실시야 반경에 들어갔을 경우 인지된 상태핑크색으로 표시된 Lose Sight Radius를 벗어나면 Max age만큼의 시간이 흐르고 인지 상실초록색 원에 Max age가 2.12로 표시2. 청각 추가..
[UE] 몬스터 AI 구현 #4 (몬스터 기본 클래스 구성)
·
언리얼엔진(UE)
1. 클래스 전체 구성공통적인 기본적인 구성 요소를 담는 BaseEnemy ex) HP, Score, 사망 처리 함수 등BaseEnemy를 상속하여 서로 다른 유형의 공격을 하는 Melee, Ranged 로 Enemy 분류2. BaseEnemyBaseEnemy.h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "BaseEnemy.generated.h"UCLASS()class STARHUNT_API ABaseEnemy : public ACharacter{ GENERATED_..
[UE] 몬스터 AI 구현 #3 (Behavior Tree)
·
언리얼엔진(UE)
1. 추적 및 캐릭터 공격AI Controller에 Behavior Tree 할당 (Set State as Passive는 아래 설명)AI의 상태를 나타내는 Enum 생성Passive, Attacking 상태로 설정해주는 함수 생성 ㅡ> 해당 State 기반으로 행동 결정(Decorator)몬스터 클래스에 Attack 함수 생성 (Call On Attack End는 공격이 끝났을 때 알림을 주는 함수)BTTask로 DefaultAttack 생성 (Attack 수행 후, 끝났다는 알림이 오면 행동 마무리)상태를 나타내는 변수 및 공격 대상을 저장할 Key Blackboard에 추가BTTask로 ClearFocus, FocusTarget 생성 (FocusTarget은 BT에서 Attack Target Key..
[UE] 몬스터 AI 구현 #2 (애니메이션 관련 이슈 해결)
·
언리얼엔진(UE)
1. 문제 상황오늘은 적 AI를 구현하면서 애니메이션을 점검하는 중에 문제가 발생했다. 애니메이션 블루프린트를 내가 조종하는 캐릭터에 적용하면 이동할 때 걷기, 뛰기 모션이 정상 적용이 되는데, AI가 움직이는 적에 적용했을 때는 적용이 되지 않았기 때문이다. 2. 해결 과정1. 애니메이션 블루프린트가 어딘가 문제가 있을지 모름 ㅡ> 전체적으로 살펴본 결과 그다지 문제 없어 보임2. 스피드, 가속도 값들이 정상적으로 초기화되고 있는지 확인 ㅡ> 계속해서 0으로 확인3. Character Movement Component를 통해 해당 값들을 초기화 중 ㅡ> 캐릭터가 움직이는 와중에도 값이 0임4. 왜 이런 현상이 발생할까? ㅡ> AI가 캐릭터를 움직이는 과정에서 Character Movement Compo..

.menu_toolbar { display: none !important; }