за мою дипломную работу по расширению физической бумажной карты. Для этого, как написано в заголовке, я использую Unity в сочетании с Vuforia для обнаружения цели изображения и других функций.
Пока все хорошо.
Теперь проблема:
Я использую куб элементы, которые дополнены рядом с картой как элементы взаимодействия для фильтрации проецируемого содержимого. У этих кубиков есть боксовые коллайдеры. Я прикрепил следующий скрипт «buttonController» к своей AR-камере, который должен обрабатывать попадания Raycast в эти кубы и запускать другие функции.
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class ButtonController : MonoBehaviour
{
public AudioClip[] audioClips;
public AudioSource myAudioSource;
private string btnName;
private GameObject[] stations;
private void Start()
{
myAudioSource = GetComponent<AudioSource>();
}
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
//Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Vector3 tapPositionFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.farClipPlane);
Vector3 tapPositionNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
Vector3 tapPosF = Camera.main.ScreenToWorldPoint(tapPositionFar);
Vector3 tapPosN = Camera.main.ScreenToWorldPoint(tapPositionNear);
int layerMask = LayerMask.GetMask("Button", "Pin");
RaycastHit hit;
if (Physics.Raycast(tapPosN, tapPosF - tapPosN, out hit, Mathf.Infinity, layerMask))
{
btnName = hit.transform.name;
Debug.Log("NAME OF HIT TARGET: " + hit.transform.name);
myAudioSource.clip = audioClips[0];
myAudioSource.Play();
switch (btnName)
{
case "buttonRoute1":
Debug.Log("In: CASE 1");
playAnimation(btnName);
stations = GameObject.FindGameObjectsWithTag("Route1");
Debug.Log(stations);
LineRenderer lineRenderer = GetComponent<LineRenderer>();
foreach (GameObject station in stations)
{
MeshRenderer mRenderer = station.GetComponent<MeshRenderer>();
if (mRenderer.enabled == true)
{
mRenderer.enabled = false;
}
else
{
mRenderer.enabled = true;
}
}
return;
case "buttonRoute2":
Debug.Log("In: CASE 2");
playAnimation(btnName);
return;
case "buttonRoute3":
Debug.Log("In: CASE 3");
playAnimation(btnName);
return;
case "buttonRoute4":
Debug.Log("In: CASE 4");
playAnimation(btnName);
return;
case "buttonRoute5":
Debug.Log("In: CASE 5");
playAnimation(btnName);
return;
case "buttonRoute6":
Debug.Log("In: CASE 6");
playAnimation(btnName);
return;
}
}
else
{
//Debug.DrawRay(ray.origin, ray.direction * 1000, Color.white);
Debug.Log("NOTHING HAPPENED WITH MOUSE");
}
}
}
void playAnimation(string btnName)
{
GameObject currentGameObject = GameObject.Find(btnName);
Animation anim = currentGameObject.GetComponent<Animation>();
anim.Play();
}
}
Для этих кубов установлены специальные XZ-координаты в сцене единства, и не программно перемещается во время выполнения в другом сценарии.
Я также увеличиваю контакты, которые размещены на 0/0/0 цели изображения и меняются во время выполнения к новым координатам XZ, рассчитанным по их координатам LatLong. Их хиты Raycast также обнаруживаются с помощью приведенного выше сценария.
Когда я запускаю свое приложение в редакторе, все работает отлично. Каждый из элементов, кубы и булавки, получает raycast точно так же, как и должен.
Пока все хорошо.
Когда я собираю версию android и устанавливаю ее в мой xiaomi android телефон, радиопередачи не бьют, как они должны. Я не получаю никакого удара вообще, когда я касаюсь кубов в их исходном положении рядом с картой. НО я получаю попадания в отмеченную синим цветом область, показанную на рисунке ниже.
Моя сцена единства, показывающая кнопки куба
Это похоже на бокс-коллайдеры кубов сбоку все перемещаются в положение 0/0/0 моей цели изображения во время выполнения, хотя модели сохраняют свое исходное положение.
Булавки вообще не получают никаких ударов, хотя они активны. sh коллайдеры на них и попадание в редактор тоже.
Я сейчас крайне отчаянный, так как я уже испробовал каждый совет, который нашел в тысячах угроз.
Я попытался настроить новый элемент AR-камеры, переместите сценарий на другой объект, измените иерархию, измените коллайдеры, сбросьте коллайдеры, разные сценарии raycast от щелчка мышью до касания, используйте другое устройство и т. д.
Я бы Я очень признателен, если у кого-то из вас есть подсказка, в чем может быть проблема.
Если потребуется дополнительная информация, просто дайте мне знать!
Пока спасибо. Привет
РЕДАКТИРОВАТЬ:
@ Филипп Ленсен и другие
Как я уже сказал, я думаю, что коллайдеры движутся во время выполнения. Я отлаживал коллайдеры buttonRoute 1 и buttonRoute 2, пока попал в отмеченную синим цветом зону из скриншота 1.
Я получаю попадания, и положение коллайдеров совершенно другое.
Кубы, помеченные зеленым и желтым, представляют собой кубы, предназначенные для визуализации бокслайдеров Куба маршрута 1 и Маршрута 2 рядом с картой.
Они даже не находятся в одной и той же позиции. Один находится выше 0 оси Y, а другой внизу. Их координаты X и Z совершенно странные. Они должны сохранять положение элементов 3d Зеленого маршрута 2 и Желтого маршрута 1, показанных рядом с картой!
Я понятия не имею, почему это происходит ....
РЕДАКТИРОВАТЬ:
Я перестроил весь проект на новый чистый. Я также обновил свой Android SDK до последней версии. Теперь приложение работает без ошибок!