경계 상자 - MRTK2

경계 상자

참고

경계 상자는 더 이상 사용되지 않으며 후속 경계 컨트롤로 대체됩니다. 마이그레이션 옵션 중 하나를 사용하여 기존 게임 개체를 업그레이드합니다.

이 스크립트는 BoundingBox.cs 혼합 현실에서 개체를 변환하기 위한 기본 기능을 제공합니다. 경계 상자에 홀로그램 주위에 큐브가 표시되어 상호 작용할 수 있음을 나타냅니다. 큐브의 모서리와 가장자리에 있는 핸들을 사용하면 개체의 크기를 조정하거나 회전할 수 있습니다. 경계 상자는 사용자 입력에도 반응합니다. 예를 들어 HoloLens 2 경계 상자는 손가락 근접에 응답하여 개체와의 거리를 인식하는 데 도움이 되는 시각적 피드백을 제공합니다. 모든 상호 작용 및 시각적 개체를 쉽게 사용자 지정할 수 있습니다.

자세한 내용은 Windows 개발자 센터의 경계 상자 및 앱 바 를 참조하세요.

예제 장면

장면에서 경계 상자 구성의 예를 찾을 수 있습니다 BoundingBoxExamples .

경계 상자 예제

Unity 검사기를 사용하여 경계 상자를 추가하고 구성하는 방법

  1. 개체에 Box Collider 추가
  2. 개체에 스크립트 할당 BoundingBox
  3. '활성화' 메서드와 같은 옵션 구성(아래 검사기 속성 섹션 참조)
  4. (선택 사항) HoloLens 2 스타일 경계 상자에 대한 프리팹 및 재질 할당(아래 스타일 처리 섹션 참조)

참고

검사기에서 대상 개체경계 재정 의 필드를 사용하여 여러 자식 구성 요소를 사용하여 개체의 특정 개체 및 충돌기를 할당합니다.

경계 상자 1

코드에서 경계 상자를 추가하고 구성하는 방법

  1. 큐브 GameObject 인스턴스화

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. AddComponent<>()를 사용하여 충돌기가 있는 개체에 스크립트 할당 BoundingBox

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. 옵션 구성(아래 검사기 속성 섹션 참조)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (선택 사항) HoloLens 2 스타일 경계 상자에 대한 프리팹 및 재질을 할당합니다. 재질과 프리팹을 동적으로 로드해야 하므로 검사기를 통해 할당해야 합니다.

참고

셰이더 순열이 런타임에 누락될 수 있으므로 셰이더를 동적으로 로드하기 위해 Unity의 'Resources' 폴더 또는 Shader.Find 를 사용하지 않는 것이 좋습니다.

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

예: MinMaxScaleConstraint를 사용하여 최소, 최대 경계 상자 크기 조정 설정

최소 및 최대 크기를 설정하려면 를 사용합니다 MinMaxScaleConstraint. MinMaxScaleConstraint를 사용하여 에 대한 ManipulationHandler최소 및 최대 크기를 설정할 수도 있습니다.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

예: 게임 개체 주위에 경계 상자 추가

개체 주위에 경계 상자를 추가하려면 구성 요소를 추가 BoundingBox 하기만 하면 됩니다.

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

검사기 속성

대상 개체

이 속성은 경계 상자 조작에 의해 변환될 개체를 지정합니다. 개체가 설정되지 않은 경우 경계 상자는 기본적으로 소유자 개체로 설정됩니다.

경계 재정의

경계 계산을 위해 개체에서 상자 충돌기를 설정합니다.

활성화 동작

경계 상자 인터페이스를 활성화하는 몇 가지 옵션이 있습니다.

  • 시작 시 활성화: 장면이 시작되면 경계 상자가 표시됩니다.
  • 근접으로 활성화: 관절이 개체에 가까이 있으면 경계 상자가 표시됩니다.
  • 포인터로 활성화: 경계 상자는 손 광선 포인터의 대상이 되면 표시됩니다.
  • 수동 활성화: 경계 상자가 자동으로 표시되지 않습니다. boundingBox.Active 속성에 액세스하여 스크립트를 통해 수동으로 활성화할 수 있습니다.

최소 크기 조정

허용되는 최소 크기 조정입니다. 이 속성은 더 이상 사용되지 않으며 스크립트를 추가하는 MinMaxScaleConstraint 것이 좋습니다. 이 스크립트를 추가하면 경계 상자 대신 최소 크기 조정이 제거됩니다.

최대 크기 조정

허용되는 최대 크기 조정입니다. 이 속성은 더 이상 사용되지 않으며 스크립트를 추가하는 MinMaxScaleConstraint 것이 좋습니다. 이 스크립트를 추가하면 경계 상자 대신 최대 크기 조정이 제거됩니다.

상자 표시

다양한 경계 상자 시각화 옵션입니다.

축 평면화가 자동 평면화로 설정된 경우 스크립트는 가장 작은 범위로 축을 따라 조작을 허용하지 않습니다. 이로 인해 일반적으로 씬 개체에 사용되는 2D 경계 상자가 생성됩니다.

핸들

재질 및 프리팹을 할당하여 핸들 스타일을 재정의할 수 있습니다. 핸들이 할당되지 않은 경우 기본 스타일로 표시됩니다.

이벤트

경계 상자는 다음 이벤트를 제공합니다. 이 예제에서는 이러한 이벤트를 사용하여 오디오 피드백을 재생합니다.

  • 회전 시작: 회전이 시작될 때 발생합니다.
  • 회전 종료: 회전이 끝날 때 발생합니다.
  • 크기 조정 시작: 크기 조정이 시작될 때 발생합니다.
  • 확장 종료: 크기 조정이 종료되면 발생합니다.
이벤트

핸들 스타일

기본적으로 스크립트를 BoundingBox.cs 할당하면 HoloLens 1세대 스타일의 핸들이 표시됩니다. HoloLens 2 스타일 핸들을 사용하려면 적절한 핸들 프리팹 및 재질을 할당해야 합니다.

경계 상자 핸들 스타일

다음은 HoloLens 2 스타일 경계 상자 핸들의 프리팹, 재질 및 크기 조정 값입니다. 장면에서 이 예제를 BoundingBoxExamples 찾을 수 있습니다.

HandStyles 2

핸들(HoloLens 2 스타일 설정)

  • 핸들 재질: BoundingBoxHandleWhite.mat
  • 핸들 잡기 재질: BoundingBoxHandleBlueGrabbed.mat
  • 크기 조정 핸들 프리팹: MRTK_BoundingBox_ScaleHandle.prefab
  • 배율 핸들 슬레이트 프리팹: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • 배율 핸들 크기: 0.016(1.6cm)
  • 배율 핸들 충돌기 패딩: 0.016(잡기 가능한 충돌기가 핸들 시각적 개체보다 약간 더 커지게 합니다).
  • 회전 핸들 프리팹: MRTK_BoundingBox_RotateHandle.prefab
  • 회전 핸들 크기: 0.016
  • 회전 핸들 충돌기 패딩: 0.016(잡기 가능한 충돌기가 핸들 시각적 개체보다 약간 커지게 합니다).

근접성(HoloLens 2 스타일 설정)

손까지의 거리를 기준으로 애니메이션으로 핸들을 표시하고 숨깁니다. 2단계 크기 조정 애니메이션이 있습니다.

근접성
  • 근접 효과 활성: 근접 기반 핸들 활성화 사용
  • 중간 근접 처리: 1단계 크기 조정을 위한 거리
  • 근접 핸들: 2단계 크기 조정을 위한 거리
  • 원거리 배율: 손이 경계 상자 상호 작용 범위를 벗어나면 핸들 자산의 기본 배율 값입니다(위에서 '중간 근접 처리'로 정의된 거리). 기본적으로 0을 사용하여 핸들을 숨깁니다.
  • 중간 크기 조정: 손이 경계 상자 상호 작용 범위 내에 있을 때 핸들 자산의 배율 값입니다(위에서 '근접 핸들'로 정의된 거리). 1을 사용하여 일반 크기 표시)
  • 배율 닫기: 손이 잡기 상호 작용 범위 내에 있을 때 핸들 자산의 크기 조정 값입니다(위에서 '근접 핸들'로 정의된 거리). 1.x를 사용하여 더 큰 크기 표시)

조작 처리기를 사용하여 개체를 이동 가능하게 만들기

경계 상자를 와 ManipulationHandler.cs 결합하여 원거리 상호 작용을 사용하여 개체를 이동 가능하게 만들 수 있습니다. 조작 처리기는 한 손과 양손 상호 작용을 모두 지원합니다. 손 추적 을 사용하여 개체와 가까이에서 상호 작용할 수 있습니다.

조작 처리기

경계 상자 가장자리가 '원거리 상호 작용'을 사용하여 ManipulationHandler이동할 때 동일한 방식으로 작동하려면 위의 스크린샷과 같이 조작 시작 시 종료 / 조작 대한 이벤트를 각각 에 BoundingBox.HighlightWires / BoundingBox.UnhighlightWires 연결하는 것이 좋습니다.

경계 컨트롤로 마이그레이션

경계 상자를 사용하는 기존 프리팹 및 인스턴스는 MRTK 도구 패키지의 일부인 마이그레이션 창을 통해 새 경계 컨트롤로 업그레이드할 수 있습니다.

경계 상자의 개별 인스턴스를 업그레이드하는 경우 구성 요소의 속성 검사기 내에 마이그레이션 옵션도 있습니다.

경계 컨트롤 마이그레이션