Como fazer com que Botão UI simule uma letra do teclado.
2 participantes
Página 1 de 1
Como fazer com que Botão UI simule uma letra do teclado.
Boa noite pessoal, alguém poderia me dar uma luz em relação a um problema que estou tendo em relação ao Botão UI.. Estou desenvolvendo a versão mobile do meu jogo "Fear In The Modern House". Porém estou com problemas em relação a função para abrir porta, não faço a menor ideia de como aplicar isso em um Botão.. Pois ele pega direto do Player, mas dessa forma em qualquer local que eu aperte no android, ele abre.. Sendo que eu gostaria que somente quando apertasse o botão, fizesse tal ação.. Como se esse botão fosse a letra [E]..
O Script que estou utilizando é o mesmo do de PC para abrir portas através de chaves feito pelo Marcos.
Porta:
Chave
Se caso alguém possa me ajudar serei eternamente grato
O Script que estou utilizando é o mesmo do de PC para abrir portas através de chaves feito pelo Marcos.
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;
}
}
}
Chave
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Chaves : MonoBehaviour {
[HideInInspector]public List<int> ChavesDoJogador = new List<int>();
public void Awake(){
if (transform.gameObject.tag != "Player") {
transform.gameObject.tag = "Player";
}
}
}
Se caso alguém possa me ajudar serei eternamente grato
Re: Como fazer com que Botão UI simule uma letra do teclado.
Se esta usando o Button UI (Do Canvas).
Não é só fazer referencia a void que abre a porta? (No inspector do button mesmo?)
No caso a função de abrir porta em vez de estar em um if de 'GetKey' estaria em uma void, que seria chamada quando o usuario aperta E, ou quando clica no botão.
Não é só fazer referencia a void que abre a porta? (No inspector do button mesmo?)
No caso a função de abrir porta em vez de estar em um if de 'GetKey' estaria em uma void, que seria chamada quando o usuario aperta E, ou quando clica no botão.
lesgoy- Mestre
- PONTOS : 3488
REPUTAÇÃO : 49
Respeito as regras :
Re: Como fazer com que Botão UI simule uma letra do teclado.
Então mano, é exatamente com o Botão UI. Porém eu não estou entendendo como aplicar isso dentro do OnClick, pois o código é um pouco extenso e é minha primeira vez fazendo isso kkk.. Porém esse é o único problema que estou enfrentando.lesgoy escreveu:Se esta usando o Button UI (Do Canvas).
Não é só fazer referencia a void que abre a porta? (No inspector do button mesmo?)
No caso a função de abrir porta em vez de estar em um if de 'GetKey' estaria em uma void, que seria chamada quando o usuario aperta E, ou quando clica no botão.
Tópicos semelhantes
» Tem como pegar a tecla digitada no teclado e fazer uma string
» como fazer botão simular uma tecla do teclado para jogos android unity
» [RESOLVIDO] Como remover uma letra de um texto?
» [TUTORIAL] Mostrar Palavra Letra Por Letra
» Tem como achar uma Letra/palavra dentro de uma string?
» como fazer botão simular uma tecla do teclado para jogos android unity
» [RESOLVIDO] Como remover uma letra de um texto?
» [TUTORIAL] Mostrar Palavra Letra Por Letra
» Tem como achar uma Letra/palavra dentro de uma string?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos