Lehrgang zu Grundkräften und Positionen
Dieser Leitfaden zeigt kurz, wie man eine Kraft ausübt und die Bewegung des Cursors unter Inverse3 visualisiert. Nach Abschluss des Vorgangs simuliertInverse3 das Gefühl, als wäre der Cursor mit einem virtuellen Gummiband an seiner Ausgangsposition befestigt, während ein kugelförmiges GameObject die Position des Cursors anzeigt.
Einführung
Einführung: In diesem Abschnitt werden Inverse3 Objekte, deren Funktionen sowie Methoden zur Erzeugung konstanter Kräfte. Das Ziel dieses Abschnitts ist es, die Wirkung eines Gummibands auf den Cursor zu simulieren. Das Verhalten eines Gummibands ähnelt dem einer Feder, das heißt, seine Kraft wird sowohl von der Steifigkeit als auch vom Abstand zwischen den beiden Endpunkten beeinflusst. Daher wollen wir eine Funktion entwerfen, die anhand einer vorgegebenen Position und Steifigkeit eine Kraft erzeugt, die den Cursor daran hindert, sich vom Ursprung weg zu bewegen.
Szeneneinstellungen
Erstellen Sie zunächst über das Menü „GameObjects > Haply “ ein Haptic Rig (eine Hand).
ForceAndPosition-Komponente
Auswahl Haptischer Ursprung GameObject, füge ein mit dem Namen ForceAndPosition.cs ein neues Skript und dann in ForceAndPosition Fügen Sie den folgenden Code in die Klasse ein:
[SerializeField]
private Inverse3 inverse3 = null;
[SerializeField, Range(0, 400)]
private float stiffness = 100;
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
// Calculate the force.
var force = (inverse3.WorkspaceCenterLocalPosition - inverse3.CursorLocalPosition) * stiffness;
// Apply the force to the cursor.
inverse3.SetCursorLocalForce(force);
}
In diesem Abschnitt wird die Steifigkeit auf 100 Newton pro Meter (N/m) festgelegt, um eine relativ weiche Feder zu simulieren.
Außerdem wird inverse3.WorkspaceCenterLocalPosition, Diese Eigenschaft gibt den Mittelpunkt des Arbeitsbereichs zurück.
Diese Methode berechnet die Kraft, indem sie die Cursorposition vom Mittelpunkt des Arbeitsbereichs subtrahiert und das Ergebnis anschließend mit der Steifigkeit multipliziert.
Schließlich wird inverse3.SetCursorLocalForce Wende diese Kraft auf den Cursor an.
gemäß Einführungsleitfaden Detaillierte Erläuterungen dazu finden Sie unter OnEnable und OnDisable In die Methode einfügen OnDeviceStateChanged Rückruf:
protected void OnEnable()
{
inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
inverse3.DeviceStateChanged -= OnDeviceStateChanged;
}
Spielablauf
Halten Sie den Cursor unter Inverse3 fest, wechseln Sie in den Wiedergabemodus und versuchen Sie dann, das Gerät zu steuern. Sie werden feststellen, dass beim Bewegen des Cursors eine Kraft entsteht. Je weiter der Cursor von seiner Ausgangsposition entfernt ist, desto stärker ist diese Kraft.

Quelldatei
Die in diesem Beispiel verwendete endgültige Szene sowie alle zugehörigen Dateien können über den Unity-Paket-Manager aus den „Tutorials“-Beispielen importiert werden.
ForceAndPosition.cs
/*
* Copyright 2024 Haply Robotics Inc. All rights reserved.
*/
using Haply.Inverse.DeviceControllers;
using Haply.Inverse.DeviceData;
using UnityEngine;
namespace Haply.Samples.Tutorials._1_ForceAndPosition
{
/// <summary>
/// Demonstrates the application of force to maintain the cursor at its center position.
/// </summary>
public class ForceAndPosition : MonoBehaviour
{
public Inverse3Controller inverse3;
[Range(0, 400)]
// Stiffness of the force feedback.
public float stiffness = 100;
private void Awake()
{
inverse3 ??= FindObjectOfType<Inverse3Controller>();
}
/// <summary>
/// Subscribes to the DeviceStateChanged event when the component is enabled.
/// </summary>
protected void OnEnable()
{
inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
/// <summary>
/// Unsubscribes from the DeviceStateChanged event and reset the force when the component is disabled.
/// </summary>
protected void OnDisable()
{
inverse3.DeviceStateChanged -= OnDeviceStateChanged;
inverse3.Release();
}
/// <summary>
/// Event handler that calculates and send the force to the device when the cursor's position changes.
/// </summary>
/// <param name="sender">The Inverse3 data object.</param>
/// <param name="args">The event arguments containing the device data.</param>
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
// Calculate the force.
var force = (inverse3.WorkspaceCenterLocalPosition - inverse3.CursorLocalPosition) * stiffness;
// Apply the force to the cursor.
inverse3.SetCursorLocalForce(force);
}
}
}