트위터


ue4 cpp 메모 Game Talk

https://youtu.be/NfZr4VjU-0s


헤더 파일은 클래스를 선언하고, 클래스에 속하는 변수와 함수의 원형을 선언하는 용도의 파일입니다.

처음 생성한 C++ 클래스는 이렇게 생성자, BeginPlay 이벤트 함수, Tick 이벤트 함수를 가진 채로 생성됩니다.


----------


이 Tick 함수는 Actor가 활성화되어 있는 동안 계속해서 호출되기 때문에
주로 게임의 로직을 처리하는 기능을 구현하는데 사용됩니다.
하지만 매 프레임 호출되는 Tick 함수가 필요하지 않다면
Tick 함수를 제거해서 게임의 퍼포먼스를 상승시킬 수도 있습니다.
Actor의 틱 함수를 비활성화하기 위해서는 헤더 파일과 소스 파일에서 Tick 함수를 제거하고
소스 파일의 생성자에서 PrimaryActorTick.bCanEverTick = true 코드를 제거해주면 됩니다.
이 PrimaryActorTick.bCanEverTick = true 코드는
이 Actor가 Tick 함수를 매 프레임 호출하도록 설정하는 코드입니다.




---헤더 내---


class TESTCPP427_API Atest2_MyActor : public AActor
{

class {프로젝트_API} A{액터이름} : public AActor
돌아가는 방식을 정하기 전에 먼저 형태가 액터라는 것이고 그 이름을 정하는 것 같음



-----------
언리얼에서 로그를 남기려면 UE_LOG 라는 매크로 함수를 사용

UE_LOG(LogTemp, Log, TEXT("BeginPlay"));

-------------

컴파일 방법은 2가지
1. 스크립트 에디터인 Visual Studio의 솔루션 탐색기에서 프로젝트에 우클릭하고 빌드를 선택하는 것
2. 언리얼 에디터로 돌아가서 뷰포트 상단에 있는 툴바에서 컴파일 버튼을 누르는 것

--------



언리얼 cpp에서 변수를 만들고 사용하기 위해서는
헤더파일에서 변수의 타입과 네이밍을 지정 후, 그 앞에 UPROPERTY 매크로를 붙여주는것이
언리얼 프로그래밍에서의 기본형 (대소문자 구분 필수)


---------



int8_t num1 = -128; // 8비트(1바이트) 크기의 부호 있는 정수형 변수 선언
int16_t num2 = 32767; // 16비트(2바이트) 크기의 부호 있는 정수형 변수 선언
int32_t num3 = 2147483647; // 32비트(4바이트) 크기의 부호 있는 정수형 변수 선언
int64_t num4 = 9223372036854775807; // 64비트(8바이트) 크기의 부호 있는 정수형 변수 선언


uint8_t num5 = 255; // 8비트(1바이트) 크기의 부호 없는 정수형 변수 선언
uint16_t num6 = 65535; // 16비트(2바이트) 크기의 부호 없는 정수형 변수 선언
uint32_t num7 = 4294967295; // 32비트(4바이트) 크기의 부호 없는 정수형 변수 선언
uint64_t num8 = 18446744073709551615; // 64비트(8바이트) 크기의 부호 없는 정수형 변수 선언


int8에서 한 단계씩 올라갈 때마다 사용되는 메모리가 2배씩 늘어나기 때문에
게임의 최적화를 위해서는 적절한 범위의 타입을 사용하고
그 범위를 넘어갈 가능성을 배제할 수 없다면 예외처리를 통해서 그 숫자의 범위를 벗어나지 못하도록 예방을 하는게 좋습니다.



-------

float은 32비트이며 double은 64비트 크기입니다.
보통 float은 소수점 5자리까지의 정밀도를 가지고 double은 그 두 배인 10자리까지의 정밀도를 가집니다.
게임을 만들 때는 보통 float을 사용하고 더욱 정밀한 소수 표현이 필요할 때만 double을 사용하면 됩니다.



-----

보통 C++에서는 std::string을 사용하고 유니티에서 자주 사용되는 C#에서는 대부분 string 클래스를 사용하지만
언리얼 C++에서는 필요에 따라서 여러가지 클래스로 문자열을 제공합니다.


가장 기본 타입은 FString 타입입니다.

보통 std::string이나 C#의 string에서는 문자열 변수에 바로 문자열을 넣을 때는
쌍따옴표("")를 사용해서 상수 문자열을 만들어서 넣지만,
FString에서는 TEXT()매크로를 사용해야 합니다.

이 외에도 현지화 텍스트를 위해서 사용하는 FText나
자주 사용되는 문자열을 식별자로 지정해서 문자열을 비교할 때 소모되는 메모리와 CPU 시간을 절약하는데 쓰이는 FName,
플랫폼마다 다를 수 있는 문자열 세트와 상관없이 문자열을 저장하는 용도로 사용되는 TCHAR가 있습니다.



---------

true 혹은 false 값만 가지는 논리 변수는 bool이라는 타입으로 선언할 수 있습니다.


---------



변수의 공개 범위란 이 변수를 모두에게 보여줄건지,
아니면 이 클래스를 상속받은 자식 클래스에게만 보여줄건지,
그도 아니면 아무에게도 안보여주고 이 클래스 내부에서만 사용할 것인지를 이야기하는 것입니다.

모두에게 보여주는 것은 public,
클래스를 상속받은 자식 클래스에게만 보여주는 것은 protected,
외부에는 보여주지 않고 클래스 내부에서만 사용하는 것은 private입니다.

public:
protected:
private:


앞쪽에 따로 적어주고 끝에는 콜론 ( : )을 달아줘야 합니다.
이렇게 접근지정자를 적어주면 접근지정자의 콜론 ( : )에서부터 다음 지정자가 등장할 때까지
해당 지정자의 공개 범위를 가지게 됩니다.

언리얼 엔진에서는 스크립트에서 변수를 public으로 지정한다고 해서 디테일 패널에서 공개되지 않습니다.


----------------

UPROPERTY 매크로는
'언리얼 엔진 및 에디터에 이러한 프로퍼티가 있음을 알리는 역할' 을 하고
연결되었을 때, '어떻게 작동할 지를 지정하기 위한 것' 입니다.


UPROPERTY()
// 이 상태로 매크로가 비어있으면 언리얼 에디터에서는 보이지 않을 것이므로, 보이게 만들기 위해서는 비어있는 매크로 안에 필요한 지정자를 넣어줘야 함

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")

EditAnywhere : 아키타입(아직 인스턴스화 되지 않은 블루프린트의 원본)과 레벨에 배치된 인스턴스 양 쪽 모두의 프로퍼티 창에서 편집할 수 있음
BlueprintReadWrite : 블루프린트에서 읽기와 쓰기 모두 가능
Category="Damage" : 블루프린트 편집툴이나 디테일 패널에서 이 프로퍼티를 Damage 라는 카테고리로 묶어서 보여줌

xram seoul 타임테이블 220609갱신 Life Talk


동글 하나로 트래커 7개를 페어링하는 Tundra Tracker 리뷰영상 Game Talk






: 킥스타터에서 SW7번들 (트래커7개 + SW7동글)을 630달러에 펀딩하여 지난 화요일 드디어 수령

: 관부가세 약 8만원 발생

: 현재는 일반인 대상으로 SW3/SW4번들 주문예약을 받는중 (순식간에 매진되어 현재는 주문이 닫혀있음)



-------------

: 너무 가벼움 (개당 약 40g)

: 너무 작음 (가로세로높이 약 50*50*40)

: 그래서 착용감을 잊을 정도. 옷에 쉽게 가려져서 추적이 안되는 경우도 잦음.

: 포럼에서 이슈되고 있는 주파수영역대 혼선이나 추적불량은 3시간 가량 연속 플레이 했음에도 쉽사리 체감어려움

: 3시간이나했는데도 베터리가 한참 남아있음. 베터리 지속시간 평균 9시간 (±30분)

: 바이브트래커와 성능상 차이점을 쉽게 못느낌

: 동글 하나에 7개 트래커를 모두 추적하는지라 동글의 발열이 계속 잡고 있기 어려울 정도로 뜨거움 (5~70도 내외라던)

: 게다가 다른 이슈도 있는 모양인지 SW7 동글은 현재 SW5와 함께 발매중단상태

: 그런데 이 동글이 Steam VR까지 모두 끈 미사용상태에서도 발열이 발생 (그래서 물리적으로 제거해야)

: 번들에 포함된 스트랩은 신축성이 좋은 부직포끈이고 저렴해보이는 녀석인데, 허리용 스트랩이 과할정도로 너무 길어서 곤란

: 자정부터 아침까지 (0시부터 7시까지) 쭉 사용했는데도 베터리가 남아있다는건 정말로 신선한 느낌 (인덱스 컨트롤러도 아침 즘 되면 슬슬 베터리가 다 되기 시작하는데 툰드라 트래커가 거의 러닝타임이 맞먹음)

: 풀바디트래킹(전신추적)에는 HMD와 컨트롤러를 제외하고 최소 3개의 트래커가 더 있으면 되기 때문에 3개를 사용하고 나머지 3개는 충전하면서 병행사용을 할 수도 있긴한데,

: 어째서인지 충전중에도 계속 전원이 켜져있는 것으로 스팀VR에서 잡혀서 이 부분은 dll파일을 살짝 편집하여 자동으로 켜지지 않도록 하고, 충전하면서 전원이 켜지는걸 수동으로 꺼주는 식으로 하는 이른바 약간의 요령이 필요했던것은 살짝 불편한 부분

---
사용PC환경
Ryzen 1700X
Radeon 5700XT
RAM 48gb
Win10 (64bit)
+무선마우스동글 장착중
+무선랜동글 장착중
+블루투스동글 장착중

에서 
밸브 인덱스 HMD, 컨트롤러, 베이스스테이션2.0
툰드라트래커 7개 + SW7 을 모두 연결하여 테스트함

-------------

여튼간에 바이브 트래커하고 큰 차이를 느끼지 못했고
오히려 너무 가벼워서 착용감을 잊을 정도라는 트래커의 신선한 경험을 한 덕분에
본래 쓰고 있었던 바이브트래커는 중고나라에 올려버릴려고 생각중입니다
나중에 펌웨어 업데이트 하게 되면 여기서 얼마나 더 개선이 되는건지 기대도 되네요



1 2 3 4 5 6 7 8 9 10 다음