Math(계산)

AI와 함께 읽기
전체 문서 한 파일로 (llms-full.txt)

수치를 계산하는 노드입니다. 전 16종. float를 받아 float를 반환하는 형태이므로, 노브의 값을 다른 값으로 변환하는 중계로 사용합니다.

3가지 구조

포트 구성은 노드 자신이 아니라, 상속하고 있는 기저 클래스가 결정합니다.

구조포트해당 노드
이항 연산A / BResultAdd / Minus / Multiply / Divide / Modulo / Pow / Max / Min / Average / Abs
단항 연산A / TriggerResultCeil / Floor / Round / Trunc / Fract
독자A / B / T / TriggerOutLerp

노드 목록

노드설명
AddA + B
MinusA − B
MultiplyA × B
DivideA ÷ B. B가 0일 때는 출력을 갱신하지 않습니다(아래 주석)
ModuloA를 B로 나눈 나머지. 반복되는 카운터를 만들 때 사용합니다
PowA의 B제곱
MaxA와 B 중 큰 쪽. 값의 하한을 막는 데 사용할 수 있습니다
MinA와 B 중 작은 쪽. 값의 상한을 막는 데 사용할 수 있습니다
AverageA와 B의 평균
AbsA의 절댓값. B 포트는 사용되지 않습니다(아래 주석)
CeilA를 올림
FloorA를 내림
RoundA를 반올림
TruncA를 0 방향으로 버림
FractA의 소수 부분만 추출합니다. 0~1을 반복하는 신호를 만들 수 있습니다
LerpA와 B를 T로 선형 보간합니다

알아 두면 걸리지 않는 것

Trigger는 ‘샘플&홀드’가 아닙니다

Ceil / Floor / Round / Trunc / Fract에 있는 Trigger입력을 멈추고 값을 유지하는 것이 아닙니다.

A는 항상 흐르고 있으며, 값이 바뀔 때마다 Result가 나옵니다. Trigger가 하는 것은 지금의 계산 결과를 한 번 더 하류로 밀어내는 것뿐입니다.

triggerInput.OnTriggerChanged.Subscribe(_ => { OutResult(); }).AddTo(this);

박자에 맞춰 하류를 다시 발화시키고 싶을 때 사용해 주세요. A를 멈추는 용도로는 사용할 수 없습니다.

Divide의 0 나누기는 ‘무시’됩니다

B가 0일 때, Divide는 출력 자체를 갱신하지 않습니다.

if (currentValueB.Value == 0) return;

NaN이나 0이 나오는 것이 아니라, 직전 값이 계속 남습니다. 다운되지 않으므로 안전하기는 하지만, 하류에서 보면 ‘값이 굳었다’라고밖에 보이지 않습니다. 움직임이 멈추면 B를 의심해 주세요.

Lerp의 T는 0~1로 클램프됩니다

Mathf.Lerp를 사용하고 있기 때문에, T에 범위 밖의 값을 넣어도 A와 B의 바깥으로는 나가지 않습니다. 끝에서 멈춥니다. A→B를 벗어나게 하고 싶을 때는 Lerp가 아니라 Multiply와 Add를 조합해 주세요.

Abs의 B 포트는 아무것에도 연결되어 있지 않습니다

Abs는 이항 연산 기저 클래스를 상속하고 있기 때문에 A / B 양쪽 포트가 생기지만, 구현은 Mathf.Abs(A)뿐이며 B를 전혀 참조하지 않습니다. B에 꽂아도 아무 일도 일어나지 않습니다.

이항 연산은 A / B 어느 쪽이 움직여도 재계산합니다

Add나 Multiply 같은 이항 연산은, A와 B 중 어느 한쪽이 바뀐 시점에 결과를 다시 출력합니다. 한쪽을 ‘설정값’, 다른 한쪽을 ‘움직이는 신호’로 사용하는 구성으로 문제없습니다.

관련

이 페이지로 연결된 페이지

같은 페이지를 참조하는 페이지