Formula 유닛
참고: Formula는 이진 트리 탐색의 과부하 문제로(캐싱 기술을 사용함에도 불구하고), 이 유닛을 사용하면 기본 연산자 유닛들을 개별적으로 사용하는 것보다 성능이 상당히 떨어지게 된다. 따라서 Update같이 매 프레임에서 호출되는 것은 피하는 것이 바람직하다.
일반적으로 Formula는 참/거짓의 논리 값이나 수학의 숫자를 반환하지만, 실제로는 어떤 타입의 값도 반환할 수 있다.
Formula Unit |
해더부분의 첫 번째 텍스트 필드가 Formula를 작성하는 곳이다.
두 번째 필드(위 이미지에서 inputs 필드)는 인수의 갯수이다. 기본적으로 2가 설정되어 있는데, 이는 입력으로 A와 B 2개를 받는 다는 뜻이다. Formula는 최대 10개의 인수를 받을 수 있으며, 항상 알파벳 순으로 정렬된다. 즉, B, C, D, E 등으로 호출된다.
예) 아래 Formula는 다음의 두 가지 조건이 맞는지(True/False)에 대한 Boolean 값을 반환한다.
- 시간이 10초를 경과하였는지 여부 그리고(and)
- 현재의 게임 오브젝트 이름이 "Player"인지 여부
Formula Unit 사용 |
Arguments(인수)
< 변수 이름(Variable Names) >
변수 이름은 Formula에 바로 사용가능하다. 예를 들어, 'health"라는 이름의 그래프 변수(graph variable)는 'health > 50'이라는 공식에 사용하여 불리언(참/거짓) 값을 리턴 받을 수 있다. 인수 이름은 다음과 같은 우선 순위로 평가된다.
- 알파벳 인수 이름(a - z)
- Graph 변수 이름
- Object 변수 이름
- Scene 변수 이름
- Application 변수 이름
- Saved 변수 이름
< 속성(Properties)과 메서드(Methods) >
[arg.prop] 표기법을 사용하여 인수 또는 변수에 대한 속성 값을 확인한다. 예를 들어 만약, Position이 Vector3 Object 변수인데 그 값이 0인지 체크하고자 한다면 [position.x] = 0라고 하면 된다. [arg.Method()] 표기법을 사용하여 매개 변수가 없는 메서드의 반환값을 얻을 수도 있다.
참고: AOT 사전 빌드(pre-build)에서는 이름으로만 액세스되는 멤버에 대해 스텁(stubs)을 생성할 수 없기 때문에 속성 및 메서드에 액세스하는 것이 AOT 플랫폼과 호환된다고 확신할 수는 없다.
< Literals(리터럴) >
고정 값(fixed value)을 할당하려면 다음 리터럴(literal)을 사용하면 된다.
Literal | Description | Example |
Number | integer 또는 float | 3.5 |
String | 어포스트로피로 감싸진 텍스트 | "Hello World!!" |
Boolean | 부울 값 | true, false |
Null | null 상수 | a != null |
Delta time | Unity 프레임 델타 시간 | 30 * dt |
Invert Delta Time | 델타 시간의 역. | 30/second |
< Operators(연산자) >
모든 논리 연산자와 수학 연산자는 Formula에 사용가능하다. 스크립트에서 사용자 정의 연산자(custom operator)를 통해 정의된 연산자도 사용할 수 있다.
Operator | Operation | Rank | Result | Example |
not, ! | 논리 부정 | 단항 | 피연산자 부정 | not true |
- | 음수 | 단항 | 피연산자에 음수를 적용 | -5 |
and, && | 논리곱 | 이항 | 두 피연산자가 모두 true인 경우 true. | (a < 5) and (b > 3) |
or, || | 논리합 | 이항 | 어느 피연산자가 true인 경우 True | (a < 5) or (b > 3) |
=, == | 동등(같음) | 이항 | 두 피연산자가 같으면 true이다. | a = b |
!=, <> | 불일치(다름) | 이항 | 두 피연산자가 같지 않으면 true이다. | a != b |
<, <=, >, >= | 숫자 비교 | 이항 | 숫자의 비교 연산 | a >= 10 |
+ | 덧셈 | 이항 | 두 피연산자의 합계 | a + 5 |
- | 뺄셈 | 이항 | 두 피연산자 간의 차이 | b - 3 |
* | 곱셈 | 이항 | 두 피연산자의 곱 | 12 * a |
/ | 나눗셈 | 이항 | 두 피연산자의 . | b / 2 |
% | 모둘 | 이항 | 두 피연산자의 나머지 | a % 2 |
?: | If (삼항연산자) | 삼항 | 조건이 true일 경우 왼쪽 피연산자, 그렇지 않을 경우 오른쪽 피연산자 | (health > 0) ? "Alive" : "Dead" |
~와 >>와 같은 모든 비트 연산자(bitwise operators)도 지원한다.
< Functions(함수) >
다음 표에 있는 모든 함수를 사용할 수 있다.
Name | Result | Example |
abs | 지정된 숫자의 절대값. | abs(-1) |
acos | 아크코사인, 코사인의 역함수. | acos(1) |
asin | 아크사인, 사인의 역함수. | asin(0) |
atan | 아크탄젠트, 탄젠트의 역함수. | atan(0) |
ceiling | 지정된 숫자보다 크거나 같은 최소 정수. | ceiling(1.5) |
cos | 지정된 각도의 코사인. | cos(0) |
exp | 지수함수. | exp(0) |
floor | 지정된 숫자보다 작거나 같은 최대 정수. | floor(1.5) |
log | 지정된 숫자의 로그. | log(1, 10) |
log10 | 상용로그 | log10(1) |
max | 지정된 두 숫자 중 더 큰 숫자. | max(1, 2) |
min | 두 숫자 중 작은 숫자. | min(1, 2) |
pow | 숫자를 지정된 만큼 거듭제곱 | pow(3, 2) |
round | 값을 가장 가까운 정수 또는 지정된 소수 자릿수로 반올림한다. | round(3.222, 2) |
sign | 음수인지 양수인지 판단, 1은 양, -1이은 음. | sign(-10) |
sin | 지정한 각도의 사인. | sin(0) |
sqrt | 지정된 숫자의 제곱근. | sqrt(4) |
tan | 지정한 각도의 탄젠트. | tan(0) |
truncate | 소수이하 버림, 정수 부분만 채택. | truncate(1.7) |
v2 | 2D 벡터 생성 | v2(0, 0) |
v3 | 3D 벡터 생성 | v3(0, 0, 0) |
v4 | 4D 벡터 생성 | v4(0, 0, 0, 0) |
<원문>
https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-formula.html
댓글
댓글 쓰기