HoloLens 튜토리얼 (Holograms 101E - 3 Gestures)

12697 단어 HoloLensMRUnity

소개



HoloLens 튜토리얼 (Holograms 101E - 2 Gaze) - Qiita 」의 계속이 됩니다.
"Holograms 101E: Introduction with Emulator"의 "Chapter 3 - Gestures"을 사용해보십시오.

튜토리얼 「Gestures」



GazeGestureManager 만들기



C# 스크립트 작성




  • Project 패널에서 Scripts를 선택
  • 마우스 오른쪽 버튼을 클릭하고 "Create"- "C# Script"를 선택하십시오.
  • 이름을 GazeGestureManager로 변경


  • 생성 된 GazeGestureManager를 Hierarchy 패널의 OrigamiCollection 객체에 놓습니다
  • "GazeGestureManager"를 두 번 클릭 (-> Visual Studio 시작)


  • C# 스크립트 편집





    GazeGestureManager.cs
    using UnityEngine;
    using UnityEngine.VR.WSA.Input;
    
    public class GazeGestureManager : MonoBehaviour
    {
        public static GazeGestureManager Instance { get; private set; }
    
        // Represents the hologram that is currently being gazed at.
        public GameObject FocusedObject { get; private set; }
    
        GestureRecognizer recognizer;
    
        // Use this for initialization
        void Start()
        {
            Instance = this;
    
            // Set up a GestureRecognizer to detect Select gestures.
            recognizer = new GestureRecognizer();
            recognizer.TappedEvent += (source, tapCount, ray) =>
            {
                // Send an OnSelect message to the focused object and its ancestors.
                if (FocusedObject != null)
                {
                    FocusedObject.SendMessageUpwards("OnSelect");
                }
            };
            recognizer.StartCapturingGestures();
        }
    
        // Update is called once per frame
        void Update()
        {
            // Figure out which hologram is focused this frame.
            GameObject oldFocusObject = FocusedObject;
    
            // Do a raycast into the world based on the user's
            // head position and orientation.
            var headPosition = Camera.main.transform.position;
            var gazeDirection = Camera.main.transform.forward;
    
            RaycastHit hitInfo;
            if (Physics.Raycast(headPosition, gazeDirection, out hitInfo))
            {
                // If the raycast hit a hologram, use that as the focused object.
                FocusedObject = hitInfo.collider.gameObject;
            }
            else
            {
                // If the raycast did not hit a hologram, clear the focused object.
                FocusedObject = null;
            }
    
            // If the focused object changed this frame,
            // start detecting fresh gestures again.
            if (FocusedObject != oldFocusObject)
            {
                recognizer.CancelGestures();
                recognizer.StartCapturingGestures();
            }
        }
    }
    
  • GestureRecognizer

  • Manager class with API for recognizing user gestures.
  • GestureRecognizer.TappedEvent

  • Occurs when a Tap gesture is recognized.
  • GestureRecognizer.StartCapturingGestures

  • Call to begin receiving gesture events on this recognizer. No events will be received until this method is called.
  • GestureRecognizer.CancelGestures

  • Cancels any pending gesture events. Additionally this will call StopCapturingGestures.
  • GameObject.SendMessageUpwards

  • 게임 오브젝트와 부모 (부모, 심지어 부모 ...)에 첨부 된 모든 MonoBehaviour에서 methodName이라는 이름의 메서드를 호출합니다.


    ShpereCommands 만들기



    C# 스크립트 작성


  • Project 패널에서 Scripts를 선택
  • 마우스 오른쪽 버튼을 클릭하고 "Create"- "C# Script"를 선택하십시오.
  • 이름을 SphereCommands로 변경


  • 생성 된 ShpereCommands를 Hierarchy 패널의 OrigamiCollection - Sphere1 및 Spere2 객체에 놓습니다.
  • ShpereCommands를 두 번 클릭 (-> Visual Studio 시작)


  • C# 스크립트 편집



    SphereCommands.cs
    using UnityEngine;
    
    public class SphereCommands : MonoBehaviour
    {
        // Called by GazeGestureManager when the user performs a Select gesture
        void OnSelect()
        {
            // If the sphere has no Rigidbody component, add one to enable physics.
            if (!this.GetComponent<Rigidbody>())
            {
                var rigidbody = this.gameObject.AddComponent<Rigidbody>();
                rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
            }
        }
    }
    
  • Rigidbody

  • Rigidbody를 사용하면 게임 오브젝트를 물리 특성에 의해 제어할 수 있게 됩니다.
  • Rigidbody.collisionDetectionMode

  • Rigidbody 충돌 감지 모드. Rigidbody의 지속적인 충돌 판정을 설정하기 위해서 이것을 사용합니다.
  • CollisionDetectionMode.Continuous

  • 이 모드는 정적 메쉬 지오메트리와 충돌할 때 감지됩니다.


    Visual Studio 프로젝트 생성


  • 파일 메뉴에서 Build Settings를 선택하십시오
  • Build Settings 창에서 Build 버튼을 누릅니다


  • 빌드 및 실행 환경 설정 확인, 실행


  • 솔루션 구성 "Release"
  • 플랫폼 「X86」
  • 실행 환경 "HoloLens Emulator"
  • 디버그 메뉴에서 디버깅없이 시작을 선택합니다.


    에뮬레이터 작동







    Gaze의 표시를 Sphere에 맞추고 스페이스 버튼을 누르면 Sphere가 폴로리로 떨어지고 받침대 위를 굴러 받침대에서 떨어집니다.
  • 좋은 웹페이지 즐겨찾기