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を公開しま~す。
コメント
コメントを投稿