연습 - 바인딩 컨트롤을 사용하여 3D 개체 조작

완료됨

ObjectManipulator 스크립트를 사용하면 한 손 또는 양손을 사용하여 개체를 이동, 크기 조정, 회전할 수 있습니다. 사용자가 손으로 홀로그램을 직접 터치할 수 있으므로 이 스크립트는 직접 조작 입력 모델을 지원합니다. 여기서는 월면자동차를 이동, 크기 조정, 회전할 수 있도록 ObjectManipulator를 사용하여 손 상호 작용을 활성화합니다.

  1. 또한 월면자동차 부품을 월면자동차에 배치할 수 있도록 월면자동차를 구성하여 전체 월면자동차 어셈블리로 만듭니다. 계층 창에서 RoverExplorer >RoverParts 개체를 확장하고 모든 자식 월면자동차 부품 개체 및 RoverAssembly 개체를 선택한 다음, 검사기 창에서 구성 요소 추가 단추를 사용하여 선택한 모든 개체에 다음 구성 요소를 추가합니다.

    • Object Manipulator(스크립트) 구성 요소
    • Part Assembly Controller(스크립트) 구성 요소

    Screenshot of RoverAssembly with all rover part objects selected and components added.

  2. 모든 월면자동차 부품 개체와 RoverAssembly 개체가 선택된 상태에서 검사기 창에서 다음과 같이 개체 조작자(스크립트) 구성 요소를 구성합니다.

    • 기본 상호 작용 가능 설정에서 On Clicked() 이벤트를 찾습니다. + 아이콘을 선택하여 새로운 이벤트를 추가합니다. 이벤트를 다음과 같이 구성합니다.

      a. RoverAssembly 개체를 계층 구조에서 없음(개체) 필드로 끌어서 On Clicked () 이벤트의 수신기로 할당합니다.

      b. 함수 없음 드롭다운 목록에서 TapToPlace>StartPlacement()를 선택하여 이벤트가 트리거될 때 이 메서드를 호출합니다.

    • 허용된 조작 형식 드롭다운 목록에서 배율 확인란을 선택 취소하여 이동회전만 사용하도록 설정합니다.

    Screenshot of Unity with Two Handed Manipulation Type configured.

  3. RoverAssembly 개체만 선택하고 해당 개체에 StatefulInteractable 구성 요소가 있으면 제거합니다. 구성 요소 맨 오른쪽에 있는 세 개의 점을 선택한 다음 구성 요소 제거를 선택합니다.

  4. 오디오 클립을 찾으려면 프로젝트 창에서 패키지>MRTK 표준 자산>오디오>HoloLens2 폴더로 이동합니다.

    Screenshot of Unity Project window with Audio folder selected.

  5. 계층 구조 창에서 모든 월면자동차 부품 개체를 다시 선택하고 검사기 창에서 구성 요소 추가를 선택하여 오디오 소스 구성 요소를 추가하고 다음과 같이 구성합니다.

    • MRTK_Scale_Start 오디오 클립을 AudioClip 필드에 할당
    • Play On Awake(활성 상태일 때 재생) 확인란의 선택을 취소
    • 공간 Blend1로 변경

    Screenshot of Unity with all rover parts selected and Audio Source component added and configured.

  6. 계층 구조 창에서 RoverAssembly > RoverModel_PlacementHints_XRay >Parts_PlacementHints 개체를 확장하여 모든 배치 힌트 개체를 표시한 다음, 첫 번째 월면자동차 부품으로 RoverParts >Camera_Part를 선택하고 다음과 같이 파트 어셈블리 컨트롤러(스크립트) 구성 요소를 구성합니다.

    • Camera_PlacementHint 개체를 Location To Place(배치할 위치) 필드에 할당

    Screenshot of Unity with Camera_Part PartAssemblyController component configured.

  7. 나머지 월면자동차 부품 개체와 RoverAssembly 개체 각각에 대해 5단계를 반복하여 다음과 같이 파트 어셈블리 컨트롤러(스크립트) 구성 요소를 구성합니다.

    • Generator_Part의 경우 Generator_PlacementHint 개체배치할 위치 필드에 할당합니다.
    • Lights_Part의 경우 Lights_PlacementHint 개체배치할 위치 필드에 할당합니다.
    • UHFAntenna_Part의 경우 UHFAntenna_PlacementHint 개체배치할 위치 필드에 할당합니다.
    • Spectrometer_Part의 경우 Spectrometer_PlacementHint 개체를 Location To Place(배치할 위치) 필드에 할당
    • RoverAssembly의 경우 개체 자체(동일한 RoverAssembly 개체)를 배치할 위치 필드에 할당합니다.
  8. 계층 창에서 RoverExplorer > Buttons >Reset 단추 개체를 선택한 다음, 검사기 창에서 PressableButton OnClick () 이벤트를 다음과 같이 구성합니다.

    • RoverAssembly 개체를 없음(개체) 필드에 할당합니다.
    • 함수 없음 드롭다운 목록에서 PartAssemblyController>ResetPlacement ()를 선택하여 이 함수를 이벤트가 트리거될 때 실행할 작업으로 설정합니다.

    Screenshot of Unity with Reset button object OnClick event configured.

  9. 이제 게임 모드로 진입하면 근거리 또는 원거리 상호 작용을 사용하여 월면자동차 부품을 월면자동차에 배치할 수 있습니다. 파트가 해당하는 배치 힌트에 가까워지면 위치로 맞춰져서 Rover의 일부가 됩니다. 배치를 다시 설정하려면 Reset(초기화) 단추를 누르면 됩니다.

    Screenshot of Unity Play mode split view with Reset button being pressed.

바인딩 컨트롤 추가

  1. 계층 창에서 RoverExplorer 개체를 선택한 다음, 검사기 창에서 구성 요소 추가 단추를 사용하여BoundsControl 구성 요소를 추가합니다. 기본적으로 구성 요소를 사용하지 않도록 설정하려면 구성 요소 옆에 있는 확인란을 선택 취소합니다.

    Screenshot of Unity with RoverExplorer object selected and components added and disabled.

  2. 프로젝트 창에서 패키지>MRTK 공간 조작>BoundsControl>프리팹 폴더로 이동한 후 Bounds Control 구성 요소의 경계 시각적 개체 프리팹 필드에 있는 BoundingBoxWithHandles 프리팹을 끕니다.

    Screenshot of Unity with RoverExplorer object selected and the Bounds Visuals Prefab field configured.

  3. 계층 창에서 메뉴 >Buttons-GridLayout(단추) 개체를 확장하여 세 개의 단추를 표시하고 세 번째 단추의 이름을 BoundsControl_Enable로 바꾼 다음 계층 창에서 다음과 같이 BoundsControl_Enable 게임 개체를 구성합니다.

    • Frontplate > AnimatedContent > 아이콘 > 레이블 개체를 선택하고 TextMeshPro 구성 요소를 사용으로 변경합니다. 레이블 개체가 계층 구조에서 활성화되어 있는지 확인합니다.
    • RoverExplorer 개체를 없음(개체) 필드에 할당하여 PressableButton.OnClicked() 이벤트를 구성하고 함수 없음 드롭다운에서 BoundsControl>bool Enabled를 선택합니다(인수 확인란이 선택되어 있는지 확인).
    • 다른 이벤트를 추가하려면 작은 + 아이콘을 선택합니다.
    • RoverExplorer 개체를 None (Object) 필드에 할당
    • 이벤트를 트리거할 때 함수 없음 드롭다운 목록에서 ObjectManipulator>bool Enabled를 선택하여 이 속성 값을 업데이트하고 인수 확인란이 선택되었는지 확인합니다.
    • 다른 이벤트를 추가하려면 작은 + 아이콘을 선택합니다.
    • RoverExplorer 개체를 None (Object) 필드에 할당
    • 함수 없음 드롭다운 목록에서 BoundsControl>bool HandlesActive를 선택하여 이벤트가 트리거될 때 이 속성 값을 업데이트하고 인수 확인란이 선택되었는지 확인합니다.
    • Frontplate > AnimatedContent > 아이콘 > UIButtonFontIcon 개체를 선택하고 아이콘글꼴 아이콘 선택기 구성 요소의 4개 화살표 아이콘으로 변경합니다. 아이콘 목록에서 찾거나 ** 현재 아이콘 이름**을 '아이콘 40'으로 설정합니다.

    Screenshot of Unity with BoundsControl_Enable button object selected and Button Config Helper component configured.

  4. BoundsControl_Enable 단추를 복제하고 이름을 BoundsControl_Disable로 바꾼 다음 검사기 창에서 단추 구성 도우미(스크립트) 구성 요소를 다음과 같이 구성합니다.

    • Frontplate > AnimatedContent > 아이콘 > 레이블 개체를 선택하고 TextMeshPro 구성 요소를 사용 안 함으로 변경합니다.
    • 이벤트 아래의 모든 확인란이 선택 취소되어 있는지 확인하여 PressableButton.OnClicked() 이벤트를 구성합니다.

    Screenshot of Unity with BoundsControl_Disable button object selected and Button Config Helper component configured.

  5. 이제 게임 모드로 진입하고 사용을 선택하여 바인딩 컨트롤을 사용하는 경우 근거리 또는 원거리 상호 작용을 사용하여 바인딩 컨트롤을 이동, 회전 및 스케일링하고 사용 안 함을 선택하여 바인딩 컨트롤을 다시 사용하지 않도록 설정합니다.

    Screenshot of Unity Play mode split view with Bounds Control being manipulated.