Interactive 요소 [실험적] - MRTK2

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

Interactive Element는 Unity 2019.3의 새로운 기능인 Serialize 참조를 활용하기 때문에 Unity 2019.3 이상에서 지원되는 실험적 기능입니다.

Interactive 요소 검사기

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

Interactive Element with virtual hand interaction

핵심 상태

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

현재 핵심 상태

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

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

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

기타 핵심 상태:

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

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

    Add a Core State via Inspector

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

    Add a Core State via Inspector with state selected

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

    Add a Core State via Inspector with event configuration

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

이 메서드를 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");

기본 상태

기본 상태는 항상 대화형 요소에 있습니다. 이 상태는 다른 모든 상태가 활성화되지 않은 경우에만 활성화됩니다. 다른 상태가 활성화되면 기본 상태가 내부적으로 해제되도록 설정됩니다.

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

기본 상태 이벤트 가져오기

기본 상태에 대한 이벤트 구성 유형: 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");
});

포커스 상태

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

포커스 상태 동작Focus state with virtual hand interaction

포커스 상태 검사기Focus state in the 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 and far with virtual hand interaction

포커스 근거리 상태

포커스 근거리 상태는 포커스 이벤트가 발생할 때 설정되고 기본 포인터는 가까운 상호 작용을 나타내는 Poke 포인터입니다.

포커스 근거리 상태 동작Focus near state with virtual hand interaction

상태 검사기 근처 포커스Focus near component in the Inspector

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");
});

포커스 원거리 상태

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

포커스 원거리 상태 동작Focus state far with virtual hand interaction

포커스 원거리 상태 검사기Focus far component in the Inspector

포커스 원거리 상태 이벤트 가져오기

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 구성 요소가 개체에 연결됩니다. NearInteractionTouchableVolume 터치 이벤트를 검색하려면 구성 요소 또는 NearInteractionTouchable 구성 요소가 필요합니다. 차이점은 NearInteractionTouchableVolumeNearInteractionTouchableNearInteractionTouchableVolume 개체의 충돌체를 기반으로 터치를 감지하고 NearInteractionTouchable평면의 정의된 영역 내에서 터치를 감지한다는 것입니다.

터치 상태 동작Touch state with virtual hand interaction

터치 상태 검사기Touch state component in the Inspector

터치 상태 이벤트 가져오기

터치 상태의 이벤트 구성 유형: 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");
});

원거리 상태 선택

원거리 선택 상태가 IMixedRealityPointerHandler 표시됩니다. 이 상태는 원거리 상호 작용 클릭(에어 탭)을 감지하고 기본 컨트롤러 광선 포인터 또는 GGV 포인터와 같은 원거리 상호 작용 포인터를 사용하여 유지되는 원거리 상호 작용 상태입니다. Far 선택 상태에는 이벤트 구성 폴드아웃 아래에 이름이 지정된 Global옵션이 있습니다. true IMixedRealityPointerHandler 이면 Global 전역 입력 처리기로 등록됩니다. 처리기가 전역으로 등록된 경우 입력 시스템 이벤트를 트리거하기 위해 개체에 포커스를 두지 않아도 됩니다. 예를 들어 사용자가 포커스에 있는 개체에 관계없이 에어 탭/선택 제스처가 수행될 때마다 알고 싶다면 true로 설정합니다 Global .

원거리 상태 동작 선택Select far with virtual hand interaction

Far State Inspector 선택Select far component in the Inspector

멀리 상태 이벤트 선택 가져오기

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");
});

클릭된 상태

클릭된 상태는 기본적으로 원거리 상호 작용 클릭(멀리 상태 선택)에 의해 트리거됩니다. 이 상태는 내부적으로 켜지고 OnClicked 이벤트를 호출한 다음 즉시 꺼집니다.

참고

상태 활동을 기반으로 하는 검사기에서 시각적 피드백은 즉시 켜진 다음 꺼져 있으므로 Clicked 상태에 대해 존재하지 않습니다.

클릭한 상태 동작Clicked state with virtual hand interactions

클릭된 상태 검사기Click state component in the Inspector

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

Near and far state with virtual hand interactions

클릭된 상태 이벤트 가져오기

클릭된 상태에 대한 이벤트 구성 유형: ClickedEvents

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

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

켜기 및 해제 해제 상태 설정/해제

토글 켜기 및 해제 해제 상태는 쌍이며 토글 동작을 위해 둘 다 있어야 합니다. 기본적으로 토글 켜기 및 해제 해제 상태는 원거리 상호 작용 클릭을 통해 트리거됩니다(원거리 상태 선택). 기본적으로 토글 해제 상태는 시작 시 활성화됩니다. 즉, 토글이 해제로 초기화됩니다. 사용자가 시작 시 설정/해제 상태를 활성화하려면 Toggle On 상태에서 true로 설정합니다 IsSelectedOnStart .

ToggleOn 및 토글 해제 상태 동작Toggle on and off with virtual hand interactions

ToggleOn 및 토글 오프 상태 검사기Toggle component in the Inspector

근거리 및 원거리 토글 상태 예제
클릭된 상태와 마찬가지로 토글 상태 설정은 메서드를 사용하여 interactiveElement.SetToggleStates() 여러 진입점을 가질 수 있습니다. 예를 들어 사용자가 터치를 추가 진입점으로 설정하여 토글 상태를 설정하려는 경우 Touch 상태의 이벤트 중 하나에 메서드를 추가 SetToggleStates() 합니다.

Near and far toggle with virtual hand interactions

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

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 키워드 상태는 Mixed Reality Speech Profile에 정의된 키워드를 수신 대기합니다. 런타임 전에 모든 새 키워드를 음성 명령 프로필에 등록해야 합니다(아래 단계).

Speech 키워드 상태 동작Speech keyword with virtual interaction

Speech 키워드 상태 검사기Speech keyword component in the Inspector

참고

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

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

  1. MixedRealityToolkit 게임 개체 선택

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

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

  4. 입력 프로필의 Speech 섹션까지 아래로 스크롤하고 음성 프로필을 복제합니다.

    Speech keyword profile in the MRTK game object

  5. 새 음성 추가 명령 선택

    Adding a new speech keyword in the MRTK profile

  6. 새 키워드를 입력합니다. 선택 사항: 편집기에서 테스트할 수 있도록 KeyCode를 F5(또는 다른 KeyCode)로 변경합니다.

    Configuring speech keyword in the MRTK profile

  7. Interactive Element Speech 키워드 상태 검사기로 돌아가기 키워드 추가를 선택합니다.

    Adding keyword to interactive element component

    Keyword validation and registration

  8. Speech Profile에 방금 등록된 새 키워드를 입력합니다.

    Entering new speech keyword

편집기에서 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"); 
});

사용자 지정 상태

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

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

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

    Creating a custom state

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

    Entering the name of a new custom state

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

    Add custom state to state list

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

    New state shown in the interactive element component

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

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 파일을 만듭니다. 이러한 파일의 이름은 내부적으로 고려되며 상태 이름 + 이벤트/수신기 규칙을 따라야 합니다.

    Keyboard state scripts

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

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

    Adding custom state to interactive elementCustom state recognized in the interactive element

  5. 이벤트 구성 및 이벤트 수신기 파일의 더 많은 예제는 다음 경로의 파일을 참조하세요.

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

예제 장면

Interactive 요소 + 상태 시각화 도우미의 예제 장면은 MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity에 있습니다.

Example scene with Interactive Element and State Visualizer

압축 가능 단추

예제 장면에는 명명 CompressableButton 된 프리팹이 포함되어 있으며 CompressableButtonToggle, 이러한 프리팹은 Interactive 요소 및 상태 시각화 도우미를 사용하여 생성된 단추의 PressableButtonHoloLens2 동작을 미러링합니다. CompressableButton 구성 요소는 현재 기본 클래스와 함께 BaseInteractiveElement조합 PressableButton + PressableButtonHoloLens2 되어 있습니다.

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

상태 시각화 도우미 구성 요소는 연결된 Interactive Element 구성 요소에 정의된 상태에 따라 개체에 애니메이션을 추가합니다. 이 구성 요소는 애니메이션 자산을 만들고 MixedRealityToolkit.Generated 폴더에 배치하며, 애니메이션 가능 속성을 대상 게임 개체에 추가하여 간소화된 애니메이션 키 프레임 설정을 사용하도록 설정합니다. 상태 간에 애니메이션 전환을 사용하도록 설정하려면 Animator 컨트롤러 자산이 생성되고 연결된 매개 변수 및 상태 전환을 사용하여 기본 상태 머신이 생성됩니다. 상태 컴퓨터는 Unity의 애니메이터 창에서 볼 수 있습니다.

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

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

상태 시각화 도우미에서 새 애니메이션 클립 생성 단추를 누르면 Interactive Element의 상태 이름을 기반으로 새 애니메이션 클립 자산이 생성되고 MixedRealityToolkit.Generated 폴더에 배치됩니다. 각 상태 컨테이너의 애니메이션 클립 속성은 연결된 애니메이션 클립으로 설정됩니다.

Animation clips in state visualizer component

애니메이션 클립 간의 원활한 전환을 관리하기 위해 Animator State Machine 도 생성됩니다. 기본적으로 상태 컴퓨터는 Any State 를 사용하여 Interactive 요소의 모든 상태 간 전환을 허용합니다.

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

Unity state machine

런타임 제한 사항

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

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

  1. 큐브 만들기

  2. 대화형 요소 연결

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

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

    Generating new animation clips

    Showing generated animation clips in visualizer and interactive element components

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

    Adding state visualizer target

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

    Setting state visualizer target

  7. 큐브 애니메이션 가능 속성 접기 열기

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

    Setting state visualizer color

  9. 색 애니메이션 가능 속성 추가 선택

    Selecting the visualizer color animatable property

  10. 색 선택

    Choosing a visualizer color from color wheel

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

    Transitional color change example with virtual hand interaction

애니메이션 효과를 주는 속성

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

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

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

배율 오프셋

Scale Offset Animatable 속성은 개체의 현재 배율을 사용하고 정의된 오프셋을 추가합니다.

Scale offset with virtual hand interaction

위치 오프셋

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

Position offset with virtual hand interaction

색상

색 애니메이션 가능 속성은 재질에 주 색 속성이 있는 경우 재질의 주 색을 나타냅니다. 이 속성은 속성에 애니메이션 효과를 주는 속성입니다 material._Color .

Focus color change with virtual hand interaction

셰이더 색

셰이더 색 애니메이션 가능 속성은 형식 색의 셰이더 속성을 나타냅니다. 모든 셰이더 속성에는 속성 이름이 필요합니다. 아래 GIF는 주 재질 색이 아닌 Fill_Color 셰이더 색 속성에 애니메이션 효과를 주는 방법을 보여 줍니다. 재질 검사기에서 변경 값을 관찰합니다.

Shade color with virtual hand interaction

셰이더 부동 소수

셰이더 Float 애니메이션 가능 속성은 float 형식의 셰이더 속성을 참조합니다. 모든 셰이더 속성에는 속성 이름이 필요합니다. 아래 gif에서 금속 속성에 대 한 재료 검사기에서 변경 값을 관찰 합니다.

Shader float with virtual hand interaction

셰이더 벡터

셰이더 벡터 애니메이션 가능 속성은 Vector4 형식의 셰이더 속성을 참조합니다. 모든 셰이더 속성에는 속성 이름이 필요합니다. 아래 gif에서 Tiling(Main Tex_ST) 속성에 대한 재질 검사기에서 변경되는 값을 확인합니다.

Shader vector with virtual hand interaction

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

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

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

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

  4. 속성 추가를 선택하고 Mesh 렌더러 폴드아웃을 엽니다.

    Adding animation property in the Animator window

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

    Mesh renderer animation properties in the Animator window

참고 항목