[TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
+3
AnderGames
bartyz
MarcosSchultz
7 participantes
Página 1 de 1
[TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Fala galera, estou trazendo este script que serve praticamente em tudo que é jogo 3D... Basta jogar ele no objeto e configurar as variáveis...
O Vetor "direcaoDoPulo" diz a direção que será aplicada força para o pulo... quando estiver em 0, nenhuma força será aplicada...
O enum "LayersNaoIgnoradas", diz quais layers que servirão para detectar o chão... se você desmarcar alguma, ela não será detectada como chão pelo personagem.
O resto acho que é meio intuitivo... Basta configurar e apertar espaço para sair pulando por ai :D
O Vetor "direcaoDoPulo" diz a direção que será aplicada força para o pulo... quando estiver em 0, nenhuma força será aplicada...
O enum "LayersNaoIgnoradas", diz quais layers que servirão para detectar o chão... se você desmarcar alguma, ela não será detectada como chão pelo personagem.
O resto acho que é meio intuitivo... Basta configurar e apertar espaço para sair pulando por ai :D
- Código:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
public class Pulo : MonoBehaviour {
public Vector3 direcaoDoPulo = new Vector3 (0, 1, 0);
[Range(1,20)]
public float forcaDoPulo = 5.0f;
[Range(0.5f,10.0f)]
public float DistanciaDoChao = 1;
[Range(0.5f,5.0f)]
public float TempoPorPulo = 1.5f;
public LayerMask LayersNaoIgnoradas = -1;
private bool estaNoChao, contar = false;
private float cronometro = 0;
private Rigidbody corpoRigido;
void Start(){
corpoRigido = GetComponent<Rigidbody>();
}
void Update(){
estaNoChao = Physics.Linecast (transform.position, transform.position - Vector3.up*DistanciaDoChao, LayersNaoIgnoradas);
if(Input.GetKeyDown(KeyCode.Space) && estaNoChao == true && contar == false){
corpoRigido.AddForce(direcaoDoPulo * forcaDoPulo, ForceMode.Impulse);
estaNoChao = false;
contar = true;
}
if (contar == true) {
cronometro += Time.deltaTime;
}
if (cronometro >= TempoPorPulo) {
contar = false;
cronometro = 0;
}
}
}
Última edição por MarcosSchultz em Ter Jun 07, 2016 9:15 pm, editado 1 vez(es)
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Valeu Deu Certinho, Mais Me Tira Uma Duvida Se eu Quiser Que Ele Vá um Pouco Para Frente Como Faço ?
bartyz- Membro
- PONTOS : 3460
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
bartyz escreveu:Valeu Deu Certinho, Mais Me Tira Uma Duvida Se eu Quiser Que Ele Vá um Pouco Para Frente Como Faço ?
O script já é para você mesmo configurar, basta alterar a variável "direcaoDoPulo"
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Malz nao tinha percebido, mais deu um erro vai na hora de mudar a direção do pulo eu coloco no eixo z mais ele nao segui o eixo z do meu personagem mais sim da tela
exemplo:
coloquei 1 de eixo z ate quando meu personagem esta de costa ele da um pulo pra frente nao na direção que o personagem esta
quando estou de lado e pulo no eixo z nao na posição que meu personagem esta
como arrumar isso ?
exemplo:
coloquei 1 de eixo z ate quando meu personagem esta de costa ele da um pulo pra frente nao na direção que o personagem esta
quando estou de lado e pulo no eixo z nao na posição que meu personagem esta
como arrumar isso ?
bartyz- Membro
- PONTOS : 3460
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
bartyz escreveu:Malz nao tinha percebido, mais deu um erro vai na hora de mudar a direção do pulo eu coloco no eixo z mais ele nao segui o eixo z do meu personagem mais sim da tela
exemplo:
coloquei 1 de eixo z ate quando meu personagem esta de costa ele da um pulo pra frente nao na direção que o personagem esta
quando estou de lado e pulo no eixo z nao na posição que meu personagem esta
como arrumar isso ?
Não é erro, o script é feito assim... Eu uso posição global para fazer o AddForce. se quiser de acordo com o Player, tem que pegar a posição local dele, do transform
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
no meu fica dando um problema de quando o personagem está na beirada ele fica bugado e não pula, e em se mexe...
Meu Script
Meu Script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[AddComponentMenu("Personagem/MovimentacaoBase")]
[RequireComponent(typeof(CapsuleCollider))]
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(Animator))]
public class BaseDaMovimentacao : MonoBehaviour {
Animator Animation;
CharacterController CharacterController;
Rigidbody CorpoRigido;
Vector3 gravidade;
Vector3 GirarCorpo;
//public bool GirarCorpoDevagar;
//public float TempoGirarCorpo;
[System.Serializable]
public class Anim
{
public string AnimAndar = "Andar";
public string AnimVirar = "Virar";
public string AnimNoChao = "NoChao";
public string AnimNoAr = "NoAr";
[System.Serializable]
public class Ipt
{
public float Andar;
public float Virar;
public bool NoChao;
public bool NoAr;
}
[SerializeField]
public Ipt Input;
}
[SerializeField]
public Anim Animaçoes;
[System.Serializable]
public class Pulo
{
public LayerMask Pular;
public float DistanciaDoChao;
public float ForcaDoPulo;
}
[SerializeField]
public Pulo ConfigPulo;
[System.Serializable]
public class Cabeca
{
public GameObject OssoCabeça;
public GameObject MouseLook;
}
[SerializeField]
public Cabeca MoverCabeca;
[System.Serializable]
public class Rot
{
public bool PrimeiraPessoa = true;
public bool TerceiraPessoa;
}
//[SerializeField]
//public Rot Rotacionar;
[System.Serializable]
public class Fis
{
public PhysicMaterial MaterialNoAR;
public PhysicMaterial MaterialNoChao;
}
[SerializeField]
public Fis Fisica;
// Use this for initialization
void Start () {
CharacterController = GetComponent<CharacterController>();
CorpoRigido = GetComponent<Rigidbody>();
Animation = GetComponent<Animator>();
}
void Update()
{
//Girar Corpo
GirarCorpo = new Vector3(0, MoverCabeca.MouseLook.transform.eulerAngles.y, 0);
transform.eulerAngles = Vector3.Lerp(transform.eulerAngles, GirarCorpo, 100 * Time.deltaTime);
//Mover Cabeça
MoverCabeca.OssoCabeça.transform.eulerAngles = MoverCabeca.MouseLook.transform.eulerAngles;
//Pular
Animaçoes.Input.NoChao = Physics.Linecast(transform.position, transform.position - Vector3.up * ConfigPulo.DistanciaDoChao, ConfigPulo.Pular);
Debug.DrawLine(transform.position, transform.position - Vector3.up * ConfigPulo.DistanciaDoChao);
if (Input.GetKey(KeyCode.Space) && Animaçoes.Input.NoChao == true)
{
Animaçoes.Input.NoAr = true;
CorpoRigido.AddForce(0, 1, 0 * ConfigPulo.ForcaDoPulo, ForceMode.Impulse);
}
if (Animaçoes.Input.NoChao == true)
{
GetComponent<Animator>().applyRootMotion = true;
StartCoroutine(TempoDePulo());
GetComponent<CapsuleCollider>().material = Fisica.MaterialNoChao;
}
else
{
GetComponent<Animator>().applyRootMotion = false;
GetComponent<CapsuleCollider>().material = Fisica.MaterialNoAR;
}
//Andar
Animaçoes.Input.Andar = Input.GetAxis("Horizontal");
Animaçoes.Input.Virar = Input.GetAxis("Vertical");
//Animar
Animation.SetFloat(Animaçoes.AnimAndar, Animaçoes.Input.Andar);
Animation.SetFloat(Animaçoes.AnimVirar, Animaçoes.Input.Virar);
Animation.SetBool(Animaçoes.AnimNoChao, Animaçoes.Input.NoChao);
Animation.SetBool(Animaçoes.AnimNoAr, Animaçoes.Input.NoAr);
}
IEnumerator TempoDePulo()
{
yield return new WaitForSeconds(0.5f);
Animaçoes.Input.NoAr = false;
}
}
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Marcos,o seu script tem um bug por causa do raycast,até mesmo eu tava falando sobre isso num tópico,o bug é o mesmo que o script roller ball do standard assets tem,como usa raycast,se ficar pressionando varias vezes,vai ter uma hora que o raycast vai fazer com que o objeto pule no ar,porque o raycast detectou o chão ainda no ar,eu uso um script de pulo que faz com que isso não aconteça,eu vi num tutorial no fórum da unity,ele usa raycast mas o raycast é disparado depois da borda do colisor,olha vou mandar o script(js)MarcosSchultz escreveu:bartyz escreveu:Malz nao tinha percebido, mais deu um erro vai na hora de mudar a direção do pulo eu coloco no eixo z mais ele nao segui o eixo z do meu personagem mais sim da tela
exemplo:
coloquei 1 de eixo z ate quando meu personagem esta de costa ele da um pulo pra frente nao na direção que o personagem esta
quando estou de lado e pulo no eixo z nao na posição que meu personagem esta
como arrumar isso ?
Não é erro, o script é feito assim... Eu uso posição global para fazer o AddForce. se quiser de acordo com o Player, tem que pegar a posição local dele, do transform
- Código:
var distToGround: float;
var jumpSpeed: float = 8;
function Start(){
// get the distance to ground
distToGround = GetComponent.<Collider>().bounds.extents.y;//o negocio ta qui e na function is grounded
}
function IsGrounded(): boolean {
return Physics.Raycast(transform.position, -Vector3.up, distToGround + 0.1);
}
function Update () {
if (Input.GetKey(KeyCode.Space) && IsGrounded()){
GetComponent.<Rigidbody>().velocity.y = jumpSpeed;
}
}
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Tem várias maneiras de resolver isto... uma delas é encurtar a distância do raycast através da variável "Distancia do chao".
Outra maneira é usar a void OnCollisionStay para detectar se está colidindo.
Outra maneira ainda é usar o comando isGrounded do chacacterController.
Outra maneira é usar a void OnCollisionStay para detectar se está colidindo.
Outra maneira ainda é usar o comando isGrounded do chacacterController.
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Eu tentei colocar esse sistema de pulo so que nao esta funcionando por que ja tenho um script de movimentaçao com eu faria para adicionar esse pulo ou outro sistema de pulo sem modificar meu script de movimentaçao?
Duarte- Programador
- PONTOS : 3353
REPUTAÇÃO : 97
Idade : 24
Áreas de atuação : Programação
Desenvolvedor Android
Respeito as regras :
Gabriel César O- Profissional
- PONTOS : 3985
REPUTAÇÃO : 217
Idade : 23
Áreas de atuação : (ESTUDANDO SEGUNDO GRAU), (FUÇANDO NO UNITY)){
Respeito as regras :
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
Duarte escreveu:Eu tentei colocar esse sistema de pulo so que nao esta funcionando por que ja tenho um script de movimentaçao com eu faria para adicionar esse pulo ou outro sistema de pulo sem modificar meu script de movimentaçao?
Refaz o script de movimentação ué... mas depende de como ele é feito.
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
eu coloquei o script config so q cuando eu inicio o jogo aperto space mais n pula oq é ?
minha cfg
direção do pulo: X:0 Y:1 Z:0
força do pulo: 14.3
distancia do chão: 5.75
tempo pulo: 2.08
minha cfg
direção do pulo: X:0 Y:1 Z:0
força do pulo: 14.3
distancia do chão: 5.75
tempo pulo: 2.08
jogador432- Iniciante
- PONTOS : 2039
REPUTAÇÃO : 1
Respeito as regras :
Re: [TUTORIAL] Script de pulo para jogos 3D em geral (Unity - C#)
jogador432 escreveu:eu coloquei o script config so q cuando eu inicio o jogo aperto space mais n pula oq é ?
minha cfg
direção do pulo: X:0 Y:1 Z:0
força do pulo: 14.3
distancia do chão: 5.75
tempo pulo: 2.08
Depende da massa do seu rigidbody e também se ele está conseguindo detectar o chão ou não.
Tópicos semelhantes
» [TUTORIAL] Sistema de pulo ( com linecast ) para jogos 2D
» [TUTORIAL] Unity 5 - Pulo Duplo (Double Jump) para 2D e 3D
» [Unity 5] script de perseguição para jogos de terror
» Dúvidas em geral - Como faço para colocar os gráficos estilo jogos antigos?
» [TUTORIAL] Camera que segue o Player para jogos 2D e 2.5D
» [TUTORIAL] Unity 5 - Pulo Duplo (Double Jump) para 2D e 3D
» [Unity 5] script de perseguição para jogos de terror
» Dúvidas em geral - Como faço para colocar os gráficos estilo jogos antigos?
» [TUTORIAL] Camera que segue o Player para jogos 2D e 2.5D
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos