Я разрабатываю простые исправления в виде игр. Здесь, если я нажал на объект, он создаст новый слой перед фоновым слоем. Но проблема в том, что когда я нажимаю на верхний слой, клик также влияет на фоновый слой. Как этого избежать. Я использовал столкновение на основе слоев и коллайдер на верхнем слое, но не использовал. Пожалуйста, дайте мне любую идею ... Спасибо заранее.Как игнорировать щелчок мышью на фоне слоев или объектов?
ответ
Я рекомендую использовать raycast. Когда вы нажимаете, бросаете из курсора мыши в сцену и проверяете тег объекта (или другие атрибуты, если вам нужно). Таким образом, вам не нужно использовать OnMouseOver() или OnMouseDown() для разных объектов и иметь логику в одном месте.
Он также более гибкий, например, вы можете указать диапазон raycast, а также игнорировать определенные слои.
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;
}
}
}
}
надеюсь, что это имеет смысл как-то.
Спасибо, чувак, его хороший способ. – Albertkaruna
Прежде чем я получу ответ, я сделал это, используя анимацию. Если я взаимодействую с верхним слоем, тогда я удаляю фоновый слой из фона после завершения работы верхнего слоя, тогда я разместил фоновый слой. Это хорошо или плохо?
Вы можете добавить метки к объектам, и вы можете проверить их теги на клик? –
@ Sir.WaLeK да, но это сложнее, потому что нам нужно проверить каждый клик. – Albertkaruna