Mega 5 Report post Posted June 5, 2020 Hola, tengo un script que lo que hace es seleccionar un objeto al tocarlo (en el móvil), vale pues el problema es que cuando yo abro un menú del juego y toco por ejemplo un boton el objeto que este detrás se selecciona y no quiero eso. Busco alguna forma de que el menú bloque el raycast. He probado mil formas y ninguna funciona. No se si me explico bien. Gracias Share this post Link to post Share on other sites
francoe1 536 Report post Posted June 5, 2020 El componente CanvasGroup tiene una opción para este comportamiento Ayuda. Share this post Link to post Share on other sites
Mega 5 Report post Posted June 5, 2020 1 hour ago, francoe1 said: El componente CanvasGroup tiene una opción para este comportamiento Ayuda. Lo he probado y me sigue sin funcionar, influye algo donde ponga el script de los raycast? A lo mejor tengo otro fallo Share this post Link to post Share on other sites
lightbug 832 Report post Posted June 5, 2020 (edited) 7 hours ago, Mega said: Busco alguna forma de que el menú bloque el raycast. He probado mil formas y ninguna funciona. Podrías considerar que el juego se encuentra en el estado "menú" o "UI" (cuando abrís tu menú), y en dicho estado simplemente no procesar el raycast selector de objetos. Ayudaría si subís el código encargado de seleccionar objetos. El graphic raycaster opera con UI: Graphic Raycaster El Graphic Raycaster es utilizado para raycast (emitir rayos) contra un Canvas. El Raycaster mira todos los Gráficos en el canvas y determina si uno de ellos ha sido golpeado. Si seleccionas objetos 3D usando Physics.Raycast, no estoy seguro de que este puede ser bloqueado (como un raycast de UI). Edited June 5, 2020 by lightbug Share this post Link to post Share on other sites
Mega 5 Report post Posted June 6, 2020 10 hours ago, lightbug said: Podrías considerar que el juego se encuentra en el estado "menú" o "UI" (cuando abrís tu menú), y en dicho estado simplemente no procesar el raycast selector de objetos. Ayudaría si subís el código encargado de seleccionar objetos. El graphic raycaster opera con UI: Graphic Raycaster El Graphic Raycaster es utilizado para raycast (emitir rayos) contra un Canvas. El Raycaster mira todos los Gráficos en el canvas y determina si uno de ellos ha sido golpeado. Si seleccionas objetos 3D usando Physics.Raycast, no estoy seguro de que este puede ser bloqueado (como un raycast de UI). Si , el script es para seleccionar objetos 3D con Physics.Raycast. He visto que puedo hacer algo con el EventSystem pero tampoco consigo hacerlo funcionar Luego subo el código. Share this post Link to post Share on other sites
Mega 5 Report post Posted June 6, 2020 (edited) 16 hours ago, lightbug said: Podrías considerar que el juego se encuentra en el estado "menú" o "UI" (cuando abrís tu menú), y en dicho estado simplemente no procesar el raycast selector de objetos. Ayudaría si subís el código encargado de seleccionar objetos. El graphic raycaster opera con UI: Graphic Raycaster El Graphic Raycaster es utilizado para raycast (emitir rayos) contra un Canvas. El Raycaster mira todos los Gráficos en el canvas y determina si uno de ellos ha sido golpeado. Si seleccionas objetos 3D usando Physics.Raycast, no estoy seguro de que este puede ser bloqueado (como un raycast de UI). void Update () { if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began) { Ray ray = Camera.main.ScreenPointToRay (Input.touches[0].position); if (Physics.Raycast (ray, out hit)) { if (hit.collider != null) { nombreHit = hit.collider.name; panelColor.SetActive (true); } } } } Edited June 6, 2020 by francoe1 Mantener el codfigo bien formateador. Share this post Link to post Share on other sites
francoe1 536 Report post Posted June 6, 2020 No había comprendido, pensé que se trataba de dos componentes del canvas. 1 - La solución a esto es como comento @lightbug desactivar la característica de "Selección" cuando se está visualizando el o los canvas que tendrían este problema. 2 - existe otra alternativa un poco más costosa, sería evaluar si el raycast colisiona con un componente del canvas. private bool CollisionWithCanvas (Vector3 screenMousePosition) { foreach (MaskableGraphic uiElement in uiParent.GetComponentsInChildren<MaskableGraphic> ()) { if (uiElement.gameObject.activeInHierarchy && uiElement.enabled) { Vector2 point; RectTransformUtility.ScreenPointToLocalPointInRectangle (uiElement.rectTransform, screenMousePosition, null, out point); if (uiElement.rectTransform.rect.Contains (point)) return true; } } return false; } Share this post Link to post Share on other sites