Question by
goten920 · Feb 10, 2016 at 08:44 PM ·
playerplatformer
2d Plataform Player Walking on the Wall c#
I'm Brazilian, my english is bad, sorry. Help me, my player Walking on the Wall, i use the Horizontal Input. My player gets stuck on the wall and falls to stop walking. I think I need to add Right and Left, my code c#:
using UnityEngine;
using System.Collections;
public class HeroBehavior : MonoBehaviour
{
public Rigidbody2D platforma;
Animator animator;
float axis;
//Verifica se o personagem esta' olhando para o lado direito.
bool ladoDireito = true;
//Velocidade do personagem
Vector2 velocidade;
//Velocidade ma'xima que o personagem pode correr.
public float MaxVelocidade = 10;
bool noChao = false;
public Transform chaoCheck;
float chaoRadius = 0.2f;
public LayerMask oQueEChao;
void Start()
{
//Inicializamos o Componente Animator para podermos trabalhar com os parametros que criamos.
animator = GetComponent<Animator>();
}
// Executado em sincronismo com a fisica do jogo.
void FixedUpdate()
{
noChao = Physics2D.OverlapCircle(chaoCheck.position, chaoRadius, oQueEChao);
animator.SetBool("NoChao", noChao);
animator.SetFloat("VelocidadeVertical", rigidbody2D.velocity.y);
// Seta a varia'vel axis para o valor recebido quando o jogador preciona algum direcional.
// O Input.GetAxis deve ser usado porque suporta as setas do teclado, controles e joysticks.
axis = Input.GetAxis("Horizontal");
//Viramos o personagem de acordo com o valor da varia'vel axis
if (axis > 0 && !ladoDireito)
Flip();
else if (axis < 0 && ladoDireito)
Flip();
//Setamos a variavel velocidade.
if (platforma != null)
velocidade = new Vector2(platforma.velocity.x + (axis * MaxVelocidade), rigidbody2D.velocity.y);
else
velocidade = new Vector2(axis * MaxVelocidade, rigidbody2D.velocity.y);
//Alteramos o parametro Velocidade que colocamos no animator para a velocidade do personagem.
//Como nao importa se e' positivo ou negativo, usamos a funcao Mathf.Abs para pegar o valor absoluto (sem sinal).
animator.SetFloat("Velocidade", Mathf.Abs(axis));
//Por ultimo alteramos a velocidade do personagem para gerar o movimento
rigidbody2D.velocity = velocidade;
}
//Viramos o personagem para o lado que o jogador esta' apertando.
void Flip()
{
ladoDireito = !ladoDireito;
Vector2 novoScale = new Vector2(transform.localScale.x * -1, transform.localScale.y);
transform.localScale = novoScale;
}
void Update()
{
if (noChao && Input.GetButtonDown("Jump"))
{
animator.SetBool("NoChao", false);
rigidbody2D.AddForce(new Vector2(0, 700));
}
}
}
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612063732im_/https://answers.unity.com/themes/thub/images/avi.jpg)