Coding/Unreal, C++

    [C++ Primer Plus] 2. Setting Out to C++

    출처: C++ Primer Plus 6th Chapter 2 대답해야 하는 질문들 Function Header는 어떤 정보를 담고 있나요? #include는 빌드에서 어떻게 작동하나요? Namespace는 왜 사용하나요? The Function Header Funtion Header는 해당 함수를 호출하기 위한 인터페이스를 알려준다. Return Type은 Called function이 끝나서 Calling function으로 돌아갈 때, 어떤 정보가 들어오는 지 알려준다. argument list 또는 parameter list는 Calling funtion에서 Called function으로의 정보 흐름을 알려준다. void main() main 함수를 선언하는 여러 방법이 있다. main() // ..

    [C++ Primer Plus] 1. Getting Started with C++

    출처: C++ Primer Plus 6th Edition Chapter 1 대답해야 하는 질문들 C와 C++의 역사를 간략히 설명하세요. Procedural Programming과 Object Oriented Programming을 비교하세요. C++가 어떻게 C에 Object-Oriented Programming 컨셉을 구현했는지 설명하세요. C++가 어떻게 C에 Generic programming 컨셉을 구현했는지 설명하세요. Program은 어떻게 만들어지나요? Learning C++: What Lies Before You C++는 Procedural Programming(=C), Object-Oriented Programming, Generic Programming의 교차점에 있다. 그렇기에 만약..

    Replication

    출처: https://youtu.be/JOJP0CvpB8w Net Mode Net Mode는 World의 상태다. 4가지 상태 중 하나여야 한다. 플레이 가능한가? 월드에 권한이 있는가? 다른 사용자를 받을 수 있는가? NM_Standalone O O X NM_DedicatedServer X O O NM_ListenServer O O O NM_Client O X X 게임이 시작되면 UGameEngine 가 생기고 그 밑에 UGameInstance 와 ULocalPlayer 가 생긴다. 그러면 우리는 브라우저에 URL을 통해 해당 게임 서버에 접속할 수 있다. 이 때, Net Mode도 함께 입력해야 한다. 예를 들어, NM_Client라면 게임을 플레이할 수 있지만 월드에 대한 전적인 권한은 가질 수 없..

    언리얼에서 낮 밤 만들기 (+시간 시스템)

    결과물 1. 시간 시스템 만들기 (GameState) 시간 시스템은 두 개 변수가 필요하다. 하나는 하루의 길이, 다른 하나는 현재 게임 시간이다. 이 때, 현재 시간은 런타임(게임이 실행되고 있을 때)에 어디서든 쉽게 접근할 수 있어야 한다. 쉽게 접근하기 위해 해당 코드는 GameState에 구현하도록 한다. Create Blueprint를 하고 Parent Class를 GameStateBase로 한다. 그리고 안에 변수를 두 개 만든다. MinPerDay(float) : 게임의 하루가 현실의 몇분인지 CurrentDateTime(DateTime) : 현재 게임의 시간 * CurrentDateTime은 계산의 편의성을 위해, UE에서 정의한 FDateTime으로 저장했다. Tick은 다음과 같이 구현..

    UE4: Delegate

    Delegate 정의 Delegate는 대리인이라는 의미다. 무엇을 대리한다는 걸까? Delegate가 대리하는 것은 함수다. 그러니까 특정 함수를 직접 부르는 대신, Delegate를 사용해서 대리 실행할 수 있다. Delegate의 소용 1: 클래스 간 결합도 낮추기 대리 실행이 왜 필요할까? 그 첫번째 이유는 클래스 사이 의존성을 약화시킬 수 있기 때문이다. 클래스 A가 대리인 MyDele_A가 있다고 가정하자. MyDele_A는 클래스 A의 멤버함수 PrintOne()의 대리자다. 그러니까 MyDele 보고 너 실행해!라고 말하면 실제로는 PrintOne()이 실행된다는 뜻이다. // 클래스 A를 나타낸 의사코드 class A { public: FDelegate MyDele_A; protected..

    #17 Enemy AI: Attack

    Attack 본래 Enemy AI는 BT 수준에서 굉장히 간단히 구현되어 있었다. 원래는 적이 몬스터이고 또한 각자 공격애니메이션을 가지고 있을 것이라 가정했기 때문이다. 하지만 이번에 기획을 나와 같은 인간으로 바꿨기 때문에 메인 캐릭터와 같은 방식으로 애니메이션을 재생할 수 있도록 수정했다. 가장 중요한 차이점은 공격모션를 Enemy 클래스가 아니라 Weapon 클래스가 가지고 있다. 이는 각 무기마다 다른 공격 모션을 가질 것을 염두에 둔 디자인이다. 이런 기획은 결국 본래 Weapon과 같기 때문에 Weapon Class를 상속받은 블루프린트를 만들었다. 결과