티스토리 뷰

프로그래밍 공부/언리얼 4

Unreal 4 입문 #2

빅토리아레몬탄산수 2021. 7. 21. 19:52

UPROPERTY() 매크로

UPROPERTY()
	int32 IntVar;

이렇게 변수의 기본형으로 사용합니다. UPROPERTY 매크로의 역할은 프로퍼티가 있음을 알리고 연결되었을때 어떻게 동작할지 지정하기 위한 것입니다.

그리고 보통 short , int , long을 알고 있는데 이런 타입은 플랫폼마다 길이가 달라질 수 있기 때문에 언리얼엔진에서는 길이가 고정되있는 타입으로 int8, int16, int32, int64 int 뒤 숫자는 정수를 표현하는데 몇개의 비트를 사용할것인지를 의미합니다.

int8 - 127 ~ -128,

int16 - 32,767 ~ -32,768

int32 - 214,648,647 ~ -214,648,648

int64 - 9,223,372,036,854,775,807 ~ -9,223,372,036,854,775,808

까지 표현가능합니다. 만약 해당 변수가 숫자를 음수로 표현할 필요가 없다면 int 대신 uint 등으로 사용 가능합니다. 음수의 범위를 양수의 범위로 대체되어 2배만큼 표현이 가능해집니다.

uint8 - 0 ~ 255

uint16 - 0 ~ 65,535

uint32 - 0 ~ 4,294,967,295

uint64 - 0 ~ 18,446,744,073,709,551,615

까지 표현할 수 있습니다. 이렇게 정수타입을 사용할때는 크기를 잘 생각해서 어느타입을 사용할지 결정하면 됩니다.

만약 int8 변수에 127에서 +1 할시 -128 오버플로우 (Overflow)

-128에서 -1을 해버리면 127 언더플로우(Underflow) 라고 부릅니다.

게임에서 돈을 모았는데 어느순간 0이나 -가 되어버리는 문제등이 발생하게 됩니다. 그게 바로 위 문제때문에 발생합니다. 

위 문제를 없애기 위해 uint64를 사용하게 된다면 메모리 낭비가 심해집니다. 최적화를 위해 적절한 범위를 사용하는게 관건인것 같습니다.

만약 그 범위를 가늠할수 없다면 예외 처리를 통해서 그 숫자 범위를 벗어나지 못하도록 하는것이 좋습니다. 예를 들어 돈을 소지한도를 설정해논 사례인것 같습니다.

그다음은 float 부동소수점 입니다. float, double 이 있는데 float 32 비트 double은 64 비트의 크기를 가지고 float은 5자리 소숫점 정밀도, double 은 두배인 10자리의 소숫점 정밀도를 가집니다.

다음은 문자열 입니다. c++에선 std string을 사용하고 언리얼 cpp에서는 필요에 따라서 여러가지 클래스로 문자열을 제공합니다. 가장 기본 타입은 FString 변수이름; 타입입니다. 저장되는 글자의 숫자에 따라서 변수의 길이가 자동으로 달라지는 타입으로 기본 Cpp의 std string 과 유사하게 동작합니다. 하지만 보통 string에선 " "안에 바로 상소 문자열을 적어서 바로 넣지만 FString에서는 텍스트 매크로를 사용해야합니다. 이외에도 현지화 텍스트를 위해서 사용하는 FTest, 자주 사용되는 문자열을 식별자로 지정해서 문자열을 비교할때 소모되는 메모리와 CPU 시간을 절약하는데 쓰이는 FName, 플랫폼마다 다를 수 있는 문자열 세트와 상관없이 문자열을 저장하는 용도로 사용되는 TCHAR가 있습니다.

FString을 제외한 타입은 나중에 필요 시 다룬다고 합니다. 그리고 bool 이 있습니다.

그리고 public , private , protected 공개 범위를 적용 시 변수 앞이 아닌

public: (접근 지정자를 지정하여 작성합니다. 다음 접근 지정자를 정하기 전까지 public이 됩니다.)

하지만 유니티처럼 퍼블릭 설정을 해도 디테일 패널에서 수정 및 볼 수 있지 않습니다. 이때 UPROPERRTY를 사용합니다.

  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Damage")
  	int32 TotalDamage;
  UPROPERTY(BlueprintReadOnly, VisibleAnywhere, Transient, Category = "Damage")
  	float DamagePerSecond;

EditAnywhere - 양쪽 모두의 프로퍼티 창에서 편집 할 수 있음을 의미합니다.

VisibleAnywhere - 프로퍼티 창에서 보이지만 편집을 불가하게 합니다.

 

BlueprintReadWrite - 블루프린트에서 읽기, 쓰기를 모두 가능하다는 뜻입니다.

BlueprintReadOnly - 블루프린트에서 읽기만 가능

 

Transient - 해당 프로퍼티가 휘발성 프로퍼티로 저장되지 않음을 의미합니다.

 

Category = " " - 블루프린트 편집 툴, 디테일 패널에서 이 프로퍼티를 데미지라는 카테고리로 묶어서 보여준다는 뜻입니다. 밀접한 관계를 가진 프로퍼티들은 같은 카테고리로 묶어줄 시 작업할때 빠르게 찾을 수 있습니다.

MyActor 생성자 소스 파일에서 프로퍼티를 초기화 해줍니다 두가지 방법이 있습니다.

AMyActor::AMyActor() 
: TotalDamage(200), DamageTimeInSeconds(1.0f), CharacterName(TEXT("탄산수")), bAttackable(true)
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	TotalDamage = 200;
	DamageTimeInSeconds = 1.0f;
	CharacterName = TEXT("레몬");
	bAttackable = true;
}

두가지 방법 중 선호하는 방법을 사용하면 됩니다.

스크립트 한글이 깨져서 컴파일 오류가 뜹니다 이경우 (1) 스크립트 한글 깨짐 문제 해결하기 | 언리얼 4 - YouTube

영상을 보고 해결하면 됩니다.

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

Unreal 4 입문 #3  (0) 2021.07.29
Unreal 4 입문 #1  (0) 2021.07.20
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함