[UE] 숫자 야구 게임 #3 (Game State를 이용한 Turn 관리)
·
언리얼엔진(UE)
1. 문제턴 개념이 없는 상태의 숫자 야구 게임을 Game State에 Turn 관련 변수를 추가하여 턴제로 수정하려고 함Blue print로 새로운 Game State를 만들어 해당 현재 게임 모드에 Game State를 할당이전 기본 Game State Base로 설정되었을 때는 정상 작동하던 게임이 갑자기 아예 작동하지 않음2. 해결 과정이전에 설정되어 있던 Game State의 경우 Game State Base로 분류되는 타입현재 새로 만든 Blue Print는 Game State를 상속받은 객체임아무래도 바뀐 타입에 문제가 있을 것이라 추정확인을 위해 Game State가 아닌 Game State Base를 상속 받도록 하여 새로운 Blue Print 클래스를 만들어 할당ㅡ> 바꾸고 나니 게임이..
[UE] 숫자 야구 게임 #2 (함수 중복 호출 문제해결)
·
언리얼엔진(UE)
1. 문제 상황클라이언트의 입력과 서버의 3자리 난수를 비교하여 판정하는 함수를 호출하는 이벤트 작성 중현재 ResultJudgment 함수의 실행 결과를 출력하는 부분이 2번 중복되어 출력되는 상황2. 해결 과정코드에 이상이 있나 확인ㅡ> 로그를 추가하며 확인해 보아도 함수 호출 자체가 2번 되는 것이지 함수 내에 이상이 있어 보이진 않음의심가는 중복 호출 원인: 블루프린트에서 함수 자체를 2번 호출하는 것일 가능성이 있음블루 프린트 확인ㅡ> 현재 이벤트 구성이 서버에 존재하는 모든 클라이언트에게 Got BroadCast 함수를 호출시키는 형태ㅡ> 즉, For Each Loop 노드 뒤에 위치한 노드들은 클라이언트 수만큼 호출되는 형태Sequence로 모든 클라이언트에게 호출해야 하는 함수의 호출을 먼..
[UE] 숫자 야구 게임 #1 (무작위 숫자 생성, 결과 판정 로직)
·
언리얼엔진(UE)
1. 무작위 숫자 생성int32 UBaseBallGameFunction::GenerateUniqueThreeDigitNumber(){ TArray Numbers={1,2,3,4,5,6,7,8,9};//선택 가능한 수들 TArray GeneratedNumber;//선택된 수를 저장할 배열 //3개의 중복되지 않는 수 선택 for (int32 i=0;i선택 가능한 수들의 리스트 생성 (Numbers)선택된 수를 저장할 배열 (GeneratedNumber)반복문에서 리스트의 인덱스 범위에서 무작위로 인덱스 선택 및 해당 인덱스의 수를 GeneratedNumber에 추가선택 가능한 수의 리스트에서 방금 사용된 수를 삭제ㅡ> 중복 없는 3자리 수를 만들기 위함선택된 3개의 수로 3자리수로 변환 및 반환2. 결과 ..
[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. 청각 추가..

.menu_toolbar { display: none !important; }