Me ajude a resolver o Bug do sistema de portas.
2 participantes
Página 1 de 1
Me ajude a resolver o Bug do sistema de portas.
Estou utilizando o sistema de portas do Marcos, porém ao modificar para Mobile me deparei com alguns problemas básicos, alguns resolvidos mas existe um que esta me deixando bem frustrado, não consigo abrir a porta se não pressionar Mil vezes para abrir.
Como disse fiz algumas modificações mas nada que pudesse distorcer o sistema.
Também estou utilizando o "IInteractible" para abrir a porta.
Gostaria dessa ajuda ai se alguém puder.
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, IInteractible
{
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;
[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 ();
}
}*/
public 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");
}
}
public void ControlarPorta()
{
Vector3 localDeChecagem;
if (PontoDeProximidade != null)
{
localDeChecagem = PontoDeProximidade.transform.position;
}
else
{
localDeChecagem = transform.position;
}
if (Vector3.Distance (Jogador.transform.position, localDeChecagem) < distanciaDaPorta)
{
if (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 ( estaTrancada == true)
{
ChecarSeTemAChave ();
}
}
giroAtual = Mathf.Lerp (giroAtual, giroAlvo, Time.deltaTime * velocidadeDeGiro);
}
public 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;
}
}
public void TryInteract()
{
GirarObjeto();
ChecarSeTemAChave();
ControlarPorta();
}
}
Como disse fiz algumas modificações mas nada que pudesse distorcer o sistema.
Também estou utilizando o "IInteractible" para abrir a porta.
Gostaria dessa ajuda ai se alguém puder.
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, IInteractible
{
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;
[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 ();
}
}*/
public 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");
}
}
public void ControlarPorta()
{
Vector3 localDeChecagem;
if (PontoDeProximidade != null)
{
localDeChecagem = PontoDeProximidade.transform.position;
}
else
{
localDeChecagem = transform.position;
}
if (Vector3.Distance (Jogador.transform.position, localDeChecagem) < distanciaDaPorta)
{
if (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 ( estaTrancada == true)
{
ChecarSeTemAChave ();
}
}
giroAtual = Mathf.Lerp (giroAtual, giroAlvo, Time.deltaTime * velocidadeDeGiro);
}
public 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;
}
}
public void TryInteract()
{
GirarObjeto();
ChecarSeTemAChave();
ControlarPorta();
}
}
estuartyy- Iniciante
- PONTOS : 1919
REPUTAÇÃO : 0
Respeito as regras :
Re: Me ajude a resolver o Bug do sistema de portas.
https://i.imgur.com/lYENE3Z.pngstratengine escreveu:depois publique o que debugou
estuartyy- Iniciante
- PONTOS : 1919
REPUTAÇÃO : 0
Respeito as regras :
Re: Me ajude a resolver o Bug do sistema de portas.
stratengine escreveu:depois publique o que debugou
estuartyy- Iniciante
- PONTOS : 1919
REPUTAÇÃO : 0
Respeito as regras :
Re: Me ajude a resolver o Bug do sistema de portas.
stratengine escreveu:depois publique o que debugou
estuartyy- Iniciante
- PONTOS : 1919
REPUTAÇÃO : 0
Respeito as regras :
Re: Me ajude a resolver o Bug do sistema de portas.
pronto, ja vimos que ele entra no swich e debuga várias vezes no update, tudo certo, agora coloque nesse mesmo Debug.Log("RodarEmY") coloque dentro agora> Debug.Log(giroAtual);
para sabermos qual o valor que está chegando dessa variável dentro desse swich, provavelmente o erro é no valor dela
para sabermos qual o valor que está chegando dessa variável dentro desse swich, provavelmente o erro é no valor dela
Re: Me ajude a resolver o Bug do sistema de portas.
vou tentar criar uma porta aqui para abrir seu script
Re: Me ajude a resolver o Bug do sistema de portas.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testando : MonoBehaviour
{
public bool flipflop;
public int subtrair;
GameObject pegouChave;
public Vector3 targetAngle = new Vector3(0f, 90f, 0f);
private Vector3 currentAngle;
void Start()
{
}
void Update()
{
currentAngle = new Vector3(
Mathf.LerpAngle(currentAngle.x, targetAngle.x, Time.deltaTime),
Mathf.LerpAngle(currentAngle.y, targetAngle.y-subtrair, Time.deltaTime),
Mathf.LerpAngle(currentAngle.z, targetAngle.z, Time.deltaTime));
transform.eulerAngles = currentAngle;
if (Input.GetKeyDown(KeyCode.W) )
{
//abrindo porta
if (flipflop==true)
{
targetAngle = new Vector3(0f, 90f, 0f);
subtrair= -90;
flipflop=!flipflop;
}
//fechando porta
else
{
targetAngle = new Vector3(0f, 0, 0f);
subtrair= 90;
flipflop=!flipflop;
}
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class testando : MonoBehaviour
{
public bool flipflop;
public int subtrair;
GameObject pegouChave;
public Vector3 targetAngle = new Vector3(0f, 90f, 0f);
private Vector3 currentAngle;
void Start()
{
}
void Update()
{
currentAngle = new Vector3(
Mathf.LerpAngle(currentAngle.x, targetAngle.x, Time.deltaTime),
Mathf.LerpAngle(currentAngle.y, targetAngle.y-subtrair, Time.deltaTime),
Mathf.LerpAngle(currentAngle.z, targetAngle.z, Time.deltaTime));
transform.eulerAngles = currentAngle;
if (Input.GetKeyDown(KeyCode.W) )
{
//abrindo porta
if (flipflop==true)
{
targetAngle = new Vector3(0f, 90f, 0f);
subtrair= -90;
flipflop=!flipflop;
}
//fechando porta
else
{
targetAngle = new Vector3(0f, 0, 0f);
subtrair= 90;
flipflop=!flipflop;
}
}
}
}
Re: Me ajude a resolver o Bug do sistema de portas.
esse script fiz como referência, jogue ele em um cube object só para testar, ativando W para virar a "porta", veja o que tem de diferente no seu e faça as alterações. Espero que isso ajude
Re: Me ajude a resolver o Bug do sistema de portas.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testando : MonoBehaviour
{
public bool flipflop;
public Vector3 targetAngle = new Vector3(0f, 90f, 0f);
private Vector3 currentAngle;
void Start()
{
}
void Update()
{
currentAngle = new Vector3(
Mathf.LerpAngle(currentAngle.x, targetAngle.x, Time.deltaTime),
Mathf.LerpAngle(currentAngle.y, targetAngle.y-subtrair, Time.deltaTime),
Mathf.LerpAngle(currentAngle.z, targetAngle.z, Time.deltaTime));
transform.eulerAngles = currentAngle;
if (Input.GetKeyDown(KeyCode.W) )
{
//abrindo porta
if (flipflop==true)
{
targetAngle = new Vector3(0f, 90f, 0f);
flipflop=!flipflop;
}
//fechando porta
else
{
targetAngle = new Vector3(0f, 0, 0f);
flipflop=!flipflop;
}
}
}
}
Re: Me ajude a resolver o Bug do sistema de portas.
Dessa forma a porta abre deitada e sem chavestratengine escreveu:esse script fiz como referência, jogue ele em um cube object só para testar, ativando W para virar a "porta", veja o que tem de diferente no seu e faça as alterações. Espero que isso ajude
estuartyy- Iniciante
- PONTOS : 1919
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» TEM COMO EU ALMENTAR O TEMPO DO SOM DAS PORTAS (SISTEMA DE PORTAS)
» [AJUDA] Sistema de portas
» [TUTORIAL] Sistema de PORTAS e CHAVES
» Unity 5 Sistema de PORTAS e CHAVES
» Novo Asset Sistema de Portas e Chaves
» [AJUDA] Sistema de portas
» [TUTORIAL] Sistema de PORTAS e CHAVES
» Unity 5 Sistema de PORTAS e CHAVES
» Novo Asset Sistema de Portas e Chaves
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos