본문 바로가기

All contents28

CS) 스마트포인터 스마트 포인터(Smart Pointer)는 C++에서 메모리 관리를 자동화하기 위해 사용하는 클래스 템플릿이다. 스마트 포인터는 소멸 시 자동으로 동적으로 할당된 메모리를 해제(delete)해 주므로 메모리 누수를 방지하고,코드의 안정성을 높여준다. 스마트 포인터는 C++ 표준 라이브러리 헤더에서 제공된다.  1. std::unique_ptr특징:하나의 스마트 포인터만 특정 객체의 소유권을 가질 수 있다 (독점 소유).복사가 불가능하며, 이동만 가능하다.객체가 더 이상 필요하지 않으면 자동으로 메모리를 해제한다.  std::unique_ptr에서 std::move를 사용하여 소유권을 이전할 경우, 소멸자는 발생하지 않는다. 단순히 소유권이 이전될 뿐이며, 이전 소유자는 객체에 대한 소유권을 잃고 nul.. 2025. 1. 7.
CS) Include Guards Include Guards의 역할 Include Guards는 컴파일러가 헤더 파일을 중복으로 포함하지 않도록 보장하여 컴파일 에러를 방지한다. Include Guards에는 ( #ifndef / #define )와 #pragma once가 있다.  1. #ifndef / #define 방식작동 원리:매크로를 사용하여 파일이 한 번만 포함되도록 한다.매크로가 정의되어 있는지를 검사(#ifndef)하고, 정의되지 않았을 경우(#define) 파일 내용을 처리한다.  장점:표준 방식: 모든 C++ 컴파일러에서 지원된다.헤더 파일의 중복 포함 방지를 명확하게 표현한다. 단점:타이핑 오류 가능성: 매크로 이름이 고유해야 하며, 이름 충돌이나 실수로 다른 이름을 사용할 가능성이 있다.컴파일러가 추가적인 매크로 체.. 2025. 1. 6.
CS) const와 참조 (const and Reference ) const는 constant의 약자로 "상수"를 뜻한다. 따라서 말 그대로 C++에서 const는 그 대상읠 변경하지 않는 "상수"를 의미함.  1. const 비-멤버 변수 아래와 같이 const를 선언하면 num은 변할 수 없는 상수가 된다. num = 2 처럼 상수의 값을 변경하려고 하면 CompileError가 발생한다.  2. const 멤버 변수 const 변수는 반드시 선언 초기화를 해야하며, 초기화 되지 않으면 컴파일 에러가 발생한다. class의 멤버변수를 const로 선언 시에는 반드시 초기화 리스트(Initialize List)를 사용해야 한다.   3. const 포인터 변수 const를 앞에 선언했을 경우, 포인터 변수가 가리키는 값에 대하여 상수화를 시킨다. *ptr이 상수화가 .. 2025. 1. 3.
CS) 별 모양 찍기 아래와 같이 출력되도록 구현하기.    우선 구현하기 앞서서 필요한 변수들을 세팅을 해주었다. input_int : 입력받는 수star_cnt : 각 행마다 찍는 별의 개수temp_cnt : star_cnt의 복사본size_col : 행의 개수size_row : 열의 개수    다음은 구현부분이다.  이중for문을 이용하여 행을 기준으로 열에 별을 찍도록 구현하였다.  행을 변경해주기 전에 별의 개수를 우선 복사해주고, 별이 다 찍혔을 경우 메모리를 절약하기 위해 break 문으로 다음 행으로 넘어가도록 구현했다.  별이 찍히기 전 공백부분은 찍을 별의 개수에 따라 계산되기 때문에 아래와 같이 공백부분을 구현했다.  공백 이후는 별을 찍어주고 별의 복사본을 하나씩 줄여서 0이 되었을 경우 다음 행으로 넘.. 2024. 12. 26.
DX2D) #4 Constant Buffer 기본적으로 Object의 Position, Rotate, Scale값을 변경할때에는  VertexBuffer를 수정하는 것이 아닌 ConstantBuffer를 이용하여 ShaderCode에서 수정한다. VertexBuffer를 생성할때에 Usage를 IMMUTABLE값으로 줄 뿐만 아니라, VertexBuffer를 수정하는 것은 원본 자체를 수정하는 것이기 때문에 다양한 이유들로 ConstantBuffer를 사용한다.   아래의 코드는 CPU로부터 0번째 슬롯에 ConstantBuffer를 받아 VS에서 Object의 Position값에 offset을 더해주는 코드이다.       ConstantBuffer를 사용하기 위해선 먼저 Create해줘야하는데 아래와 같이 VertexBuffer를 생성했을 때와.. 2024. 12. 24.
CS) 미리 컴파일된 헤더 미리컴파일된 헤더(precompiled header)는 이름 그대로 헤더를 미리 컴파일 하는것이다.  자주변경되지 않는 긴소스를 미리 컴파일하여 컴파일결과를 별도의 파일에 저장하여, 다시 똑같은 헤더를 컴파일시 해당파일을 처음부터 컴파일하지않고 미리컴파일된 헤더 파일을 사용해 컴파일 속도를 월등히 향상시켜준다.  사용 과정1. 프로젝트의 속성에서 미리컴파일된 헤더를 사용으로 변경해주기.  2. pch 클래스 생성  3. 생성된 pch.cpp 속성에서 미리 컴파일된 헤더를 만들기로 변경  4. pch.h 파일에 자주 사용되는.h파일들을 넣어줘 사용하면 된다. 2024. 12. 23.
Unreal) 플레이어 캐릭터와 나만의 레벨 디자인 오늘은 ‘Online Learning Kit’, ‘Lower Sector Building Kit’ 를 이용하여 플레이어 캐릭터의 기본 동작을 블루프린트를 사용하여 구현해보았다.  플레이어 캐릭터 생성 먼저 프로젝트 생성 후  작업할 폴더를 만들어준 다음 블루프린트 클래스 > 캐릭터를 생성해준다    생성한 이름의 루트 컴포넌트아래 여러가지 컴포넌트들이 있다.  - 캡슐 컴포넌트는 캐릭터와 같은 물체의 충돌 영역을 정의하는 데 사용되고, 보통 물리적 상호작용에 이용된다. - 화살표 컴포넌트는 게임 오브젝트의 방향을 시각적으로 표시하는 데 사용되고,  주로 디버깅용으로 사용된다. - 메시 컴포넌트는 3D 객체의 모델을 화면에 렌더링하는 컴포넌트로, 실제 게임 내에서 보여지는 물체의 모양을 나타낸다.  - C.. 2024. 12. 19.
Unreal) 블루프린트를 이용한 비주얼 스크립팅 블루프린트 블루프린트(Blueprint)란 언리얼 엔진에서 제공하는 비주얼 스크립팅 시스템이다. 복잡한 코드 작성없이 노드 기반으로 그림을 그려서 프로그래밍을 가능하게 하는 시스템이다. Unity엔진으로 프로젝트를 만들어봤을때 Behavior Tree 랑 비슷한 느낌이여서 친숙했다. 전체적으로 코드로만 작업해왔어서 그런가, 코드로 작업하는게 좀더 편한 느낌이 들었다.   창 → 레이아웃 불러오기 → UE4 클래식 레이아웃으로 변경해 줄 수 있다. 아래 사진처럼 해당 레벨의 블루프린트창을 열 수 있다.   이 창이 노드들을 이용하여 코딩없이 작업이 가능한 블루프린트 창이다.    각종 노드 Event BeginPlay 노드는 프로젝트가 실행됐을때 맨처음 한번 실행되는 이벤트 노드이다. Event Tick .. 2024. 12. 18.
Unreal) 언리얼 엔진과 놀아보기! 패널  뷰포트 (Viewport) 패널프로젝트의 월드 공간 및 카메라뷰를 보여주는 패널이다. 기즈모를 이용하여 액터들의 트랜스폼(Transform) 정보를 수정할 수 있다.    아웃라이너 패널현재 프로젝트에 배치된 모든 오브젝트들을 계층구조로 나타내준다.   디테일 패널뷰포트패널이나 아웃라이너패널에서 선택된 오브젝트의 속성을 보여주고, 편집할 수 있는 패널이다.    콘텐츠 브라우저프로젝트에 사용되는 모든 에셋을 관리하는 패널이다. 드래그 앤 드롭으로 에셋을 끌어 뷰포트에 배치할 수 있다. 만약 콘텐츠 브라우저가 보이지 않는다면 CTRL + SPACE 단축키로 보이게 할 수 있다.    트랜스폼 (Transform) 트랜스폼(Transform)이란 위치, 방향, 크기를 묶은 정보이다. 트랜스폼은 액터에.. 2024. 12. 17.
Unreal) 언리얼 엔진 설치해보기! 에픽런처 이용하여 언리얼 엔진 설치완료. 언리얼 러닝 키트 프로젝트 다운로드 후 버전 스위치할때 오류가 발생했다. 아래 블로그를 보고 해결 완료. https://darkcatgame.tistory.com/3 .uproject가 파일연결이 안될때언리얼 새로 설치하거나 버전을 바꿨을때 .uproject파일이 위 사진과 같이 파일연결이 정상적으로 되지않아 흰색으로 아이콘으로 나올 때가 있습니다.그로 인해 Generate Visual Studio가 안되는 등 많darkcatgame.tistory.com   언리얼 러닝 키트 프로젝트를 생성후 실행 화면.    아래의 UnrealEngine 5 문서에서 다양한 정보를 얻을 수 있다.  https://dev.epicgames.com/documentation/ko-k.. 2024. 12. 16.