Зажим оси объекта в AR-камере Vuforia - PullRequest
0 голосов
/ 20 февраля 2019

скриншот здесь Я хочу зажать ось Y на кубе.Я могу сделать это в камере Unity.Но он не реагирует правильно, когда я использую его в камере Vuforia.Моя проблема заключалась в том, что куб следует за камерой.Я бы хотел, чтобы куб оставался на своей позиции и игнорировал положение камеры AR.Я чувствую, что это как-то связано с WorldtoViewpoint, но я не могу понять это.Можете ли вы научить меня, как это сделать, пожалуйста?спасибо

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ClampMovementController : MonoBehaviour
{


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        Vector3 pos = transform.localPosition;
        pos.y = Mathf.Clamp(transform.position.y, 0f, 0f);
        transform.localPosition = pos;
    }

}  

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Это мое решение: на самом деле это очень просто.Концепция INcorrect была моим объектом, прикрепленным к AR-камере, следовательно, положение объекта всегда движется в зависимости от положения камеры.Сейчас.Для того, чтобы объект оставался на своем месте.Мне нужно получить его localPosition.Первый.Хранить локальное расположение в Vector3 поз.А затем сделайте модификацию на Vector3 поз.Наконец, переназначьте новое значение на локальное расположение объекта.

public class ClampMovementController : MonoBehaviour
{
    public float currentPos;
    public GameObject capsule;

    void Update()
    {
        //store the value of object localPosition
        Vector3 pos = capsule.transform.localPosition;
        //modification on the value
        pos.y = Mathf.Clamp(pos.y, currentPos, currentPos);
        //rerassign the new value to the object localPosition
        capsule.transform.localPosition = pos;
    }

}
0 голосов
/ 21 февраля 2019

Прежде всего ваш куб движется вместе с камерой, потому что ваша цель изображения является дочерней для вашей ARCamera.Поэтому, когда вы перемещаете цель изображения камеры, перемещается и ваш куб.Убедитесь, что у вашего ImageTarget нет родителя.

Я не понял, почему вам нужно заблокировать любое движение по оси Y.Я предполагаю, что вы делаете что-то не так с легким прикосновением, когда вы двигаете объектЯ не использовал Lean Touch, но я добился этого с помощью клавиатуры.Вы можете преобразовать его в бережное отношение, изменив следующий скрипт.Просто добавьте эти строки в ваш ImageTarget DefaultTrackableEventHandler скрипт:

//Variables for getting capsule and checking if ImageTarget is tracked
private bool isTracked = false;
private GameObject capsule;

Затем создайте метод Update для получения ввода от пользователя, подобного этому.

 void Update()
{
    if(isTracked)
    {
        if(Input.GetKey(KeyCode.W))
        {
            //using forward for moving object in z axis only. 
            //Also using local position since you need movement to be relative to image target
            //Global forward can be very different depending on your World Center Mode
            capsule.transform.localPosition += Vector3.forward * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.S))
        {
            capsule.transform.localPosition -= Vector3.forward * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.A))
        {
            //Using Vector3.left and right to be make sure movement is in X axis.
            capsule.transform.localPosition += Vector3.left * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.D))
        {
            capsule.transform.localPosition += Vector3.right * Time.deltaTime;
        }
    }
}

Каквы можете видеть, что по оси Y нет движения, потому что я использовал векторы вперед, влево и вправо, чтобы убедиться, что движение происходит только по осям X и Y.

Последнее, вы должны убедиться, что isTracked обновлено.Для этого необходимо добавить isTracked = false; в методе OnTrackingLost и isTracked = true; в методе OnTrackingFound.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...