기본 콘텐츠로 건너뛰기

250331 포인터, 비주얼 스튜디오, C++

포인터

Zombie 클래스 enemy가 존재하고 변수 int Hp = 100이 존재해서 Player 클래스에서 해당 HP를 깎도록 하고 싶은 경우

Zombie* zombie_enemy(변수이름) = enemy;

zombie_enemy->hp -= 30;

& <= 변수의 주소

* <= 주소(포인터변수) 안의 값


Visual Studio 2022 설정시 주의사항

여러 업데이트로 인해 망가질 수 있으므로, 프로젝트 파일은 백업하기.


처음 생성시 빈 프로젝트로 C++로 생성하는 게 좋음.

Tool - New C++ Class 를 통해 정상 작동 여부 확인.


경로에 한글이 있으면 에러가 발생할 수 있음.


C++프로젝트 만들고 비주얼 스튜디오가 컴파일할 시간을 줘야 함.

새로운 프로젝트를 만들거나, 재부팅을 하는 것으로 해결 될 수 있음.


1. 윈도우 업데이트 확인.

2. Visual Studio Installer 업데이트 확인.

3. Visual Studio Installer - 수정 - 설치 확인


4. Unreal 통합 구성

청사진 지원, 테스트 어댑터 상태에 문제가 없어야 함.

5. visual studio플러그인 확인


6. Tools - Refresh Visual Studio

7. Binaries, DerivedDataCache, Intermediate, Saved 삭제 후,

uproject파일 오른쪽 클릭 - 추가 옵션 표시 - Generate Visual Studio project files

사용하면 좋은 설정

도구 - 옵션 - 환경 - 일반 => 색테마 어둡게,

도구 - 옵션 - 환경 - 글꼴 및 색 => Consolas (0, O, 1, i, i, ㅣ 구분)

도구 - 옵션 - 텍스트 편집기 - 모든 언어 - 일반 - 줄 번호 체크


C++ 파일 생성

Tools - New C++ Class - Parent Class 정하기 - Next

만들 클래스 이름 정하기, Path옆에 폴더 눌러서 위치 정할 수 있음.



Source에 Player폴더를 만들어 Test를 만든 모습


Test.h

헤더파일 : 내가 사용할 것을 미리 정의한다라는 느낌.

ATest() => BeginPlay() => Tick() 순서


Test.cpp


public
공공. 어디서나 쉽게 사용 가능.
다른 객체나 시스템에서 접근이 필요한 멤버 변수나 함수.

private
사적. 쉽게 사용 X. Get, Set등을 통해 사용.
클래스 내부에서만 사용되는 변수를 보호

Protected
Private와 Public사이. 해당 클래스 및 이 클래스를 상속받는 파생 클래스만

구조체

Class와 비슷하지만, 상속하지 않는다는 차이가 있다.

언리얼 내의 F로 시작하는 FString, FColor 등은 구조체이다.


GEngine->AddOnScreenDebugMessage()

화면 상에 메시지를 표시


UE_LOG()
Output Log 창에 표시



Printf 사용시 : print format

특수기호
\' : 작은따옴표
\" : 큰 따옴표
\? : 물음표
\\ : 백 슬래시(\)
\n : 줄 바꿈, 개행, new line
\t : 수평 탭 (tab)

서식 문자
%c : 문자 표기
%s : 문자열 표기
%f, %lf : 실수 표기
%u : 10진 정수 (부호 없음)
%d : 10진 정수 (부호 있음)
%o : 8진 정수 (부호 없음)
%x : 16진 정수 (부호 없음)
%lu : long 타입 (부호 없음)
%ld : long 타입 (부호 있음)
%llu : long long 타입 (부호 없음)
%lld : long long 타입 (부호 있음)
%p : 메모리 주소 표기
%% : 기호 % 표기

Test.h
헤더 파일 내에 변수를 매개 변수로 사용할 경우에, 함수를 사용할 때 받아오는 값인지 아니면 함수 내의 변수인지 구분이 안되기 때문에, 변수의 이름과 매개변수의 이름이 겹치면 안된다.

Test.cpp
:: 오른쪽이 왼쪽의 멤버 함수

🤖참고

AddOnScreenDebugMessage
https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/Engine/Engine/UEngine/AddOnScreenDebugMessage/1

UE_LOG
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/logging-in-unreal-engine?application_version=5.5

이 블로그의 인기 게시물

250523 PCG 2

PCG Building Volume Sampler를 사용할 경우 Voxel Size를 맞추어주자. 2m길이를 Transform Points로 Offset을 이동시켜 Difference를 통해 메쉬를 생성한다. 사용시에 Pivot의 위치가 중앙이 아니면 제대로 표현되지 않을 것이다. PCG Landscape Landscape 생성후 PCG Volume 생성. Get Landscape Data - Surface Sampler 안보인다면 Generate Surface Sampler 일반 그리드 패턴으로 서피스 데이터에 포인트를 샘플링합니다. 이 노드에는 다음과 같은 옵션이 있습니다. 포인트 규모(Point Extents) : 서피스의 기본 그리드 셀 크기를 정의합니다. 여유(Looseness) : 변형 가능한 셀 크기를 정의합니다. 실제로 셀 크기는 포인트 규모 * (1 + 여유)입니다. 제곱미터당 포인트(Points Per Square Meter) : 유지되는 셀의 비율을 계산합니다. 이 프로퍼티는 그리드가 클 때 과잉을 제한합니다. Looseness : 기본 1. 0일경우 Extent의 길이 만큼, 1일경우 2배가 됨.  Attribute Filter를 생성하고, Material에 해당하는 Layer를 찾아서 이름을 넣어준다. Type을 Float로 하고 Float Value를 설정하면, 해당 머티리얼이 색칠된 정도 0~1에서 Operator에 의해 >(초과) 0.6초과 일 경우만 생성되게 할 수 있다. 값을 1로 하고 Equal을 이용해서 1인 경우만 생성되게 하는 것도 가능하다. plugin Water body lake를 넣으면, 이또한 Spline이라는 것을 알 수 있다. 따라서 Get Spline Data-Spline Sampler를 통해 사용할 수 있다. GetActorData와 Difference를 통해서 Lake내부를 제거해주기 PCG Mesh Mesh Sampler를 쓰기위해 Get Actor Property를 이용하면, 해당 액터가 ...

250604 저장불러오기

SaveGame 블루프린트 생성 Game Instance 생성, Init 오버라이드 AC_Inventory Save Load

250609 온라인

 Online Subsystem외에도 어느 서버를 사용할 것인지에 따라 플러그인을 추가해주어야 한다. 공통으로 OnlineSubsystem으로 시작한다. 헤더파일 CPP파일 cmd에서 Ipconfig를 통해 Ipv4를 넣어주면 된다. DefaultEngine.ini 수정 https://dev.epicgames.com/documentation/ko-kr/unreal-engine/online-subsystem-steam-interface-in-unreal-engine#%EC%99%84%EC%84%B1%EC%84%B8%ED%8C%85 [/Script/Engine.GameEngine] +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") [OnlineSubsystem] DefaultPlatformService=Steam [OnlineSubsystemSteam] bEnabled=true SteamDevAppId=480 bInitServerOnclient=true [/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection" 전용 서버 없이 클라이언트가 서버를 만들 수 있게 함. 호스팅 Binaries와 Saved파일을 한번 제거해주고, Generate해주기 헤더파일 헤더파일 CPP 파일 CreateSessionComplete, FindSessionsComplete, JoinSessionComplete 생성자 CreateGameSession 세션을 생성하고 존재하면 제거한다. OnCreateSessionComplete ServerTrav...