[RESOLVIDO] Como faço um limitador de tiros por distância?
3 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Como faço um limitador de tiros por distância?
Olá, pessoas
Preciso fazer um limitador de projéteis, de uma maneira que meu personagem atire um projétil e só possa atirar novamente quando a anterior "morrer"
Ideias?
Preciso fazer um limitador de projéteis, de uma maneira que meu personagem atire um projétil e só possa atirar novamente quando a anterior "morrer"
Ideias?
Última edição por dstaroski em Dom Jan 13, 2019 9:44 am, editado 1 vez(es) (Motivo da edição : Resolvido)
bielTuvel- Iniciante
- PONTOS : 2515
REPUTAÇÃO : 7
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
bielTuvel escreveu:Olá, pessoas
Preciso fazer um limitador de projéteis, de uma maneira que meu personagem atire um projétil e só possa atirar novamente quando a anterior "morrer"
Ideias?
- Código:
public class Weapon : MonoBehaviour {
public float firerate;
private bool fire = true;
void update()
{
if(Input.GetMouseButton(0))
{
StartCoroutine("Fire");
fire = false;
}
}
IEnumerator Fire()
{
yield return new WaitForSeconds(fireRate);
fire = true;
}
}
só pode atirar se o fire for verdadeiro?
diegopds- Mestre
- PONTOS : 3420
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
Quando você atirar o projetil, pode tentar dois métodos : parentar o projétil com o objeto que está o script e checar se seu objeto tem algum filho, ou adicionar o projétil à uma lista depois que for instanciada.
Método 1 :
Método 2 :
Não testei nenhum dos códigos, se tiver qualquer erro me avisa.
Método 1 :
- Código:
public prefabDoProjetil;
public Transform suaPosicao;
void Update(){
if(Input.GetKeyDown("escolha o botao para atirar o projétil") && transform.childCount == 0){
GameObject novoProjetil = Instantiate(prefabDoProjetil, suaPosicao.position, suaPosicao.rotation);
// Escreva o que seu projétil vai fazer
}
void DestruirProjetil(){
Destroy(transform.GetChild(0));
}
Método 2 :
- Código:
public prefabDoProjetil;
public Transform suaPosicao;
List<Transform> filhos = new List<Transform>();
void Update(){
if(Input.GetKeyDown("escolha o botao para atirar o projétil") && filhos.Count == 0){
GameObject novoProjetil = Instantiate(prefabDoProjetil, suaPosicao.position, suaPosicao.rotation);
// Escreva o que seu projétil vai fazer
filhos.Add(novoProjetil.transform);
}
void DestruirProjetil(){
filhos.RemoveAt(0);
Destroy(transform.GetChild(0));
}
Não testei nenhum dos códigos, se tiver qualquer erro me avisa.
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
Corrigindo o método 1 :
- Código:
GameObject novoProjetil = Instantiate(prefabDoProjetil, suaPosicao.position, suaPosicao.rotation);
novoProjetil.parent = transform;
// Escreva o que seu projétil vai fazer
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
diegopds escreveu:bielTuvel escreveu:Olá, pessoas
Preciso fazer um limitador de projéteis, de uma maneira que meu personagem atire um projétil e só possa atirar novamente quando a anterior "morrer"
Ideias?pelo o q entendi vc quer fazer isso?
- Código:
public class Weapon : MonoBehaviour {
public float firerate;
private bool fire = true;
void update()
{
if(Input.GetMouseButton(0))
{
StartCoroutine("Fire");
fire = false;
}
}
IEnumerator Fire()
{
yield return new WaitForSeconds(fireRate);
fire = true;
}
}
só pode atirar se o fire for verdadeiro?
Isso, eu preciso limitar os projéteis que o player atira pra que ele não encha a tela de tiros. Queria fazer algo como um tiro de cada vez, só podendo atirar quando o ultimo projétil já saiu de tela ou bateu em algum inimigo.
bielTuvel- Iniciante
- PONTOS : 2515
REPUTAÇÃO : 7
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
Daniel Pires da Silva escreveu:Quando você atirar o projetil, pode tentar dois métodos : parentar o projétil com o objeto que está o script e checar se seu objeto tem algum filho, ou adicionar o projétil à uma lista depois que for instanciada.
Método 1 :
- Código:
public prefabDoProjetil;
public Transform suaPosicao;
void Update(){
if(Input.GetKeyDown("escolha o botao para atirar o projétil") && transform.childCount == 0){
GameObject novoProjetil = Instantiate(prefabDoProjetil, suaPosicao.position, suaPosicao.rotation);
// Escreva o que seu projétil vai fazer
}
void DestruirProjetil(){
Destroy(transform.GetChild(0));
}
Método 2 :
- Código:
public prefabDoProjetil;
public Transform suaPosicao;
List<Transform> filhos = new List<Transform>();
void Update(){
if(Input.GetKeyDown("escolha o botao para atirar o projétil") && filhos.Count == 0){
GameObject novoProjetil = Instantiate(prefabDoProjetil, suaPosicao.position, suaPosicao.rotation);
// Escreva o que seu projétil vai fazer
filhos.Add(novoProjetil.transform);
}
void DestruirProjetil(){
filhos.RemoveAt(0);
Destroy(transform.GetChild(0));
}
Não testei nenhum dos códigos, se tiver qualquer erro me avisa.
Eu gostei do método 1, porém, como eu instancio um prefab (no meu caso é o prefab da Bullet) como filho da minha arma (que é onde ta o script de tiro)?
bielTuvel- Iniciante
- PONTOS : 2515
REPUTAÇÃO : 7
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
É só parentar depois de instanciar :
Antes de fazer isso, declare a variável arma para toda a classe :
- Código:
novoProjetil.transform.parent = arma;
Antes de fazer isso, declare a variável arma para toda a classe :
- Código:
public Transform arma;
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: [RESOLVIDO] Como faço um limitador de tiros por distância?
Esqueci de avisar também que prefabDoProjetil tem que ser declarada como GameObject
E toda vez que você quiser destruir seu projétil, é só chamar a void DestruirProjétil();
- Código:
public GameObject prefabDoProjetil
E toda vez que você quiser destruir seu projétil, é só chamar a void DestruirProjétil();
Daniel Pires da Silva- Avançado
- PONTOS : 2754
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
bielTuvel- Iniciante
- PONTOS : 2515
REPUTAÇÃO : 7
Respeito as regras :
Tópicos semelhantes
» [RESOLVIDO] Como eu faço para tocar um sonzinho (Son)
» [RESOLVIDO] Como faço uma seta na direção do inimigo?
» [RESOLVIDO] Como faço inimigo em muiltiplayer cooperativo?
» [RESOLVIDO] Como eu faço o player sair do carro?
» [RESOLVIDO] Como faço para otimizar meu projeto da Unity 3D?
» [RESOLVIDO] Como faço uma seta na direção do inimigo?
» [RESOLVIDO] Como faço inimigo em muiltiplayer cooperativo?
» [RESOLVIDO] Como eu faço o player sair do carro?
» [RESOLVIDO] Como faço para otimizar meu projeto da Unity 3D?
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos