[UE] 게임 서버 (Listen, Dedicated)
·
언리얼엔진(UE)
1. Listen 서버클라이언트 중 하나가 서버의 역할도 수행ㅡ> 때문에 동기화를 적절히 해주지 않으면 서버의 역할을 하는 클라이언트가 지연시간이 짧아 더 빠르게 상태 변화를 인지하는 공정성의 문제 발생 가능성 O클라이언트가 서버의 역할도 수행하므로 해킹에 취약별도의 빌드 과정 X2. Dedicated 서버호스트가 클라이언트와 분리된 형태Listen 서버에 비해 비교적 보안이 좋음별도의 빌드 필요국내 온라인 게임들은 상시로 열려있는 형태의 서버를 사용 ㅡ> 해킹 취약Dedicated는 통신을 할때만 열고 닫기 때문에 비교적 보안이 좋음3. 서버와 클라이언트의 관계서버에서만 작동되는 로직은 GameMode에 구현클라이언트에서만 작동하는 로직은 HUD,Widget에 구현클라이언트나 서버에서 서로에게 접근하고..
[CS] 네트워크 #2
·
컴퓨터구조(CS)
온라인 게임의 종류싱크(Sync): 동기, 실시간온라인 서버(클라우드)LAN 파티어싱크(Async): 비동기CAP 이론Consistency(일관성): 공유되는 데이터가 동일한 상태를 보장Availability(가용성): 데이터에 접근하여 언제든 Read, Write 가능Partition Tolerance(분할 용인): 시스템이 분할되어 병렬 처리 가능* 일관성을 추구 ㅡ> 가용성, 분할 용인 중 하나는 포기ex) 사용자가 컨트롤 중인 클라이언트 먼저 업데이트 ㅡ> 가용성 우선, 일관성 보장 X게임에서의 동기화초기의 게임클라이언트 ㅡ> 서버 접속서버 ㅡ> 모든 클라이언트가 접속하면 게임 시작(상태 초기화)클라이언트 ㅡ> 이벤트 발생(이동,공격 등)서버 ㅡ> 이벤트 수집 ㅡ> Round(or Tick)마다 ..
[CS] 네트워크 #1
·
컴퓨터구조(CS)
네트워크 기본 구성요소1. 노드(Node): 네트워크의 기본 단위기능통신: 다른 노드와 데이터 교환라우팅: 목적지로 가는 경로 선택데이터 처리: 패킷 처리 및 오류검사네트워크 관리: 상태 감시, 트래픽 관리 보안 등2. 링크(Link): 노드 간 데이터를 전송하는 연결3. 프로토콜(Protocol): 데이터 전송 규칙네트워크 형태(Topology)1. P2P: 1:1 통신ㅡ> 단 2대 연결하는 경우 2. 버스(Bus): 1개의 케이블에 여러대의 컴퓨터 연결ㅡ> 전체에 브로드캐스팅 ㅡ> 수신 측이 자기 것만 채택 및 나머지 무시3. 링(Ring): 1개의 원형 케이블에 여러대의 컴퓨터 연결ㅡ> 양방향 통신 가능4. 스타(Star): 중앙에 허브, 스위치 연결된 구조ㅡ> 허브, 스위치 고장나면 네트워크 다운..
[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_..

.menu_toolbar { display: none !important; }