일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Console
- 메테리얼
- 브론즈
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- 코드리뷰
- 언리얼
- STL
- 백준
- Harvard
- 네트워크 기초
- A* Algorithm
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- Unreal
- 순환 리스트
- 원카페#무인카페#카페추천#카페맛집
- 폭설 #미친 날씨
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- build.cs
- c++ 베이직
- leetcode
- UE_5
- 헤더 경로
- Module
- CS50
- Toon Shading
- Gas
- topdownmove
- CS
- 툰쉐이딩
- C++
- Today
- Total
목록언리얼 개발/탐구(이론) (22)
WN_인생기록
언리얼 C++에서 무작정 클래스를 추가하다보면, 폴더를 따로 분류해서 적용하고 싶고, 이때문에 헤더 경로를 잘 못찾게 되는 경우가 있다. 게임 경로 내에 있는 폴더들을 찾기 쉽게 하려면 Builds.cs에서 PublicIncludePaths.AddRange(new string[] {"모듈이름"}); 을 추가해주면 중간에 폴더 경로가 있어도 헤더를 잘 찾게 된다.
직렬화 : 오브젝트나 연결된 오브젝트의 묶음을 바이트 스트림으로 변환하는 과정- 복잡한 데이터를 일렬로 세우기 때문에 직렬화 라고 함 시리얼라이제이션(직렬화) : 오브젝트 그래프에서 바이트 스트림으로디시리얼라이제이션 : 바이트 스트림에서 오브젝트 그래프로 복구 왜 직렬화가 중요한가프로그램의 상태를 저장하고 필요할 때 복원할 수 있다 (세이브)객체 정보를 클립보드에 복사해서 다른 프로그램에 전송가능네트워크를 통해 다른 컴퓨터에 복원 ( 멀티플레이)데이터 압축, 암호화를 통해서 데이터를 효율적으로 보관 가능 구현할때 고려할 점 1. 데이터 레이아웃 : 오브젝트가 소유한 데이터를 변환할 것인가? (어떻게 직렬화 될 것인가?)2. 이식성 : 다른 시스템에 전송해도 그대로 사용 가능한가?3. 버전관리 : 새로운..
가비지 컬렉션 시스템- 마크 스윕 방식 루트 오브젝트를 참조하는 객체를 마크하고, 주기적으로 마크를 찾음. 저장소에는 마크된 객체와 마크가 안된 객체들이 존재함 가비지 컬렉터가 마크되지 않는 객체들의 메모리를 회수 이러한 시스템으로 가비지 컬렉션이 작동함. (GCCycle) 기본값 60초. 퍼포먼스를 위해서 병렬처리, 클러스터링과 같은 기능을 탑재. 언리얼에서 C++ 단점 커버를 위한 시스템 C++ 메모리 누수 -> 언리얼 가비지 컬렉션 시스템 댕글러 포인터 -> IsValid()를 써서 확인 가능 와일드 포인터 -> UPROPERTY 쓰면 자동으로 nullptr로 초기화 됨.
키, 밸류로 구성되어 있음. TSet의 구조로 구현되어 있음. 해시 테이블 형태라서 빠른 검색이 됨. TPair 로 구성되어 있음. 중복을 허용하지 않지만 TMultiMap은 중복을 허용함. 반복문을 통해서 값을 가져올때는 iterator로 가져오기 때문에 .key , .value 등으로 값을 가져올수 있다. 데이터를 찾을려면 Find 키워드를 사용해서 찾아주면 가장효율적이다. 끝부분의 빈 공간을 줄이고 싶으면 Shrink 기능을 통해서 줄일 수도 있다. STL의 Map 과는 다름. STL Map은 이진 트리로 구성되어있음. 해시 테이블에서 키, 밸류 값이 필요한 데이터형이 필요하다면 TMap을 쓰면 된다.
GameplayAbility에서 Ability는 특정 스킬이나 캐릭터가 할 수 있는 행동을 의미한다. 이 Ability들은 Instance 되는 방식을 3가지로 분류한다. 이를 Instancing Policy라고 하며 Ability가 어떻게 생성되고 관리될지 정하는 것이다. Non Instanced인스턴스화 되지 않는것을 의미하며 RPG를 예를 들었을때, 단순한 스킬,능력으로 상태를 추적할 필요가 없는 Ability일때 설정함 InstancedPerActor각 액터에 대해 한번 인스턴스화 되며, 각 캐릭터 혹은 액터가 인스턴스를 가지게 된다. 플레이어마다 다른 쿨다운 타이머를 가진 Ability일때 주로 설정한다. InstancedPerExcution어빌리티가 실행될때마다 인스턴스화 된다. 같은 ..
멀티플레이를 하기 위해서는 Online Subsystem이 있어야 한다. Subsystem은 언리얼 엔진 모듈중 하나로써 멀티플레이를 가능해주는 서비스를 지원한다. 플랫폼은 스팀, PSN, XboxLive 를 지원한다. 가장 먼저, 해당 플랫폼에 맞는 플러그인을 프로젝트에 추가하여 활성화 시킨다.이후에, 프로젝트의 Config 파일에 DefaultEngine.ini 를 수정해야 한다. [/Script/Engine.GameEngine]+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpN..
Behavior Tree Selector - 자식 노드들을 탐색하면서 true인 것을 반환하는 기능, 전부 false 라면 false 반환Sequence - 자식 노드들을 탐색하면서 모든 노드들이 true면 true 반환하고, 하나라도 false 이면 false 반환Simple Parallel - Primary child 와 Secondary child로 구분되어 두개의 자식 노드를 동시에 실행하는데, Primary가 좀 더 주가 되어서 전체 반환의 기준이 되는 노드. Decorator를 통해서 상위 노드들의 Branch를 생성할 수 있다. 그러기 위해서는 Blackboard 에서 Key 값을 정해줘야 하고, 해당 Key에 객체를 바인딩도 해야한다. 이후에는 해당 Key 값을 통해 언제 중단할지, ..
AbilitySystemComponent를 상속받는 Player State에 대한 세팅을 진행할때, ReplicationMode 라는게 있다. ARPGPlayerState::ARPGPlayerState(){ AbilitySystemComponent = CreateDefaultSubobject(TEXT("AbilitySystemComponent")); AbilitySystemComponent->SetIsReplicated(true); AbilitySystemComponent->SetReplicationMode(EGameplayEffectReplicationMode::Mixed); AttributeSet = CreateDefaultSubobject(TEXT("ArributeSetComponent")); ..