基本的な力と位置のチュートリアル
この簡単な例では、力を加え、Inverse3カーソルの動きを視覚化する方法を説明します。 カーソルの動きを視覚化します。完成された例では、Inverse3がゴムバンドで開始位置に取り付けられているように感じられます。 球体のGameObjectがカーソルの位置を示しています。
はじめに
クイック・スタート・ガイドでは、Haptic Threadオブジェクトとその使い方、そして一定の力を発生させる方法を紹介しました。 を紹介しました。私たちのゴールは、カーソルにラバーバンド効果を作り出すことです。ゴムバンドは すなわち、その力は剛性と両端間の距離に依存します。 従って、位置と剛性を受け取り、カーソルが両端から動き出すのを抵抗するような力を出力する関数を作る必要があります。 カーソルが原点からの動きに抵抗するように。
シーン設定
新しいスクリプトの作成から始める ForceAndPosition.cs
に以下のコードを追加する。
ForceAndPosition
クラスである:
[Range(0, 800)]
public float stiffness = 200f;
private Vector3 m_initialPosition = Vector3.zero;
private Vector3 ForceCalculation(in Vector3 position)
{
// save the first device effector position
if (m_initialPosition == Vector3.zero)
m_initialPosition = position;
// return opposite force to stay at initial position
return (m_initialPosition - position) * stiffness;
}
このコードスニペットは剛性を200ニュートン/メートル(N/m)と定義しており、これは妖精のように柔らかいバネです。
また m_initialPosition
これはカーソルの初期位置を格納するベクトルである。
この ForceCalculation
メソッドは、初めて実行されたときに初期位置を保存し、次にカーソルの動きに対抗する力出力を計算する。
次に、カーソルの動きに対抗する力の出力を計算します。
最後に、クイック・スタート・ガイドに示されているように、以下の行をAwakeメソッドに追加する。
var hapticThread = GetComponent<HapticThread>();
hapticThread.onInitialized.AddListener(() => hapticThread.Run( ForceCalculation ));
最初の行は、GameObjectにアタッチされているHapticThreadコンポーネントを見つける。 行目はそれを開始する。
Inverse3カーソルを押したままプレイモードに入り、デバイスを動かしてみる。カーソルを動かすと カーソルを動かすと力が発生し、始点から遠ざかれば遠ざかるほど大きな力が発生する。 力が大きくなります。
ソースファイル
このサンプルで使用する最終的なシーンとすべての関連ファイルは、Force and Positionサンプルからインポートできます。 Positionサンプルからインポートできます。
using Haply.HardwareAPI.Unity;
using UnityEngine;
public class ForceAndPosition : MonoBehaviour
{
[Range(0, 800)]
public float stiffness = 200f;
private Vector3 m_initialPosition = Vector3.zero;
private void Awake()
{
var hapticThread = GetComponent<HapticThread>();
hapticThread.onInitialized.AddListener(() => hapticThread.Run(ForceCalculation) );
}
private Vector3 ForceCalculation(in Vector3 position)
{
if (m_initialPosition == Vector3.zero)
{
m_initialPosition = position;
}
return (m_initialPosition - position) * stiffness;
}
}