본문 바로가기

언리얼러닝

(137)          글쓰기    
RepNotify를 통해 캐릭터의 체력바 업데이트 하기 RepNotify는 복제된 변수가 변수값이 변경될때호출되는 핸들러 함수를 가질 수 있음을 의미한다. 예를 들어 _HealthPoints에 RepNotify 함수 OnHealthPointsChanged()가 지정됐다면 변수값이 변경돼 클라이언트에 복제될때 연결된 모든 클라이언트에서 OnHealthPointsChanged()가 호출된다.RPC와 비교했을때 RepNotify 코드가 간소화할 수 있고 네트워크 대역폭을 덜 사용하므로 좀 더 효울과적으로 사용 가능하다RepNotify 핸들러 함수 만들기서버에서 네트워크를 통해 특정한 속성값이 복제될때 클라이언트 사이드에서 적절한 동작을 수행하려면 함수와 이 속송을 연동해야 할것이다.게임 Pangaea에서 Actor의 _HealthPoints값이 서버에서 업데이트..
복제를 통한 클라이언트와 액터 변수 동기화 하기 Actor 변수중 Replicated 태그가 붙은 변수들은 그 값이 변경될때 연결된 리모트 프록시에 자동으로 변경된 값이 복제된다.예를 들어, 캐릭터는 자신의 _HealthPoints값을 서버에서 복제한 다음 체력 포인트 바를 통해 변경된 내용을 다른 클라이언트에게 표시한다. 우선 HealthBar위젯을 만들고 캐릭터의 체력을 제대로 표시하기 위해 복제 알림을 추가할 것이다.PangaeaCharacter.h를 열고 _HealthPoints변수에 대한 UPROPERTY 매크로의 식별자로 Replicated 태그를 추가한다. UPROPERTY(Replicate) int _HealthPoints;다음 받은 파일에는 다음과 같이 되어 있다.UPROPERTY(Replicatedusing = OnHealthPoin..
네트워크 멀티플레이어 게임 만들기 - RPC 게임 Pangaea를 멀티플레이어 게임으로 만들려면 다음과 같은 작업을 수행해야 한다.RPC로 플레이어 공격 알려주기복제를 통행 클라이언트와 액터 변수 동기화하기RepNotify를 통해 캐릭터의 체력바 업데이트 하기서버에서 타격 처리학 서버 측면에서 파이어볼 생성하기 RPC로 플레이어 공격 알려주기Server Rpc ; 클라이언트에서 호출되며 서버에서 실행된다.Client RPC : 서버에서 호출되며 수신되는 액터를 가진 클라이언트에서 실행된다.NetMuticast RPC : 서버에서 호출되며 모든 클라이언트뿐만 아니라 서버 자체에서 실행된다.reliable 도는 unrelable tag를 붙여 신회도를 정할수 있다. 네트워크의 성능향상을 위해서다RPC함수는 UFUNCTION 매크로에 태그될 수 있다. ..
적 캐릭터 생성하기 Enemy Class Enemy Class 생성하기HeathPoints, Strength, Armer, Attackrange등의 변수가 있고 이걸 처리할 메소드가 선언되어있다.PawnSensingComponent를 추가했다. 감지하는 영억안으로 플레이어 캐릭터가 들어왔는지 체크했다. 캐릭터가 감지되면 _chasedTarget에 저장된다. 영역밖으로 벗어나면 nullptr로 설정된다.Chase()는 플레이어캐릭터를 추격하는 함수이다.key 입력을 받지 않으므로 Input관련 설정은 안해줘도 된다.// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFra..
EnhancedInput vs LegacyInput, Input Error 연습하면서 출판사 사이트의 소스코드를 죄다 카피해서 복붙했더니 캐릭터가 안움직였다.안그래도 TopDownProject의 Input이 Enhanced인데 왜 Legacy방식의 Attack Actoion을 만드는지 이상했는데 여기가 문제가 있다. 코드가 다르다. 교재의 소스는 엤날거랑 엤날 인풋액션을 만들어주던지 소스를 뜯어고치던지 해야한다.그냥 옜날방식 input Action을 ProjectSetting에 추가하기로 했다. 잘된다.하여간 새로운 TopDownProject의 소스를 보면 Tick()이 없다.대신 Input Event을 4단계로 구분해 TriggerEventEnhancedInputComponent->BindAction(SetDestinationClickAction, ETriggerEvent::..
7장 CanAttack() Attack() 함수 구현하기 AnimInstance()를 UPlayerAvatarInstance로 캐스팅해 EPlayerState가 Locomotion이면서 Attack카운트다운시간이 0일경우 true를 리턴한다.bool APlayerAvatar::CanAttack(){ auto animInst = Cast(GetMesh()->GetAnimInstance()); return (_AttackCountingDown State == EPlayerState::Locomotion);}Attack()함수는 타이머를 초기화한다. 애니메이션은 AnimationBlueprint에서 처리한다.void APlayerAvatar::Attack(){ _AttackCountingDown = AttackInterval;}ProjectSetting>Engine..
07 PlayerController 캐릭터 제어하기 SimpleMoveToLocation 프로젝트를 생성할때 자동으로 PangaeaPlayerController 클래스가 생성한다.TopDownCharacter는 EnhancementInput을 위해 2개의InputAction과 IMC가 마련되어 있다.SetupInputComponent()에서 Binding되어 있다. Attack는 나중에 만들어 추가할것이다.void APangaeaPlayerController::SetupInputComponent(){ // set up gameplay key bindings Super::SetupInputComponent(); InputComponent->BindAction("SetDestination", IE_Pressed, this, &APangaeaPlayerController::OnSetDestinat..
Unreal 프로젝트 에셋 대량 편집 최적화 언리얼에서 프로젝트 에셋의 용량을 한번에 줄일수 있는 방법이 있을까 언리얼 엔진에서 프로젝트 에셋의 용량을 한 번에 줄이는 것은 몇 가지 접근 방식과 도구를 조합하여 이루어질 수 있습니다. 특히 에디터 내에서 대량으로 설정을 변경하거나, 프로젝트 전체의 빌드(쿠킹) 프로세스를 최적화하는 방법들이 있습니다.가장 효과적인 방법들을 단계별로 정리해 드리겠습니다.1. Property Matrix (프로퍼티 매트릭스)를 이용한 대량 편집가장 강력하고 직접적인 방법으로, 특정 유형의 에셋(텍스처, 스태틱 메쉬 등)의 속성을 일괄적으로 변경하여 용량을 줄이는 것입니다.에셋 선택: 콘텐츠 브라우저에서 최적화하려는 에셋들을 모두 선택합니다 (Ctrl + A 또는 Shift + 클릭). 특정 폴더 내의 모든 에셋을 ..
언리얼 최적화 Gemini질문 어떤 특정 부분에 대해 더 자세히 알고 싶으신가요? 예를 들어, 다음과 같은 내용들이 있습니다.성능 프로파일링 도구: 언리얼 엔진에서 제공하는 프로파일링 도구(예: Stat 명령, 언리얼 인사이트) 사용법CPU 최적화: 드로우콜 감소, Tick 함수 최적화, 불필요한 오브젝트 제거, 멀티스레딩 활용 등GPU 최적화: 셰이더 복잡도 감소, 오버드로우 최소화, 텍스처 최적화, LOD(Level of Detail) 활용, 컬링 최적화 등메모리 최적화: 텍스처, 메쉬, 애니메이션 등 에셋 메모리 관리, 가비지 컬렉션 이해빌드 및 패키징 최적화: 데이터 압축, 스트리밍, 불필요한 콘텐츠 제거네트워크 최적화: 멀티플레이어 게임 시 네트워크 대역폭 및 레이턴시 관리플랫폼별 최적화: PC, 모바일, 콘솔 등 각 플랫폼..
HLOD vs Nanite HLOD와 Nanite는 언리얼 엔진에서 메쉬 최적화를 위한 강력한 도구이지만, UE5에서 Nanite가 있다고 해서 HLOD가 완전히 불필요해지는 것은 아닙니다. 오히려 상호 보완적인 관계를 가집니다.각각의 역할과 왜 상호 보완적인지 설명해 드리겠습니다.1. Nanite (나나이트)주요 역할: 개별 스태틱 메쉬의 폴리곤 밀도를 무제한으로 높이면서도 성능을 효율적으로 유지하는 데 중점을 둡니다.작동 방식: 메시를 마이크로 트라이앵글 클러스터로 나누고, 카메라에서 보이는 부분만 필요한 수준의 디테일로 실시간 스트리밍 및 렌더링합니다. 컬링, LOD, 텍스처 스트리밍 등을 자동으로 처리합니다.장점:수백만 개의 폴리곤을 가진 고품질 에셋을 쉽게 사용할 수 있습니다.수동 LOD 생성 및 관리의 필요성을 줄여줍니..
HLOD vs Nanite HLOD와 Nanite는 언리얼 엔진에서 메쉬 최적화를 위한 강력한 도구이지만, UE5에서 Nanite가 있다고 해서 HLOD가 완전히 불필요해지는 것은 아닙니다. 오히려 상호 보완적인 관계를 가집니다.각각의 역할과 왜 상호 보완적인지 설명해 드리겠습니다.1. Nanite (나나이트)주요 역할: 개별 스태틱 메쉬의 폴리곤 밀도를 무제한으로 높이면서도 성능을 효율적으로 유지하는 데 중점을 둡니다.작동 방식: 메시를 마이크로 트라이앵글 클러스터로 나누고, 카메라에서 보이는 부분만 필요한 수준의 디테일로 실시간 스트리밍 및 렌더링합니다. 컬링, LOD, 텍스처 스트리밍 등을 자동으로 처리합니다.장점:수백만 개의 폴리곤을 가진 고품질 에셋을 쉽게 사용할 수 있습니다.수동 LOD 생성 및 관리의 필요성을 줄여줍니..
언리얼 엔진이라서 할 수 있는 폴리곤 최적화 (실무 꿀팁) https://www.youtube.com/watch?v=RYGKoE7ZwWk 연습실험을 위해모델링모드에서 디폼 디스플레이스먼트를 살짝 주었다.이후 위치를 동일하게 주었다. 아웃라이너에서 소스,타겟을 다 선택한다. 그래야모델링모드의 Bake를 클릭하고 BakeRC를 선택한다.해상도를 적당히 선택하고필요한 맵을 클릭하면 캡쳐해주면서 맵을 생성해준다.만들어진 텍스쳐는 제너레이티드 폴더에 저장되어 있다. 친절하게 머터리얼까지 만들어준다. 로우폴리박스에 적용해준다. 뭔가 디퓨트칼라는 먹지 않았지만 노말은 잘되어있는것 같다.베이크는 좀더 파라미터를 만져가며 연습이 필요한것 같다. 해상도를 높이니 좀 진해지기는 한다. 그래도 언리얼에서 간단하게 이런게 된다는게 신기하다. wireframe모드에서 봤을때 화면