Scripts movimiento y salto
Update()
y FixedUpdate()
:
Antes de nada hay que entender el uso de estos métodos:
Movimiento horizontal y vertical
[SerializeField] private float horizotal;
[SerializeField] private float vertical;
[SerializeField] private int velocidad = 2;
private Rigidbody2D _rigid;
// Start is called before the first frame update
void Start()
{
_rigid = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
horizotal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
Debug.Log(horizotal);
Debug.Log(vertical);
}
private void FixedUpdate()
{
_rigid.velocity = new Vector2(horizotal * velocidad, vertical * velocidad);
}
Debug.Log()
: Muestra mensajes por consola, en este caso las entradas del usuario._rigid.velocity
: Permite cambiar la velocidad del objeto.[SerializeField]
: Tiene el mismo efecto que poner la variablepublic
. Permite modificar la variable desde la interfaz de usuario de Unity.GetComponent<Rigidbody2D>
: Devuelve una referencia al tipo de objeto definido dentro del mismo objeto.GetAxis("horizontal")
: Variable predefinida por el entorno que permite capturar el evento de las fechas del teclado izquierda y derecha.
Salto
[SerializeField] float _fuerzaSalto = 5f;
private Rigidbody2D _rigid;
private bool _isJump = false;
// Start is called before the first frame update
void Start()
{
_rigid = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.Space))
_isJump = true;
else
_isJump = false;
}
private void FixedUpdate()
{
if (_isJump)
{
_rigid.AddForce(new Vector2(0, _fuerzaSalto));
}
}
AddForce()
: Añade una fuerza en la dirección indicada al componente_rigid
.Input.GetKey(KeyCode.Space)
: Captura el evento click definido.
Comprobar suelo
Para saltar hay que comprobar que el personaje está tocando el suelo. Lo podemos comprobar de tres formas
- Poniendo un objeto a los pies del personaje, obteniendo su compontente
transform
y calculando un círculo con algunos parámetros.
private bool ComprobarSuelo1()
{
return Physics2D.OverlapCircle(comprobadorSuelo.position, comprobadorRadio, mascaraSuelo);
}
- Cálculo mediante un rayo vertical partiendo del centro del objeto.
Debug.DrawRay()
al pasarle los mismo valores que aPhysics2D.RayCast()
nos permite visualizar donde está el rayo.
private bool ComprobarSuelo2()
{
RaycastHit2D raycastHit = Physics2D.Raycast(transform.position, Vector2.down, distanciaSuelo, mascaraSuelo);
Debug.DrawRay(transform.position, Vector2.down, Color.red);
if (raycastHit.collider != null)
{
return true;
}
return false;
}
- Cálculo mediante una caja. En vez de crear un rayo se crea una caja donde se desee. El método
BoxCast()
está definido en el script de GitHub y sirve para visualizar el espacio ocupado.
private bool ComprobarSuelo3()
{
// parámetros: centro, tamaño, ángulo, dirección, distancia?, layer
BoxCast(new Vector2(transform.position.x, transform.position.y - 0.9f), new Vector2(2f,0.5f), 0f, new Vector2(-200, -200), 200f, mascaraSuelo);
return Physics2D.BoxCast(new Vector2(transform.position.x, transform.position.y - 0.9f), new Vector2(2f, 0.5f), 0f, new Vector2(-200, -200), 200f, mascaraSuelo);
}
Ejemplo de ComprobarSuelo2()
y ComprobarSuelo3()
: