Math(계산)
수치를 계산하는 노드입니다. 전 16종. float를 받아 float를 반환하는 형태이므로, 노브의 값을 다른 값으로 변환하는 중계로 사용합니다.
3가지 구조
포트 구성은 노드 자신이 아니라, 상속하고 있는 기저 클래스가 결정합니다.
| 구조 | 포트 | 해당 노드 |
|---|---|---|
| 이항 연산 | A / B → Result | Add / Minus / Multiply / Divide / Modulo / Pow / Max / Min / Average / Abs |
| 단항 연산 | A / Trigger → Result | Ceil / Floor / Round / Trunc / Fract |
| 독자 | A / B / T / Trigger → Out | Lerp |
노드 목록
| 노드 | 설명 |
|---|---|
| Add | A + B |
| Minus | A − B |
| Multiply | A × B |
| Divide | A ÷ B. B가 0일 때는 출력을 갱신하지 않습니다(아래 주석) |
| Modulo | A를 B로 나눈 나머지. 반복되는 카운터를 만들 때 사용합니다 |
| Pow | A의 B제곱 |
| Max | A와 B 중 큰 쪽. 값의 하한을 막는 데 사용할 수 있습니다 |
| Min | A와 B 중 작은 쪽. 값의 상한을 막는 데 사용할 수 있습니다 |
| Average | A와 B의 평균 |
| Abs | A의 절댓값. B 포트는 사용되지 않습니다(아래 주석) |
| Ceil | A를 올림 |
| Floor | A를 내림 |
| Round | A를 반올림 |
| Trunc | A를 0 방향으로 버림 |
| Fract | A의 소수 부분만 추출합니다. 0~1을 반복하는 신호를 만들 수 있습니다 |
| Lerp | A와 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 중 어느 한쪽이 바뀐 시점에 결과를 다시 출력합니다. 한쪽을 ‘설정값’, 다른 한쪽을 ‘움직이는 신호’로 사용하는 구성으로 문제없습니다.



























