Formula 유닛

Formula(공식)는 수식과 인수들로 작성된 논리식과 수학식을 평가하는 강력한 유닛이다.

 

참고: Formula는 이진 트리 탐색의 과부하 문제로(캐싱 기술을 사용함에도 불구하고), 이 유닛을 사용하면 기본 연산자 유닛들을 개별적으로 사용하는 것보다 성능이 상당히 떨어지게 된다. 따라서 Update같이 매 프레임에서 호출되는 것은 피하는 것이 바람직하다. 


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


Formula Unit
Formula Unit


해더부분의 첫 번째 텍스트 필드가 Formula를 작성하는 곳이다.

두 번째 필드(위 이미지에서 inputs 필드)는 인수의 갯수이다. 기본적으로 2가 설정되어 있는데, 이는 입력으로 A와 B 2개를 받는 다는 뜻이다. Formula는 최대 10개의 인수를 받을 수 있으며, 항상 알파벳 순으로 정렬된다. 즉, B, C, D, E 등으로 호출된다.

 

예) 아래 Formula는 다음의 두 가지 조건이 맞는지(True/False)에 대한 Boolean 값을 반환한다.

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


Arguments(인수)


< 변수 이름(Variable Names) >


변수 이름은 Formula에 바로 사용가능하다. 예를 들어, 'health"라는 이름의 그래프 변수(graph variable)는 '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)을 사용하면 된다.

LiteralDescriptionExample
Numberinteger 또는 float3.5
String어포스트로피로 감싸진 텍스트"Hello World!!"
Boolean부울 값true, false
Nullnull 상수a != null
Delta timeUnity 프레임 델타 시간30 * dt
Invert Delta Time델타 시간의 역.30/second

 


< Operators(연산자) >


모든 논리 연산자와 수학 연산자는 Formula에 사용가능하다. 스크립트에서 사용자 정의 연산자(custom operator)를 통해 정의된 연산자도 사용할 수 있다.

OperatorOperationRankResultExample
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(함수) >


다음 표에 있는 모든 함수를 사용할 수 있다.

NameResultExample
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)
v22D 벡터 생성v2(0, 0)
v33D 벡터 생성v3(0, 0, 0)
v44D 벡터 생성v4(0, 0, 0, 0)



<원문>

https://docs.unity3d.com/Packages/com.unity.visualscripting@1.7/manual/vs-formula.html

댓글

이 블로그의 인기 게시물

EMACS - 파일 열기, 저장, 도움말

EMACS - 검색 및 바꾸기

EMACS, CLISP, SLIME 설치