FPSController Buga ao Encostar em Porta com Colisor
2 participantes
Página 1 de 1
FPSController Buga ao Encostar em Porta com Colisor
Boa tarde gente, tudo certo? É o seguinte.. Estou tendo um pequeno problema em relação a Porta com BoxCollider ou MeshCollider com o meu FPSController, sempre que eu abro a porta, até ai tudo bem pois ela se abre para dentro (algumas portas).. Já quando eu tento fechar e meu Player fica parado na frente dessa porta, eu simplesmente bugo no ar, não consigo me movimentar a não ser mover o mouse.. Eu até ja vi aquele tutorial do MarcosSchultz sobre criação de jogos de terror, só que o script é diferente..
O Script da Porta que estou utilizando é do Unity 5, e esse video é um tanto quanto antigo.. Pois os códigos mudaram, a parte do vídeo começa no minuto 46:16 sobre "ChecarColisões". Que no caso seria quando a porta encostar no player, ela para de se movimentar. A parte que controla o movimento eu não encontro dentro do script (pode ser meio mongo da minha parte hsuahssa) este seria o script.
Script Da Porta:
O Script da Porta que estou utilizando é do Unity 5, e esse video é um tanto quanto antigo.. Pois os códigos mudaram, a parte do vídeo começa no minuto 46:16 sobre "ChecarColisões". Que no caso seria quando a porta encostar no player, ela para de se movimentar. A parte que controla o movimento eu não encontro dentro do script (pode ser meio mongo da minha parte hsuahssa) este seria o script.
Script Da Porta:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
[Serializable]
public class SonsDaPorta{
public AudioClip somAbrir;
[Range(0.5f,3.0f)] public float velSomAbrir = 1;
[Space(7)]
public AudioClip somFechar;
[Range(0.5f,3.0f)] public float velSomFechar = 1;
[Space(15)]
public AudioClip somTrancada;
public AudioClip somDestrancar;
}
[RequireComponent(typeof(AudioSource))]
public class Porta : MonoBehaviour {
public int IDPorta = 0;
public enum EstadoInic {Aberta90, Fechada00, Trancada};
public EstadoInic EstadoInicial = EstadoInic.Fechada00;
public enum TipoDeRotacao {RodarEmX, RodarEmY, RodarEmZ};
public TipoDeRotacao Rotacao = TipoDeRotacao.RodarEmY;
public KeyCode TeclaAbrir = KeyCode.E;
[Range(0.0f,150.0f)] public float grausDeGiro = 90.0f;
[Range(0.1f,10.0f)] public float velocidadeDeGiro = 5, distanciaDaPorta = 3;
public bool inverterGiro = false;
public Text TextoTrancado;
[Range(0.1f,4.0f)]public float tempoTexto = 1;
public SonsDaPorta Sons;
//
[Header("Ponto de proximidade opcional")][Space(15)]
public GameObject PontoDeProximidade;
//
Vector3 rotacaoInicial;
float giroAtual, giroAlvo;
GameObject Jogador;
bool estaFechada, estaTrancada;
AudioSource emissorSom;
Chaves listaDeChaves;
void Start () {
rotacaoInicial = transform.eulerAngles;
Jogador = GameObject.FindWithTag ("Player");
if (Jogador != null) {
listaDeChaves = Jogador.GetComponent<Chaves> ();
}
emissorSom = GetComponent<AudioSource> ();
emissorSom.playOnAwake = false;
emissorSom.loop = false;
if (TextoTrancado != null) {
TextoTrancado.enabled = false;
}
switch (EstadoInicial) {
case EstadoInic.Fechada00:
estaFechada = true;
estaTrancada = false;
giroAlvo = 0.0f;
giroAtual = 0.0f;
break;
case EstadoInic.Aberta90:
estaFechada = false;
estaTrancada = false;
if (inverterGiro == true) {
giroAtual = grausDeGiro;
giroAlvo = grausDeGiro;
} else {
giroAtual = -grausDeGiro;
giroAlvo = -grausDeGiro;
}
break;
case EstadoInic.Trancada:
estaFechada = true;
estaTrancada = true;
giroAlvo = 0.0f;
giroAtual = 0.0f;
break;
}
}
void Update () {
if (Jogador != null && listaDeChaves != null) {
ControlarPorta ();
GirarObjeto ();
}
}
void ChecarSeTemAChave(){
bool temAChave = false;
for (int x = 0; x < listaDeChaves.ChavesDoJogador.Count; x++) {
if (listaDeChaves.ChavesDoJogador [x] == IDPorta) {
temAChave = true;
}
}
if (temAChave == true) {
estaTrancada = false;
if (Sons.somDestrancar != null) {
emissorSom.pitch = 1;
emissorSom.clip = Sons.somDestrancar;
emissorSom.PlayOneShot (emissorSom.clip);
}
} else {
if (Sons.somTrancada != null) {
emissorSom.pitch = 1;
emissorSom.clip = Sons.somTrancada;
emissorSom.PlayOneShot (emissorSom.clip);
}
StartCoroutine ("MensagemNaTela");
}
}
void ControlarPorta(){
Vector3 localDeChecagem;
if (PontoDeProximidade != null) {
localDeChecagem = PontoDeProximidade.transform.position;
} else {
localDeChecagem = transform.position;
}
if (Vector3.Distance (Jogador.transform.position, localDeChecagem) < distanciaDaPorta) {
if (Input.GetKeyDown (TeclaAbrir) && estaTrancada == false) {
estaFechada = !estaFechada;
//
if (estaFechada == false) {
if (Sons.somAbrir != null) {
emissorSom.pitch = Sons.velSomAbrir;
emissorSom.clip = Sons.somAbrir;
emissorSom.PlayOneShot (emissorSom.clip);
}
if (inverterGiro == true) {
giroAlvo = grausDeGiro;
} else {
giroAlvo = -grausDeGiro;
}
} else {
if (Sons.somFechar != null) {
emissorSom.pitch = Sons.velSomFechar;
emissorSom.clip = Sons.somFechar;
emissorSom.PlayOneShot (emissorSom.clip);
}
if (inverterGiro == true) {
giroAlvo = 0.0f;
} else {
giroAlvo = 0.0f;
}
}
}
if (Input.GetKeyDown (TeclaAbrir) && estaTrancada == true) {
ChecarSeTemAChave ();
}
}
giroAtual = Mathf.Lerp (giroAtual, giroAlvo, Time.deltaTime * velocidadeDeGiro);
}
void GirarObjeto(){
switch (Rotacao) {
case TipoDeRotacao.RodarEmX:
transform.eulerAngles = new Vector3 (rotacaoInicial.x + giroAtual, rotacaoInicial.y, rotacaoInicial.z);
break;
case TipoDeRotacao.RodarEmY:
transform.eulerAngles = new Vector3 (rotacaoInicial.x, rotacaoInicial.y + giroAtual, rotacaoInicial.z);
break;
case TipoDeRotacao.RodarEmZ:
transform.eulerAngles = new Vector3 (rotacaoInicial.x, rotacaoInicial.y, rotacaoInicial.z + giroAtual);
break;
}
}
IEnumerator MensagemNaTela(){
if (TextoTrancado != null) {
TextoTrancado.enabled = true;
yield return new WaitForSeconds (tempoTexto);
TextoTrancado.enabled = false;
}
}
}
Re: FPSController Buga ao Encostar em Porta com Colisor
esse bug não me parece ser causado por esse script (talvez sim) me parece ser a fisica da unity ,vc colocou algum comando no player pra ele não se mover enquanto não estiver no chão ? ,pode ser tb que sua porta pode tá empurrando o jogador ,a e outra coisa tome cuidado com multiplos colisores ,tipo colisores em filhos pq se o objeto root o topo da hierarquia tiver rigbody ,os colisores do filho vão influenciar tb ,mas vc já deve saber disso boa sorte.
hendrick22- MembroAvançado
- PONTOS : 2689
REPUTAÇÃO : 57
Idade : 25
Respeito as regras :
Re: FPSController Buga ao Encostar em Porta com Colisor
Boa tarde mano!.. Rapaz isso ai me ajudou em, eu alterei o "Max Air Acelleration" e a "Gravity" para 1 pois estavam em 0, mas não sei se foi apenas isso, eu removi os BoxColliders dos filtros, criei um vazio e coloquei dentro da porta e pelomenos ajudou certa parte kkkkkk.. Mesmo assim a porta continua atravessando o player caso ele fique parado na frente da porta enquanto ela fecha, mas mano.. me ajudou bastante, muito obrigado :Dhendrick22 escreveu:esse bug não me parece ser causado por esse script (talvez sim) me parece ser a fisica da unity ,vc colocou algum comando no player pra ele não se mover enquanto não estiver no chão ? ,pode ser tb que sua porta pode tá empurrando o jogador ,a e outra coisa tome cuidado com multiplos colisores ,tipo colisores em filhos pq se o objeto root o topo da hierarquia tiver rigbody ,os colisores do filho vão influenciar tb ,mas vc já deve saber disso boa sorte.
Tópicos semelhantes
» Como faço pra um colisor não reconhecer outro colisor sem usar IsTrigger
» Objeto ultrapassando Colisor
» Porque a luz buga na aba Game e quando eu faço a build fica normal
» Objeto atravessando colisor
» Colisor + Animação
» Objeto ultrapassando Colisor
» Porque a luz buga na aba Game e quando eu faço a build fica normal
» Objeto atravessando colisor
» Colisor + Animação
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos