2016-09-16 2 views
0

Я использую плагин Kudan в Unity для создания приложения для Android. Я использую режим без маркера. Когда я нажимаю (сенсорную) модель, которая появляется в этом безрежимном режиме, я хочу ее уничтожить. Я использую сценарий Raycast, как показано ниже. Я попытался подключить сценарий к Kudan Камера. Также я создал публичный объект игры с камерой и передал ему камеру Kudan. Однако ни один из вариантов не работает.Kudan Unity: Destroying GameObject on Touch

Кто-нибудь знает, что я делаю неправильно?

public Gamobject model; 

if (Input.touchCount > 0) 
     RaycastHit hit; 

      Ray ray = Camera.main.ScreenPointToRay (Input.GetTouch (0).position); 

     if (Physics.Raycast (ray, out hit)) 
     { 
      if (hit.collider.gameObject.tag == "chair") 
      { 
       Destroy (model); 
      } 
     } 
    } 

Заранее благодарен!

+0

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

+0

Было бы предположено, возможно, выполнить код с помощью отладчика, чтобы вы могли видеть поток, или добавить «print (« raycast hit object: »+ hit.gameObject.name);' над вашим оператором if, чтобы определить, raycast работает правильно. Оттуда начните сузить проблему. На нем есть коллайдер? – ejsd1989

ответ

1

Предполагая, что ваш фактический код правильный и говорит GameObject вместо Gamobject и ваш, если заявление имеет открывающую фигурную скобку и т.д., это может быть, что:

  • Вы не дали модель «стул» тег. Если ваш луч попадает в модель, но модель не имеет правильного тега, она будет проигнорирована.
  • Рэй не идет достаточно далеко, чтобы ударить что-либо (как упоминалось в комментариях). Вы не указали расстояние, которое теоретически должно означать, что нет максимального расстояния, но вы никогда не знаете, что Unity может иметь какой-то странный дефолт или что-то в этом роде.
  • В вашей модели нет коллайдера. Объектам нужен коллайдер, иначе физический движок не сможет зарегистрировать «столкновение» между лучом и объектом.

Но на самом деле, проще и, вероятно, лучшим способом было бы не использовать Raycast вообще. Если вы делаете метод в скрипте:

void OnMouseDown 
{ 
    Destroy(gameObject); 
} 

и прикрепить этот сценарий к вашей модели, а затем, когда пользователь нажимает на модели (или отводы на мобильном телефоне), при условии, что есть коллайдер, он будет уничтожен.

+0

Спасибо за ответы. Как было предложено, установка расстояния луча до высокого значения (используемого Mathf.Infinity) решила проблему. – Aniruddha

+0

@ Анируддха, пожалуйста, пометьте этот ответ, решив вашу проблему. – MultiColourPixel

Смежные вопросы