Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

[Dudas] Script para doble salto, adjunto código

Iniciado por totemalf, Octubre 18, 2015, 09:58:14 AM

Tema anterior - Siguiente tema
El script en principio funciona bien, pero me surgen algunas dudas:1- La primera es si una fuerza se debe multiplicar por Time.deltaTime. En este caso en Update hago un AddForce, y no se si esa fuerza se aplica igual e cualquier frame rate. Intuyo que si, pero prefiero asegurarme.2- Al estar trabajando con físicas y rigidbodyes y tal, ¿debería haber usado mejor FixedUpdate?... en caso de que sí, ¿que parte del código debería haber pasado a esa función?, ya que dentro de mi "if" del update hay cosas como el cambio de la animación o la detección de si ha saltado que no tienen que ver con la fisica.3- Fixed Update tiene un framerate fijo, no? aquí nunca habría que usar el Time.deltaTime?Muchas gracias!
using UnityEngine;
using System.Collections;
public class chico : MonoBehaviour {

public float fuerzaSalto = 500;
Rigidbody2D miRigidbody;
Animator animador;
int puedeSaltar; //0 = esta en el suelo y puede saltar, 1= esta en el aire y puede saltar, 2 o mas esta en el aire y no puede saltar

void Start () {
miRigidbody = this.GetComponent<Rigidbody2D>();
animador = this.GetComponent<Animator>();
puedeSaltar = 0;
}

void Update () {
if(Input.GetMouseButtonDown(0) && puedeSaltar <2)
{
miRigidbody.velocity = new Vector2(miRigidbody.velocity.x,0);
miRigidbody.AddForce(new Vector2(0,fuerzaSalto));
puedeSaltar +=1;
animador.SetBool("enElSuelo",false);
}
}
void OnCollisionEnter2D(Collision2D col)
{
if(col.gameObject.tag == "suelo")
{
puedeSaltar = 0;
animador.SetBool("enElSuelo",true);
}
}
}
 

Octubre 18, 2015, 11:23:50 AM #1 Ultima modificación: Octubre 18, 2015, 11:26:25 AM por kaito
Según los ejemplos de la documentación, las físicas del 'RigidBody' se deben aplicar desde la función 'FixedUpdate'. La del 'CharacterController' se utiliza desde 'Update'. Supongo, que lo que quieres es mover el objeto a una velocidad utilizando físicas. Con los componente 'RigidBody' no se utiliza el Time, tienes que ver la velocidad actual con rigidbody.velocity, y entonces aplicar la fuerza positiva o negativa al objeto hasta alcanzar la velocidad que deseas. También, según el FoceMode que utilices, deberás considerar o no la masa. Por ejemplo, ForceMode.VelocityChange y ForceMode.Acceleration no le afecta la masa. Con el 'CharacterController' simplemente indicas la velocidad que quieres y ya está, tampoco utiliza el Time. 

Gracias de nuevo Kaito.Al final he conseguido hacer más o menos el mismo comportamiento de dos modos distintos. Tengo un script que lo hace por medio de físicas, y otro que lo hace con Translate. Teniendo en cuenta que la idea sería que el juefo funcione en Android, a nivel de rendimiento, ¿cual de los dos modos se podría decir que es más eficiente? ¿con fisica o con translate? 

Etiquetas: