기본 힘과 위치 튜토리얼
이 간단한 예제에서는 힘을 가하고 Inverse3 커서의 움직임을 시각화하는 방법을 설명합니다. 완성된 예제는 Inverse3가 시작 위치에 고무줄로 부착된 것처럼 느껴지지만 고무줄이 커서 위치를 표시하는 동안 구형 게임 오브젝트가 커서 위치를 표시합니다.
소개
빠른 시작 가이드에서는 햅틱 스레드 객체와 그 사용 방법, 그리고 생성하는 방법을 소개합니다. 우리의 목표는 커서에 고무줄 효과를 만드는 것입니다. 고무줄은 스프링처럼 즉, 그 힘은 강성과 두 끝 사이의 거리에 따라 달라집니다. 따라서 위치와 강성을 취하고 커서가 커서로부터의 움직임에 저항하도록 커서가 원점에서의 움직임에 저항하도록 하는 함수를 만들어야 합니다.
장면 설정
새 스크립트를 만들어서 시작하세요. 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;
}
이 코드 스니펫은 강성을 미터당 200N/m(뉴턴)로 정의하며, 이는 매우 부드러운 스프링입니다.
또한 다음을 정의합니다. m_initialPosition
는 초기 커서 위치를 저장하는 벡터입니다.
초기 커서 위치를 저장하는 ForceCalculation
메서드는 처음 실행될 때 초기 위치를 저장하고
를 호출한 다음 커서 움직임에 반대하는 힘 출력을 계산합니다.
마지막으로 빠른 시작 가이드에 표시된 대로 깨우기 메서드에 다음 줄을 추가합니다.
var hapticThread = GetComponent<HapticThread>();
hapticThread.onInitialized.AddListener(() => hapticThread.Run( ForceCalculation ));
첫 번째 줄은 게임 오브젝트에 연결된 햅틱 스레드 컴포넌트를 찾고, 두 번째 줄은 줄은 이를 시작합니다.
이제 Inverse3 커서를 누른 상태에서 재생 모드로 들어간 다음 기기를 움직여 보세요. 주목하세요. 커서를 움직이면 힘이 발생하고 시작점에서 멀리 이동할수록 더 큰 힘이 커집니다.
소스 파일
이 예제에서 사용된 최종 씬과 모든 관련 파일은 Unity 패키지 관리자의 Force 및 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;
}
}