다음을 통해 공유


클라우드 스크립팅 프로그래머 가이드

이 가이드에서는 Mesh Cloud Scripting API 및 개발자 도구를 사용하여 환경을 빌드하는 방법을 설명합니다(Unity에서 프로젝트로 시작한 다음 Mesh 컬렉션에 업로드됨). Mesh Cloud Scripting의 개념과 기본 아키텍처를 숙지하려면 먼저 Azure 에서 클라우드 스크립팅 인프라 설정을 읽어보는 것이 좋습니다.

이 섹션에서는 환경에서 동작을 구동하는 스크립트를 작성하는 데 사용되는 Mesh Cloud Scripting API의 기능 및 인터페이스에 대해 설명합니다.

기본 DOM 구조체

DOM 구조체는 Unity 장면의 구조를 미러링합니다. 애플리케이션의 "장면" 멤버는 Mesh Cloud Scripting 구성 요소가 연결된 게임 개체에 해당합니다. 다음 Mesh Cloud Scripting API 클래스는 편집기에서 만든 Unity 개체와 일대일로 매핑됩니다.

  • GameObject(&Transform Component) -> TransformNode
  • 조명 구성 요소 -> PointLightNode, SpotLightNode, DirectionalLightNode
  • Animator 구성 요소 -> AnimationNode(및 파생 클래스, 아래 참조)
  • Box Collider 구성 요소 -> BoxGeometryNode
  • Sphere Collider 구성 요소 -> SphereGeometryNode
  • 캡슐 충돌기 구성 요소 -> CapsuleGeometryNode
  • Mesh Collider 구성 요소 -> MeshGeometryNode
  • Text Mesh Pro 구성 요소 -> TextNode
  • Rigidbody 구성 요소 -> RigidBodyNode

예를 들어 Light 구성 요소(점 표시등으로 설정됨)와 구 충돌체가 연결된 게임 개체를 사용하여 장면을 만드는 경우 장면에는 PointLightNode 및 SphereGeometryNode라는 두 개의 자식이 있는 TransformNode가 포함됩니다.

또한 일부 Mesh Cloud Scripting API 개체에는 해당 기본 제공 Unity 구성 요소가 없습니다. Mesh 도구 키트 패키지의 일부인 Unity에서 만들 수 있는 추가 구성 요소입니다.

  • 메시 클라우드 스크립팅 구성 요소(위에서 설명)
  • WebSlate 구성 요소

Unity DOM을 Mesh DOM에 매핑

Mesh Cloud Scripting API에서 알 수 없는 구성 요소를 사용하여 장면을 만들 수 있습니다. 단순히 장면에 대한 메시 클라우드 스크립팅 DOM에 존재하지 않습니다. 그러나 GameObjects의 전체 장면 구조는 DOM API에서 TransformNodes로 미러링됩니다.

Unity에는 GameObject/구성 요소 API 셰이프가 있습니다. 그러나 Mesh Cloud Scripting DOM에는 단일 트리 구조가 있습니다. Mesh Cloud Scripting API의 TransformNode에는 다른 TransformNode 또는 구성 요소에 매핑되는 다른 노드일 수 있는 자식이 있습니다. 연결된 게임 개체의 구성 요소와 해당 변환 구성 요소의 자식에 대한 병합된 목록으로 간주할 수 있습니다.

사각형 변환

RectTransform을 사용하는 구성 요소(예: Text Mesh Pro 구성 요소)를 추가하는 경우 게임 개체는 메시 클라우드 스크립팅 장면 그래프에 노드로 표시되지 않습니다. 이러한 구성 요소를 이동, 사용 및 사용하지 않도록 설정할 수는 있지만 이렇게 하려면 일반 변환 구성 요소를 사용하여 다른 게임 개체에서 RectTransform을 사용하여 게임 개체를 래핑해야 합니다.

속성 변경 이벤트

계층의 노드를 호출 AddPropertyChangedEventHandler 하여 속성 변경 이벤트를 구독할 수 있습니다. 속성 이름을 문자열로 전달해야 합니다.

이벤트를 구독하여 모든 이벤트를 구독할 DomObjectPropertyChanged 수도 있습니다. DOM의 속성이 변경되면 호출됩니다.

개체 수명 주기

노드를 만들 때는 서로 다른 노드가 생성되지 않습니다. 즉, 장면 또는 해당 하위 항목 중 하나에 자식으로 명시적으로 추가될 때까지 장면에 표시되지 않습니다. 마찬가지로 노드의 부모를 null로 설정하면 해당 노드와 해당 하위 항목이 장면에서 제거됩니다.

경우에 따라 노드를 일시적으로 사용하지 않도록 설정하지만 해당 노드가 장면에 있던 위치에 대한 레코드를 유지하지 않으려는 경우가 있습니다. 이러한 이유로 각 노드에는 "활성" 플래그가 있습니다. false로 설정하면 노드와 해당 하위 항목이 비활성화됩니다.

Unity에서 장면의 일부이지만 사용하지 않도록 설정된 게임 개체 및 구성 요소를 만들 수 있습니다. 메시 클라우드 스크립팅 장면 계층 구조에서 노드로 표시되지만 활성 플래그는 false로 설정됩니다. 활성 플래그를 true로 설정하면 Unity 장면에서 활성화됩니다.

복제 및 재부모

메시 클라우드 스크립팅 API에서 노드를 복제하고 다시 등록할 수 있습니다. 그에 따라 해당 Unity 장면이 업데이트됩니다. 노드를 복제하는 경우 해당 노드와 해당 자식(해당 Unity 개체에 있을 수 있지만 메시 클라우드 스크립팅에 표시되지 않는 자식 포함)을 복제합니다.

Unity 구성 요소에 해당하는 노드를 복제하거나 다시 생성할 수 있습니다. 메시 클라우드 스크립팅 노드 표현을 기반으로 이러한 Unity 구성 요소를 다시 만들어 구현합니다. 메시 클라우드 스크립팅 API를 통해 만들 수 있는 노드만 복제하거나 다시 등록할 수 있습니다. Unity에서 구성 요소를 만들고 해당 메시 클라우드 스크립팅 노드에 반영되지 않는 필드를 설정한 경우 노드 자체가 복제되는 경우 이러한 필드는 기본값으로 다시 설정됩니다. 이러한 이유로 Unity에서 만든 개체를 조작하는 변환 노드를 복제하거나 재지정하는 것이 좋습니다. 이러한 설정은 항상 모든 원래 Unity 설정을 올바르게 유지합니다.

사용자

API에는 사용자 속성을 제공하는 다양한 위치가 있습니다. 이 User.Identifier 속성은 사용자가 나가서 다시 참가하는 경우에도 사용자에게 영구적인 영구 식별자 문자열입니다. 사용자의 표시 이름은 .를 통해 User.DisplayName서도 액세스할 수 있습니다. 사용자가 연결한 이벤트 ID는 .를 통해 User.ConnectedEventId액세스할 수 있습니다.

개발 중에 사용자 표시 이름, 식별자 및 이벤트 ID는 아래와 같이 "개발자 설정"의 Mesh Cloud Scripting 구성 요소 편집기에서 모의할 수 있습니다.

모의 사용자 속성

아바타

아바타는 장면에 있는 사용자의 표현입니다. 지정된 위치로 사용자를 텔레포트하고, 장면 간을 이동하며, 트리거 볼륨과의 충돌을 감지하는 데 사용할 수 있습니다.

정보 대화 상자

Mesh Cloud Scripting에서 사용자 지정 메시지와 함께 Microsoft Mesh 애플리케이션의 화면 공간 대화 상자를 팝업할 수 있습니다. SceneNode에는 이 함수에 대한 함수가 ShowMessageToParticipants(string message, IReadOnlyCollection<Participant> participants)포함되어 있습니다. 메시지에 서식 있는 텍스트 태그를 사용하여 텍스트 속성(색, 굵게 등)을 제어할 수 있습니다.

입력 대화 상자

Mesh Cloud Scripting은 사용자 지정 메시지를 사용하여 Mesh 이벤트의 참석자로부터 텍스트 입력을 요청할 수 있습니다. CloudApplication 는 메서드 Task<string> ShowInputDialogToParticipantAsync(string message, Participant participant, CancellationToken token)를 제공합니다. 메시지에서 서식 있는 텍스트 태그를 사용하여 텍스트 속성(예: 색 또는 굵게)을 제어할 수 있습니다.

클래스

CloudApplication

인터페이스는 ICloudApplication Mesh 앱을 개발하기 위한 시작점입니다. "App.cs"에서 _app 변수로 사용할 수 있습니다. 장면 ICloudApplication 외에도 사용 가능한 모든 형식에 대한 함수를 만듭니다. 또한 여러 가지 다른 메서드가 있지만 내부용입니다.

InteractableNode

MeshInteractableSetup은 Mesh 도구 키트 패키지의 일부인 사용자 지정 Unity 구성 요소입니다. Unity의 게임 개체에 연결하면 사용자가 해당 게임 개체 또는 해당 자식의 활성 충돌 가능 항목을 클릭할 때 클릭 이벤트가 발생합니다.

아래에는 MeshInteractableSetup 구성 요소가 상자 충돌체와 동일한 게임 개체에 추가되는 간단한 예제가 나와 있습니다.

단순 입력 예제

WebSlateNode

WebSlate는 Mesh 도구 키트 패키지의 일부인 사용자 지정 Unity 구성 요소입니다. 장면에 WebSlate 프리팹을 추가하려면 메뉴 모음에서 GameObject Mesh Toolkit>WebSlate를 선택합니다.> WebSlate 인스턴스의 URL 속성에 할당된 웹 사이트는 이 프리팹의 쿼드에서 렌더링됩니다.

WebSlate 프리팹이 장면에 추가되고 URL이 할당된 예제는 다음과 같습니다.

        var webSlateNode = Root.FindFirstChild<WebSlateNode>(true);
        webSlateNode.Url = new System.Uri("https://en.wikipedia.org/wiki/Color");

WebSlate 예제

클릭 수신 대기

다음은 큐브를 클릭할 때마다 회전하는 간단한 Mesh Cloud Scripting 스크립트입니다. 내부의 App.cs 스텁 StartAsync 메서드를 이 코드로 바꿉다.

        private float _angle = 0;

        public Task StartAsync(CancellationToken token)
        {
            // First we find the TransformNode that corresponds to our Cube gameobject
            var transform = _app.Scene.FindFirstChild<TransformNode>();

            // Then we find the InteractableNode child of that TransformNode
            var sensor = transform.FindFirstChild<InteractableNode>();

            // Handle a button click
            sensor.Selected += (_, _) =>
            {
                // Update the angle on each click
                _angle += MathF.PI / 8;
                transform.Rotation = new Rotation { X = 1, Y = 0, Z = 0, Angle = _angle };
            };

            return Task.CompletedTask;
        }

적중 정보

속성 변경 이벤트 인수를 확인하여 충돌체를 클릭한 사용자를 확인할 수 있습니다. 이벤트 인수에서 클릭의 연락처 일반 및 위치를 읽을 수도 있습니다. 이러한 좌표는 InteractableNode의 로컬 좌표 공간을 기준으로 합니다.

애니메이터

Unity Animator를 만들고 장면에 추가하고 메시 클라우드 스크립팅을 통해 제어할 수 있습니다. Mesh 도구 키트 플러그 인은 Unity 프로젝트의 자산을 살펴보고, 발견된 각 애니메이터에 대해 Mesh Cloud Scripting 프로젝트의 "AnimationScripts" 폴더에 클래스를 생성합니다. 이 클래스는 AnimationNode에서 파생되며 메시 클라우드 스크립팅에서 Animator를 제어하는 데 사용할 수 있습니다. Unity에서 Animator를 게임 개체에 구성 요소로 추가하는 경우 생성된 클래스의 해당 인스턴스를 해당 TransformNode의 자식으로 찾습니다. 이 클래스의 API를 사용하여 Animator를 제어할 수 있습니다.

Mesh Cloud Scripting 프로그래밍 모델은 서버를 신뢰할 수 있으며 Animator 기능의 작은 하위 집합만 지원합니다. 이는 서버에서 Animator를 모델링하고 모든 클라이언트가 서버 모델과 정확하게 동기화될 것으로 예상하기 때문입니다. 이러한 이유로 현재 다음 API만 지원됩니다.

  • 상태 설정(각 계층에 대해 Animator에서 사용 가능한 상태에 따라 열거형으로 설정할 수 있는 클래스의 해당 속성이 있음). 상태는 전환을 통해서가 아니라 즉시 설정됩니다.
  • Float 변수 설정: 부동 변수만 노출되며 Animator에서 "동작 시간"에 바인딩하기 위한 용도로만 사용됩니다.
  • 레이어 속도 설정

상태 내에서 Unity 장면에서 설정할 수 있는 값에 대한 제한 없이 애니메이션 클립을 만들 수 있습니다. 애니메이션 클립 반복도 지원됩니다. Animators의 다음 기능은 AnimationNodes를 통해 지원되지 않습니다.

  • 전환: Animator에 전환을 추가하는 경우 Mesh Cloud Scripting API를 통해 트리거할 수 없습니다(서버는 전환을 모델링하지 않음).
  • 변수(이동 시간을 구동하기 위한 부동 소수선이 아닌) 전환 논리 또는 속도 승수를 구동하는 데 사용되는 변수는 지원되지 않습니다.
  • 미러된 상태, 주기 오프셋 및 풋 IK.

지연 조인 및 애니메이터

클라이언트는 Mesh 이벤트에 조인할 때 실행 중인 모든 애니메이션 노드의 현재 상태 및 현지 시간으로 동기화됩니다. 장기 실행 애니메이션이 상태에서 재생되는 경우 재생 시간은 늦은 조인 시 애니메이션의 올바른 현재 시간으로 설정됩니다. 그러나 상태가 이벤트를 발생시킬 경우 늦게 가입된 클라이언트에서는 이러한 이벤트가 발생하지 않습니다. 일부 다른 시나리오는 예상대로 작동하지 않을 수 있습니다. 예를 들어 상태 시작 시 AudioSource를 사용하도록 설정하여 소리를 트리거하는 경우 오디오 원본은 늦은 조인 클라이언트에서 계속 사용하도록 설정되지만 오디오 클립의 시작 부분에서 재생되기 시작합니다.

Animator 초기 상태

아무 것도 수행하지 않는 기본 상태가 있는 애니메이터를 만드는 것이 좋습니다. 장면이 Unity에서 재생되기 시작하면 모든 애니메이터를 활성화하고 기본 애니메이션 재생을 시작합니다. 이는 Mesh Cloud Scripting Service 연결이 발생하기 전에 발생할 수 있습니다. 따라서 이러한 상태를 동기화하는 방법은 없으며 동작이 원하는 대로 되지 않을 수 있습니다.

애니메이터 재분석 및 복제

Mesh Cloud Scripting API를 통해 AnimationNodes를 만들 수 없습니다. AnimationNode를 만드는 유일한 방법은 Animator 구성 요소가 포함된 Unity 장면을 내보내는 것입니다. AnimationNode를 복제하거나 재지정하려고 하면 이 작업을 지원할 방법이 없으므로 오류가 발생합니다. 복제하고 부모로 만들 수 있는 포함된 Unity 게임 개체에 해당하므로 AnimationNode의 부모를 복제하거나 다시 양육할 수 있습니다.

생성된 코드에 대한 참고 사항

생성된 코드는 애니메이터, 레이어, 상태 및 변수의 이름에서 공백을 제거합니다. 예를 들어 변수 이름 "my var"은 코드에서 "myVar"가 됩니다. 이 때문에 유효한 코드를 생성하지 않는 Animator를 만들 수 있습니다. 예를 들어 "my var" 및 "myVar"라는 변수가 두 개 있는 경우 생성 중에 오류가 발생하며 변수 이름을 바꾸라는 메시지가 표시됩니다.

LightNode

PointLightNode, DirectionalLightNode 및 SpotLightNode는 모두 Unity Light 구성 요소에 매핑됩니다(해당 형식이 해당 값으로 설정됨). LightNode API를 통해 이러한 조명의 기본 매개 변수를 설정할 수 있습니다. API를 통해 직접 조명을 만들 수도 있습니다. API를 통해 라이트 노드를 만들면 Mesh Cloud Scripting API를 통해 설정할 수 없는 매개 변수가 기본값으로 유지됩니다.

GeometryNode

BoxGeometryNode, SphereGeometryNode, CapsuleGeometryNode 및 MeshGeometryNode는 각각 Unity의 Box Collider 구성 요소, 구 충돌체 구성 요소, 캡슐 충돌체 구성 요소 및 메시 충돌체 구성 요소에 매핑됩니다. Mesh Cloud Scripting API를 통해 만들 수도 있습니다. 기하 도형 노드를 사용하도록 설정하고 사용하지 않도록 설정하면 MeshInteractableSetup이 해당 게임 개체 또는 부모 중 하나에 연결된 경우 적중 후보에서 추가 및 제거됩니다.

