Приведенный ниже код работал для меня, когда я тестировал его несколько месяцев назад. Теперь я не вижу, как он работает. Хит всегда регистрируется за пользовательским интерфейсом, а модель, которую я поместил с помощью примера сцены UNITYARHIT, помещается за пользовательским интерфейсом. .
#else
if (Input.touchCount > 0 && m_HitTransform != null)
{
var touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved && !EventSystem.current.IsPointerOverGameObject(touch.fingerId))
{
var screenPosition = Camera.main.ScreenToViewportPoint(touch.position);
ARPoint point = new ARPoint {
x = screenPosition.x,
y = screenPosition.y
};
// prioritize reults types
ARHitTestResultType[] resultTypes = {
ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingGeometry,
//ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent,
// if you want to use infinite planes use this:
// ARHitTestResultType.ARHitTestResultTypeExistingPlane,
ARHitTestResultType.ARHitTestResultTypeEstimatedHorizontalPlane,
//ARHitTestResultType.ARHitTestResultTypeEstimatedVerticalPlane,
//ARHitTestResultType.ARHitTestResultTypeFeaturePoint
};
foreach (ARHitTestResultType resultType in resultTypes)
{
if (HitTestWithResultType (point, resultType))
{
return;
}
}
}
}
#endif
Нижеприведенный скрипт, который я добавил к модели, чтобы провести пальцем по вращению. При касании модель перемещается неловко. Она движется вдоль плоскости и вращается. Как только плоскость обнаружена, мне нужно отключить обнаружение плоскости, чтобы сделать вращение со смахиванием работает?
if(Input.touchCount==2 && Input.GetTouch(0).phase==TouchPhase.Moved)
{
// Get movement of the finger since last frame
Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition;
transform.Rotate(Vector3.up ,touchDeltaPosition.x * rotspeed * Time.deltaTime, Space.World);
// transform.Rotate(Vector3.right,touchDeltaPosition.y * rotspeed * Time.deltaTime,Space.World);
}