ABRIR E FECHAR GAVETAS
3 participantes
Página 1 de 1
ABRIR E FECHAR GAVETAS
Boa tarde,
Estou produzindo um jogo mas estou com problema no código ...
Eu tenho o código de abrir e fechar portas e tal, porem não consigo alterar isso para colocar em gavetas.
Eu gostaria de que quando eu chegasse na frente da gaveta e apertasse " E " ela abria, e depois eu apertar " E " de novo e ela fechasse, parece simples o código, mas não consigo de jeito nenhum.
Tentei com esse código, mas ele apenas abre, e depois quando eu saio do trigger ela fecha sozinha, e eu gostaria de EU mesmo apertar a tecla pra fechar. Se alguém puder me ajudar ficarei grato.
Estou produzindo um jogo mas estou com problema no código ...
Eu tenho o código de abrir e fechar portas e tal, porem não consigo alterar isso para colocar em gavetas.
Eu gostaria de que quando eu chegasse na frente da gaveta e apertasse " E " ela abria, e depois eu apertar " E " de novo e ela fechasse, parece simples o código, mas não consigo de jeito nenhum.
Tentei com esse código, mas ele apenas abre, e depois quando eu saio do trigger ela fecha sozinha, e eu gostaria de EU mesmo apertar a tecla pra fechar. Se alguém puder me ajudar ficarei grato.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PortaSimples : MonoBehaviour{
public Animator _animator;
private bool _colidindo;
private bool _portaAbera = false;
void Update ()
{
if (Input.GetKeyDown (KeyCode.E) && _colidindo)
{
_portaAbera = true ;
_animator.SetTrigger ("Abrir");
}
}
void OnTriggerEnter (Collider _col)
{
if (_col.gameObject.CompareTag ( "Player" ))
{
_colidindo = true;
}
}
void OnTriggerExit (Collider _col)
{
if (_col.gameObject.CompareTag ("Player"))
{
if (_portaAbera)
{
_animator.SetTrigger ("Fechar");
}
_colidindo = false;
}
}
}
Última edição por Fagner em Sex Nov 22, 2019 1:52 pm, editado 1 vez(es) (Motivo da edição : Corrigir código na codebox)
bertarele- Avançado
- PONTOS : 2920
REPUTAÇÃO : 30
Respeito as regras :
Re: ABRIR E FECHAR GAVETAS
recomento usar o ! apos os if() nesta situação ex:(leitura)
public bool aberta;
se (apertar "E" for verdadeiro && aberta for falsa)
{
aberta=true;
executa animação(abrir)
}
se (apertar "E" for verdadeiro && aberta for verdadeira)
{
aberta=falsa;
executa animação(fechar)
}
é como um sitema de trava que verifica se ela ja esta aberta ou ainda esta fechada;
public bool aberta;
se (apertar "E" for verdadeiro && aberta for falsa)
{
aberta=true;
executa animação(abrir)
}
se (apertar "E" for verdadeiro && aberta for verdadeira)
{
aberta=falsa;
executa animação(fechar)
}
é como um sitema de trava que verifica se ela ja esta aberta ou ainda esta fechada;
adenilson romao- MembroAvançado
- PONTOS : 2929
REPUTAÇÃO : 15
Respeito as regras :
Re: ABRIR E FECHAR GAVETAS
,_, Como o Adenilson disse, É só tirar essa Trigger colocar uma Bool no animator, deixar só a mudança de estado do colidindo lá, e fz uma condição p mudar a anim
- Código:
// tipo isso mais o menos, soq vc tem q adequar ao seu script no caso
bool state;
void Update()
{
if(Input.GetKeyDown("e") && colidindo)
{
state = !state;
anim.SetBool("nomedabool", state);
// tem um jeito diferente q n precisa nem de declarar uma bool mas assim é mais fácil ;-;
}
}
Re: ABRIR E FECHAR GAVETAS
Esse codigo aqui eu peguei de um canal gringo, mas nao ta funcionando.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AbrirGaveta : MonoBehaviour
{
public GameObject OpenPanel = null;
private bool _isInsideTrigger = false;
public Animator _animator;
public string OpenText = "Pressione 'E' para abrir";
public string CloseText = "Pressione 'E' para fechar";
private bool _isOpen = false;
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
_isInsideTrigger = true;
OpenPanel.SetActive(true);
}
}
void OnTrigerExit(Collider other)
{
if (other.tag == "Player")
{
_isInsideTrigger = false;
OpenPanel.SetActive(false);
}
}
private bool IsOpenPanelActive
{
get
{
return OpenPanel.activeInHierarchy;
}
}
void Update()
{
if (IsOpenPanelActive && _isInsideTrigger)
{
if (Input.GetKeyDown(KeyCode.E))
{
_isOpen = !_isOpen;
_animator.SetBool("open", _isOpen);
}
}
}
}
bertarele- Avançado
- PONTOS : 2920
REPUTAÇÃO : 30
Respeito as regras :
Re: ABRIR E FECHAR GAVETAS
O complicado é que nao to achando o codigo certo, eu não sou tao bom em programação, geralmente pego os codigos prontos copio e colo, mas ta muito dificil essa parte
bertarele- Avançado
- PONTOS : 2920
REPUTAÇÃO : 30
Respeito as regras :
Re: ABRIR E FECHAR GAVETAS
bertarele escreveu:O complicado é que nao to achando o codigo certo, eu não sou tao bom em programação, geralmente pego os codigos prontos copio e colo, mas ta muito dificil essa parte
Rapaz só dar uma estudada tu aprende o básico desse bag em pouco tempo, e já consegue fazer. é muito mais gratificante do que pegar um négocio e sair juntando td, procura no canal do marcos, (ou até mesmo aqui no fórum) tem uma série de C# p Unity lá.
Re: ABRIR E FECHAR GAVETAS
Por exemplo, esse codigo é o do marco, mas ele esta com a programação para girar, nao para mover, se eu conseguisse uma luz de como ajustar ele apenas para mover a gaveta ficaria perfeito. Estou a dois dias estudando sobre como abrir e fechar gaveta, mas nao consigo achar uma solução, o jogo esta quase completo.
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
[Serializable]
public class SonsDaPorta1
{
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 SonsDaPorta1 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;
}
}
}
bertarele- Avançado
- PONTOS : 2920
REPUTAÇÃO : 30
Respeito as regras :
Tópicos semelhantes
» Abrir e Fechar Gavetas
» Script para abrir e fechar gaveta
» Como abrir portas/gavetas com click do mouse, usando raycast!
» Abrir e Fechar Porta
» ABRIR E FECHAR PORTA!
» Script para abrir e fechar gaveta
» Como abrir portas/gavetas com click do mouse, usando raycast!
» Abrir e Fechar Porta
» ABRIR E FECHAR PORTA!
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos