선언은 메모리 할당이 되지 않는다.

선언은 여러번 선언할 수 있지만 정의는 딱 한번만 이루어져야 한다.

'프로그래밍 > 공부' 카테고리의 다른 글

C의 fread에 관한 의문점  (0) 2023.02.01
[자료구조] 힙  (0) 2022.07.23
[자료구조] 트리, 그래프  (0) 2022.07.23
Effective C++ [4] 설계 및 선언  (0) 2015.07.10
Effective C++ [3] 자원관리  (0) 2015.07.09

[개요]

  • 외부 애셋 사용
  • C++에 필요한 툴 설치 (UE5는 VS2022 사용. 닷넷 코어 3.1도 필요함)
  • C++ 기초
  • 움직이고 회전하는 플랫폼 제작

 

[프로젝트 설정]

  • 마켓플레이스에서 [Unreal Learning Kit] 다운로드 및 프로젝트 생성
  • 프로젝트 이름 ObstacleAssault
  • [파일 - 다음으로 현재 레벨 저장] 으로 Main을 만들고 기본 레벨로 설정

 

[42. Compiling a C++ Project]

 

라이브코딩이 활성화 되어있는 도중에는 IDE에서 빌드가 안된다.

에디터에서의 라이브 코딩 단축키 [Ctrl+Alt+F11]

 

[43. UPROPERTY Variables]

 

블루프린트나 에디터에서 값을 변경한 경우 C++의 기본값이 반영되지 않는다.

C++에서 수행한 모든 작업을 재정의한다.

 

[44. Live Coding Issues]

 

라이브 코딩은 에디터의 변경에만 영향을 미치고 디스크에 저장되지 않는 문제가 있다.

라이브 코딩 이후 에디터의 값을 변경하고 저장 후 프로젝트를 재시작 했을 때 해당 값이 사라져있다면 우선 프로젝트를 종료하고 IDE에서 빌드를 하면 된다.

 

라이브 코딩을 끄고 핫 리로드 방식으로 변경할수도 있는데 설정을 바꿔주고나면 에디터를 재시작 해주어야 정상적으로 적용이 된다.

 

[55. Using Member Functions]

 

DeltaTime으로 특정 구간 사이의 반복 이동을 구현할 경우 오차가 발생하기 때문에 단순히 이동거리만을 비교하면 안되고 값을 보정해주어야 한다. 속도가 급격하게 커질경우 오차도 급격하게 커진다.

속도의 법선벡터에 정해진 거리를 곱한 값을 사용하여 보정하면 된다.

 

[58. GameMode]

 

레벨에 들어가서 게임의 규칙을 제어하는 액터이다.

 

 

'언리얼 엔진 > UE5 C++' 카테고리의 다른 글

[UE5 C++] Simple Shooter -完-  (0) 2022.10.12
[UE5 C++] Toon Tanks (v2)  (0) 2022.10.04
[UE5 C++] Crypt Raider  (0) 2022.09.29
[UE5 C++] Warehouse Wreckage  (0) 2022.09.28

[개요]

 

  • 물리학 체험
  • 발사체 생성
  • 레벨, 씬 생성 (BSP사용)
  • 탄약 제한 및 계산
  • 레벨 리로드

 

[프로젝트 설정]

 

  • 빈 프로젝트 [시작용 컨텐츠 포함]
  • 프로젝트 이름 WarehouseWreckage

 

[13. Objects and References]

 

에디터에서 특정 액터를 선택하면 해당 액터에 대한 레퍼런스를 레벨 블루프린트에서 사용할 수 있다. (큐브의 주소 참조)

 

[14. Adding an Impulse]

 

힘(Force) = 질량(Mass) * 가속도(Acceleration)

충격량(Impulse) = 질량 * 속도 변화(Velocity change)

 

AddImpulse에서 Vel Change를 체크하면 질량을 무시하고 속도 변화만 받는다.

 

[19. Rotation Control]

 

폰은 기본적으로 폰의 회전과 카메라 회전이 동기화되어있지 않다.

 

[23. Geometry Brushes (BSP)]

 

지오메트리로 간단한 맵 등을 만들때는 스케일을 조정하기 보다는 브러시 세팅의 값을 조정하는것이 낫다.

스케일을 조정하면 실제 사이즈와 맞지 않기 때문이다.

지오메트리 두개를 겹쳐서 브러시 타입을 Addtive 또는 Subtractive로 설정하면 간단한 성형이 가능하다.

 

 

[25. Actor Components]

 

액터는 여러개의 컴포넌트를 가질 수 있다.

여러개의 정적 메시를 가져서 단일 액터가 될 수 있다.

 

[29. Functions]

 

당연한 얘기겠지만 블루프린트에서도 노드들을 함수로 묶을 수 있다.

그래프의 가독성이 좋아질지는 몰라도 코드는 여전히 확인하기 어려운 것 같다.

 

[31. Pure Functions]

 

