Movimentaçao por "Slide", Estilo RogueLike
Página 1 de 1
Movimentaçao por "Slide", Estilo RogueLike
Bom dia, Boa noite rapaziada.
Olha so, sei que ate a propria unity tem tutorial sobre isso, ate consegui fazer funcionar parcialmente, enxuguei oque pude pra mim conseguir entender o funcionamento, mas ficou muito bugado, o personagem fica travando e voltando, as vezes trava e nao anda mais, somente quando solta a Tecla e pressiona denovo.
Se alguem se dispor a dar uma lida no meu codigo e me dar uma opniao eu agradeço.
Olha so, sei que ate a propria unity tem tutorial sobre isso, ate consegui fazer funcionar parcialmente, enxuguei oque pude pra mim conseguir entender o funcionamento, mas ficou muito bugado, o personagem fica travando e voltando, as vezes trava e nao anda mais, somente quando solta a Tecla e pressiona denovo.
Se alguem se dispor a dar uma lida no meu codigo e me dar uma opniao eu agradeço.
- Código:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices.WindowsRuntime;
using UnityEngine;
public class Player1 : MonoBehaviour
{
public float speed;
public bool walking = false;
int b;
int c;
Rigidbody2D rgb2D;
void Start()
{
rgb2D = GetComponent<Rigidbody2D>();
}
void Update()
{
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
b = (int)x;
c = (int)y;
if (!walking)
{//Verificaçao para chamar somente um movimento por vez, vertical ou horizontal
if (b != 0)
{
Movimento(b, 0);
}
else if (c != 0)
{
Movimento(0, c);
}
}
}
void Movimento(int b, int c)
{
walking = true;
Vector2 start = transform.position;// define o ponto de inicio, e o de destino sendo 1 unidade a mais que o de inicio.
Vector2 end = start + new Vector2(b, c);
StartCoroutine(Movimentacao(end));
}
protected IEnumerator Movimentacao(Vector3 end)
{
float tempo = 0;
float tempoE = 0;
float sqrRemainingDistance = (transform.position - end).sqrMagnitude;
tempo = Time.time;
tempoE = Time.time;
while ((sqrRemainingDistance > float.Epsilon) && walking == true)
{
Vector3 newPostion = Vector3.MoveTowards(rgb2D.position, end, speed * Time.deltaTime);
rgb2D.MovePosition(newPostion);
sqrRemainingDistance = (transform.position - end).sqrMagnitude;
tempoE = Time.time;
//Verificaçao para nao ocorrer de travar dentro do while,
if (((tempoE - tempo) > (4.2f / speed)) && (sqrRemainingDistance < 0.1f))
{
walking = false;
yield return null;
Debug.Log(tempoE + " - " + tempo + " = " + (tempoE - tempo));
}
yield return null;
}
tempo = 0;
tempoE = 0;
rgb2D.MovePosition(end);
//Comandos para dar certeza que o ponto final vai ser uma unidade inteira
//Estava tendo problemas de acabar ficando em unidades float, como 20.3 x 3.7y, oque eu nao quero que aconteca.
float x = Mathf.Round(transform.position.x);
float y = Mathf.Round(transform.position.y);
rgb2D.MovePosition(new Vector2(x, y));
walking = false;
}
}
IssacDB- Iniciante
- PONTOS : 1728
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» Movimentação estilo MarioGalaxy
» Como fazer movimentação no estilo tunnel Rush
» Movimentação
» Character Controller Slide
» Problema com movimento slide em jogo Android
» Como fazer movimentação no estilo tunnel Rush
» Movimentação
» Character Controller Slide
» Problema com movimento slide em jogo Android
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos