Collider invadindo outro!! Player atravessando parede.
5 participantes
Página 1 de 1
Collider invadindo outro!! Player atravessando parede.
Bom... Criei um script para movimentação de um objeto(um player), no entanto, "saporra" não para de andar nem em colisão.
código
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movimento : MonoBehaviour {
public static float _velocidade = 0;
public static bool _andando = false;
public static bool _correndo = false;
void Start () {
}
void Update () {
if (Input.GetAxisRaw ("Vertical") == 0 && Input.GetAxisRaw ("Horizontal") == 0) {
_andando = false;
}else {
if (Salto._noChao) {
if (Input.GetKey(KeyCode.LeftShift)) {
_correndo = true;
_andando = false;
} else {
_correndo = false;
_andando = true;
}
}
}
//##################----MOVIMENTAÇÃO----################### INICIO
if (Input.GetAxisRaw("Horizontal") == 0) {
if (Input.GetAxisRaw ("Vertical") >= 1) {
transform.Translate (new Vector3(0, 0,_velocidade * Time.deltaTime));
}
if (Input.GetAxisRaw("Vertical") <= -1) {
transform.Translate (new Vector3(0, 0,-_velocidade * Time.deltaTime));
}
}
if (Input.GetAxisRaw("Vertical") == 0) {
if (Input.GetAxisRaw("Horizontal") >= 1) {
transform.Translate (new Vector3(Time.deltaTime * _velocidade, 0,0));
}
if(Input.GetAxisRaw("Horizontal") <= -1){
transform.Translate (new Vector3(Time.deltaTime * -_velocidade, 0,0));
}
}
//CIMA-DIREITA
if (Input.GetAxisRaw("Vertical") >= 1 && Input.GetAxisRaw("Horizontal") >= 1) {
transform.Translate (new Vector3(0, 0,(_velocidade / 2) * Time.deltaTime));
transform.Translate (new Vector3(Time.deltaTime * (_velocidade / 2), 0,0));
}
//CIMA-ESQUERDA
if (Input.GetAxisRaw("Vertical") >= 1 && Input.GetAxisRaw("Horizontal") <= -1) {
transform.Translate (new Vector3(0, 0,(_velocidade / 2) * Time.deltaTime));
transform.Translate (new Vector3(Time.deltaTime * (-_velocidade / 2), 0,0));
}
//BAIXO-DIREITA
if (Input.GetAxisRaw("Vertical") <= -1 && Input.GetAxisRaw("Horizontal") >= 1) {
transform.Translate (new Vector3(0, 0,(-_velocidade / 2) * Time.deltaTime));
transform.Translate (new Vector3(Time.deltaTime * (_velocidade / 2), 0,0));
}
//BAIXO-ESQUERDA
if (Input.GetAxisRaw("Vertical") <= -1 && Input.GetAxisRaw("Horizontal") <= -1) {
transform.Translate (new Vector3(0, 0,(-_velocidade / 2) * Time.deltaTime));
transform.Translate (new Vector3(Time.deltaTime * (-_velocidade / 2), 0,0));
}
//##################----MOVIMENTAÇÃO----################### FINAL
}
}
Lembrando que as variaveis estão "static" pro level designer modifica-las em um unico script(que não é esse... obvio).
Vídeo que demonstra o bug
parkournick- Membro
- PONTOS : 3202
REPUTAÇÃO : 3
Idade : 22
Áreas de atuação : C#, Python
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
Isto se deve ao fato que NUNCA se deve usar o Translate para movimentação, seja como for!
Use o Rigidbody.velocity. Além disso, o teu código está muito grande amigo, eu vou ver o que eu posso fazer para aprimorá-lo :D
Use o Rigidbody.velocity. Além disso, o teu código está muito grande amigo, eu vou ver o que eu posso fazer para aprimorá-lo :D
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
Souris escreveu:Isto se deve ao fato que NUNCA se deve usar o Translate para movimentação, seja como for!
Use o Rigidbody.velocity. Além disso, o teu código está muito grande amigo, eu vou ver o que eu posso fazer para aprimorá-lo :D
nunca nem vi esse tal de "Rigibody.velocity", mas vlw pela dica! vou pesquisar aqui e substituir o Translate por isso ai...
é nois
parkournick- Membro
- PONTOS : 3202
REPUTAÇÃO : 3
Idade : 22
Áreas de atuação : C#, Python
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
Só com este código acho que já faz uma movimentação legal!
(Depois é só mudar algumas float's e adicionar o pulo, obviamente). :D
(Depois é só mudar algumas float's e adicionar o pulo, obviamente). :D
- Código:
Rigidbody rb;
void Start(){
rb = GetComponent<Rigidbody>();
}
void Update(){
float plusSpeed;
if (Input.GetKey(KeyCode.LeftShift))
plusSpeed = 1.5f;
else
plusSpeed = 1;
var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
rb.velocity = (x,rb.velocity.y,z);
}
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
:affraid: Fiquei 1 ano sem programar, fiz aquele código pra dar uma relembrada... agora eu percebi como perdi a pratica!Souris escreveu:Só com este código acho que já faz uma movimentação legal!
(Depois é só mudar algumas float's e adicionar o pulo, obviamente). :D
- Código:
Rigidbody rb;
void Start(){
rb = GetComponent<Rigidbody>();
}
void Update(){
float plusSpeed;
if (Input.GetKey(KeyCode.LeftShift))
plusSpeed = 1.5f;
else
plusSpeed = 1;
var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
rb.velocity = (x,rb.velocity.y,z);
}
parkournick- Membro
- PONTOS : 3202
REPUTAÇÃO : 3
Idade : 22
Áreas de atuação : C#, Python
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
ja que vc esta usando o script em teste,poderia ate continuar com o Translate, adicionando apenas um Physics.Raycast para detectar se colidiu ou nao com uma parede usando uma variavel booleana,
Re: Collider invadindo outro!! Player atravessando parede.
Po, mas seria + trabalho e menos optimização assim, só acho :p
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
Souris escreveu:Só com este código acho que já faz uma movimentação legal!
(Depois é só mudar algumas float's e adicionar o pulo, obviamente). :D
- Código:
Rigidbody rb;
void Start(){
rb = GetComponent<Rigidbody>();
}
void Update(){
float plusSpeed;
if (Input.GetKey(KeyCode.LeftShift))
plusSpeed = 1.5f;
else
plusSpeed = 1;
var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
rb.velocity = (x,rb.velocity.y,z);
}
se caso usar rigidbody,add um Physics Material no objeto parede etc para nao grudar na parede,caso grude quando pula, boa noite,
Última edição por felipehobs1 em Sáb Fev 10, 2018 10:02 pm, editado 1 vez(es) (Motivo da edição : correçao de ortografia)
Re: Collider invadindo outro!! Player atravessando parede.
Não, não amigo.. O Rigidbody.velocity não precisa dos Physics Material, pois é só não ativar o Freeze Rotation nele (óbviamente, este caso só serve para o eixo Y, já que os outros não serão usados (Espero)..).
OBS.: Acho que você se confundiu com o Rigidbody.AddForce (Eu não sei muito sobre este AddForce).
>_O Espero que eu não tenha sido grosso ou falado alguma besteira!
OBS.: Acho que você se confundiu com o Rigidbody.AddForce (Eu não sei muito sobre este AddForce).
>_O Espero que eu não tenha sido grosso ou falado alguma besteira!
Última edição por Souris em Sáb Fev 10, 2018 10:04 pm, editado 1 vez(es) (Motivo da edição : Erro em parte de explicação do que se deve fazer.)
NKKF- ProgramadorMaster
- PONTOS : 4817
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
Souris escreveu:Não, não amigo.. O Rigidbody.velocity não precisa dos Physics Material, pois é só não ativar o Freeze Rotation nele (óbviamente, este caso só serve para o eixo Y, já que os outros não serão usados (Espero)..).
OBS.: Acho que você se confundiu com o Rigidbody.AddForce (Eu não sei muito sobre este AddForce).
>_O Espero que eu não tenha sido grosso ou falado alguma besteira!
imagina,tou tranquilo,abraço
Re: Collider invadindo outro!! Player atravessando parede.
Rapaz eu ia abrir um tópico sobre o player garrando na parede agora... vlw por prever o bug kkk :Dfelipehobs1 escreveu:Souris escreveu:Só com este código acho que já faz uma movimentação legal!
(Depois é só mudar algumas float's e adicionar o pulo, obviamente). :D
- Código:
Rigidbody rb;
void Start(){
rb = GetComponent<Rigidbody>();
}
void Update(){
float plusSpeed;
if (Input.GetKey(KeyCode.LeftShift))
plusSpeed = 1.5f;
else
plusSpeed = 1;
var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
rb.velocity = (x,rb.velocity.y,z);
}
se caso usar rigidbody,add um Physics Material no objeto parede etc para nao grudar na parede,caso grude quando pula, boa noite,
parkournick- Membro
- PONTOS : 3202
REPUTAÇÃO : 3
Idade : 22
Áreas de atuação : C#, Python
Respeito as regras :
Re: Collider invadindo outro!! Player atravessando parede.
O transform.Translate só deve ser usado em objetos que você não quer aplicar física.. Por exemplo, um passaro voando distante do player. Para objetos como o Player o melhor a fazer é movimentar atráves de um RigidBody ou CharacterController. Eu pessoalmente prefiro o RigidBody kkkk
Re: Collider invadindo outro!! Player atravessando parede.
[list=linenums]
[*]Rigidbody rb;
[*]void Start(){
[*]rb = GetComponent<Rigidbody>();
[*]}
[*]void Update(){
[*]float plusSpeed;
[*]if (Input.GetKey(KeyCode.LeftShift))
[*]plusSpeed = 1.5f;
[*]else
[*]plusSpeed = 1;
[*]var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
[*]var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
[*]rb.velocity = (x,rb.velocity.y,z);
[*]}
[/list]
[*]Rigidbody rb;
[*]void Start(){
[*]rb = GetComponent<Rigidbody>();
[*]}
[*]void Update(){
[*]float plusSpeed;
[*]if (Input.GetKey(KeyCode.LeftShift))
[*]plusSpeed = 1.5f;
[*]else
[*]plusSpeed = 1;
[*]var x = Input.GetAxis("Horizontal") * Time.deltaTime * plusSpeed * 3;
[*]var z = Input.GetAxis("Vertical") * Time.deltaTime * plusSpeed * 3;
[*]rb.velocity = (x,rb.velocity.y,z);
[*]}
[/list]
70correr- Iniciante
- PONTOS : 1480
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [ajuda] Player atravessando parede
» [RESOLVIDO] Inimigo atravessando parede
» SPOLIGHT ATRAVESSANDO PAREDE...NO CASO FEITA POR BLOCAGEM(CUBE)
» 3D, Player gruda na parede
» queria aprender a fazer O inimigo subir uma parede (pular pro outro lado)
» [RESOLVIDO] Inimigo atravessando parede
» SPOLIGHT ATRAVESSANDO PAREDE...NO CASO FEITA POR BLOCAGEM(CUBE)
» 3D, Player gruda na parede
» queria aprender a fazer O inimigo subir uma parede (pular pro outro lado)
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos