목록Categories (1099)
KoreanFoodie's Study
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 상수식 (Constance expression) 컴파일러가 컴파일 타임에 어떠한 식의 값을 결정할 수 있다면 해당 식을 상수식 (Constance expression) 이라고 표현한다. 그리고 이러한 상수식들 중, 값이 정수인 것을 정수 상수식(Integral constant expression) 이라고 하게 되는데, 정수 상수식들은 매우 쓰임새가 많다. int arr[size]; // size 가 정수 상수식이어야 함 ... template struct A { int operator()() { return N; } }; A a; // number 가 정수 상수식이어야 함 ... e..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! C++ 생성자 흔한 실수 다음과 같은 코드는 아무것도 출력하지 않는다. #include class A { public: A() { std::cout
AddMovementInput 함수로 간단하게 처리하기 ////////////////////////////////////// ////////////////////////////////////// BlasterCharacter.h ////////////////////////////////////// ////////////////////////////////////// #pragma once #include "CoreMinimal.h" #include "GameFramework/Character.h" #include "BlasterCharacter.generated.h" UCLASS() class BLASTER_API ABlasterCharacter : public ACharacter { GENERATED_..
IK_Rig 를 이용하기 애니메이션을 사용할 때, 스켈레톤이 다른 경우 리타깃을 해 주어야 한다. 언리얼 5에서는 IK_Rig 을 이용해 포즈들을 효율적으로 수정하도록 만들었다. 위의 원본 IK_Rig을 잘 보면 IK_Retargeting 에 Chain 이 설정되어 있다. 왼편의 Bone Hierarchy 를 잘 보면서, 우리가 리타깃하고자하는 IK_Rig 에 맞게 체인을 설정해주면 된다. 우리가 원하는 스켈레탈 메시 (여기서는 SK_Epic Character) 에 기반한 IK_Rig 을 생성한다. 이름은IK_Blaster 로 한다. 그 후, 기존의 IK_Mannequin 과 같은 이름의 Chain 들을 만들어 주면 된다. 방법은 아래와 같다. 그 후, IK Retargeter 를 생성해준다. Sourc..
혼령이나 영혼에 대한 연구는, 오늘날 비과학이라는 카테고리로 분류되고 있다. 하지만 현대 과학으로 설명할 수 없는 기현상들을 과학적으로 설명할 수 없다고 해서 그 존재를 무시해서는 안된다. 그들은 주장한다. 기이한 현상 자체가 존재했다는 것은 인정하더라도, 해당 현상의 발생 원인을 귀신이나 영혼처럼 기존 과학의 테두리 내에서 정의되지 않은 개념들을 통해 풀어나가려는 시도는 과학적이라고 할 수 없다고. 하지만 나는 이렇게 반박하고자 한다. 오히려 그러한 기현상들은 현재 과학 기술의 발전 수준이 그러한 사건들에 대한 해답을 제공하지 못할 정도로 원숙하지 않다는 증거로서 활용되어야 한다고. 우리는 '과학'의 본질이 지식의 총체가 아닌 현상을 설명하는데 쓰이는 '방법론'임을 잊어서는 안되는 것이다. ... (중..
블루프린트 노드를 이용하기 ThirdPerson Template 을 활용해 간단하게 멀티플레이어 세팅을 해 보자. StarterPack 에 있는 BP_ThirdPersonCharacter 에서 다음과 같이 블루프린트 노드를 설정해주면 된다. 참고로 Lobby 는 Default 설정의 Map 을 만든 것이고, Open 13.32.244.36 은 Local IPv4 Address 이다. 그 후, 다음과 같이 패키징 프로젝트를 만들어 준다. (아래 Binary Configuration 은 Development 로 바꾸어 준다) 이제 완료된 exe 파일을 이 컴퓨터에서 열고, 1을 눌러 로비를 시작한다. 다른 컴퓨터에서 2을 눌러 로비에 접속하면, 멀티플레이를 즐길 수 있다. 새 프로젝트를 만들 때, Thrid..
멀티플레이어 서버의 유형 peer - to peer 각각의 플레이어가 세션을 가지고, 움직임이나 게임 데이터의 변경이 있을 경우 연결된 다른 세션의 사용자에게 이를 전파한다. A 에서 플레이어가 캐릭터를 움직였다고 했을 때, 움직인 좌표를 다른 컴퓨터에게 전달하기 전까지 다른 컴퓨터에서는 A의 데이터 변경이 조회되지 않는다. Client - Server Model Client - Server Model 에서는, 각 클라이언트들이 어떤 동작을 하게 되면, 데이터의 변경을 Server 로 request 한다. Server 에서는 정합성이 있는 상태를 갖고 있으며, 이를 다른 클라이언트들에게 전파하는식으로 위치나 상태 등을 업데이트 한다. Client - Server Model 은 크게 Listen-Serve..
UPoseableMeshComponent 언리얼에서 GhostTrail 등을 구현할 때, UPoseableMeshComponent 를 사용하는 것을 볼 수 있다. UPosebleMeshComponent 는 무엇일까? 먼저 정의로 넘어가보면, /** *UPoseableMeshComponent that allows bone transforms to be driven by blueprint. */ UCLASS(ClassGroup=Rendering, hidecategories=(Object,Physics), config=Engine, editinlinenew, meta=(BlueprintSpawnableComponent)) class ENGINE_API UPoseableMeshComponent : public ..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! ThreadPool 간단 요약 ThreadPool 에 우리가 원하는 작업을 추가하면, 쓰레드풀에 있는 쓰레드가 이를 맡아 작업하게 된다. 이 글에서는 쓰레드에 새로운 작업을 추가하는 일을 queue 를 통해 처리한다. 이곳의 구현을 기초로 하여 작성했다. 모든 쓰레드가 작업중이어도 새로운 작업을 추가해도 상관없다! 클래스 설계하기 먼저 쓰레드들을 보관할 컨테이너가 필요하다. // 총 Worker 쓰레드의 개수. size_t num_threads_; // Worker 쓰레드를 보관하는 벡터. std::vector worker_threads_; 편의상, 쓰레드풀에서 돌아가는 쓰레드들을 ..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 동기와 비동기 C++ 코드는 순차적으로 실행된다. 예를 들어, 파일을 읽고, 읽은 파일로 어떤 작업을 하고, 마지막으로 파일과 관계없는 작업을 수행하는 코드가 있다고 가정해 보자. 이 경우, 파일과 관계없는 작업을 하기 위해 파일을 읽기까지 기다려야 하는 지연 시간이 존재한다. 이전에 배운 쓰레드를 이용하면 이 작업을 비동기적으로 바꾸어 줄 수도 있다. void file_read(string* result) { string txt = read("a.txt"); *result = do_something_with_txt(txt); } int main() { string result; t..