LeapMotionで操作できるように改造しました。
- UnityでLeapMotionを操作できるようにdll等をセットします。
LeapMotionをUnityで使う方法 を参考にして下さい。 - Leap用のusingを付け加えます。
- Leap用に変数を宣言しておきます。
- StartでLeapのリスナーなどを初期化します。
- Update内を変更します。今回は弾丸発射を簡単にするため、マウスクリックから自動連射に修正しています。
- 今回の本丸となる、Leapの位置データ取得箇所を作成します。
using Leap;
public class Gun : MonoBehaviour { // leap用のリスナーとコントローラー private LeapListner listner; private Controller controller;
void Start() { // Leapのリスナー、コントローラーの初期化とセット listner = new LeapListner(); controller = new Controller(); controller.AddListener(listner);
void Update() { /* 略 */ Vector3 screenPoint = Input.mousePosition; /* 略 */ }
void Update() { /* 略 */ // Unityの画面に対する、Leapでの指の位置を取得する Vector3 screenPoint = GetLeapPointOnUnityScreen(); /* 略 */ }
// Leapのスクリーン上の座標を、Unitiyのスクリーン上の値に変換する private Vector3 GetLeapPointOnUnityScreen() { // スクリーンに一番近い指を取得している。 Frame currentFrame = controller.Frame(); Finger finger = currentFrame.Fingers[0]; // スクリーンとLeapMotion上の指の位置を合成するために、 // 一度正規化している。 Leap.Screen leapScreen = controller.CalibratedScreens.ClosestScreenHit(finger); float xScreenIntersect = leapScreen.Intersect(finger, true).x; float yScreenIntersect = leapScreen.Intersect(finger, true).y; // 正規化した値をUnityのスクリーンサイズに合わせて変換する。 Vector3 leapPoint = new Vector3( xScreenIntersect * UnityEngine.Screen.width, yScreenIntersect * UnityEngine.Screen.height, 0.0f); // 変換した座標を返す return leapPoint; }
Unityにもう少し慣れてきたら、Sourceを公開しま~す。
コメント
コメントを投稿