Formula(공식)은 수식과 인수의 목록을 이용하여 작성된 논리식와 수학식을 평가하는 강력한 유닛이다.

 

참고: 이진 트리를 순회해야 하는 과부담 때문에(캐슁을 사용함에도 불구하고), Formular 유닛을 사용할 경우 성능이 일반 연산자 유닛들을 개별적으로 사용하는 것보다 성능이 상당히 떨어지게 된다. 따라서 매 프레임에서 이 유닛들이 사용되는 것은 피하는 것이 바람직하다. 

일반적으로 Formula는 참/거짓의 논리 값이나 수학의 숫자를 반환하지만, 실제로는 어떤 타입의 값도 반환할 수 있다.

해더의 첫 번째 텍스트 필드에는 Formula 자신이 들어가 있다.

두 번째 텍스트 필드는 인수의 수이다. 기본적(default)으로 2가 설정되어 있는데, 이는 입력으로 A와 B를 제공한다는 뜻이다. Formula은 최대 10개의 인수를 가질 수 있으며, 항상 알파벳 순으로 정렬된다. 즉, B, C, D, E 등으로 호출된다.

 

예를 들어, 아래 Formula는 다음의 두 가지 내용이 맞는지(참인지)에 대한 Boolean 값을 반환한다.

  • 시간이 10초를 경과하였는지 여부 그리고
  • 현재의 게임 오브젝트 이름이 "Player"인지 여부

Arguments(인수들)

변수 이름(Variable Names)

변수 이름들은 Formula에 직접적으로 사용할 수 있다. 예를 들어, 'health"라는 이름의 graph 변수는 'health > 50'이라는 공식으로 작성해서 불리언(참/거짓) 값을 리턴 받을 수 있다. 인수 이름은 다음과 같은 우선 순위로 평가된다.

  1. 알파벳 인수 이름(a - z)
  2. Graph 변수 이름
  3. Object 변수 이름
  4. Scene 변수 이름
  5. Application 변수 이름
  6. 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

'VS 유닛' 카테고리의 다른 글

Add, Subtract, Multiply, Divide 유닛들  (0) 2021.09.05
On Collision Enter 2D & On Trigger Enter 2D  (0) 2021.08.31
Null 유닛  (0) 2021.08.29
변수 유닛  (0) 2021.08.27
Custom Visual Script Event 유닛 만들기  (0) 2021.08.26

+ Recent posts