Movimentação 3D
3 participantes
Página 1 de 1
Movimentação 3D
meu personagem não está dando os dois pulos e ele não está caindo de forma rápida, está caindo muito lentamente.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
Rigidbody rb;
//↓↓↓↓
public float velocidade;
public int inMoviment = 0;
//↑↑↑↑
//↓↓↓↓
public Vector3 direcaoDoPulo = new Vector3(0, 1, 0);
public float distanciaDoChao = 1, forcaDoPulo = 7, tempoPorPulo = 1;
public LayerMask LayersNaoIgnoradas = -1;
private bool estaNoChao, pulou1, pulou2, podePular;
//↑↑↑↑
public int vida = 1;
void Start()
{
rb = GetComponent<Rigidbody>();
pulou1 = pulou2 = false;
podePular = true;
}
void Update()
{
#region Movimentação
if (Input.GetKeyDown(KeyCode.W))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.W))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.D))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.D))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.S))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.S))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.A))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.A))
{
inMoviment = 0;
}
#endregion
#region Pulo Duplo
estaNoChao = Physics.Linecast(transform.position, transform.position - Vector3.up * distanciaDoChao, LayersNaoIgnoradas);
if ((pulou1 == true || pulou2 == true) && estaNoChao == true)
{
pulou1 = pulou2 = false;
}
if (Input.GetKeyDown(KeyCode.Space) && estaNoChao == false)
{
pulou1 = true;
}
if (Input.GetKeyDown(KeyCode.Space) && estaNoChao == true && pulou1 == false && pulou2 == false && podePular == true)
{
StartCoroutine("CronometroPular");
pulou1 = true;
pulou2 = false;
rb.AddForce(direcaoDoPulo * forcaDoPulo, ForceMode.Impulse);
}
if (Input.GetKeyDown(KeyCode.Space) && estaNoChao == false && pulou1 == true && pulou2 == false && podePular == true)
{
StartCoroutine("CronometroPular");
pulou1 = true;
pulou2 = true;
rb.AddForce(direcaoDoPulo * forcaDoPulo * 2, ForceMode.Impulse);
}
#endregion
}
IEnumerator CronometroPular()
{
podePular = false;
yield return new WaitForSeconds(tempoPorPulo);
podePular = true;
}
public void FixedUpdate()
{
Vector3 Position = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
rb.velocity = Position * velocidade;
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Inimigo")
{
vida = 0;
Debug.Log("Triggered by Enemy");
}
}
}
Mozinhas2- Membro
- PONTOS : 1459
REPUTAÇÃO : 11
Idade : 22
Áreas de atuação : Unity, Blender
Respeito as regras :
Re: Movimentação 3D
Não cheguei a ver o código inteiro, mas de cara vejo isto, e isto está errado:
Nisso você está meio que dizendo o tempo todo que a velocidade no eixo Y vai ser 0...
Então a Unity tenta dar aceleração gravitacional para o seu player, e você está sempre zerando essa aceleração...
O correto seria algo assim:
- Código:
Vector3 Position = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
rb.velocity = Position * velocidade;
Nisso você está meio que dizendo o tempo todo que a velocidade no eixo Y vai ser 0...
Então a Unity tenta dar aceleração gravitacional para o seu player, e você está sempre zerando essa aceleração...
O correto seria algo assim:
- Código:
float inputX = Input.GetAxisRaw("Horizontal");
float inputZ = Input.GetAxisRaw("Vertical");
Vector3 newVelocity = new Vector3(inputX * velocidade, rb.velocity.y, inputZ * velocidade);
rb.velocity = newVelocity;
Re: Movimentação 3D
nada a ver com a pergunta, só um toque
- Código:
#region Movimentação
if (Input.GetKeyDown(KeyCode.W))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.W))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.D))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.D))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.S))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.S))
{
inMoviment = 0;
}
//
if (Input.GetKeyDown(KeyCode.A))
{
inMoviment = 1;
}
if (Input.GetKeyUp(KeyCode.A))
{
inMoviment = 0;
}
#endregion
- Código:
Vector3 Position = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos