Unreal Engine/GCC Class (5.5.4)

Unreal Engine 5 배워보기 - 5일차

보별 2025. 3. 24. 17:59

컴퓨터 및 게임 관련 전공인이 아닌 문외한 일반인이 언리얼 엔진을 배우면서 정리한 내용입니다.
그날그날 배웠던 내용을 제가 나중에 보기 위해 정리한 것으로, 지금 당장 보기에 부족한 점이 아주아주 많고 추후에 수정이 될 수도 있습니다.
오탈자 및 잘못 기재된 내용 지적, 부족한 내용 설명은 언제든지 환영입니다.

본글은 언리얼 엔진 5.5.4 버전 영문판을 기준으로 합니다.

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

 

5일차 학습 내용
- 함수(Function)



함수 들어가기 전 코딩 언어에 관해 알아둬야할 간단한 몇 가지만 짚고 넘어가겠다.

int n =10;

n-=1;

"int n =10;" 라고 선언한 변수가 있을 때, "n-=1;" 이라는 연산자를 입력했다고 가정한다.

해당 언어에서는 연산자가 '-', '=' 이렇게 두 개가 연달아 들어가있는데, 연산 순서는 앞에서부터 순서대로 진행한다.

즉, '-' 연산을 먼저 한 뒤에 '=' 연산을 다음으로 한다.

위의 예시를 해석해보자면, "'n-1' 을 먼저 계산하여 '10-1' 의 결과 '9' 라는 값이 나오게 되고, 이 '9' 라는 값을 'n' 에 대입한다." 라고 해석할 수있다.

연산자에는 2일차에서 배웠던 산술연산자 말고도 비교연산자가 있다.

산술 연산자는 계산을 수행하는 연산자로 '+', '-', '*', '/', '%' 이렇게 5가지가 존재한다.

비교 연산자는 두 값을 비교하여 True, False 값으로 반환하는 연산자이다.

비교 연산자에는 '==', '!=', '>', '<', '>=', '<=" 이렇게 6가지가 있는데,각각 '같다', '다르다', '크다', '작다', '크거나 같다', '작거나 같다' 의 의미미다.

비교 연산자를 사용한 예시를 들어보면 아래와 같다.

int(n)=10, int(i)=0;

(n==i) False

(n<i) False

(n>i) True

위 개념을 정리한 이유는 이후 배울 반복문에 True, False 값이 적용되는 비교연산자가 들어가기 때문이다.

반복문 종류 중 일단 "for 문", "while 문" 그리고 "for each loop" 이렇게가 있다.

"for 문" 은 정해진 횟수만큼 반복 실행되는 반복문이고, "while 문"특정 조건이 True 일 경우 무한 반복 실행되는 반복문이다.

그리고 "for each loop" 은 배열의 모든 요소를 하나씩 순회하는 반복문이다.

컴퓨터는 변수를 비교할 때 실수형, 정수형을 따로 본다.

그렇기에 "1" 과 "1.0" 수학적으로 보면 같지만 (유효 숫자의 개념까지 들어가면 다르지만 일단은 절대적인 값으로만 생각), 컴퓨터의 시점으로는 "1" 은 정수이고 "1.0" 은 실수이기에 둘의 값을 따로로 봐서 "1==1.0" 이 명제는 컴퓨터에게 있어서는 거짓(False)이다.

% 연산 결괏값은 무조건 정수형이다.

"10%2.5=0" 에서 '2.5' 라는 실수가 들어갔기에 '0.0' 이 맞지 않나 생각될 수 있지만, 위에서 말했듯이 % 결괏값은 무조건 정수이기에 '0' 이 정답이다.

 

함수(Function)

"함수(Function)" 란 특정 작업을 수행하는 코드 뭉치를 가리키는 단어이다.

함수의 전체적인 형태를 보면 아래와 같다.

int 함수이름 (int n)

{n+=10;

return n;

}

여기서 'int'는 "반환형" 이라고 한다.

기본적인 정의는 변수나 배열의 "자료형" 과 비슷한데, 함수가 실행된 후 결과로 돌려주는 값의 데이터 타입이 들어가는 매개변수와 다를 수도 있다.

"반환형" 의 한 종류로 "void" 가 있는데, "없다" 라는 자료형이다.

함수이름은 여러개의 문장이 들어가기 때문에 해당 함수의 주소를 의미한다.

이름의 형식은 함수의 기능 및 의도가 들어간 캐멀 케이스 형식으로 해야하고, 첫자는 반드시 대문자로 해야한다.

함수이름 뒤에 들어가는 'int n' 은 "매개변수" 라고 하며, 간단하게 표현하면 '함수가 받는 변수' 라고 할 수 있다.

함수아래 '{}(중괄호)' 안에 들어가는 것은 해당 함수의 범위를 나타낸다.

그리고 함수의 범위 안에 'return n;' 이라는 코드가 들어가면, 함수를 끝내면서 결괏값을 돌려준다는 의미이다.

'return n;' 코드가 있으면 밑에 코드가 있어도 여기까지만 계산한다는 의미이다.

결과적으로 위의 함수를 해석하면 아래와 같다.

"int n 이라는 매개변수를 불러와서 n 값에 10을 더하고 n에 n+10 값을 대입한다."

"int n=10;" 이라고 선언했을 때, 이 변수를 위 예시로 든 함수의 매개변수로 하면 결괏값은 '20' 이 나온다.

이제 언리얼 엔진의 BP에서 봐보도록 하겠다.

오른쪽 "details" 탭의 "Inputs" 는 "매개변수" 를 나타내고, "Outputs" 는 반환형을 나타낸다.

이번에 만들고자 하는 함수는 아래와 같다.

int Sum (int n1, int n2)

{result=n1+n2;

return result;

}

이 함수를 BP로 표현하면 아래 사진처럼 나오게 된다.

그리고 BP상에서 위와 같이 노드를 작성해주면, 각각의 변수에 값을 대입 시 두 값의 합을 계산하는 BP가 된다.

"Print Text" 노드가 없기에 결괏값은 따로 표시되지 않는다.

이해가 완벽히 되지 않으니 함수를 3종류 더 만들어보도록 하겠다.

사칙연산의 값을 각각 출력하는 함수

두 개의 값을 입력받고, 2개의 값을 연산(+, -, *, /, %)하고 각각의 결괏값을 반환하는 코드를 만들면 위와 같이 표현된다.

변수에 각각 값을 입력하면, 각각의 사칙연산의 결괏값을 배열로 표현하여, 해당 배열을 for each loop 를 통해 나열시키게 된다.

변수값을 포함한 9사이 모든 값의 구구단을 출력하는 함수

한 개의 값을 입력받고, '2' 를 입력 시 2~9단이 출력되고, '6' 을 입력 시 6~9단이 출력되는 코드를 만들면 위와 같이 표현할 수 있다.

입력한 값이 홀수일 경우, 해당 값의 구구단만 출력하는 함수이다.

'%2' 계산을 통해 결괏값이 '1' 이 나오면 True 값이 되는 원리를 이용한 것이다.

아래는 직접 만들어보면서 잘못 만들거나 의미가 없는 함수들을 모아보았다.

이건 의미가 없는 함수이다.

9보다 작은 수일 경우 자기 자신 값부터 9까지 루프시킨다는 의미를 가진 함수인데, 일단 9까지 루프시킨다는 점에서 9 이하일 경우 True 값을 출력하라는 조건도 굳이 넣을 필요가 없고, 함수의 Return 노드도 의미가 전혀 없다.

그리고 해당 연산은 함수를 통하지 않고 BP 상에서도 할 수 있기에 함수로 만든 의미가 없게 된다.

위 함수처럼 의미없는 함수기도 하고, for loop 후 출력되는 값이 변수기 때문에 입력한 변수 하나만 출력되고 loop를 돌린 모든 값이 출력되지 않는다.

모든 값이 출력되려면 배열로 설정해야한다.

* Retrurn 노드와 Print Text 노드가 반드시 함수 내에 들어가야하는 건 아님! 목적에 따라 달라짐!!