• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

305
Vistas
(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

almost 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

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.

almost 3 years ago · Santiago Trujillo Denunciar

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.

almost 3 years ago · Santiago Trujillo Denunciar

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.

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda