Skip to main content
Version : la plus récente

Didacticiel de base sur la force et la position

Cet exemple simple explique comment appliquer des forces et visualiser le mouvement d'un curseur Inverse3 et de visualiser le mouvement du curseur. L'exemple terminé donne l'impression que l'Inverse3 est attaché à sa position de départ par un élastique, tandis qu'un GameObject sphérique indique la position du curseur. un élastique à sa position de départ, tandis qu'un GameObject sphérique indique la position du curseur.

Introduction

Le guide de démarrage rapide a présenté l'objet Haptic Thread, son utilisation et la manière de générer des forces constantes. forces constantes. Notre objectif est de créer un effet d'élastique sur le curseur. Un élastique agit comme un ressort, c'est-à-dire que sa force dépend de la rigidité et de la distance entre les deux extrémités. Par conséquent, nous devons créer une fonction qui prend la position et la rigidité et qui produit une force telle que que le curseur résiste au mouvement à partir de l'origine.

Configuration de la scène

Commencez par créer un nouveau script ForceAndPosition.cs et ajoutez le code suivant à ForceAndPosition classe :

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

Cet extrait de code définit la rigidité comme étant de 200 Newtons par mètre (N/m), ce qui correspond à un ressort très souple. Il définit également m_initialPosition qui est un vecteur stockant la position initiale du curseur. Le vecteur ForceCalculation enregistre la position initiale lorsqu'elle s'exécute pour la première fois et calcule ensuite la force qui s'oppose au mouvement du curseur. calcule ensuite la force qui s'oppose au mouvement du curseur.

Enfin, ajoutez les lignes suivantes à la méthode Awake, comme indiqué dans le guide de démarrage rapide

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

La première ligne trouve le composant HapticThread attaché au GameObject, tandis que la deuxième ligne le démarre. le démarre.

Maintenez maintenant le curseur Inverse3 et entrez dans le mode Play, puis essayez de déplacer l'appareil. Remarquez que le déplacement du curseur produit une force et plus il s'éloigne du point de départ, plus la force est grande. la force.

déplacement du curseur

Fichiers sources

La scène finale et tous les fichiers associés utilisés dans cet exemple peuvent être importés à partir de l'exemple Force and Position dans le gestionnaire de paquets de Unity.

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