2015-11-12 10 views
2

Я разрабатываю простые исправления в виде игр. Здесь, если я нажал на объект, он создаст новый слой перед фоновым слоем. Но проблема в том, что когда я нажимаю на верхний слой, клик также влияет на фоновый слой. Как этого избежать. Я использовал столкновение на основе слоев и коллайдер на верхнем слое, но не использовал. Пожалуйста, дайте мне любую идею ... Спасибо заранее.Как игнорировать щелчок мышью на фоне слоев или объектов?

+0

Вы можете добавить метки к объектам, и вы можете проверить их теги на клик? –

+0

@ Sir.WaLeK да, но это сложнее, потому что нам нужно проверить каждый клик. – Albertkaruna

ответ

2

Я рекомендую использовать raycast. Когда вы нажимаете, бросаете из курсора мыши в сцену и проверяете тег объекта (или другие атрибуты, если вам нужно). Таким образом, вам не нужно использовать OnMouseOver() или OnMouseDown() для разных объектов и иметь логику в одном месте.

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

2

3D или 2D?

проверить это: OnMouseDown on box collider 2D not firing

Я хотел бы также проверить конкретных тегов и создать различные режимы, чтобы проверить их, как.

int mode=0; 

В 'режиме 0' будет проверять столкновения для #basicLayers, в 'режиме 1' будет проверять #topLayers

Как (с помощью приведенной выше ссылке ответ + предложение):

void check3DObjectClicked() 
{ 
    if (Input.GetMouseButtonDown (0)) { 

     RaycastHit hitInfo = new RaycastHit(); 
     if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hitInfo)) { 
      Debug.Log ("Object Hit is " + hitInfo.collider.gameObject.name); 

      switch(mode){ 
      case 0: 
       if (hitInfo.collider.gameObject.CompareTag ("basicLayerObject1"){ 
        mode=1; 
        //do stuff 
       } 
      break; 

      case 1: 
       if (hitInfo.collider.gameObject.CompareTag ("createdTopLayerObj1"){ 
        mode=2; 
        //do stuff 
       }else if (hitInfo.collider.gameObject.CompareTag ("quitTopLayer"){ 
        mode=0; 
        //do stuff 
       } 
       //ignoring basicLayers tagged objects on background. 
      break; 
      } 

     } 
    } 
} 

надеюсь, что это имеет смысл как-то.

+0

Спасибо, чувак, его хороший способ. – Albertkaruna

0

Прежде чем я получу ответ, я сделал это, используя анимацию. Если я взаимодействую с верхним слоем, тогда я удаляю фоновый слой из фона после завершения работы верхнего слоя, тогда я разместил фоновый слой. Это хорошо или плохо?