HoloLens开发:使用Navigation手势进行物体缩放
使用Navigation手势进行物体缩放
笔者开发版本为unity5.6.1f1,写教程时版本已经更新到了2018.2
初始化
首先需要部署好摄像头
然后我们要缩放的物体为一个Plane,并为其添加Collider(这样才能被手势捕捉到)
添加EventSystem,必须有这个才能进行交互
Cursor是为了展示目光位置以及触及的物体
场景中所有物体:
添加Manager脚本
Manager上脚本如图,这些脚本都可以在链接(选择unity版本为5.6.1)中获取到,当然如果我们只做旋转的话并不需要这么多脚本,只需要Hands和GestureManager就可以
脚本位置
Logo物体上的脚本
Navigation手势可以获取一直保持点击姿势时的手在X轴和Y轴上的偏移(值在-1到1之间),这里我们只使用X轴也就是手在水平方向上的偏移
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Academy.HoloToolkit.Unity;
using UnityEngine.UI;
public class TestRot : MonoBehaviour {
// Use this for initialization
[Tooltip("Rotation max speed controls amount of rotation.")]
public float RotationSensitivity = 10.0f;
// public Text text;
private float rotationFactorX;
private float rotationFactorY;
private float rotationFactorZ;
Vector3 naivescale;
// Use this for initialization
void Start()
{
naivescale = gameObject.transform.localScale;
}
// Update is called once per frame
void Update()
{
PerformRotation();
}
private void PerformRotation()
{
//当处于Navigating Gesture时且当前物体为被手势识别追踪的物体时进行旋转
if (GestureManager.Instance.IsNavigating && HandsManager.Instance.FocusedGameObject == gameObject)
{
//计算旋转角度
rotationFactorX = GestureManager.Instance.NavigationPosition.x * RotationSensitivity;
// text.text = GestureManager.Instance.NavigationPosition.x.ToString();
//绕着y轴进行旋转
// transform.Rotate(new Vector3(0, -1 * rotationFactorX, 0));
float f = Mathf.Abs(GestureManager.Instance.NavigationPosition.x);
//限定最低
if (f < 0.3)
f = 0.3f;
transform.localScale = f * 2 * naivescale;
}
}
}
这样我们即可对Logo物体通过手势的横向位移进行旋转