Como usar o OnBecomeVisible?
4 participantes
Página 1 de 1
Como usar o OnBecomeVisible?
Pessoal,
Criei um rascunho de IA bem básica que tem seus movimentos e que atira na direção do jogador. Mas o problema é que, independente de estar aparecendo ou não, o inimigo sempre vai atirar na direção do jogador. Tentei usar esse recurso para fazer o inimigo atirar apenas quando a câmera visualizar ele, mas não deu muito certo. O script que vou postar é da arma, quero que ela apenas atire se entrar no campo de visão da câmera. Qual a maneira correta de aplicar o OnBecomeVisible nesse script?
Obs:. Se encontrarem qualquer erro, ou souberem de uma maneira mais simples de escrever meu script, me avisem :D
Criei um rascunho de IA bem básica que tem seus movimentos e que atira na direção do jogador. Mas o problema é que, independente de estar aparecendo ou não, o inimigo sempre vai atirar na direção do jogador. Tentei usar esse recurso para fazer o inimigo atirar apenas quando a câmera visualizar ele, mas não deu muito certo. O script que vou postar é da arma, quero que ela apenas atire se entrar no campo de visão da câmera. Qual a maneira correta de aplicar o OnBecomeVisible nesse script?
Obs:. Se encontrarem qualquer erro, ou souberem de uma maneira mais simples de escrever meu script, me avisem :D
- Código:
using UnityEngine;
using System.Collections;
public class OctopusGun : MonoBehaviour {
private Transform player;
public Transform Weapon;
public GameObject bullet;
public float fireRate;
private float currentTime;
private bool canFire = true;
void Start () {
player = GameObject.FindWithTag("Player").transform;
}
void Update () {
Vector3 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
if (canFire == false) {
currentTime += Time.deltaTime;
if (currentTime > fireRate) {
currentTime = 0;
canFire = true;
}
}
if (canFire) {
Instantiate(bullet, Weapon.position, Weapon.rotation);
canFire = false;
}
}
}
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Re: Como usar o OnBecomeVisible?
Ué, mas cade a void OnBecameVisible nesse script?
Outra coisa, tenha em mente que esta void afeta todas as cameras do editor, inclusive a do próprio editor, então é necessário testar em "maximize on play"
Outra coisa, tenha em mente que esta void afeta todas as cameras do editor, inclusive a do próprio editor, então é necessário testar em "maximize on play"
Re: Como usar o OnBecomeVisible?
MarcosSchultz escreveu:Ué, mas cade a void OnBecameVisible nesse script?
Outra coisa, tenha em mente que esta void afeta todas as cameras do editor, inclusive a do próprio editor, então é necessário testar em "maximize on play"
Funcionou! Não sabia que a câmera do editor influenciava nisso.
Porém apareceu outro problema. Quando o inimigo aparece na câmera, ele só atira uma vez. Tentei corrigir isso, mas não consegui.
Alguma sugestão?
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Re: Como usar o OnBecomeVisible?
Tem como mandar o script todo com a parte do OnBecameVisible e tudo mais? Você pode ficar chamando uma void caso uma variável seja verdadeira por exemplo, eh bastante simples. posso ajeitar para você, mas preciso do script.
Re: Como usar o OnBecomeVisible?
Beleza! Aqui está:
Obrigado :D
- Código:
using UnityEngine;
using System.Collections;
public class OctopusGun : MonoBehaviour {
private Transform player;
public Transform Weapon;
public GameObject bullet;
public float fireRate;
private float currentTime;
private bool canFire = true;
void Start () {
player = GameObject.FindWithTag("Player").transform;
}
void Update () {
}
void OnBecameVisible () {
Vector3 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
if (canFire == false) {
currentTime += Time.deltaTime;
if (currentTime > fireRate) {
currentTime = 0;
canFire = true;
}
}
if (canFire) {
Instantiate(bullet, Weapon.position, Weapon.rotation);
canFire = false;
}
}
}
Obrigado :D
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Re: Como usar o OnBecomeVisible?
Voce deveria usar o cronometro no Update invez do OnBecameVisible, teste o seguinte nao testei e fiz pelo notepad entao malz se tiver erros:
- Código:
using UnityEngine;
using System.Collections;
public class OctopusGun : MonoBehaviour {
private Transform player;
public Transform Weapon;
public GameObject bullet;
public float fireRate;
private float currentTime;
private bool canFire = true;
private bool isVisible = true;
void Start () {
player = GameObject.FindWithTag("Player").transform;
}
void Update () {
if(!isVisible)return;
Vector3 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
if (canFire == false) {
currentTime += Time.deltaTime;
if (currentTime > fireRate) {
currentTime = 0;
canFire = true;
}
}
if (canFire) {
Instantiate(bullet, Weapon.position, Weapon.rotation);
canFire = false;
}
}
void OnBecameVisible () {
isVisible = true;
}
void OnBecameInvisible () {
isVisible = false;
}
}
Re: Como usar o OnBecomeVisible?
Não deu certo não. Eles ainda estão atirando sem ser vistos pela câmera. Nunca usei o "return". Nessas alterações, o que exatamente deveria acontecer?Manawydan escreveu:Voce deveria usar o cronometro no Update invez do OnBecameVisible, teste o seguinte nao testei e fiz pelo notepad entao malz se tiver erros:
- Código:
using UnityEngine;
using System.Collections;
public class OctopusGun : MonoBehaviour {
private Transform player;
public Transform Weapon;
public GameObject bullet;
public float fireRate;
private float currentTime;
private bool canFire = true;
private bool isVisible = true;
void Start () {
player = GameObject.FindWithTag("Player").transform;
}
void Update () {
if(!isVisible)return;
Vector3 dir = player.position - transform.position;
float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
if (canFire == false) {
currentTime += Time.deltaTime;
if (currentTime > fireRate) {
currentTime = 0;
canFire = true;
}
}
if (canFire) {
Instantiate(bullet, Weapon.position, Weapon.rotation);
canFire = false;
}
}
void OnBecameVisible () {
isVisible = true;
}
void OnBecameInvisible () {
isVisible = false;
}
}
BananaSmith- Membro
- PONTOS : 3420
REPUTAÇÃO : 6
Respeito as regras :
Re: Como usar o OnBecomeVisible?
só lembrando que o OnBecameVisible também e chamado pela camera do editor
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» Como usar LOD Group para usar no Mass Place Trees
» Como usar um Boneco como Terceira Pessoa
» Como usar GetComponent com string como parâmetro
» Como usar o bake em uma situação como essa ?
» Como usar: ScreenPointToRay
» Como usar um Boneco como Terceira Pessoa
» Como usar GetComponent com string como parâmetro
» Como usar o bake em uma situação como essa ?
» Como usar: ScreenPointToRay
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos