분류 전체보기 (231) 썸네일형 리스트형 #define 대신 const, enum, inline 을 생각 할 것 #define 매크로를 사용하면 선행 처리되면서 기호 테이블에 들어가지 않으며 컴파일러에게도 보이지 않는다. 그래서 디버깅 시에 찾기 어려울 수도 있다 매크로 이름이 아닌 값으로 에러 메시지가 나올 것 이기 때문에 확실히 파악하기 어려울 수 있다. 매크로 대신 상수를 쓸 수 있다.const double Aa = 1.653; const 이기 때문에 컴파일러의 눈에 보이고 기호 테이블에도 들어간다. 매크로 사용시 코드에 매크로 이름이 나타나면 선행 처리로 값으로 바뀌면서 목적 코드 안에 값 등장 횟수만큼 사본이 들어간다. 다만, 상수 타입 사용시에는 사본이 딱 한 번 생성된다. #define 대신 상수를 사용한다면 조심해야 할 것1. 상수 포인터를 사용할 경우 : 상수 포인터를 쓴다면 안정적으로 const .. C++의 하위 언어 C++ 을 여러 언어들의 연합체로 생각 할 수 있다.다음은 C++ 을 이루는 하위 언어이다. C- C++ 은 C 를 기본으로 하고 있다. 따라서 C++ 로 C 의 규칙 만을 이용한 프로그래밍이 가능하다. 당연히 효율적인 프로그래밍이 힘들다. 객체지향 C++'클래스를 쓰는 C++' 이 여기에 해당된다.클래스, 캡슐, 상속, 다형, 추상, 가상함수 등등의 개념이 포함된다 프로그래밍 방식이다. 객체 지향의 설계 규칙은 여기에 해당된다. 템플릿 C++C++ 의 일반화 프로그래밍 이다. 이는 사용자조차 자료형을 파악하지 않고 일반적으로 사용하는 프로그래밍이다.템플릿을 사용하면 높은 확장성 및 재사용성을 보장 받을 수 있다. STL템플릿 라이브러리. STL은 컨테이너, 반복자, 알고리즘 과 함수 객체를 사용하기 때.. 플레이어 블렌드 스페이스 변경 & 속도 동기화 - 스테미나 블렌드 스페이스사람 캐릭터의 움직임을 좀 더 자연스럽게 바꾸기 위해 블렌드 스페이스를 추가하였다.1인칭 게임을 제작 중이기 때문에 Strafe 형식으로 만들었다. @ . 리플리케이트를 이용한 동기화라면 Server 에서 변수나 객체를 바꾸어주어야한다.@ . 액터의 RPC 호출에 가장 중요한 것은 Owner 이다. 그리고 소유권을 가질 수 있냐이다. 속도 동기화속도 동기화 시 설계가 다른 방법이 충분히 있을 것 같긴한데 일단 구현한대로 두어야할듯. Replicated : RPC 구현된 속도 동기화 : MaxWalkSpeed 를 조절하고 모든 서버/클라가 이를 동기화한다.기본 움직임에는 WalkSpeed 값으로 설정되지만 Shift 를 누르면 RunSpeed 로 설정 되어야 한다. 기본적으로 MaxWal.. 저주 객체를 이용한 동기화 프로젝트 중 저주 및 몬스터 동기화에 대한 로직을 정리. 저주 1. 사람 플레이어들에게 랜덤하게 적용.2. 플레이어가 죽거나 괴물이 되면 다시 랜덤하게 플레이어에게 적용3. 저주 적용 상태의 플레이어는 다른 사람에게 저주 넘기기 가능4. 저주가 걸린 로컬 플레이어에게만 개별적인 UI 보이기 저주 적용 시점과 옮기기까지 과정1. 저주 객체를 GameState 에서 관리했다. GameState 는 각 pc 별로 1씩 존재 가능하기 때문.GameState 에서는 무작위로 사람 플레이어를 선택 및 저주를 적용하여준다.이 함수는 서버에서만 실행되므로 밑에 호출되는 함수들 또한 서버에서만 호출된다. 2. 저주가 시작되기 때문에 저주 객체는 자신을 가지고 있는 Owner 캐릭터를 설정한다.해당 함수도 서버에서 실.. UE5 JsonObject 와 JsonUtilities 를 이용한 파싱 Json 형태의 파일을 언리얼에서 사용하기 위해 파싱 하는 방법일단 Json 파일 자체를 가져오는건 다음에 하고 지금은 가상 데이터를 JsonObject 형태로 받고 다시 FString 에 넣겠다. DataToJson 의 예제 4가지멤버를 하나씩 셋팅한다.FJsonObjectConverter 를 사용해서 한 번에 처리한다.여러개의 데이터를 하나씩 셋팅한다.FJsonObjectConverter 를 사용해서 여러 데이터를 처리한다. 1. 멤버를 하나씩 셋팅특징 : 원하는 멤버만 셋팅하고 싶다면 이 방식을 사용하면 좋다. 먼저 원하는 데이터를 구조체로 레이아웃 설정을 해준다. 구조체에 가상의 데이터를 생성한다. 이제 JsonObejct 를 생성하고 데이터를 JObj 에 셋팅한다.이때, Array 계열의 멤버.. Unreal Network - Possess 동기화 & Spectator Pawn 언리얼에서 PlayerController 의 Possess 는 서버에서 호출되면서 언리얼 엔진의 리플리케이션 시스템이 적용되어 있어 playercontroller 와 Pawn 의 변경 내용을 자동으로 동기화한다. 1. 사망 시 애니메이션에서 노티파이로 OnDie 실행. 죽은 클라이언트의 Mesh 를 숨기면서 DieProcess() 실행2. MainUI 의 Retry 버튼을 활성화 3. Retry 버튼을 누르면 관찰자 모드를 실행 4. ServerRPC 로 서버에서 Possess 를 진행 즉, 사망한 객체는 서버에게 Possess 스위칭을 요청한다.여기서 사망한 객체의 소유자 (playercontroller) 가 서버에게 Possess 신청하는 것이고 Possess 와 같은 함수는 리플리케이션이 보장되.. Unreal Network - Pistol, Fire, Dead 동기화 RPC 를 사용한 네트워크 동기화 권총 부착 or 해제를 서버 - 클라이언트's 동기화 1. F키를 눌러 TakePistol 호출 시 ServerRPC 로 서버에 요청2. ServerRPC 함수에서 총을 가지고 있지 않다면 가장 가깝게 있는 권총을 선택3. 안가지고 있으면 가장 가까운 권총을 서버에서 Multicast Attach 실행. 모든 클라에게 해당 캐릭터의 총 장착을 동기화가지고 있으면 현재 권총을 서버에서 Multicast Detach 실행. 모든 클라에게 해당 캐릭터의 총 해제를 동기화 총 쏘기 및 재장전 동기화 1. 라인 트레이스로 Hit 결과 값을 ServerRPC_Fire 에게 전달하면서 서버에게 Fire 동기화 요청2. 서버에서 MulticastRPC_Fire 로 모든 클라이언트에.. Reliable 와 TCP 프로토콜의 차이점 Reliable 와 TCP 둘 다 신뢰성을 보장하지만 실제 동작하는 계층과 방식에 확연한 차이가 있다. 먼저 Reliable 과 RPC 같은 경우 애플리케이션 계층에서 동작한다. 이러한 Reliable 은 RPC의 호출에 대한 신뢰성을 보장한다. 즉, 패킷의 손실을 잠지 및 재전송 시도를 하는 TCP와 비슷한 역할을 수행한다. 다만, Reliable 은 게임 로직 수준에서의 함수 등의 호출 성공 여부를 보장하는 것까지가 역할이다. 다시 말하면 Reliable 의 신뢰성 보장은 프로세스 내에서 그 중에서도 객체나 함수 호출에 대한 신뢰성 보장이다. TCP는 전송 계층에서 사용되는 프로토콜로 전송 여부를 3핸드세이킹 방식으로 연결 확인 후 통신하도록 만든다.이때, 패킷 손실, 순서가 바뀌는 문제도 자동으로 .. 이전 1 2 3 4 5 ··· 29 다음