[TUTORIAL] IA Simples Parte 2 (Atirar)
2 participantes
Página 1 de 1
[TUTORIAL] IA Simples Parte 2 (Atirar)
Eae Galera.
Estou aqui de novo para fazer a segunda parte do tutorial de IA.
Na primeira parte fizemos ele mirar e seguir o player, para quem não viu a primeira parte esse é o link:
https://www.schultzgames.com/t3931-tutorial-ia-simples#27409
Primeiro Passo:
Vamos abrir a script do nosso inimigo.
Crie 2 variáveis:
E no nosso void Update vamos substituir os valores que colocamos no campo por essas variaveis:
Assim podemos controlar melhor o campo de visão da IA
Segundo Passo:
Vamos criar um objeto para ser a arma do nosso inimigo, no meu caso usei outro cubo:
![[TUTORIAL] IA Simples Parte 2 (Atirar) YGu8f0U](https://i.imgur.com/YGu8f0U.png)
também vamos criar um prefab para nossa bala;
![[TUTORIAL] IA Simples Parte 2 (Atirar) FvQukJP](https://i.imgur.com/FvQukJP.png)
e um GameObject Empty:
![[TUTORIAL] IA Simples Parte 2 (Atirar) TAyfuOU](https://i.imgur.com/TAyfuOU.png)
vamos usa-lo para determinar por onde nossa bala vai sair
Terceiro Passo:
Crie 5 variáveis:
A variável "bala" e o nosso prefab, a "velocidade" é a velocidade da bala, a "arma" é a transform da arma do inmigo nela vamos colocar o GameObject Empty que criamos, "rbbala" é a rigidbody da bala.
![[TUTORIAL] IA Simples Parte 2 (Atirar) VTQNW0h](https://i.imgur.com/vTQNW0h.png)
Agora vamos instanciar nosso prefab bala.
Dentro do void update:
Instanciar a bala:
Pegar rigidbody:
Adicionar força para a bala:
Quarto Passo:
Adicionar delay para bala:
Crie 2 variáveis:
Dentro do void Update coloque:
Assim o tiro vai sair quando cdelay for igual a delay.
Script inteira:
Agora nossa IA pode atirar.
É isso galera espero que tenham gostado.
Referencias:
https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
https://docs.unity3d.com/ScriptReference/Rigidbody.AddRelativeForce.html
https://docs.unity3d.com/ScriptReference/Rigidbody.html
https://docs.unity3d.com/ScriptReference/Quaternion.html
https://docs.unity3d.com/ScriptReference/Vector3.html
https://docs.unity3d.com/ScriptReference/Transform.html
Estou aqui de novo para fazer a segunda parte do tutorial de IA.
Na primeira parte fizemos ele mirar e seguir o player, para quem não viu a primeira parte esse é o link:
https://www.schultzgames.com/t3931-tutorial-ia-simples#27409
Primeiro Passo:
Vamos abrir a script do nosso inimigo.
Crie 2 variáveis:
- Código:
public float distmax;
public float distmin;
E no nosso void Update vamos substituir os valores que colocamos no campo por essas variaveis:
- Código:
if(campo > distmin & campo < distmax){
Assim podemos controlar melhor o campo de visão da IA
Segundo Passo:
Vamos criar um objeto para ser a arma do nosso inimigo, no meu caso usei outro cubo:
![[TUTORIAL] IA Simples Parte 2 (Atirar) YGu8f0U](https://i.imgur.com/YGu8f0U.png)
também vamos criar um prefab para nossa bala;
![[TUTORIAL] IA Simples Parte 2 (Atirar) FvQukJP](https://i.imgur.com/FvQukJP.png)
e um GameObject Empty:
![[TUTORIAL] IA Simples Parte 2 (Atirar) TAyfuOU](https://i.imgur.com/TAyfuOU.png)
vamos usa-lo para determinar por onde nossa bala vai sair
Terceiro Passo:
Crie 5 variáveis:
- Código:
public GameObject bala;
public float velocidade;
public Transform arma;
Rigidbody rbbala;
GameObject clone;
A variável "bala" e o nosso prefab, a "velocidade" é a velocidade da bala, a "arma" é a transform da arma do inmigo nela vamos colocar o GameObject Empty que criamos, "rbbala" é a rigidbody da bala.
![[TUTORIAL] IA Simples Parte 2 (Atirar) VTQNW0h](https://i.imgur.com/vTQNW0h.png)
Agora vamos instanciar nosso prefab bala.
Dentro do void update:
- Código:
void Update () {
campo = Vector3.Distance (transform.position, alvo.transform.position);
//O inimigo vai atras do player se a distancia entre eles for menor que 10 e maior que 2
if(campo > distmin & campo < distmax){
alvoroteition = Quaternion.LookRotation(alvo.position - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, alvoroteition , Time.deltaTime * 4);
//isso vai fazer ele seguir o player
rb.AddRelativeForce(Vector3.forward * velo);
//Tiro
GameObject clone = Instantiate(bala,arma.position,arma.rotation) as GameObject;
rbbala = clone.GetComponent<Rigidbody> ();
rbbala.AddForce(Vector3.forward * velocidade);
}
Instanciar a bala:
- Código:
GameObject clone = Instantiate(bala,arma.position,arma.rotation) as GameObject;
Pegar rigidbody:
- Código:
rbbala = bala.GetComponent<Rigidbody> ();
Adicionar força para a bala:
- Código:
rbbala.AddForce(Vector3.forward * velocidade);
Quarto Passo:
Adicionar delay para bala:
Crie 2 variáveis:
- Código:
public float delay;
float cdelay;
Dentro do void Update coloque:
- Código:
//Tiro
cdelay += 1 * Time.deltaTime;
if(cdelay >= delay){
GameObject clone = Instantiate(bala,arma.position,arma.rotation) as GameObject;
rbbala.AddRelativeForce(Vector3.forward * velocidade);
cdelay = 0;
}
Assim o tiro vai sair quando cdelay for igual a delay.
Script inteira:
- Código:
using UnityEngine;
using System.Collections;
public class Inimigo : MonoBehaviour {
public float vida;//Vida do inimigo
public float dano;//Dano do inimigo
public float velo;//Velocidade do inimigo
public float distmax;
public float distmin;
public Transform alvo;
Rigidbody rb;
Quaternion alvoroteition;
float campo;
//Tiro
public GameObject bala;
public float velocidade;
public Transform arma;
Rigidbody rbbala;
public float delay;
float cdelay;
GameObject clone;
// Use this for initialization
void Start () {
//Pegar Rigidbody
rb = GetComponent<Rigidbody> ();
}
// Update is called once per frame
void Update () {
campo = Vector3.Distance (transform.position, alvo.transform.position);
//O inimigo vai atras do player se a distancia entre eles for menor que 10 e maior que 2
if(campo > distmin & campo < distmax){
alvoroteition = Quaternion.LookRotation(alvo.position - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, alvoroteition , Time.deltaTime * 4);
//isso vai fazer ele seguir o player
rb.AddRelativeForce(Vector3.forward * velo);
//Tiro
cdelay += 1 * Time.deltaTime;
if(cdelay >= delay){
clone = Instantiate(bala,arma.position,arma.rotation) as GameObject;
rbbala = clone.GetComponent<Rigidbody> ();
rbbala.AddRelativeForce(Vector3.forward * velocidade);
cdelay = 0;
}
}
}
}
Agora nossa IA pode atirar.
É isso galera espero que tenham gostado.
Referencias:
https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
https://docs.unity3d.com/ScriptReference/Rigidbody.AddRelativeForce.html
https://docs.unity3d.com/ScriptReference/Rigidbody.html
https://docs.unity3d.com/ScriptReference/Quaternion.html
https://docs.unity3d.com/ScriptReference/Vector3.html
https://docs.unity3d.com/ScriptReference/Transform.html
Re: [TUTORIAL] IA Simples Parte 2 (Atirar)
O inimigo me vê e atira mas não para de atira mesmo depois de sair de perto dele, como conserta ?
5T4g3- Iniciante
- PONTOS : 1561
REPUTAÇÃO : 0
Respeito as regras :
Re: [TUTORIAL] IA Simples Parte 2 (Atirar)
Manda um print das configurações que você usou.5T4g3 escreveu:O inimigo me vê e atira mas não para de atira mesmo depois de sair de perto dele, como conserta ?

» [TUTORIAL] Como spawnar inimigos [Tutorial simples]
» [TUTORIAL] Salvando e carregando dados com serialização (Parte 2)
» [TUTORIAL] Inventario com ScritableObject parte 2
» [TUTORIAL](Csharp) Polimorfismo [PARTE 1]
» [TUTORIAL] Criando Plants Vs Zombies - parte 2
» [TUTORIAL] Salvando e carregando dados com serialização (Parte 2)
» [TUTORIAL] Inventario com ScritableObject parte 2
» [TUTORIAL](Csharp) Polimorfismo [PARTE 1]
» [TUTORIAL] Criando Plants Vs Zombies - parte 2
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos