Zum Hauptinhalt springen
Version: neueste

Grundlegendes Tutorial zu Kraft und Position

Dieses einfache Beispiel erklärt, wie man Kräfte anwendet und die Bewegung eines Inverse3 Cursors visualisiert. Im fertigen Beispiel fühlt sich Inverse3 so an, als sei es mit einem Gummiband an seiner Ausgangsposition befestigt einem Gummiband an seiner Ausgangsposition befestigt, während ein kugelförmiges GameObject die Position des Cursors anzeigt.

Einführung

In der Kurzanleitung werden das Objekt Haptic Thread, seine Verwendung und die Erzeugung konstante Kräfte erzeugt. Unser Ziel ist es, einen Gummibandeffekt für den Cursor zu erzeugen. Ein Gummiband verhält sich wie eine Feder, d.h. seine Kraft hängt von der Steifigkeit und dem Abstand zwischen den beiden Enden ab. Daher müssen wir eine Funktion erstellen, die Position und Steifigkeit annimmt und eine Kraft ausgibt, die dass der Cursor einer Bewegung vom Ursprung aus widersteht.

Szene einrichten

Beginnen Sie mit der Erstellung eines neuen Skripts ForceAndPosition.cs und fügen Sie den folgenden Code in ForceAndPosition Klasse:

[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;
}

In diesem Codeschnipsel wird die Steifigkeit mit 200 Newton pro Meter (N/m) definiert, was einer schwachen Feder entspricht. Er definiert außerdem m_initialPosition ist ein Vektor, der die Anfangsposition des Cursors speichert. Die ForceCalculation Methode speichert bei ihrer ersten Ausführung die Ausgangsposition und berechnet dann die Kraft, die der Bewegung des Cursors entgegenwirkt.

Fügen Sie schließlich die folgenden Zeilen in die Awake-Methode ein, wie in der Schnellstartanleitung gezeigt

var hapticThread = GetComponent<HapticThread>();
hapticThread.onInitialized.AddListener(() => hapticThread.Run( ForceCalculation ));

Die erste Zeile findet die HapticThread-Komponente, die mit dem GameObject verbunden ist, während die zweite Zeile startet sie.

Halten Sie nun den Cursor Inverse3 gedrückt, rufen Sie den Wiedergabemodus auf und versuchen Sie dann, das Gerät zu bewegen. Beachten Sie, dass dass das Bewegen des Cursors eine Kraft erzeugt, die umso größer ist, je weiter er sich vom Startpunkt die Kraft.

Cursorbewegung

Quelldateien

Die endgültige Szene und alle zugehörigen Dateien, die in diesem Beispiel verwendet werden, können aus dem Force and Position im Paketmanager von Unity importiert werden.

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;
}
}