はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Setting up a Unity projectの日本語訳

Leap Motionの日本語情報は非常に限られているので公式ドキュメントをざっくり日本語訳にしました。誤訳などあったらお知らせください。

本エントリは

https://developer.leapmotion.com/documentation/Languages/CSharpandUnity/Guides/Setup_Unity.html

の日本語訳となります。

Setting up a Unity project

Leap Motionトラッキングデータ用Unityプラグインを使ってLeap Motion SDKをUnityアプリケーションからアクセスすることが出来ます。この記事では、UnityのProバージョンがサポートしているプラグイン昨日を使用する方法について説明します。ネイティブライブラリプラグインをサポートしていないUnityスタンダード版で使うはCreating Leap Motion apps with Unity (standard license)を参照ください。

Topics:
  • Leap Motion C# Libraries for Unity
  • Create a project
  • Accessing the Leap Motion API
  • Building 64-bit Windows Unity applications
  • Exiting cleanly on Windows with Unity3D 3.5

Leap Motion C# Libraries for Unity

Leap Motion SDKには、プラットフォームごとにアプリケーションのビルドターゲットに応じた複数のバージョンが含まれています。

UnityエディタでLeap Motion SDKを使用するには、アプリケーションのPluginsフォルダに32ビットライブラリを追加する必要があります。Macであれば32bitと64bitでは同じライブラリファイルを使いますが、Windowsの場合は稼動OSのビット数に応じたライブラリを指定する必要があります。

Unityの中で以下のライブラリを使用します:

  • 32-bit Windows:

    • LeapSDK/lib/UnityAssets/Plugins/LeapCSharp.NET3.5.dll ? Leap Motion C# library for .NET 3.5
    • LeapSDK/lib/UnityAssets/Plugins/LeapCSharp.dll ? 32-bit Leap Motion C# library for Windows
    • LeapSDK/lib/UnityAssets/Plugins/Leap.dll ? 32-bit Leap Motion library for Windows

     

  • 64-bit Windows:

    • LeapSDK/lib/UnityAssets/Plugins/LeapCSharp.NET3.5.dll ? Leap Motion C# library for .NET 3.5
    • LeapSDK/lib/x64/LeapCSharp.dll ? 64-bit Leap Motion C# library for Windows
    • LeapSDK/lib/x64/Leap.dll ? 64-bit Leap Motion library for Windows

    Note: Do not use the 64-bit libraries in the Unity editor on Windows.

     

  • 32- and 64-bit Mac OS:

    • LeapSDK/lib/UnityAssets/Plugins/LeapCSharp.NET3.5.dll ? Leap Motion C# library for .NET 3.5
    • LeapSDK/lib/UnityAssets/Plugins/LeapCSharp.bundle ? Leap Motion C# bundle for Unity

Create a project

まず、辛苦プロジェクトを作成します:

  1. Unityエディタを開く
  2. [ファイル]-[新規プロジェクト]を選択
  3. 名前と保存場所を選択
  4. [プロジェクトの作成]をクリック

Leap Motionライブラリをプロジェクトに追加します:

  1. UnityプロジェクトのAssetsフォルダに移動
  2. Leap Motion SDKのlibe/UnityAssetsフォルダからUnityプロジェクトのAssetsフォルダのPluginsフォルダにコピー

注意:

暮らすプラットフォームビルドを有効にするためにPlauginsフォルダにMacとWindowsの両方のライブラリを配置することが出来ます。しかし、x64のWindowsプラットフォームに対するx86用ビルドを行うための考慮事項についてはBuilding 64-bit Windows Unity applicationsを参照してください。

Accessing the Leap Motion API

PluginsフォルダにLeap MotionライブラリとAPIを使うスクリプトを追加できます。Leap Motionクラスは、Leap名前空間として定義されます。Leap Motion APIにアクセスする基本的なMonoBehaviorクラスは次のようになります:

VB.NET
Imports UnityEngine
Imports System.Collections
Imports Leap

Public Class LeapBehavior
    Inherits MonoBehaviour
    Private _controller As Controller

    Public Sub Start ()
        _controller = New Controller
    End Sub

    Public Sub Update ()
        Dim _frame As Frame = _controller.Frame()
        'do something with the tracking data in the frame...
    End Sub
End Class
C#
using UnityEngine;
using System.Collections;
using Leap;

public class LeapBehavior : MonoBehaviour {
    Controller controller;

    void Start ()
    {
        controller = new Controller();
    }

    void Update ()
    {
        Frame frame = controller.Frame();
        // do something with the tracking data in the frame...
    }
}

このサンプルではLeap.Listenerサブクラスを使用していないことに注意してください。Unityアプリケーションの場合、UnityエンジンからUpdateメソッドによりLeap Motionコントローラから現在のフレームを取得することで自然なフレームレートを実現できます。

注意:

Leap.Listenerサブクラスを使う方法だと、UnityエディタとUnityアプリケーションをWindows上で終了しようとするとにフリーズすることがあります。これは、Unityでマネージコードと案マネージコード間でコールバックを使うときに発生するスレッドの問題によるものです。この問題を回避するには「Exiting cleanly on Windows with Unity3D 3.5」を参照ください。

Building 64-bit Windows Unity applications

UnityでLeap対応アプリケーションを構築する場合、Unityエディタは自動的にPluginsフォルダからLeap Motion ライブラリをコピーします。Pluginsフォルダにはクラスプラットフォームビルドが行えるようにWindows x86Mac OSの両方のLeap Motionライブラリをおくことが出来ます。ただし、x86ライブラリとx64ライブラリを共存させることは出来ません。

WindowsではUnityエディタが開発中にアプリケーションを実行するために、32bit(x86プラットフォーム)ライブラリがPluginsフォルダに入れる必要があります。x64ぷラットファーム用にビルドするためには、Unityがアプリケーションの実行ファイルを出力するフォルダに32bitライブラリをコピーするので、その後に手動で32bitライブラリに対してLeap Motion SDKのlib/x64フォルダから64bitバージョンのライブラリを上書きコピーする必要があります。

Macでは、Pluginsフォルダに32bitのWindows Leap Motionライブラリか64bit Windowsライブラリのどちらか一方を配置できます。もし、Macで32bitと64bitの両方のWindowsプラットフォーム用にビルドする場合は、Leap Motionライブラリの正しいバージョンを使用して確認する必要があります。アプリケーションを構築した後に、出力フォルダに正しいライブラリをコピーすることによって確認することが出来ます。

Exiting cleanly on Windows with Unity3D 3.5

Monoはアプリケーション終了時にスレッドを閉じる方法に問題があるため、Unity3DエディタとLeap対応アプリケーションの終了時にハングします。この問題はWindowsコンピュータで発生し、Unity 4を使う別バージョンのMonoでは発生しません。この問題はLeap Motionイベント処理のLeap Motion Listenerを使用する場合のみ発生します。

終了時にハングしないようにするためには、次のコードを追加します:

VB.NET
#If UNITY_STANDALONE_WIN Then
     _
    Shared External  Sub mono_thread_exit()
#End If

    Sub OnApplicationQuit()
        controller.Dispose()
        listener.Dispose()
#If UNITY_STANDALONE_WIN AndAlso Not UNITY_EDITOR AndAlso UNITY_3_5 Then
        mono_thread_exit()
#End If
C#
#if UNITY_STANDALONE_WIN
  [DllImport("mono", SetLastError=true)]
  static extern void mono_thread_exit();
#endif

  void OnApplicationQuit() {
    controller.Dispose();
    listener.Dispose();
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR && UNITY_3_5
    mono_thread_exit ();
#endif

このコードスニペットを使用する場合、Leap.Listenerサブクラスを使わなければなりません。


Copyright c 2012-2013 Leap Motion, Inc. All rights reserved.

Leap Motion proprietary and confidential. Not for distribution. Use subject to the terms of the Leap Motion SDK Agreement available at https://developer.leapmotion.com/sdk_agreement, or another agreement between Leap Motion and you, your company or other organization.