Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

107
Visualizações
Resultados de Unity Raycast diferentes en dos dispositivos

Utilizo los siguientes códigos para detectar qué elemento de la interfaz de usuario está señalando el jugador. Funciona bien en Unity Editor, en uno de mis teléfonos Android, pero falló en un segundo teléfono Android.

 public static T RaycastOnFirstPointed<T>(EventSystem eventSystem, GraphicRaycaster raycaster) { if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) { if (Input.touches == null || Input.touches.Length == 0) return default; } var m_PointerEventData = new PointerEventData(eventSystem); m_PointerEventData.position = Input.mousePosition; var results = new List<RaycastResult>(); raycaster.Raycast(m_PointerEventData, results); // On the 2nd phone the results.length is 0 foreach (RaycastResult result in results) { var component = result.gameObject.GetComponent<T>(); if (component != null) { return component; } } return default; }

Este método se llama dentro de un método IEndDragHandler.OnEndDrag . Traté de depurarlo en el segundo teléfono Android y vi los results.length La longitud es 0 después de que se ejecutó Raycast (debería ser> 0 ya que terminé de arrastrar varios elementos de la interfaz de usuario superpuestos, y es> 0 en el primer teléfono) , no estoy seguro de por qué el segundo teléfono es diferente)

No tengo ni idea de a dónde debo ir desde aquí para encontrar el problema. Por favor, muéstrame algunas direcciones, ¡gracias!

Más información: Teléfono 1: MI 8 Lite, SO: MIUI 10.3 Teléfono 2: MI 9, SO: MIUI 10.2.35

============Actualización===========

Razón encontrada: cuando se activa IEndDragHandler.OnEndDrag , Input.mousePosition tiene un valor diferente en los dos dispositivos. El primer teléfono tiene la posición táctil del último cuadro, mientras que el segundo teléfono parece borrar ese valor y tiene un valor incorrecto muy grande. Estoy trabajando en cómo resolver esto de una manera adecuada. Cualquier sugerencia es bienvenida.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Problema resuelto. Como actualicé en la pregunta, este problema se debe a un valor incorrecto de Input.mousePosition en diferentes dispositivos. Así que actualicé el método RaycastOnFirstPointed de la siguiente manera:

 public static T RaycastOnFirstPointed<T>(EventSystem eventSystem, GraphicRaycaster raycaster, PointerEventData eventData = null) { if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) { if (Input.touches == null || Input.touches.Length == 0) return default; } var m_PointerEventData = new PointerEventData(eventSystem); if (eventData == null) { m_PointerEventData.position = Input.mousePosition; } else { m_PointerEventData.position = eventData.position; } var results = new List<RaycastResult>(); raycaster.Raycast(m_PointerEventData, results); foreach (RaycastResult result in results) { var component = result.gameObject.GetComponent<T>(); if (component != null) { return component; } } return default; }

Cuando llame a este método dentro de OnEndDrag , pase el PointerEventData que proporciona la unidad y use su posición.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda