Einführung in Kraft und Position
In dieser Anleitung stellen wir eine einfache Demo vor, in der die Bewegung des Cursors durch Krafteinwirkung visualisiert wird: Inverse3 . Am Ende dieses Tutorials wird der Eindruck simuliert, als wäreInverse3 durch ein virtuelles Gummiband mit der Startposition verbunden, und ein „Sphere“-GameObject zeigt die Position des Cursors an.
Einleitung
Im Einführungsleitfaden wurdenInverse3 haben wir Objekte und ihre Funktionen sowie die Methode zur Erzeugung einer konstanten Kraft vorgestellt. Das Ziel hier ist es, einen Gummibandeffekt für den Cursor zu simulieren. Ein Gummiband verhält sich ähnlich wie eine Feder, wobei seine Kraft sowohl von der Steifigkeit als auch von der Entfernung zwischen den beiden Endpunkten beeinflusst wird. Daher wollen wir eine Funktion entwickeln, die bei Angabe von Position und Steifigkeit eine Kraft erzeugt, die der Bewegung des Cursors vom Ursprung weg entgegenwirkt.
Einrichtung der Szene
Erstellen Sie über das Menü „GameObjects > Haply “ ein „Haptic Rig (one hand) “, um zu beginnen.
ForceAndPosition-Komponente
Haptischer Ursprung Wählen Sie das GameObject aus undForceAndPosition.cs Fügen Sie ein neues Skript mit dem Namen … hinzu und führen Sie den folgenden Code aus: ForceAndPosition Beschreiben Sie die Klasse:
[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 Codeabschnitt wird die Steifigkeit auf 100 Newton pro Meter (N/m) festgelegt, um eine relativ weiche Feder zu simulieren.
Außerdem ist die Eigenschaft, die den Mittelpunkt des Arbeitsbereichs zurückgibt, inverse3.WorkspaceCenterLocalPosition wird eingeführt.
Diese Methode berechnet die Kraft, indem sie die Position des Cursors vom Mittelpunkt des Arbeitsbereichs abzieht, und multipliziert das Ergebnis mit der Steifigkeit.
Schließlich,inverse3.SetCursorLocalForce Verwenden Sie diese Funktion, um die Kraft auf den Cursor anzuwenden.
Einführungsleitfaden Wie dort ausführlich beschrieben,OnEnable sowie OnDisable in der Methode OnDeviceStateChanged Callback einbinden:
protected void OnEnable()
{
inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
inverse3.DeviceStateChanged -= OnDeviceStateChanged;
}
Gameplay
Inverse3 Nehmen Sie den Cursor in die Hand, aktivieren Sie den „Play Mode“ und probieren Sie die Bedienung des Geräts aus. Sie werden feststellen, dass beim Bewegen des Cursors eine Kraft entsteht. Je weiter Sie den Cursor von der Startposition wegbewegen, desto deutlicher wird diese Kraft spürbar.

Quelldatei
Die in diesem Beispiel verwendete endgültige Szene sowie alle zugehörigen Dateien können aus den „Tutorials“-Beispielen im Unity-Paketmanager 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);
}
}
}