Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Rootet

#1
Scripting / Aumentar la velocidad de un personaje
Agosto 29, 2019, 08:57:13 AM
Cita de: lightbug date=1566959924Cuando apretás el botón izq y no está corriendo se da la primer vuelta (el else), es decir que se pone corriendo = true. En el siguiente cuadro GetMouseButtonDown no se dispara (por razones obvias) entoces el "if(corriendo)" no se da. Sí se va a dar el "if(corriendo)" en el proximo click. Además, ¿quién pone corriendo en false?
   
   
      Y volviendo al punto 1, solo si corriendo es falso la velocidad aumenta. Una vez que diste click izquierdo corriendo nunca vuelve a false (?). Puede ser que me haya olvidado de algo, muchas veces contesto a la ligera.
   


@lightbug, sí efectivamente. Solo si está corriendo puede aumentar la velocidad y nunca vuelve a false, hasta que se cae o toca una bomba (fin de juego). Muchas gracias por la ayuda, lo del script para leer inputs es una gran idea.
 
Cita de: Antonio date=1566851072Una manera rápida de arreglarlo es en vez de usar GetMouseButtonDown, utilizar simplemente GetMouseButton, su función es la misma, sólo que esta siempre se activa mientras el botón esté siendo pulsado, mientras que GetMouseButtonDown y GetMouseButtonUp, sólo se activan en los momentos de transición. (Son bastante útiles, pero quizás no en esta situación).
   
   
       
   
   
      Otra posibilidad, es cambiar el valor de la variable velocidad cuando haces la activación de la variable corriendo.
   
   
       
   
   
      Tutorial arriba, tutorial abajo, me parece que es buena idea intentar hacerlo por ti mismo, es una buena práctica para aprender a resolver y racionalizar los problemas. Ya habrá tiempo de pulirlo.
   


Gracias Antonio, en ello estoy. El ejercicio me pide que use el GetMouseButtonDown. Ya casi lo tengo. Muchas gracias por el aporte
 
Cita de: Deaymon date=1566984927La solución de @lightbug es la que uso yo tal cual. A veces incluso uso un script aparte que se dedique exclusivamente a leer inputs (InputManager o algo así) y, luego, cualquier otro script que necesite saber acerca de esos inputs, use una referencia a este (InputManager).

      Eso sí, lo de usar OR al asignar los inputs para acumularlos entre cada FixedUpdate; excelente añadido que me voy a copiar a partir de ahora.  Gracias por el aporte.
   


Si, es muy buena solución, aunque pienso que nos piden algo mucho más sencilo. Gracias por contestar 
 
Buenas a todos, al final lo solucioné de la siguiente forma:
 
En la parte del Update solo añadí lo siguiente:
 

void Update()
    {
        if (Input.GetMouseButtonDown(0)){
            if(corriendo){
                if ((enSuelo || !dobleSalto)){
                    sonido.Play();
                    //Empujón hacia arriba
                    //Opción 1. Metodo up de Vector2
                    rigi.AddForce(Vector2.up*fuerzaSalto);
                    //Otra opción
                    //Aplicamos una fuerza de 0 en X y de fuerzasalto en Y
                    //rigi.AddForce(new Vector2(0,fuerzaSalto));
                    if(!dobleSalto && !enSuelo){
                        dobleSalto=true;
                    }
                }
            }
            else{
                corriendo = true;
                NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer");
            }
        }
        if (Input.GetMouseButtonDown(1)){
            velocidad *= 1.25f;
            animator.speed *= 1.25F;
            if (corriendo){
             
            }
            else{
                rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y);
               
            }
           
        }
       
    }

 
Al componente Animator, también le añado el mismo aumento de velocidad y ya funciona y se nota más al pulsar el botón derecho. Era sencillo, una vez que ves la lógica bien. Aunque m e quedo con lo del script para los imputs ;) Muchas gracias a los que habéis dedicado unos minutos en ayudarme.
#2
Scripting / Aumentar la velocidad de un personaje
Agosto 25, 2019, 10:46:13 PM
Cita de: pioj date=1566760943 
   
   
      @iRobb te ha dado un muy buen consejo general. Ya nos hemos encontrado con muchos usuarios que aunque vienen con muchísima ilusión y voluntad, lo hacen sin ningún orden ni planificación previa. Otra cosa es que te sirva para solucionar tu duda en concreto. Pero de nuevo, él no está obligado a leer ni responder nada a nadie, lo hace porque quiere...
   
   
       
   
   
      Por otra parte, viendo tu código, supongo que sabes que el comando de GetMouseButtonDown no evalúa "cuando mantienes pulsado", sinó cuando haces una simple pulsación y sueltas... Por tanto, la velocidad tras haber pulsado el botón derecho no se mantiene siempre, se va perdiendo a medida que frenes o que caiga el gameobject tras la fuerza, etc, etc..
   


Es cierto,
 
