Intereting Posts
Apache Commons Codec с Android: не удалось найти метод WindowManager с анимацией (возможно ли это?) Как получить значение атрибута «ресурс id» элемента android и атрибут «content description» в appium java? Как получить имя категории «Все Android-приложения»? Как использовать один и тот же пользовательский шрифт для всех видов в Android? Анализатор SimpleDateFormat Точное положение кнопки внутри макета Ошибка: вызов WebView.destroy (), все еще подключенный Как динамически устанавливать заголовки в Retrofit (Android) SeekArc – это всегда круг Почему мой ListView отстает от новых устройств, но быстро работает на старых устройствах? Как я могу сделать липкие заголовки в RecyclerView? (Без внешней библиотеки) Значение красного цвета в графических файлах Nine-patch для Android Студия Android: эмулятор работает, но не отображается в Run App «выберите запущенное устройство» Проблемы с рендерингом android.support.v7.internal.app.WindowsDecorActionBar

Проверка наличия сенсорной точки внутри коллайдера коробки в Unity

Пожалуйста, ознакомьтесь с приведенными ниже изображениями.

Введите описание изображения здесь

Введите описание изображения здесь

На первом изображении вы видите, что есть коллайдер коробки. Второе изображение – когда я запускаю код на Android-устройстве

Вот код, который прилагается к Play Game (его 3D-текст)

using UnityEngine; using System.Collections; public class PlayButton : MonoBehaviour { public string levelToLoad; public AudioClip soundhover ; public AudioClip beep; public bool QuitButton; public Transform mButton; BoxCollider boxCollider; void Start () { boxCollider = mButton.collider as BoxCollider; } void Update () { foreach (Touch touch in Input.touches) { if (touch.phase == TouchPhase.Began) { if (boxCollider.bounds.Contains (touch.position)) { Application.LoadLevel (levelToLoad); } } } } } 

Я хочу посмотреть, находится ли сенсорная точка внутри коллайдера или нет. Я хочу сделать это, потому что прямо сейчас, если я нажимаю любой, где на сцене Application.LoadLevel (levelToLoad); называется.

Я хочу, чтобы он был вызван, если я нажимаю только текст PLAY GAME. Может ли кто-нибудь помочь мне с этим фрагментом кода или может дать мне другое решение моей проблемы?


Последний код, следуя логике Гейзенбуга

 void Update () { foreach( Touch touch in Input.touches ) { if( touch.phase == TouchPhase.Began ) { Ray ray = camera.ScreenPointToRay(new Vector3(touch.position.x, touch.position.y, 0)); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, 10)) { Application.LoadLevel(levelToLoad); } } } } 

Позиция Touch выражается в системе координат экрана ( Vector2 ). Вам необходимо преобразовать эту позицию в космическую систему координат мира, прежде чем пытаться сравнить ее с другими 3D-местоположениями объектов в сцене.

Unity3D предоставляет средства для этого. Поскольку вы используете BoundingBox окружающий ваш текст, вы можете сделать следующее:

  • Создайте Ray происхождение которого находится в позиции точки касания, а какое направление – параллельно оси камеры ( Camera.ScreenPointToRay ).
  • Проверьте, пересекает ли этот луч BoundingBox вашего GameObject ( Physic.RayCast ).

Код может выглядеть примерно так:

 Ray ray = camera.ScreenPointToRay(new Vector3(touch.position.x, touch.position.y, 0)); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerOfYourGameObject)) { //enter here if the object has been hit. The first hit object belongin to the layer "layerOfYourGameObject" is returned. } 

Удобно добавить определенный слой в игру Game Game для игры «Игра в игру», чтобы заставить луч сталкиваться только с ним.


РЕДАКТИРОВАТЬ

Код и объяснение выше в порядке. Если у вас нет правильного столкновения, возможно, вы не использовали правильный слой. На данный момент у меня нет сенсорного устройства. Следующий код будет работать с мышью (без использования слоев).

 using UnityEngine; using System.Collections; public class TestRay : MonoBehaviour { void Update () { if (Input.GetMouseButton(0)) { Vector3 pos = Input.mousePosition; Debug.Log("Mouse pressed " + pos); Ray ray = Camera.mainCamera.ScreenPointToRay(pos); if(Physics.Raycast(ray)) { Debug.Log("Something hit"); } } } } 

Это просто пример, который поможет вам в правильном направлении. Попытайтесь выяснить, что происходит в вашем случае или опубликуйте SSCCE .