API를 통해 기하 도형 노드를 만들면 메시 API를 통해 설정할 수 없는 매개 변수가 기본값으로 유지됩니다(예: 물리학 재질은 없음으로 설정되고 isTrigger는 false로 설정됨).

RigidBodyNode

개체에 Rigidbody 구성 요소를 추가하면 메시 물리학제어 하에 동작이 적용됩니다. 코드를 추가하지 않으면 Rigidbody 개체가 중력에 의해 아래로 당겨지고 다른 개체와의 충돌에 반응합니다.

참고: GeometryNode.Friction 반환 staticFriction됩니다. 그러나 메시 클라우드 스크립팅 쪽에서 설정된 경우 클라이언트 둘 다 staticFriction 에서 dynamicFriction 업데이트됩니다.

볼륨 트리거

기하 도형 노드는 속성이 true로 설정되면 트리거 볼륨 IsTrigger 역할을 할 수 있습니다. 이 플래그는 Unity에서 IsTrigger 충돌체의 속성에 해당하며 런타임에 변경할 수 없습니다. 기하 도형이 트리거인 경우 겹치기 시작/중지하는 아바타를 생성 Entered Exited 합니다.

참고: 레이어의 충돌체가 텔레포트 빔을 TriggerVolume 차단하므로 원격 포트 빔이 이를 무시할 수 있도록 Unity 개체를 Default 레이어에 추가해야 합니다.

TextNode

TextNode는 Unity의 TextMeshPro 구성 요소에 매핑됩니다. 장면에 TextMeshPro 구성 요소를 추가하는 경우 Mesh Cloud Scripting 장면 계층 구조에 해당 TextNode가 있습니다. 이렇게 하면 런타임에 구성 요소의 텍스트를 설정할 수 있습니다. TextNode API(굵게, 기울임꼴, 밑줄, 취소선 및 색)를 통해 기본 텍스트 속성을 변경할 수도 있습니다. 현재는 API를 통해 TextNode를 만들 수 없습니다. Unity에서 장면에 추가하여 만들어야 합니다. 또한 TextNode를 직접 복제할 수 없습니다. 대신 TextNode의 부모 TranformNode를 복제해야 합니다.

메시

메시는 현재 Mesh Cloud Scripting API의 "숨겨진" 구성 요소입니다. Unity 편집기에서 만들 수 있으며 부모 게임 개체/변환 구성 요소를 조작하여 조작할 수 있지만 프로그래밍 방식으로 만들 수 없으며, Mesh API를 통해 런타임에 속성을 편집할 수도 없습니다.

시각적 스크립트

Unity 스크립트 머신을 만들고 장면에 추가하고 메시 클라우드 스크립팅을 통해 제어할 수 있습니다. Mesh 도구 키트 플러그 인은 Unity 프로젝트의 자산을 살펴보고, 발견된 각 스크립트 머신에 대해 Mesh Cloud Scripting 프로젝트의 "VisualScripts" 폴더에 클래스를 생성합니다. 이 클래스는 VisualScriptNode에서 파생되며 Mesh Cloud Scripting에서 스크립트 머신과 연결된 Unity 변수를 조작하는 데 사용할 수 있습니다. 스크립트 머신을 Unity의 GameObject에 구성 요소로 추가하는 경우 생성된 클래스의 해당 인스턴스를 해당 TransformNode의 자식으로 찾습니다. 이 클래스의 API를 사용하여 스크립트 머신의 변수를 제어할 수 있습니다.

상태 동기화

기본적으로 Mesh는 한 클라이언트의 시각적 스크립트에서 수행한 장면 변경 내용을 다른 모든 클라이언트에 자동으로 복제합니다. 메시 클라우드 스크립팅이 시각적 스크립팅을 통해 변경된 내용을 인식하려면 다음 전제 조건을 충족해야 합니다.

  • 스크립트 머신 구성 요소는 Mesh Cloud Scripting 장면 루트의 하위 항목인 GameObject에 있습니다.
  • Mesh 클라우드 스크립팅 구성 요소의 "시각적 스크립팅 사용" 옵션을 사용할 수 있습니다.

