3D, Player gruda na parede
+2
Priste_Hell
Valakinhas
6 participantes
Página 1 de 1
3D, Player gruda na parede
estou utilizando rb velocity quando o personagem anda contra a parede ele não cai fica bugado grudado nela, como eu posso estar resolvendo isso ?
Valakinhas- Avançado
- PONTOS : 3180
REPUTAÇÃO : 9
Respeito as regras :
Re: 3D, Player gruda na parede
Crie um Physic material e coloque tudo 0
Priste_Hell- Avançado
- PONTOS : 2979
REPUTAÇÃO : 17
Idade : 23
Áreas de atuação : Programador e roteirista.
Respeito as regras :
Re: 3D, Player gruda na parede
nao funcionouPriste_Hell escreveu:Crie um Physic material e coloque tudo 0
esse e meu script, ate achei estranho o physics material nao funcionar
Valakinhas- Avançado
- PONTOS : 3180
REPUTAÇÃO : 9
Respeito as regras :
Re: 3D, Player gruda na parede
Valakinhas escreveu:nao funcionouPriste_Hell escreveu:Crie um Physic material e coloque tudo 0
https://hastebin.com/iquwifuran.cs
esse e meu script, ate achei estranho o physics material nao funcionar
Valakinhas- Avançado
- PONTOS : 3180
REPUTAÇÃO : 9
Respeito as regras :
Re: 3D, Player gruda na parede
Mas é óbvio que não, você está alterando a velocidade dele, ehueheueheueh.
Pense assim, você tem o seu Rigidbody.velocity, mas provavelmente você está passando um novo vetor para ele, então todos os cálculos de física serão ignorados.
O que você pode fazer é somar os inputs ao velocity atual do rigidbody para evitar esse erro, mas para isto preciso ver o seu código.
Pense assim, você tem o seu Rigidbody.velocity, mas provavelmente você está passando um novo vetor para ele, então todos os cálculos de física serão ignorados.
O que você pode fazer é somar os inputs ao velocity atual do rigidbody para evitar esse erro, mas para isto preciso ver o seu código.
Re: 3D, Player gruda na parede
MarcosSchultz escreveu:Mas é óbvio que não, você está alterando a velocidade dele, ehueheueheueh.
Pense assim, você tem o seu Rigidbody.velocity, mas provavelmente você está passando um novo vetor para ele, então todos os cálculos de física serão ignorados.
O que você pode fazer é somar os inputs ao velocity atual do rigidbody para evitar esse erro, mas para isto preciso ver o seu código.
Então, tive o mesmo problema do proprietário do post.
Adicionei o Material de Física 2D no Player para corrigir essa parte de colisão que ficava bugando.
Entretanto, tentei fazer essa soma dos inputs como sugeriu, mas não resolveu. Meu player fica se movendo no eixo x sozinho por um tempo, e depois para.
Isso tem relação com a física, pois quando removo o material, ele se comporta da forma correta.
Como de fato faço essa soma do input ao velocity atual?
Codigo referente a essa parte de movimentação:
- Código:
using UnityEngine;
public class Player : MonoBehaviour {
private Rigidbody2D Rigidbody2D;
private float Horizontal;
private float Vertical;
public float Speed;
void Start() {
Rigidbody2D = GetComponent<Rigidbody2D>();
}
void FixedUpdate() {
if (Horizontal != 0 && Vertical >= 0) {
Rigidbody2D.velocity = new Vector2(Horizontal * Speed, Rigidbody2D.velocity.y);
}
}
}
Esse é uma parte do script, ai se achar necessário o script todo, posto sem problemas.
Tentei somar o transform.position.x + Horizontal * Speed no Rigidbody2D.velocity, mas sem sucesso.
Grato pela atenção.
Inequalis- Iniciante
- PONTOS : 1662
REPUTAÇÃO : 1
Respeito as regras :
Re: 3D, Player gruda na parede
não mexa com o velocity diretamente, esse tipo de problema é causado por conta dele, seu player vai ficar grudado pois a velocidade dele é no sentido da parede, nem mesmo a gravidade do jogo vai funcionar direito.
utilize o Move Position pra isso, seu player vai se mover como se tivesse mexendo no transform, mas a física ainda é respeitada.
não precisa de physics material custom nem qualquer outra gambiarra.
utilize o Move Position pra isso, seu player vai se mover como se tivesse mexendo no transform, mas a física ainda é respeitada.
não precisa de physics material custom nem qualquer outra gambiarra.
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: 3D, Player gruda na parede
Fagner escreveu:não mexa com o velocity diretamente, esse tipo de problema é causado por conta dele, seu player vai ficar grudado pois a velocidade dele é no sentido da parede, nem mesmo a gravidade do jogo vai funcionar direito.
utilize o Move Position pra isso, seu player vai se mover como se tivesse mexendo no transform, mas a física ainda é respeitada.
não precisa de physics material custom nem qualquer outra gambiarra.
Entendo. Fiz uma alteração usando o MovePosition, mas continuo tendo o problema de grudar na parede (removi o Material do Player). Na questão do pulo, continuo usando o AddForce ou também não é uma boa fazer dessa forma?
Inequalis- Iniciante
- PONTOS : 1662
REPUTAÇÃO : 1
Respeito as regras :
Re: 3D, Player gruda na parede
Como está implementando o novo código (justo que o problema ainda está persistindo)?!
classicandsimple- ProgramadorMaster
- PONTOS : 1270
REPUTAÇÃO : 26
Áreas de atuação : Desenvolvimento de software (iniciante com linguagem C).
Respeito as regras :
Re: 3D, Player gruda na parede
classicandsimple escreveu:Como está implementando o novo código (justo que o problema ainda está persistindo)?!
Estava assim:
- Código:
using UnityEngine;[size=14][/size][size=14][/size]public class Player : MonoBehaviour { [size=14][/size] private Rigidbody2D Rigidbody2D;[size=14][/size] private float Horizontal;[size=14][/size] private float Vertical;[size=14][/size] public float Speed;[size=14][/size][size=14][/size] void Start() { [size=14][/size] Rigidbody2D = GetComponent<Rigidbody2D>();[size=14][/size] }[size=14][/size][size=14][/size] void FixedUpdate() {[size=14][/size] if (Horizontal != 0 && Vertical >= 0) { [size=14][/size] Rigidbody2D.velocity = new Vector2(Horizontal * Speed, Rigidbody2D.velocity.y);[size=14][/size] }[size=14][/size] }[size=14][/size]}
Ai alterei para isso:
- Código:
using UnityEngine;[size=14][/size][size=14][/size]public class Player : MonoBehaviour { [size=14][/size] private Rigidbody2D Rigidbody2D;[size=14][/size] private float Horizontal;[size=14][/size] private float Vertical;[size=14][/size] public float Speed;[size=14][/size][size=14][/size] void Start() { [size=14][/size] Rigidbody2D = GetComponent<Rigidbody2D>();[size=14][/size] }[size=14][/size][size=14][/size] void FixedUpdate() {[size=14][/size] if (Horizontal != 0 && Vertical >= 0) { [size=14][/size] Rigidbody2D.MovePosition(transform.position + new Vector3(Horizontal, Vertical, 0).normalized * Speed * Time.deltaTime);[size=14][/size]
}[size=14][/size] }[size=14][/size]}
Notei uma mudança na física em relação ao velocity. É um comportamento bem diferente. A não se que tenha interpretado de forma errada, quando pulasse em relação a uma parede, a exemplo, o player não deveria ficar grudado, deveria cair automaticamente (ou não).
Inequalis- Iniciante
- PONTOS : 1662
REPUTAÇÃO : 1
Respeito as regras :
Re: 3D, Player gruda na parede
o problema é, enquanto você ficar com o dedo colado na tecla pedindo pra ir numa direção, a gravidade vai puxar pra baixo, mas o movimento da sua tecla vai ficar brigando com a gravidade, se quer que mesmo segurando a tecla contra a parede ele caia, vai ter que usar alguma coisa pra detectar que naquela direção não dá pra mover e assim zerar o input via código pra deixar a gravidade fazer o trabalho dela.
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: 3D, Player gruda na parede
Fagner escreveu:o problema é, enquanto você ficar com o dedo colado na tecla pedindo pra ir numa direção, a gravidade vai puxar pra baixo, mas o movimento da sua tecla vai ficar brigando com a gravidade, se quer que mesmo segurando a tecla contra a parede ele caia, vai ter que usar alguma coisa pra detectar que naquela direção não dá pra mover e assim zerar o input via código pra deixar a gravidade fazer o trabalho dela.
Um Raycast que sai do personagem, verificar no que ele está colidindo e limitar a movimentação. Vou ter que ajustar a questão do pulo também. Dá para continuar usando o AddForce? Como citou, essa questão ai da gravidade também impacta no pulo (por exemplo, o personagem planar apos pular).
Inequalis- Iniciante
- PONTOS : 1662
REPUTAÇÃO : 1
Respeito as regras :
Re: 3D, Player gruda na parede
O AddForce em si não diz muita coisa, tem que saber qual modo você tá usando, por exemplo, uma força considerando a massa faz sentido pra uma nave espacial, ou pra um pulo no estilo jetpack, se for um impulso desconsiderando a massa, seria idêntico a usar o Velocity do rigidbody, mas todos eles precisam desse modo de limitar quando e onde você pode usar, no seu caso tem a parede, se você tá tendo esse problema, significa que você tem controle do personagem enquanto está no ar, diferente daquele tipo de pulo que você só executa se estiver no chão (checando IsGrounded).
Se puder descrever como é seu jogo, a mecânica de movimentação, a lógica do pulo, fica mais fácil sugerir algo que faça mais sentido ao projeto.
Pelo que vejo algum tipo de limite precisa ter, já que com o modo atual só com a física funcionando do jeito padrão não está ok pra ti.
Se puder descrever como é seu jogo, a mecânica de movimentação, a lógica do pulo, fica mais fácil sugerir algo que faça mais sentido ao projeto.
Pelo que vejo algum tipo de limite precisa ter, já que com o modo atual só com a física funcionando do jeito padrão não está ok pra ti.
Fagner- Moderador
- PONTOS : 4446
REPUTAÇÃO : 667
Áreas de atuação : Modelagem 3D, Programação.
Respeito as regras :
Re: 3D, Player gruda na parede
Fagner escreveu:O AddForce em si não diz muita coisa, tem que saber qual modo você tá usando, por exemplo, uma força considerando a massa faz sentido pra uma nave espacial, ou pra um pulo no estilo jetpack, se for um impulso desconsiderando a massa, seria idêntico a usar o Velocity do rigidbody, mas todos eles precisam desse modo de limitar quando e onde você pode usar, no seu caso tem a parede, se você tá tendo esse problema, significa que você tem controle do personagem enquanto está no ar, diferente daquele tipo de pulo que você só executa se estiver no chão (checando IsGrounded).
Se puder descrever como é seu jogo, a mecânica de movimentação, a lógica do pulo, fica mais fácil sugerir algo que faça mais sentido ao projeto.
Pelo que vejo algum tipo de limite precisa ter, já que com o modo atual só com a física funcionando do jeito padrão não está ok pra ti.
Entendo. A ideia, é fazer um jogo simples de plataforma 2D, estilo Super Mario Bros.
Essa parte do pulo tenho implementado assim:
- Código:
if (Input.GetButtonDown("Jump") && GroundedContact && Vertical >= 0) {
AnimationStatus = 3;
Rigidbody2D.AddForce(new Vector2(0, JumpForce), ForceMode2D.Force);
}
Vejo que essa parte de colisão, é bem especifica. Ou funciona bem ou não funciona baseado da forma que foi implementado.
Inequalis- Iniciante
- PONTOS : 1662
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» [ajuda] Player atravessando parede
» Player agarra correndo de frente com a parede.
» Ajuda com scripts de inimigo e player'' interação de zumbi e player''
» Collider invadindo outro!! Player atravessando parede.
» COMO EVITAR QUE UM OBJETO (PLAYER,ITEM ETC...) ATRAVESSE UMA PAREDE.
» Player agarra correndo de frente com a parede.
» Ajuda com scripts de inimigo e player'' interação de zumbi e player''
» Collider invadindo outro!! Player atravessando parede.
» COMO EVITAR QUE UM OBJETO (PLAYER,ITEM ETC...) ATRAVESSE UMA PAREDE.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos