
연산을 활용한 그래프
Tutorial
foundational
+10XP
40 mins
Unity Technologies
비주얼 스크립트에서 연산 노드를 활용하여 로직을 구성하는 단계입니다.
1. 물리 업데이트 로직 준비
점프뿐만 아니라 이동도 구현해보도록 합시다. 물리 효과를 지속적으로 컨트롤해야 하므로 물리 연산을 담당하는 OnFixedUpdate 노드를 사용할 것입니다.
유니티 로직의 기둥 역할인 라이프사이클 노드를 추가하기 위한 경로
OnUpdate에서 조작하고 있는 Movement 값을 활용해서 물리적으로 움직일 것입니다. 여기서 이동 + 회전을 함께 구현해야 하는데 병렬로 작동하기 위해서 Control > Sequence 노드를 사용합니다.
Sequence 노드는 하나의 흐름을 여러 갈래로 나누어 그래프를 병렬로 구성할 수 있습니다.
2. 연산 노드 활용
번째 흐름에는 이동 로직을 만들어봅시다. 이동은 어떻게 만들지 간단한 수식으로 풀어쓰면
이동거리 * 속도 * 프레임 시간 + 현재위치 = 다음 위치
이렇게 쓸 수 있습니다. 이 수식을 그래프로 옮겨봅니다.
Math 노드들을 사용한 연산 로직
갑자기 많은 노드들이 추가되어 어렵게 보이지만, 아래에서 차근차근 풀어서 설명드리겠습니다.
- Movement에 Vector3:Normalize(Vector)를 연결하여 대각선 방향이어도 크기가 1이 되도록 합니다. (피타고라스 정리에 의해 원래는 √2)
- 이동 결과가 다르게 나오는 것을 방지하기 위해서 Speed 와 Time:GetDeltaTime를 Math > Scalar > Multiply 노드로 곱셈합니다.
- 위 둘을 다시 Math > Generic > Multiply 노드로 곱합니다. Generic 카테고리를 사용한 이유는 숫자가 아닌 벡터가 들어가기 때문입니다.
- 여기까지의 결과물은 ‘프레임 시간을 반영한 이동 거리’ 가 됩니다.
- Rigidbody:GetPosition 노드로 자신의 위치를 가져오고 위 연산 결과물과 Math > Generic > Add 노드로 더해줍니다. 이렇게해서 ‘다음 위치’를 만들었습니다.
- 마지막으로 물리적 이동을 위해 Rigidbody:MovePosition(Position) 노드를 추가하고 Sequence와 연산된 결과를 연결합니다.
3. 수식 노드 Formula
비주얼 스크립트는 이해하기 쉽도록 잘 보이는 장점이 있는 반면, 이처럼 연산이 많아지면 그래프의 부피가 급격하게 커지는 단점도 있습니다. 이를 위해서 유니티 비주얼 스크립팅에서 연산을 직접 만들어 활용할 수 있는 Formula 노드를 제공하고 있습니다.
Formula 노드를 사용하여 복잡한 그래프를 정리한 모습
연산 노드를 나열한 방법, 그리고 Formula를 사용해 직접 수식을 작성하는 방법 이 두가지는 개발자의 그래프 작성 성향에 따라 결정하는 것이니 참고하시길 바랍니다.
4. 조건 노드 if
이제 Sequence의 남은 두번째 흐름은 회전에 대한 로직을 만들 겁니다. 다만 방향 입력이 없을 때는 회전하지 않도록 조건을 줄 필요가 있습니다. 여기서 Control > If 노드를 사용합니다.
If 노드는 주어진 Bool 조건에 따라 로직의 흐름을 결정합니다.
If 노드는 bool 조건을 필요로 하는데 여기에는 입력 값이 0, 즉 ‘Movement 벡터의 크기가 0보다 크다’ 라는 조건을 줄 것입니다. 비교 연산은 Logic > Greater 노드를 사용합니다.
이후 회전을 관장하는 타입인 Quaternion (쿼터니언)의 LookRotation(Forward) 노드를 추가하고 여기에 if의 true 흐름과 Movement를 연결해줍니다. 이러면 이동거리에 따른 회전 값을 출력해 주는데 이 결과를 Rigidbody:MoveRotation(Rot) 노드에 주면 완성입니다.
이동 벡터에 따른 물리 회전 로직
5. 그룹 지정하기
이렇게 해서 오브젝트 이동과 회전에 대해서 그래프를 작성해보았습니다. 부피가 크기 때문에 이런 경우 보기 편하도록 그룹으로 묶어주면 좋습니다. 빈공간에서 Ctrl + 좌클릭 으로 드래그해서 그룹을 만들 수 있고 Graph Inspector에서 색상 변경도 가능합니다.
부피가 큰 그래프는 역할에 따라 그룹으로 묶어 관리합니다.
6. 플레이어 로직 확인하기
29개의 노드로 완성된 플레이어의 기본 행동 그래프
이제 플레이어의 기본 행동이 모두 완성 되었으니 중간 저장 후, 플레이 버튼을 눌러 만든 로직을 감상해봅시다. Game 창과 Graph창을 나란히 두어 조작하는 대로 그래프에서 반응하는 모습을 확인하는 것을 추천합니다.