Primero, hay muy poca gente que de verdad pueda y quiera ayudar en este tipo de foros y no dudo para nada de que sean grandes. Pero hay muchas otras que se dedican  a dar consejos generales , y cuestionar las dudas de los demás, con falta de humildad y empatía y sin aportar valor ninguno en su comentarios.
 
Segundo, las normas me las he leído pero es mi primer post, muy bien no me podía salir... Aunque también usuarios antiguos no recuerdan alguna norma que otra, por ejemplo 
 
" Para responder con una frase muy corta, una obviedad o un comentario que no aporte nada al hilo, mejor no lo hagas. Para eso están los chats..."
 
(Si no me equivoco es lo que ha hecho el usuario que me ha contestado (las dos veces). Que evidentemente no está obligado para nada a contestarme
 
Y para terminar, 
 
Si, el comando "GetMouseButtonDown" es el que tengo que usar si o sí. Creo que ya he conseguido aumentar la velocidad del personaje, ahora me falta el componente Animator.
 
Gracias por contestarme, cualquier respuesta de ese tipo que aporte "algo de luz" a los que empezamos es lo que se valora y se necesita, para buscar tutoriales y dar consejos generales de vida está youtube. 
 
Espero algún día poder  ayudar de manera eficaz.
 
Saludos
#3
Scripting / Aumentar la velocidad de un personaje
Agosto 25, 2019, 08:38:12 PM
Para tí iRobb
 
Me pregunto una cosa, si esto es una comunidad, para ayudarnos mutuamente, ¿Es tan difícil ayudar?Si yo tuviera los conocimientos necesarios a mi no me importa ayudar¿Ya no te acuerdas de cuando tú estabas empezando?¿Qué te hace pensar que no estoy aprendiendo desde cero, qué no le dedico horas en el día...? ¿Tan complicado es leer el post y limitarse a dar ayuda, del tipo "pues me parece que está mal aquí o allí, podrías hacer esto...en fin ayudar. Te doy yo a tí un consejo, y como no puedo hacerlo por privado pues aquí. Un poquito de HUMILDAD y EMPATÍA no cuesta nada.
#4
Scripting / Aumentar la velocidad de un personaje
Agosto 25, 2019, 07:16:12 PM
Buenas a todos, estoy con un juego de plataforma en 2D, recién empezando. Necesito añadir algo en el script de "Controlador del personaje" para que al pulsar el botón derecho del ratón, aumente la velocidad del personaje *1.25. He añadido lo siguiente, pero no sé si está bien. Aunque no me da error de compilación, al probar en el juego no noto gran diferencia entre pulsar el botón izquierdo o derecho. Quizás es porque debo aumentar también la velocidad de la animación "Run"??¿cómo se hace? desde el componente Animator en el código?
 
Os dejo el Script aquí por si alguien puede echar un vistazo. Gracias
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControladorPersonaje : MonoBehaviour
{
    Rigidbody2D rigi;
    public float fuerzaSalto=100f;
    private bool enSuelo=true;
    public Transform comprobadorSuelo;
    float comprobadorRadio=0.07f;
    public LayerMask mascaraSuelo;
    private bool dobleSalto=false;
    private Animator animator;
    private bool corriendo=false;
    public float velocidad=1f;
    private AudioSource sonido;
 
        // Start is called before the first frame update
    void Start()
    {
    }
    void Awake()
    {
        rigi=GetComponent<Rigidbody2D>();
        animator=GetComponent<Animator>();
        sonido = GetComponent<AudioSource>();
    }
    void FixedUpdate()
    {
        //Si está parado
        if (corriendo){
            //Aplicar velocidad en el eje X
            rigi.velocity= new Vector2(velocidad,rigi.velocity.y);
            animator.SetFloat("velX",rigi.velocity.x);
        }
        //Comprobamos si comprobadorSuelo+Radio tocan con los objetos 
        //que pertenezcan a mascaraSuelo
        enSuelo=Physics2D.OverlapCircle(comprobadorSuelo.position,comprobadorRadio,mascaraSuelo);
        
        animator.SetBool("isGrounded",enSuelo);
        if (enSuelo){
            dobleSalto=false;
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)){
            if(corriendo){
                if ((enSuelo || !dobleSalto)){
                    sonido.Play();
                    //Empujón hacia arriba
                    //Opción 1. Metodo up de Vector2
                    rigi.AddForce(Vector2.up*fuerzaSalto);
                    //Otra opción
                    //Aplicamos una fuerza de 0 en X y de fuerzasalto en Y
                    //rigi.AddForce(new Vector2(0,fuerzaSalto));
                    if(!dobleSalto && !enSuelo){
                        dobleSalto=true;
                    }
                }
            }
            else{
                corriendo=true;
                NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer");
            }
        }
        if (Input.GetMouseButtonDown(1)){
            
            if (corriendo){
             
            }
            else{
                rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y);
            }
            
        }
        
    }

 
 
 
ControladorPersonaje.cs
#5
Presentaciones / Hola gente!
Agosto 24, 2019, 08:51:32 PM
Hola a toda la comunidad! espero poder ayudar y enriquecerme de conocimientos. Un saludo