[DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
2 participantes
Página 1 de 1
[DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Oi gente, estou com esse script do marcos de teleporte e gostaria de aprender como fazer com que ele espere alguns segundos pra teleportar, poderiam me ensinar?
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class teleporte : MonoBehaviour {
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
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);
}
}
AmaralGabriel2- Avançado
- PONTOS : 3060
REPUTAÇÃO : 12
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Tentei fazer assim:
Mas dá o seguinte erro:
Assets/teleporte.cs(33,5): error CS0103: The name `other' does not exist in the current context
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class teleporte : MonoBehaviour {
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Awake () {
emissorDeSom = GetComponent<AudioSource> ();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider> ().isTrigger = true;
}
void OnTriggerEnter (Collider other) {
StartCoroutine ("tele");
}
IEnumerator tele(){
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);
}
}
Mas dá o seguinte erro:
Assets/teleporte.cs(33,5): error CS0103: The name `other' does not exist in the current context
AmaralGabriel2- Avançado
- PONTOS : 3060
REPUTAÇÃO : 12
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Dado que você usou o other de maneira errada. O other só é referencia dentro do "OnTriggerEnter" do seu script.
NKKF- ProgramadorMaster
- PONTOS : 4819
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
E como faço para o teleporte esperar uns segundos antes de acontecer?Souris escreveu:Dado que você usou o other de maneira errada. O other só é referencia dentro do "OnTriggerEnter" do seu script.
AmaralGabriel2- Avançado
- PONTOS : 3060
REPUTAÇÃO : 12
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Como você mesmo colocou no seu código:
Porém, dentro de um IEnumerator
- Código:
yield return new WaitForSeconds (5);
Porém, dentro de um IEnumerator
NKKF- ProgramadorMaster
- PONTOS : 4819
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Fiz assim:Souris escreveu:Como você mesmo colocou no seu código:
- Código:
yield return new WaitForSeconds (5);
Porém, dentro de um IEnumerator
O Script não funciona
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(BoxCollider))]
[RequireComponent(typeof(AudioSource))]
public class teleporte : MonoBehaviour {
public Transform[] destinos;
public AudioClip audioTeleporte;
[Space(10)]
public bool destruirAoColidir = false;
AudioSource emissorDeSom;
bool rotinaIniciada = false;
void Awake () {
emissorDeSom = GetComponent<AudioSource> ();
emissorDeSom.playOnAwake = false;
emissorDeSom.loop = false;
GetComponent<BoxCollider> ().isTrigger = true;
}
void OnTriggerEnter (Collider other) {
if (destinos.Length > 0 && !rotinaIniciada) {
StartCoroutine ("Teste");
}
}
IEnumerator Teste(Collider other){
yield return new WaitForSeconds (5);
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);
}
}
Failed to call function Teste of class teleporte
Calling function Teste with no parameters but the function requires 1.
UnityEngine.MonoBehaviour:StartCoroutine(String)
teleporte:OnTriggerEnter(Collider) (at Assets/teleporte.cs:24)
AmaralGabriel2- Avançado
- PONTOS : 3060
REPUTAÇÃO : 12
Respeito as regras :
Re: [DÚVIDA] Script teleporte, como esperar determinados segundos para teleportar
Na hora da chamada do IEnumerator, faça assim:
- Código:
StartCoroutine(Teste(other));
NKKF- ProgramadorMaster
- PONTOS : 4819
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Tópicos semelhantes
» Quiz 2D Unity - Como esperar segundos para ir pra próxima pergunta????
» Script para Inimigo DESAPARECER e TELEPORTAR para um Airpoint
» [Duvida] Como chamar uma void criada por mim, apenas em determinados momentos.
» [Dúvida]como fazer o wihle esperar um tempo antes de executar de novo?
» [DÚVIDA]Ajuda para como fazer esse script voltar a funcionar
» Script para Inimigo DESAPARECER e TELEPORTAR para um Airpoint
» [Duvida] Como chamar uma void criada por mim, apenas em determinados momentos.
» [Dúvida]como fazer o wihle esperar um tempo antes de executar de novo?
» [DÚVIDA]Ajuda para como fazer esse script voltar a funcionar
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos