使用HoloToolkit資產和實施代碼中的InputManager預製件,用戶可以點擊並按住給定對象,然後左右移動他們的手(沿x平面)以沿Y軸或上下方向旋轉對象(沿y平面)旋轉X軸上的對象。Hololens導航使用輕按並保持手勢錯誤?
但似乎有一個錯誤。如果用戶注視離開對象,則旋轉立即停止,直到用戶注視返回到對象。這是預期的功能嗎?如果是這樣,那麼如何通過導航手勢保留當前正在改變的對象,並允許它繼續被操縱,直到用戶的手離開FOV或用戶釋放輕擊並保持手勢?
目標是利用輕敲並按住手勢,但不要求用戶注視在整個對象旋轉期間鎖定在對象上。對於小型或笨拙的物體來說,這是相當困難的。
實現代碼:
[Tooltip("Controls speed of rotation.")]
public float RotationSensitivity = 2.0f;
private float rotationFactorX, rotationFactorY;
public void OnNavigationStarted(NavigationEventData eventData)
{
Debug.Log("Navigation started");
}
public void OnNavigationUpdated(NavigationEventData eventData)
{
rotationFactorX = eventData.CumulativeDelta.x * RotationSensitivity;
rotationFactorY = eventData.CumulativeDelta.y * RotationSensitivity;
//control structure to prevent dual axis movement
if (System.Math.Abs(eventData.CumulativeDelta.x) > System.Math.Abs(eventData.CumulativeDelta.y))
{
//rotate focusedObject along Y-axis
transform.Rotate(new Vector3(0, -1 * rotationFactorX, 0));
}
else
{
//rotate focusedObject along X-axis
transform.Rotate(new Vector3(-1 * rotationFactorY, 0, 0));
}
}
public void OnNavigationCompleted(NavigationEventData eventData)
{
Debug.Log("Navigation completed");
}
public void OnNavigationCanceled(NavigationEventData eventData)
{
Debug.Log("Navigation canceled");
}
我很困惑。輕拍還註冊輕按並按住?您是使用OR(|)將水龍頭和X軸導航組合成一個嗎? – jtth
@jtth'Tap'與'Hold'分開,如果您查看GestureSettings枚舉,您將看到所有可能的值。你甚至可以設置一個程序來識別它們(儘管我很確定'Navigation_','NavigationRails_'和'Manipultation'都是相互排斥的,因爲它們都依賴於相同的手勢,但是被解釋爲稍有不同。是的,在這種情況下,我使用按位或來組合兩種手勢類型(在這種情況下爲tap和nav-x)。它不會將手勢組合成單個事件,它會說「我對這些類型的事件感興趣...「 – Draco18s
您仍然需要'NavigationRecognizer.NavigationEvent + = ...'來獲得回調。(X,Y和Z全部由相同事件處理) – Draco18s