위의 조건 중 하나가 충족되지 않으면 메시 시각적 스크립팅 런타임은 장면 변경 내용을 계속 복제하지만 메시 클라우드 스크립팅은 이러한 변경 내용을 알지 못합니다.

초기 상태

시각적 스크립트는 시작 시 공유 상태를 수정하거나 사용하지 않는 것이 좋습니다. On Start 이벤트는 일반적으로 Mesh Cloud Scripting Service 연결이 발생하기 전에 발생하므로 해당 시점에 상태를 동기화할 방법이 없으며 동작이 원하는 것이 아닐 수 있습니다.

늦은 조인

클라이언트가 Mesh 이벤트에 조인하면 모든 Visual Script 노드의 현재 상태로 동기화됩니다. 이전에 다른 클라이언트 에서 발생했을 수 있는 상태 변경 이벤트는 늦은 조인 클라이언트에서 발생하지 않습니다 . 일부 다른 시나리오는 예상대로 작동하지 않을 수 있습니다. 예를 들어 On State Changed 이벤트에 대한 응답으로 AudioSource를 사용하도록 설정하여 소리를 트리거하는 경우 오디오 원본은 늦은 조인 클라이언트에서 계속 활성화되지만 오디오 클립의 시작 부분에서 재생되기 시작합니다.

재부문 및 복제

Mesh Cloud Scripting API를 통해 VisualScriptNode 를 만들 수 없습니다. VisualScriptNode를 만드는 유일한 방법은 스크립트 컴퓨터 구성 요소가 포함된 Unity 장면을 내보내는 것입니다. VisualScriptNode를 복제하거나 배상하려고 하면 이 작업을 지원할 방법이 없으므로 오류가 발생합니다. 복제 및 부모가 될 수 있는 포함된 Unity GameObject에 해당하므로 VisualScriptNode의 부모를 복제하거나 다시 양육할 수 있습니다.

생성된 코드에 대한 참고 사항

생성된 코드는 Script Machines 및 변수의 이름에서 공백을 제거합니다. 예를 들어 변수 이름 "my var"은 코드에서 "MyVar"가 됩니다. 이 때문에 유효한 코드를 생성하지 않는 Script Machines를 만들 수 있습니다. 예를 들어 "my var" 및 "myVar"라는 변수가 두 개 있는 경우 생성 중에 오류가 발생하며 변수 이름을 바꾸라는 메시지가 표시됩니다.

기타 Mesh 클라우드 스크립팅 항목

Mesh Cloud Scripting Service에 리소스 추가

Mesh Cloud Scripting Service에서 사용할 리소스를 추가해야 하는 경우 C# 프로젝트 파일에 포함된 리소스로 추가해야 합니다. 이 작업은 Visual Studio의 프로젝트 UI를 통해 수행하거나 .csproj 파일에 다음 줄을 직접 추가하여 수행할 수 있습니다.

<EmbeddedResource Include="<my_resource_file>" CopyToOutputDirectory="PreserveNewest" />

이는 scene.map이 패키지되는 방식이며 참조를 위해 .csproj 파일에서 볼 수 있습니다.

메시 물리학 작업

Mesh Physics 는 클라이언트 간에 경직된 본문의 동작을 동기화하는 데 주의를 기울입니다. 메시 클라우드 스크립팅 TransformNode.PositionTransformNode.RotationRigidBody.VelocityRigidBody.AngularVelocity 최신 시뮬레이션 상태로 업데이트되지 않습니다. 그러나 클라이언트는 Mesh Cloud Scripting Service에 설정된 경우 변경 내용을 적용합니다. 단일 속성을 변경하면 다른 속성은 변경되지 않습니다. 예를 들어 위치만 설정된 경우 속도는 변경되지 않으며 경직된 본문은 새 위치에서 이전 속도로 계속 동작합니다. Mesh Cloud Scripting Service가 경직된 본문에 대한 최신 동작 상태로 업데이트되지 않은 경우 새로운 강체에 대해서만 설정하는 것이 좋습니다.

RigidBodyNode 복제된 경우 TransformNode 복제된 본문이 등록되어 클라이언트 간의 동기화를 위해 Mesh Physics 인계됩니다. 참고: 복제된 강체는 원래 강체 장면의 시작부터 위치, 회전 및 속도를 갖습니다. 서로 달라야 하는 경우 Mesh Cloud Scripting에서 명시적으로 설정해야 합니다.

다음 단계