Interactive 요소 [실험적]

MRTK 입력 시스템에 대한 간소화된 중앙 집중식 진입점입니다. 핵심 상호 작용 상태에 대한 상태 관리 메서드, 이벤트 관리 및 상태 설정 논리를 포함합니다.

Interactive Element는 Unity 2019.3에서 지원되는 실험적 기능으로, Unity 2019.3: Serialize Reference의새로운 기능을 활용합니다.

Interactive 요소 검사기

재생 모드 중에 Interactive 요소 검사기는 현재 상태가 활성 상태인지 여부를 나타내는 시각적 피드백을 제공합니다. 상태가 활성 상태이면 진한색으로 강조 표시됩니다. 상태가 활성 상태가 아닌 경우 색이 변경되지 않습니다. 검사기에서 상태 옆에 있는 숫자는 상태 값입니다. 상태가 활성 상태이면 값은 1이고, 상태가 활성 상태가 아닌 경우 값은 0입니다.

가상 손 상호 작용이 있는 대화형 요소

핵심 상태

Interactive 요소는 핵심 상태를 포함하며 사용자 지정 상태추가를 지원합니다. 핵심 상태는 에 정의된 상태 설정 논리가 이미 있는 BaseInteractiveElement 상태입니다. 다음은 현재 입력 기반 코어 상태의 목록입니다.

현재 핵심 상태

근 및 원거리 상호 작용 핵심 상태:

근 상호 작용 핵심 상태:

원거리 상호 작용 핵심 상태:

기타 핵심 상태:

검사기를 통해 코어 상태를 추가하는 방법

  1. Interactive 요소에 대한 검사기에서 코어 상태 추가로 이동합니다.

    검사기에서 핵심 상태 추가

  2. 상태 선택 단추를 선택하여 추가할 코어 상태를 선택합니다. 메뉴의 상태는 상호 작용 유형별로 정렬됩니다.

    상태가 선택된 검사기 를 통해 코어 상태 추가

  3. 이벤트 구성 폴딩을 열어 상태와 연결된 이벤트 및 속성을 확인합니다.

    이벤트 구성을 통해 검사기 통해 코어 상태 추가

스크립트를 통해 코어 상태를 추가하는 방법

메서드를 사용하여 AddNewState(stateName) 코어 상태를 추가합니다. 사용 가능한 코어 상태 이름 목록은 CoreInteractionState 열거형을 사용합니다.

// Add by name or add by CoreInteractionState enum to string

interactiveElement.AddNewState("SelectFar");

interactiveElement.AddNewState(CoreInteractionState.SelectFar.ToString());

상태 내부 구조

Interactive 요소의 상태는 InteractionState 형식입니다. InteractionState에는 다음 속성이 포함됩니다.

  • 이름:상태의 이름입니다.
  • 값:상태 값입니다. 상태가 켜진 경우 상태 값은 1입니다. 상태가 꺼져 있으면 상태 값은 0입니다.
  • 활성:상태가 현재 활성 상태인지 여부입니다. 활성 속성의 값은 상태가 켜진 경우 true이고, 상태가 해제되어 있으면 false입니다.
  • 상호 작용 형식:상태의 상호 작용 형식은 상태가 의도된 상호 작용 유형입니다.
    • None: 어떤 형식의 입력 상호 작용도 지원하지 않습니다.
    • Near: 근접 상호 작용 지원. 입력은 굴절된 손에서 다른 게임 개체와 직접 연결되는 경우( 즉, 굴절된 손의 위치가 세계 공간에서 게임 개체의 위치와 가까운 경우) 근거리 상호 작용으로 간주됩니다.
    • Far: 원거리 상호 작용 지원. 입력은 게임 개체와의 직접 연락이 필요하지 않은 경우 원거리 상호 작용으로 간주됩니다. 예를 들어 컨트롤러 광선 또는 응시를 통한 입력은 원거리 상호 작용 입력으로 간주됩니다.
    • NearAndFar: 가까운 상호 작용 및 원거리 상호 작용 지원을 모두 포함합니다.
    • Other: 포인터 독립적 상호 작용 지원.
  • 이벤트 구성:상태에 대한 이벤트 구성은 직렬화된 이벤트 프로필 진입점입니다.

이러한 모든 속성은 Interactive 요소에 포함된 에서 내부적으로 State Manager 설정됩니다. 상태를 수정하려면 다음 도우미 메서드를 사용합니다.

상태 설정 도우미 메서드

// Get the InteractionState
interactiveElement.GetState("StateName");

// Set a state value to 1/on
interactiveElement.SetStateOn("StateName");

// Set a state value to 0/off
interactiveElement.SetStateOff("StateName");

// Check if a state is present in the state list
interactiveElement.IsStatePresent("StateName");

// Check whether or not a state is active
interactiveElement.IsStateActive("StateName");

// Add a new state to the state list
interactiveElement.AddNewState("StateName");

// Remove a state from the state list
interactiveElement.RemoveState("StateName");

상태의 이벤트 구성을 얻는 것은 상태 자체에 따라 다릅니다. 각 코어 상태에는 각 코어 상태를 설명하는 섹션 아래에 설명된 특정 이벤트 구성 유형이 있습니다.

다음은 상태의 이벤트 구성을 얻는 일반화된 예제입니다.

// T varies depending on the core state - the specific T's are specified under each of the core state sections
T stateNameEvents = interactiveElement.GetStateEvents<T>("StateName");

기본 상태

기본 상태는 항상 대화형 요소에 있습니다. 이 상태는 다른 모든 상태가 활성 상태가 아닌 경우에만 활성화됩니다. 다른 상태가 활성화되면 기본 상태가 내부적으로 off로 설정됩니다.

대화형 요소는 상태 목록에 있는 Default 및 Focus 상태로 초기화됩니다. 기본 상태는 항상 상태 목록에 있어야 합니다.

기본 상태 이벤트 받기

기본 상태에 대한 이벤트 구성 유형: StateEvents

StateEvents defaultEvents = interactiveElement.GetStateEvents<StateEvents>("Default");

defaultEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State On");
});

defaultEvents.OnStateOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State Off");
});

포커스 상태

포커스 상태는 가리키기와 동일한 혼합 현실로 간주될 수 있는 근사하고 먼 상호 작용 상태입니다. 포커스 상태에 대한 근사 상호 작용과 원거리 상호 작용 간의 구분 요소는 현재 활성 포인터 형식입니다. Focus 상태의 포인터 형식이 Pointer Pointer이면 상호 작용이 가까운 상호 작용으로 간주됩니다. 기본 포인터가 Pointer 포인터가 아닌 경우 상호 작용은 원거리 상호 작용으로 간주됩니다. Focus 상태는 기본적으로 Interactive 요소에 있습니다.

가상 손 상호 작용을 통해 포커스 상태 동작 포커스 상태

Inpsector의 포커스 상태 검사기 포커스 상태

포커스 상태 이벤트 받기

포커스 상태에 대한 이벤트 구성 유형: FocusEvents

FocusEvents focusEvents = interactiveElement.GetStateEvents<FocusEvents>("Focus");

focusEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus On");
});

focusEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus Off");
});

포커스 가까이 및 포커스 원거리 동작

가상 손 상호 작용을 통해 가까운 정도의 포커스

포커스 근 상태

Focus Near 상태는 포커스 이벤트가 발생할 때 설정되고 기본 포인터는 근사 상호 작용을 나타내는 은(는) Pointer 포인터입니다.

가상 손 상호 작용을 통해 포커스 근 상태 동작 포커스 가까운 상태

검사기에서 구성요소 근처에 포커스가 있는 상태검사기 포커스

FocusNear 상태 이벤트 받기

FocusNear 상태에 대한 이벤트 구성 유형: FocusEvents

FocusEvents focusNearEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusNear");

focusNearEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus On");
});

focusNearEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus Off");
});

포커스 원거리 상태

포커스 원거리 상태는 기본 포인터가 Pointer 포인터가 아닌 경우 설정됩니다. 예를 들어 기본 컨트롤러 광선 포인터 및 GGV(응시, 제스처, 음성) 포인터는 원거리 상호 작용 포인터로 간주됩니다.

가상 손 상호 작용을 통해 멀리 떨어진 포커스 원거리 상태 동작 포커스 상태

검사기에서 포커스 원거리 상태검사기 포커스 원거리 구성 요소

포커스 원거리 상태 이벤트 얻기

FocusFar 상태에 대한 이벤트 구성 유형: FocusEvents

FocusEvents focusFarEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusFar");

focusFarEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus On");
});

focusFarEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus Off");
});

터치 상태

터치 상태는 근접 하 게 개체를 직접 접촉 하는 경우에 설정 되는 근접 한 상호 작용 상태입니다. 직접 터치는 트레일러의 인덱스 손가락이 개체의 세계 위치와 매우 근접해 있음을 의미 합니다. NearInteractionTouchableVolume터치 상태가 상태 목록에 추가 되는 경우 기본적으로 구성 요소는 개체에 연결 됩니다. NearInteractionTouchableVolumeNearInteractionTouchable 터치 이벤트를 검색 하려면 또는 구성 요소가 있어야 합니다. 와의 차이점 NearInteractionTouchableVolumeNearInteractionTouchableNearInteractionTouchableVolume 개체의 collider을 기반으로 터치를 검색 하 고 NearInteractionTouchable 평면의 정의 된 영역 내에서 터치를 검색 한다는 것입니다.

가상 손 상호 작용을 사용 하는 터치 상태 동작 터치 상태

검사기의 touch state Inspectortouch state 구성 요소

터치 상태 이벤트 가져오기

터치 상태의 이벤트 구성 유형입니다. TouchEvents

TouchEvents touchEvents = interactiveElement.GetStateEvents<TouchEvents>("Touch");

touchEvents.OnTouchStarted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Started");
});

touchEvents.OnTouchCompleted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Completed");
});

touchEvents.OnTouchUpdated.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Updated");
});

Far 상태 선택

Select Far 상태는 표시 되는 IMixedRealityPointerHandler 입니다. 이 상태는 멀리 떨어져 있는 클릭 (공중 탭)을 검색 하 고 기본 컨트롤러 광선 포인터 또는 GGV 포인터와 같은 원거리 상호 작용 포인터를 사용 하 여 유지 하는 원거리 상호 작용 상태입니다. Select Far 상태에는 이벤트 구성 foldout 이라는 옵션이 Global 있습니다. Global이 true 이면가 IMixedRealityPointerHandler 전역 입력 처리기로 등록 됩니다. 처리기가 global로 등록 된 경우에는 개체에 포커스를 두고 입력 시스템 이벤트를 트리거할 필요가 없습니다. 예를 들어, 사용자가 포커스에 있는 개체에 관계 없이 공중 탭/선택 제스처를 수행 해야 하는 경우를 Global true로 설정 합니다.

가상 핸드 상호 작용을 사용 하 여 far 상태 동작 선택

상태 검사기를 선택합니다. 검사기에서 far 구성 요소를 선택 합니다 .

선택 Far 상태 이벤트 가져오기

SelectFar 상태의 이벤트 구성 유형입니다. SelectFarEvents

SelectFarEvents selectFarEvents = interactiveElement.GetStateEvents<SelectFarEvents>("SelectFar");

selectFarEvents.OnSelectUp.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Up");
});

selectFarEvents.OnSelectDown.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Down");
});

selectFarEvents.OnSelectHold.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Hold");
});

selectFarEvents.OnSelectClicked.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Clicked");
});

클릭 한 상태

클릭 된 상태는 멀리 떨어져 있는 클릭 (Far 상태 선택)에 의해 트리거됩니다. 이 상태는 내부적으로 on으로 전환 되 고, OnClicked 이벤트를 호출 하 고, 즉시 off로 전환 됩니다.

참고

상태 작업을 기반으로 하는 검사기의 시각적 피드백은 전환 된 후 즉시 해제 되기 때문에 클릭 된 상태에 대해 존재 하지 않습니다.

가상 손 상호 작용을 사용 하 여 상태 동작 클릭 상태 클릭

상태 검사기클릭 하 여 검사기에서 상태 구성 요소를 클릭 합니다 .

Near 및 Far 클릭 상태 예제
메서드를 사용 하 여 추가 진입점을 통해 클릭 된 상태를 트리거할 수 있습니다 interactiveElement.TriggerClickedState() . 예를 들어, 사용자가 개체에 대 한 클릭을 트리거하는 근접 한 상호 작용 터치를 원하는 경우 TriggerClickedState() 터치 상태의 수신기로 메서드를 추가 합니다.

가상 핸드 상호 작용이 있는 Near 및 far 상태

클릭 상태 이벤트 가져오기

클릭 한 상태의 이벤트 구성 유형입니다. ClickedEvents

ClickedEvents clickedEvent = interactiveElement.GetStateEvents<ClickedEvents>("Clicked");

clickedEvent.OnClicked.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Clicked");
});

설정/해제 상태 설정/해제

토글 설정 및 설정/해제 상태는 쌍 이며 토글 동작에 대해 둘 다 있어야 합니다. 기본적으로 토글 설정 및 설정/해제 상태는 먼 트 클릭 (Far 상태 선택)을 통해 트리거됩니다. 기본적으로 설정/해제 상태는 시작 시 활성 상태 이므로 설정/해제는 off로 초기화 됩니다. 사용자가 시작 시 활성화 상태를 설정 하려면 설정/해제 상태가 true로 설정 되어 있어야 합니다 IsSelectedOnStart .

ToggleOn 및 끄기 상태 동작가상 손 상호 작용을 사용 하 여 설정 및 해제

ToggleOn 및검사기의 상태 검사기 전환 구성 요소 전환

Near 및 Far 전환 상태 예
클릭 상태와 마찬가지로 설정/해제 상태 설정에는 메서드를 사용 하 여 여러 진입점이 있을 수 있습니다 interactiveElement.SetToggleStates() . 예를 들어, 사용자가 토글 상태를 설정 하기 위해 추가 진입점으로 터치 하려는 경우 SetToggleStates() 터치 상태의 이벤트 중 하나에 메서드를 추가 합니다.

근거리 및 원거리 전환 (가상 핸드 상호 작용)

설정/해제 상태 이벤트 설정 및 해제

ToggleOn 상태에 대 한 이벤트 구성 유형입니다. ToggleOnEvents
ToggleOff 상태에 대 한 이벤트 구성 유형입니다. ToggleOffEvents

// Toggle On Events
ToggleOnEvents toggleOnEvent = interactiveElement.GetStateEvents<ToggleOnEvents>("ToggleOn");

toggleOnEvent.OnToggleOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled On");
});

// Toggle Off Events
ToggleOffEvents toggleOffEvent = interactiveElement.GetStateEvents<ToggleOffEvents>("ToggleOff");

toggleOffEvent.OnToggleOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled Off");
});

Speech 키워드 상태

Speech 키워드 상태는 Mixed Reality Speech 프로필에 정의 된 키워드를 수신 대기 합니다. 새 키워드는 런타임 이전에 음성 명령 프로필에 등록 되어야 합니다 (아래 단계 참조).

가상 상호 작용이 있는 speech 키워드 상태 동작음성 키워드

Inspector의 speech 키워드 상태 검사기speech 키워드 구성 요소

참고

위의 gif에서 F5 키를 눌러 편집기에서 Speech 키워드 상태를 트리거 했습니다. 편집기에서 음성에 대 한 테스트를 설정 하는 단계는 아래에 설명 되어 있습니다.

음성 명령/키워드를 등록 하는 방법

  1. MixedRealityToolkit game 개체를 선택 합니다.

  2. 현재 프로필 복사 및 사용자 지정을 선택 합니다.

  3. 입력 섹션으로 이동 하 고 복제 를 선택 하 여 입력 프로필을 수정할 수 있도록 합니다.

  4. 입력 프로필에서 음성 섹션으로 스크롤하고 음성 프로필을 복제 합니다.

    MRTK game 개체의 Speech 키워드 프로필

  5. 새 음성 명령 추가를 선택 합니다.

    MRTK 프로필에 새 speech 키워드 추가

  6. New 키워드를 입력 합니다. 선택 사항: 편집기에서 테스트를 허용 하도록 KeyCode을 F5 또는 다른 KeyCode로 변경 합니다.

    MRTK 프로필에서 speech 키워드 구성

  7. 대화형 요소 음성 키워드 상태 검사기로 돌아가서 키워드 추가 를 선택 합니다.

    대화형 요소 구성 요소에 키워드 추가

    키워드 유효성 검사 및 등록

  8. 음성 프로필에 방금 등록 된 새 키워드를 입력 합니다.

    새 speech 키워드 입력

편집기에서 Speech 키워드 상태를 테스트 하려면 6 단계 (F5)에 정의 된 KeyCode를 눌러 speech 키워드 인식 이벤트를 시뮬레이트합니다.

음성 키워드 상태 이벤트 가져오기

SpeechKeyword 상태에 대 한 이벤트 구성 유형입니다. SpeechKeywordEvents

SpeechKeywordEvents speechKeywordEvents = interactiveElement.GetStateEvents<SpeechKeywordEvents>("SpeechKeyword");

speechKeywordEvents.OnAnySpeechKeywordRecognized.AddListener((speechEventData) =>
{
    Debug.Log($"{speechEventData.Command.Keyword} recognized");
});

// Get the "Change" Keyword event specifically
KeywordEvent keywordEvent = speechKeywordEvents.Keywords.Find((keyword) => keyword.Keyword == "Change");

keywordEvent.OnKeywordRecognized.AddListener(() =>
{ 
    Debug.Log("Change Keyword Recognized"); 
});

사용자 지정 상태

Inspector를 통해 사용자 지정 상태를 만드는 방법

Inspector를 통해 만든 사용자 지정 상태는 기본 상태 이벤트 구성으로 초기화 됩니다. 사용자 지정 상태에 대 한 기본 이벤트 구성은 형식이 StateEvents 며 OnStateOn 및 OnStateOff 이벤트를 포함 합니다.

  1. 대화형 요소에 대 한 검사기에서 사용자 지정 상태 만들기 로 이동 합니다.

    사용자 지정 상태 만들기

  2. 새 상태의 이름을 입력 합니다. 이 이름은 고유 해야 하며 기존 코어 상태와 같을 수 없습니다.

    새 사용자 지정 상태의 이름 입력

  3. 상태 목록에 추가할 상태 이름 설정 을 선택 합니다.

    상태 목록에 사용자 지정 상태 추가

    이 사용자 지정 상태는 StateEvents 및 이벤트를 포함 하는 기본 이벤트 구성으로 초기화 됩니다 OnStateOnOnStateOff . 새 상태에 대 한 사용자 지정 이벤트 구성을 만들려면 사용자 지정 이벤트 구성을 사용 하 여 사용자 지정 상태 만들기를 참조 하세요.

    대화형 요소 구성 요소에 표시 되는 새 상태

스크립트를 통해 사용자 지정 상태를 만드는 방법

interactiveElement.AddNewState("MyNewState");

// A new state by default is initialized with a the default StateEvents configuration which contains the 
// OnStateOn and OnStateOff events

StateEvents myNewStateEvents = interactiveElement.GetStateEvents<StateEvents>("MyNewState");

myNewStateEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"MyNewState is On");
});

사용자 지정 이벤트 구성을 사용 하 여 사용자 지정 상태 만들기

키보드 라는 사용자 지정 상태에 대 한 예제 파일은 다음 위치에 있습니다. MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

다음 단계에서는 사용자 지정 상태 이벤트 구성 및 수신자 파일을 만드는 기존 예제를 안내 합니다.

  1. 상태 이름을 생각 합니다. 이 이름은 고유 해야 하며 기존 코어 상태와 같을 수 없습니다. 이 예제에서는 상태 이름이 키보드로 이동 합니다.

  2. 상태 이름 + "수신자"와 상태 이름 + "이벤트" 라는 두 개의 .cs 파일을 만듭니다. 이러한 파일의 이름은 내부적으로 고려 되며 상태 이름 + 이벤트/수신자 규칙을 따라야 합니다.

    키보드 상태 스크립트

  3. 파일 내용에 대 한 자세한 내용은 KeyboardEvents 및 KeyboardReceiver 파일을 참조 하세요. 새 이벤트 구성 클래스는에서 상속 해야 BaseInteractionEventConfiguration 하며, 새 이벤트 수신기 클래스는에서 상속 해야 합니다 BaseEventReceiver . 키보드 상태에 대 한 상태 설정 예제는 파일에 있습니다 CustomStateSettingExample.cs .

  4. 상태 이름을 사용 하 여 대화형 요소에 상태를 추가 합니다. 이벤트 구성 및 이벤트 수신기 파일이 있는 경우 상태 이름이 인식 됩니다. 사용자 지정 이벤트 구성 파일의 속성이 검사기에 표시 됩니다.

    대화형 요소에서 인식 되는 대화형 요소사용자 지정 상태 에 사용자 지정 상태 추가

  5. 이벤트 구성 및 이벤트 수신기 파일의 추가 예제는 다음 경로에 있는 파일을 참조 하십시오.

  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventConfigurations
  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventReceivers

장면 예

대화형 요소 + 상태 시각화 도우미에 대 한 예제 장면이 여기에 있습니다. MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity

대화형 요소 및 상태 시각화 도우미가 있는 예제 장면

Compressable 단추

예제 장면에는 및 라는 prefabs 포함 되어 있습니다 CompressableButtonCompressableButtonToggle . 이러한 Prefabs는 PressableButtonHoloLens2 대화형 요소와 상태 시각화 도우미를 사용 하 여 생성 된 단추의 동작을 미러링합니다. CompressableButton구성 요소는 현재 PressableButton + PressableButtonHoloLens2BaseInteractiveElement 기본 클래스로의 조합입니다.

상태 시각화 도우미 [실험적]

상태 시각화 도우미 구성 요소는 연결 된 대화형 요소 구성 요소에 정의 된 상태에 따라 개체에 애니메이션을 추가 합니다. 이 구성 요소는 애니메이션 자산을 만들고, MixedRealityToolkit 폴더에 배치 하 고, 대상 게임 개체에 애니메이션 효과 속성을 추가 하 여 간소화 된 애니메이션 키프레임 설정을 사용 하도록 설정 합니다. 상태 간에 애니메이션 전환을 사용 하도록 설정 하기 위해 애니메이터 컨트롤러 자산이 만들어지고 기본 상태 시스템이 연결 된 매개 변수 및 모든 상태 전환으로 생성 됩니다. 상태 시스템은 Unity의 애니메이터 창에서 볼 수 있습니다.

상태 시각화 도우미 및 Unity 애니메이션 시스템

상태 시각화 도우미는 현재 Unity 애니메이션 시스템을 활용 합니다.

상태 시각화 도우미의 새 애니메이션 클립 생성 단추를 누르면 새 애니메이션 클립 자산이 대화형 요소의 상태 이름에 따라 생성 되 고 MixedRealityToolkit 폴더에 배치 됩니다. 각 상태 컨테이너의 애니메이션 클립 속성은 연결 된 애니메이션 클립으로 설정 됩니다.

상태 시각화 요소의 애니메이션 클립

애니메이션 클립 간의 부드러운 전환을 관리 하기 위해 애니메이터 상태 컴퓨터 도 생성 됩니다. 기본적으로 상태 시스템은 모든 상태를 사용 하 여 대화형 요소의 모든 상태 간 전환을 허용 합니다.

또한 애니메이터에 트리거되는 상태 시각화 도우미가 각 상태에 대해 생성 되 고, 트리거 매개 변수는 상태 시각화 도우미에서 애니메이션을 트리거하는 데 사용 됩니다.

Unity 상태 시스템

런타임 제한 사항

상태 시각화 도우미는 검사기를 통해 개체에 추가 해야 하며 스크립트를 통해 추가할 수 없습니다. AnimatorStateMachine/애니메이션 컨트롤러를 수정 하는 속성은 UnityEditor.Animations 앱을 빌드할 때 제거 되는 편집기 네임 스페이스 ()에 포함 되어 있습니다.

상태 시각화 도우미를 사용 하는 방법

  1. 큐브 만들기

  2. 대화형 요소 연결

  3. 상태 시각화 도우미 연결

  4. 새 애니메이션 클립 생성 을 선택 합니다.

    새 애니메이션 클립 생성

    시각화 도우미 및 대화형 요소 구성 요소에서 생성 된 애니메이션 클립 표시

  5. 포커스 상태 컨테이너에서 대상 추가 를 선택 합니다.

    상태 시각화 도우미 대상 추가

  6. 현재 게임 개체를 대상 필드로 끌어 옵니다.

    상태 시각화 도우미 대상 설정

  7. 큐브 애니메이션 효과 속성 foldout를 엽니다.

  8. 애니메이션 효과 속성 드롭다운 메뉴를 선택 하 고 을 선택 합니다.

    상태 시각화 도우미 색 설정

  9. Color 애니메이션 효과 속성 추가를 선택 합니다 .

    시각화 도우미 color 애니메이션 효과 속성을 선택 합니다.

  10. 색 선택

    색상환에서 시각화 도우미 색 선택

  11. 재생을 누르고 전환 색 변경을 관찰 합니다.

    가상 손 상호 작용을 사용 하 여 색 변경 예제 전환

애니메이션 효과 속성

애니메이션 효과 속성의 주요 목적은 애니메이션 클립 키 프레임 설정을 간소화 하는 것입니다. 사용자가 unity 애니메이션 시스템에 익숙하고 생성 된 애니메이션 클립에서 키 프레임을 직접 설정 하는 것을 선호 하는 경우 애니메이션 효과 속성을 대상 개체에 추가 하 고 Unity의 애니메이션 창 (Windows > 애니메이션 애니메이션)에서 클립을 열 수 없습니다 > .

애니메이션에 애니메이션 효과 속성을 사용 하는 경우 곡선 형식은 EaseInOut로 설정 됩니다.

현재 애니메이션 효과 속성:

크기 조정 오프셋

눈금 오프셋 애니메이션 효과 속성은 개체의 현재 소수 자릿수를 사용 하 여 정의 된 오프셋을 추가 합니다.

가상 손 상호 작용을 사용 하는 크기 조정 오프셋

위치 오프셋

Position Offset 애니메이션 효과 속성은 개체의 현재 위치를 사용 하 여 정의 된 오프셋을 추가 합니다.

가상 손 상호 작용을 사용 하는 위치 오프셋

색상

색 애니메이션 효과 속성은 재질에 기본 색 속성이 있는 경우 재질의 기본 색을 나타냅니다. 이 속성은 속성에 애니메이션을 적용 material._Color 합니다.

가상 손 상호 작용으로 색 변경 포커스

셰이더 색

셰이더 색 애니메이션 효과 속성은 Color 형식의 셰이더 속성을 참조 합니다. 모든 셰이더 속성에는 속성 이름이 필요 합니다. 아래 gif는 주 재질 색이 아닌 Fill_Color 라는 셰이더 색 속성에 애니메이션을 적용 하는 방법을 보여 줍니다. 재질 검사기에서 값을 변경 합니다.

가상 손을 상호 작용 하는 음영 색

셰이더 Float

Shader Float 애니메이션 효과 속성은 Float 형식의 셰이더 속성을 참조 합니다. 모든 셰이더 속성에는 속성 이름이 필요 합니다. 아래 gif에서 금속성 속성에 대 한 재질 검사기의 변경 값을 확인 합니다.

가상 손을 상호 작용 하는 셰이더 float

셰이더 벡터

셰이더 Vector 애니메이션 효과 속성은 System.numerics.vector3 및 system.numerics.vector4 형식의 셰이더 속성을 참조 합니다. 모든 셰이더 속성에는 속성 이름이 필요 합니다. 아래 gif에서 바둑판식 배열 (Main Tex_ST) 속성에 대 한 재질 검사기의 변경 값을 확인 합니다.

가상 손 상호 작용이 있는 셰이더 벡터

애니메이션 효과 셰이더 속성 이름을 찾는 방법

  1. 창 > 애니메이션 애니메이션으로 > 이동

  2. 계층 구조에서 상태 시각화 도우미가 있는 개체가 선택 되어 있는지 확인 합니다.

  3. 애니메이션 창에서 애니메이션 클립을 선택 합니다.

  4. 속성 추가를 선택 하 고 메시 렌더러 foldout을 엽니다.

    애니메이터 창에서 애니메이션 속성 추가

  5. 이 목록에는 모든 애니메이션 효과 속성 이름의 이름이 포함 됩니다.

    애니메이터 창의 메시 렌더러 애니메이션 속성

참고 항목