함수를 실행해도 영향을 미치지 않는 것. 즉, side effects가 발생하지 않는 것. (ex: getter)

C++에서는 상수화로 구분할 수 있을것이고 블루프린트에서는 핀이 없는것으로 구분한다.

 

 

함수 실행도중 프로젝트에 영향을 주는 요소가 없다면 퓨어를 체크해주면 된다.

'언리얼 엔진 > UE5 C++' 카테고리의 다른 글

[UE5 C++] Simple Shooter -完-  (0) 2022.10.12
[UE5 C++] Toon Tanks (v2)  (0) 2022.10.04
[UE5 C++] Crypt Raider  (0) 2022.09.29
[UE5 C++] Obstacle Assalult  (0) 2022.09.28

그래픽스 관점에서의 파이프라인 : 모델링 - 리깅 - 애니메이션 - 렌더링 - 후처리

모델링 ~ 애니메이션(off-line작업)은 아티스트, 애니메이션(run-time작업) ~ 후처리는 프로그래머의 책임이다.

 

렌더링은 3차원 장면에서 2차원 장면을 생성해내는 과정이다.

 

삼각형 메쉬를 표현하는 가장 단순한 방법은 세 개의 정점을 순서대로 나열하는 것이다.

정점들은 정점 버퍼에 저장되고 3개씩 읽어서 하나의 삼각형을 정의한다. (=삼각형 리스트)

다만 인접한 삼각형은 정점을 공유하기 때문에 정점이 중복으로 저장되어서 인덱스 버퍼를 추가로 이용한다. (=인덱스 삼각형 리스트)

 

정점 버퍼에는 정점의 위치뿐만 아니라 노말 벡터, uv좌표등 다양한 데이터가 포함된다.

삼각형의 노말 벡터는 정점의 순서에 따라 방향이 바뀐다. 오른손 좌표계 기준으로는 반시계여야 올바른 방향이다.

 

오른손 좌표계와 왼손 좌표계간의 포팅을 위해서는 정점 재정렬 및 Z좌표 부호변경을 수행해야 한다.

'이론 > 그래픽스' 카테고리의 다른 글

[Chapter 5] 조명 및 쉐이더  (0) 2023.05.17
[Chapter 4] 프래그먼트 처리와 출력 병합  (0) 2023.05.11
[Chapter 3] 래스터라이저  (0) 2023.05.11
[Chapter 2] 정점 처리  (0) 2023.04.27

[96. Pause Menu #5]

 

버튼에 이벤트를 바인딩 시킨다.

 

이런 구조가 될 것이다.

 

[97. Pause Menu #6]

 

저장시 현재 레벨 이름도 같이 저장해서 로드할 때 해당 레벨로 변환시켜주면 일반적으로 알고있는 세이브/로드 같은 기능을 할 것이다.

 

GetWorld()->GetMapName(); // 현재 맵(레벨)이름을 가져옴. 레벨 스트리밍 접두사가 붙는다
GetWorld()->StreamingLevelPrefix; // 레벨 스트리밍 접두사를 가져온다

 

현재 맵(레벨) 이름을 받아오는것은 위처럼 하면 되지만 레벨 스트리밍 접두어가 붙기때문에 접두어를 제거하고 저장해야 한다.

 

레벨이 바뀌면 BeginPlay가 호출되므로 LoadGame을 이곳에서 해주면 된다.

 

[98. Finishing Up]

 

내용 없음.

 

[99. Removing All Unused Assets]

 

프로젝트를 완성시키고 배포시키기 전에 사용하지 않은 애셋들의 정리 등을 통해 프로젝트의 사이즈를 줄일 필요가 있다.

 

  1. 별개의 폴더를 만들고 완성한 프로젝트와 같은 이름의 빈 프로젝트를 해당 폴더에 만든다.
  2. Config 폴더를 덮어쓰기한다.
  3. Intermediate 폴더를 삭제한다.
  4. 소스코드를 붙여넣는다(C#까지)
  5. generate visual studio project file을 수행한다.
  6. 완성한 프로젝트를 열고 레벨을 migrate한다.

 

C++ 코드로 애셋을 로드하는것은 레벨을 migrate 할 때 잡아내지 못할 것이라 생각된다.

위와 같이 프로젝트의 크기를 줄일 때 해당 부분을 고려해야 할 것이다.

 

[100. Packaging the Game]

 

 

[정리]

 

  • 프로젝트를 완성하면 불필요한 리소스를 제거해서 크기를 줄여야 한다.

'언리얼 엔진 > UE4 C++' 카테고리의 다른 글

[UE C++] Level Changing and Saving the Game #1  (0) 2022.09.15
[UE C++] Combat #10  (0) 2022.09.15
[UE C++] Combat #9  (0) 2022.09.14
[UE C++] Combat #8  (0) 2022.09.14
[UE C++] Combat #7  (0) 2022.09.13

+ Recent posts