기본 힘과 위치 튜토리얼
이 간단한 예제에서는 힘을 가하고 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;
}
}