연습 - 경계 컨트롤을 사용하여 3D 개체 조작

완료됨

스크립트는 ObjectManipulator 하나 또는 두 개의 손을 사용하여 개체를 이동 가능하고 확장 가능하며 회전 가능하게 만듭니다. 이 스크립트는 사용자가 직접 홀로그램을 손으로 터치할 수 있으므로 직접 조작 입력 모델을 지원합니다. 여기서는 로버 탐색기를 이동, 크기 조정 및 회전할 수 있도록 손 조작을 사용하도록 ObjectManipulator 설정합니다.

  1. 또한 로버 부품을 로버에 배치하여 완전한 로버 어셈블리로 만들 수 있도록 로버 익스플로러를 구성합니다. 계층 구조 창에서 RoverExplorer >RoverParts 개체를 확장하고 모든 자식 로버 부품 개체와 RoverAssembly 개체를 선택한 다음, 검사기 창에서 구성 요소 추가 단추를 사용하여 선택한 모든 개체에 다음 구성 요소를 추가합니다.

    • 개체 조작자(스크립트) 구성 요소
    • 파트 어셈블리 컨트롤러(스크립트) 구성 요소

    모든 로버 파트 개체가 선택되고 구성 요소가 추가된 RoverAssembly의 스크린샷

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

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

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

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

    • 허용되는 조작 유형 드롭다운 목록에서 배율 확인란의 선택을 취소하므로 이동회전만 사용하도록 설정됩니다.

    양손 조작 유형이 구성된 Unity의 스크린샷

  3. RoverAssembly 개체만 선택하고, (있는 경우) Stateful Interactable 구성 요소를 제거하세요. 구성 요소의 맨 오른쪽에 있는 세 개의 점을 선택한 다음 구성 요소 제거를 선택합니다.

  4. 프로젝트 창에서 패키지>MRTK Standard Assets>Audio>HoloLens2 폴더로 이동하여 오디오 클립을 찾습니다.

    오디오 폴더가 선택된 Unity 프로젝트 창의 스크린샷

  5. 계층 구조 창에서 모든 로버 파트 개체를 다시 선택한 다음, 검사기 창에서 구성 요소 추가 를 선택하여 오디오 원본 구성 요소를 추가하고 다음과 같이 구성합니다.

    • MRTK_Scale_Start 오디오 클립을 AudioClip 필드에 할당합니다.
    • Awake 시 재생 확인란의 선택을 취소합니다.
    • 공간 혼합1로 변경합니다.

    모든 로버 부품이 선택되고 오디오 원본 구성 요소가 추가되고 구성된 Unity의 스크린샷.

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

    • 위치 배치 필드에 Camera_PlacementHint 개체 할당합니다.

    Camera_Part PartAssemblyController 구성 요소가 구성된 Unity의 스크린샷

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

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

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

    Unity의 리셋 버튼 객체 OnClick 이벤트가 구성된 스크린샷

  9. 이제 게임 모드로 전환하면 근거리 또는 먼 상호 작용을 사용하여 로버 부품을 Rover에 배치할 수 있습니다. 부품이 해당 배치 힌트에 가까워지면 자동으로 맞춰져 로버의 일부로 통합됩니다. 배치를 다시 설정하려면 다시 설정 단추를 누릅니다.

    다시 설정 단추를 누른 Unity 재생 모드 분할 보기의 스크린샷.

경계 컨트롤 추가

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

    RoverExplorer 개체가 선택되고 구성 요소가 추가되고 비활성화된 Unity의 스크린샷

  2. 프로젝트 창에서 Packages>MRTK 공간 조작>BoundsControl>Prefabs 폴더로 이동한 다음, BoundingBoxWithHandles 프리팹을 경계 컨트롤 구성 요소의 경계 시각적 개체 프리팹 필드로 드래그하여 놓습니다.

    RoverExplorer 개체가 선택되고 경계 시각화 프리팹 필드가 구성된 Unity의 스크린샷

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

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

    BoundsControl_Enable 단추 개체가 선택되고 단추 구성 도우미 구성 요소가 구성된 Unity의 스크린샷

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

    • Frontplate > AnimatedContent > 아이콘 > 레이블 개체를 선택하고 TextMeshPro 구성 요소를 사용하지 않도록 변경합니다.
    • 이벤트 아래의 모든 확인란을 선택 취소하여 PressableButton.OnClicked() 이벤트를 구성합니다.

    BoundsControl_Disable 단추 개체가 선택되고 단추 구성 도우미 구성 요소가 구성된 Unity의 스크린샷

  5. 이제 게임 모드로 전환하고 [사용] 을 선택하여 [ 경계 컨트롤]을 사용하도록 설정한 경우 근거리 또는 원거리 상호 작용을 사용하여 경계 컨트롤을 이동, 회전 및 크기 조정하고[ 사용 안 함 ]을 선택하여 [경계 컨트롤]을 다시 사용하지 않도록 설정할 수 있습니다.

    경계 컨트롤이 조작되고 있는 Unity Play 모드 분할 보기의 스크린샷.