Ajuda com key em script
3 participantes
Página 1 de 1
Ajuda com key em script
Tenho esse script e gostaria que ele fosse ativado ao pressionar a tecla E.
Em que linha devo colocar para ser ativado ao pressionar a tecla E?
using UnityEngine;
using UnityEngine.Events;
public class TriggerEvent : MonoBehaviour {
public enum Modes { Once, MoreTimes }
public Modes Mode = Modes.Once;
[Space(5)]
public UnityEvent triggerEvent;
[SaveableField]
public bool isPlayed;
public void Trigger()
{
if (!isPlayed)
{
triggerEvent.Invoke();
if (Mode == Modes.Once)
{
isPlayed = true;
}
}
}
void Update()
{
if (GetComponent<Collider>() && !GetComponent<Collider>().enabled)
{
isPlayed = false;
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player" && !isPlayed)
{
triggerEvent.Invoke();
isPlayed = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "Player" && isPlayed && Mode == Modes.MoreTimes)
{
isPlayed = false;
}
}
}
Em que linha devo colocar para ser ativado ao pressionar a tecla E?
using UnityEngine;
using UnityEngine.Events;
public class TriggerEvent : MonoBehaviour {
public enum Modes { Once, MoreTimes }
public Modes Mode = Modes.Once;
[Space(5)]
public UnityEvent triggerEvent;
[SaveableField]
public bool isPlayed;
public void Trigger()
{
if (!isPlayed)
{
triggerEvent.Invoke();
if (Mode == Modes.Once)
{
isPlayed = true;
}
}
}
void Update()
{
if (GetComponent<Collider>() && !GetComponent<Collider>().enabled)
{
isPlayed = false;
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player" && !isPlayed)
{
triggerEvent.Invoke();
isPlayed = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.tag == "Player" && isPlayed && Mode == Modes.MoreTimes)
{
isPlayed = false;
}
}
}
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Re: Ajuda com key em script
Todo método de verificação de teclas deve ser executado no método Update:
- Código:
docs.unity3d.com/ScriptReference/MonoBehaviour.Update.html
rr indie games- MembroAvançado
- PONTOS : 1445
REPUTAÇÃO : 16
Respeito as regras :
Re: Ajuda com key em script
Eu alterei esse script pra porta abrir ao apertar E, mas ta dando erro. Se tiro essas alterações funciona.
O que posso estar fazendo errado? O erro está na parte de pressionar a tecla...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class Teleporte : MonoBehaviour
{
bool podeInteragir = false; //eu criei
public GameObject Jogador; // euc riei
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Update() //eu criei
{
if (podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Jogador.GetComponent<SalvarPosic>().SalvarLocalizacao();
}
void Awake()
{
emissorDeSom = GetComponent<AudioSource>();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
if (destinos.Length > 0 && !rotinaIniciada)
{
int destino = Random.Range(0, destinos.Length);
if (destinos[destino])
{
other.transform.position = destinos[destino].position;
other.transform.rotation = destinos[destino].rotation;
if (destruirAoColidir)
{
StartCoroutine("EsperarParaDestruir");
}
}
if (audioTeleporte)
{
emissorDeSom.clip = audioTeleporte;
emissorDeSom.PlayOneShot(emissorDeSom.clip);
}
}
}
IEnumerator EsperarParaDestruir()
{
rotinaIniciada = true;
MeshRenderer mesh = GetComponent<MeshRenderer>();
if (mesh)
{
mesh.enabled = false;
}
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
}// ate aqui
O que posso estar fazendo errado? O erro está na parte de pressionar a tecla...
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class Teleporte : MonoBehaviour
{
bool podeInteragir = false; //eu criei
public GameObject Jogador; // euc riei
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Update() //eu criei
{
if (podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Jogador.GetComponent<SalvarPosic>().SalvarLocalizacao();
}
void Awake()
{
emissorDeSom = GetComponent<AudioSource>();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
if (destinos.Length > 0 && !rotinaIniciada)
{
int destino = Random.Range(0, destinos.Length);
if (destinos[destino])
{
other.transform.position = destinos[destino].position;
other.transform.rotation = destinos[destino].rotation;
if (destruirAoColidir)
{
StartCoroutine("EsperarParaDestruir");
}
}
if (audioTeleporte)
{
emissorDeSom.clip = audioTeleporte;
emissorDeSom.PlayOneShot(emissorDeSom.clip);
}
}
}
IEnumerator EsperarParaDestruir()
{
rotinaIniciada = true;
MeshRenderer mesh = GetComponent<MeshRenderer>();
if (mesh)
{
mesh.enabled = false;
}
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
}// ate aqui
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Re: Ajuda com key em script
Faltou um pedaço. Aqui ta inteiro:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class Teleporte : MonoBehaviour
{
bool podeInteragir = false; //eu criei
public GameObject Jogador; // euc riei
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Update() //eu criei
{
if (podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Jogador.GetComponent<SalvarPosic>().SalvarLocalizacao();
}
void Awake()
{
emissorDeSom = GetComponent<AudioSource>();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
if (destinos.Length > 0 && !rotinaIniciada)
{
int destino = Random.Range(0, destinos.Length);
if (destinos[destino])
{
other.transform.position = destinos[destino].position;
other.transform.rotation = destinos[destino].rotation;
if (destruirAoColidir)
{
StartCoroutine("EsperarParaDestruir");
}
}
if (audioTeleporte)
{
emissorDeSom.clip = audioTeleporte;
emissorDeSom.PlayOneShot(emissorDeSom.clip);
}
}
}
IEnumerator EsperarParaDestruir()
{
rotinaIniciada = true;
MeshRenderer mesh = GetComponent<MeshRenderer>();
if (mesh)
{
mesh.enabled = false;
}
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
}// ate aqui
void OnTriggerEnter() //eucriei
{
podeInteragir = true;
}
void OnTriggerExit()
{
podeInteragir = false;
}
void OnGUI()
{
if (podeInteragir == true)
{
GUIStyle stylez = new GUIStyle();
stylez.alignment = TextAnchor.MiddleCenter;
GUI.skin.label.fontSize = 20;
GUI.Label(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 50, 200, 30), "Pressione 'E'");
}
}// ate aqui
} //deixar essa
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class Teleporte : MonoBehaviour
{
bool podeInteragir = false; //eu criei
public GameObject Jogador; // euc riei
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Update() //eu criei
{
if (podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Jogador.GetComponent<SalvarPosic>().SalvarLocalizacao();
}
void Awake()
{
emissorDeSom = GetComponent<AudioSource>();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
if (destinos.Length > 0 && !rotinaIniciada)
{
int destino = Random.Range(0, destinos.Length);
if (destinos[destino])
{
other.transform.position = destinos[destino].position;
other.transform.rotation = destinos[destino].rotation;
if (destruirAoColidir)
{
StartCoroutine("EsperarParaDestruir");
}
}
if (audioTeleporte)
{
emissorDeSom.clip = audioTeleporte;
emissorDeSom.PlayOneShot(emissorDeSom.clip);
}
}
}
IEnumerator EsperarParaDestruir()
{
rotinaIniciada = true;
MeshRenderer mesh = GetComponent<MeshRenderer>();
if (mesh)
{
mesh.enabled = false;
}
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
}// ate aqui
void OnTriggerEnter() //eucriei
{
podeInteragir = true;
}
void OnTriggerExit()
{
podeInteragir = false;
}
void OnGUI()
{
if (podeInteragir == true)
{
GUIStyle stylez = new GUIStyle();
stylez.alignment = TextAnchor.MiddleCenter;
GUI.skin.label.fontSize = 20;
GUI.Label(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 50, 200, 30), "Pressione 'E'");
}
}// ate aqui
} //deixar essa
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Re: Ajuda com key em script
Voce quer fazer que apenas quando ele clicar "E" ele teleporte é isso?
Se for, voce pode utilizar um OnTriggerStay(). Voce terá que mudar um pouco seu código, porque pelo que parece no seu script voce teletransporta quando objeto colide na void OnTriggerEnter e para isso voce parece utilizar 2 script, nao entendi muito bem, mas voce pode fazer tudo em 1, voce tambem pode deixar seu código um pouco mais organizado, olhe:
Se for, voce pode utilizar um OnTriggerStay(). Voce terá que mudar um pouco seu código, porque pelo que parece no seu script voce teletransporta quando objeto colide na void OnTriggerEnter e para isso voce parece utilizar 2 script, nao entendi muito bem, mas voce pode fazer tudo em 1, voce tambem pode deixar seu código um pouco mais organizado, olhe:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class Teleporte : MonoBehaviour
{
bool podeInteragir = false; //eu criei
public GameObject Jogador; // euc riei
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Update() //eu criei
{
if (podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Jogador.GetComponent<SalvarPosic>().SalvarLocalizacao();
}
}
void Awake()
{
emissorDeSom = GetComponent<AudioSource>();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider>().isTrigger = true;
}
void OnTriggerEnter()
{
podeInteragir = true;
}
void OnTriggerStay(Collider other)
{
if(podeInteragir == true && Input.GetKeyDown(KeyCode.E))
{
Teleportar(other.gameObject);
}
}
void OnTriggerExit()
{
podeInteragir = false;
}
void Teleportar(GameObject obj)
{
if (destinos.Length > 0 && !rotinaIniciada)
{
int destino = Random.Range(0, destinos.Length);
if (destinos[destino])
{
obj.transform.position = destinos[destino].position;
obj.transform.rotation = destinos[destino].rotation;
if (destruirAoColidir)
{
StartCoroutine("EsperarParaDestruir");
}
}
if (audioTeleporte)
{
emissorDeSom.clip = audioTeleporte;
emissorDeSom.PlayOneShot(emissorDeSom.clip);
}
}
}
IEnumerator EsperarParaDestruir()
{
rotinaIniciada = true;
MeshRenderer mesh = GetComponent<MeshRenderer>();
if (mesh)
{
mesh.enabled = false;
}
yield return new WaitForSeconds(5);
Destroy(gameObject);
}
void OnGUI()
{
if (podeInteragir == true)
{
GUIStyle stylez = new GUIStyle();
stylez.alignment = TextAnchor.MiddleCenter;
GUI.skin.label.fontSize = 20;
GUI.Label(new Rect(Screen.width / 2 - 50, Screen.height / 2 + 50, 200, 30), "Pressione 'E'");
}
}// ate aqui
} //deixar essa
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Re: Ajuda com key em script
Agora estou tendo outro problema, todas as cenas estão sendo salvas e mesmo destruindo na cena, quando vou pra outra e volto a cena se reproduz de novo, como faço pra impedir isso?
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Re: Ajuda com key em script
Pra impedir que uma cutscene em questão, ou um objeto, seja destruído ao invés de salvar com os outros?
Em cima, coloquei cena, mas é cutscene. Ao sair de uma cena e ir pra outra, a cutscene se reproduz de novo mesmo usando destroy. Acredito que seja o código pra não ser destruído os objetos q vão pra próxima cena, mas esse em questão eu quero destruir.
Em cima, coloquei cena, mas é cutscene. Ao sair de uma cena e ir pra outra, a cutscene se reproduz de novo mesmo usando destroy. Acredito que seja o código pra não ser destruído os objetos q vão pra próxima cena, mas esse em questão eu quero destruir.
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Re: Ajuda com key em script
Voce poderia criar um novo post com esta duvida, pois como ela é diferente da duvida inicial voce pode criar um post para que outras pessoas que tenham a mesma duvida procurem e ja ache e para que mais pessoas possam te responder, e assim explicar melhor a duvida.
Pokedlg- ProgramadorMaster
- PONTOS : 2336
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Triskal- Avançado
- PONTOS : 1458
REPUTAÇÃO : 7
Respeito as regras :
Tópicos semelhantes
» Ajuda Urgente como chamo a animação no script alguém poderia dar uma ajuda???
» [AJUDA]Preciso de ajuda em um script relacionado ao vídeo Sistema de escolha de personagen
» [AJUDA]Quero Ajuda poque esse script so da erro!
» Ajuda com Meu Script
» Ajuda em Script
» [AJUDA]Preciso de ajuda em um script relacionado ao vídeo Sistema de escolha de personagen
» [AJUDA]Quero Ajuda poque esse script so da erro!
» Ajuda com Meu Script
» Ajuda em Script
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos