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

403
Visualizações
(Unity - C#) Problemas con los botones que activan otros eventos

Estoy desarrollando un juego móvil en 2D en el que el jugador debe tocar la pantalla para subir. Acabo de agregar un botón de pausa recientemente y noté que cuando hago clic en el botón cuenta como un toque en la pantalla, por lo que el reproductor sube. Básicamente, en el mismo momento exacto en que presiono el botón de pausa, el jugador salta y luego el juego se congela mientras está en el aire. ¿Hay alguna forma en que pueda hacer que el botón no cuente como un toque?

Aquí está la parte del guión del jugador que lo hace moverse:

 if (Input.GetMouseButtonDown (0) && isDead == false && isKnifeDead == false && UiStartScript.uiInstance.firstClickUi == true) { rb.velocity = Vector2.up * velocity; }

Aquí está la parte de la secuencia de comandos de la interfaz de usuario para el botón de pausa:

 public void PauseGame() { Time.timeScale = 0; }

Mi sistema de eventos: sistema de eventos

Mi Botón: Botón

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

0

En la secuencia de comandos U. I, agregue GameObject PlayerConrtollerScript público; En su UI Script, bajo la clase Pausgame() Agregue este código. GameObject.PlayerControllerScript.SetActive = falso;

Cuando no está en pausa, debe agregar a su secuencia de comandos que tiene el Tiempo. escala de tiempo = 1; Agrega este código. GameObject.PlayerControllerScript.SetActive = verdadero;

Después de haber agregado el código mencionado anteriormente. No olvides agregar el objeto del juego del jugador de tu jerarquía al Inspector con el script U. I, el espacio estará disponible para agregar un objeto del juego cuando te desplaces hacia abajo hasta tu script U. I.

Eso evitará que su reproductor se mueva durante la pausa.

over 4 years ago · Santiago Trujillo Relatório

0

Una forma fácil y sin necesidad de código es eliminar el código sobre la detección del toque en la pantalla y en su lugar colocar un botón que cubra toda la pantalla (botón invisible).

Ese evento de botón activaría el movimiento de la pantalla.

Puede agregar botones adicionales en la parte superior y Unity descartará automáticamente el toque de cualquier otro botón a continuación.

De esta manera, puede comenzar a agregar UI por todas partes sin verificar el código que debe considerarse.

over 4 years ago · Santiago Trujillo Relatório

0

Este es el enfoque que he hecho. Creo un par de trucos usando Event System y Canvas para aprovechar la entrada del mouse, no necesitas el uso de las funciones de actualización para hacer el juego básico.

Aquí está mi proyecto de ejemplo: TapAndJump en Github

Verifique los GameObjects llamados "Panel de clic" y "Botón de pausa" y los métodos vinculados respectivos.

SaltarConTap.cs

 using UnityEngine; public class JumpWithTap : MonoBehaviour { [SerializeField] private UIHandler uiHandler; [SerializeField] private float jumpPower = 5f; private Rigidbody2D rb2D; private int counter; #region Class Logic public void Jump() { rb2D.velocity = Vector2.up * jumpPower; uiHandler.SetNumberToCounter(++counter); } #endregion #region MonoBehaviour API private void Awake() { rb2D = GetComponent<Rigidbody2D>(); } #endregion }

UIHandler.cs

 using UnityEngine; using UnityEngine.UI; public class UIHandler : MonoBehaviour { [SerializeField] private Text counterText; [SerializeField] private Text pauseText; [SerializeField] private Image clickPanel; private bool isPaused = false; public bool IsPaused { get { return isPaused; } set { pauseText.gameObject.SetActive(value); isPaused = value; } } #region Class Logic public void SetNumberToCounter(int number) => counterText.text = number.ToString(); public void DisableClickPanel() => clickPanel.raycastTarget = !clickPanel.raycastTarget; public void PauseGame() { IsPaused = !IsPaused; DisableClickPanel(); // Time.timeScale = IsPaused == true ? 0 : 1; // If you want keep the Physics (ball fall) don't stop the time. } #endregion }

Me guié por su ejemplo de código y así sucesivamente; sea libre de modificar y solicitar cualquier problema.

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