[TUTORIAL] Inteligência Artificial
5 participantes
Página 1 de 1
[TUTORIAL] Inteligência Artificial
olá trago um tutorial de uma AI que fiz
se acharem util se inscreva no meu canal
se acharem util se inscreva no meu canal
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//[ExecuteInEditMode]
public class Pathing : MonoBehaviour
{
[Tooltip(" Velocidade do movimento do player")]
public float Velocidade = 20;
[Tooltip(" distancia que esta a parede mais proxima")]
public float DistanciaParede,DistanciaMaxima=5;
[Tooltip("o obj Player e o Obj Inimigo")]
public GameObject Player, Inimigo;
[Tooltip("o Box collider")]
public BoxCollider Detector;
[Tooltip("um Obj Vazio que esta no mesmo ponto do Player")]
public GameObject Rotacional;
public bool Olhando, AlgoNaFrente, Movendo, Rodando;
void FixedUpdate()
{
Rotacionando();
Rotacional.transform.LookAt(Inimigo.transform);
}
float DistanciaMenor;
float croOlhando;
private void OnTriggerStay(Collider other)
{
if (other.gameObject.GetComponent<Collider>())
{
AlgoNaFrente = true;
RaycastHit hit;
Debug.DrawLine(Player.transform.position, Player.transform.right, new Color(1, 1, 1));
Debug.DrawLine(Player.transform.position, -Player.transform.right, new Color(1, 1, 1));
if (!Physics.Linecast(Player.transform.position, Player.transform.right, out hit))
{
}
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.GetComponent<Collider>())
{
AlgoNaFrente = false;
Invoke("ResetarRot", 1f);
}
}
public int Rot1,Rot2;
void Rotacionando()
{
if (AlgoNaFrente)
{
if (Rot2 != 5)
{
Rot2 = 5;
Rot1 = Random.Range(0, 2);
}
if (Rot1 == 0)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y + 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
if (Rot1 == 1)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y - 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
}
else
{
Movendo = true;
SeMovendo();
Lokar();
if (Olhando)
{
if (Rot2 != 5)
{
Rot2 = 5;
Rot1 = Random.Range(0, 2);
}
Movendo = false;
if (Rot1 == 0)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y + 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
if (Rot1 == 1)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y - 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
}
}
}
void SeMovendo() {
Rigidbody Rig = GetComponent<Rigidbody>();
Rig.velocity=(transform.forward * Time.deltaTime * Velocidade*10);
}
void Lokar()
{
RaycastHit hit;
Debug.DrawLine(Player.transform.position, Inimigo.transform.position, new Color(1, 1, 0));
if (!Physics.Linecast(Player.transform.position, Inimigo.transform.position, out hit))
{
transform.localRotation = Quaternion.Lerp(transform.localRotation, Rotacional.transform.rotation, 2f * Time.deltaTime);
Olhando = false;
DistanciaMaxima = 5;
}
else
{
if (Physics.Linecast(Player.transform.position, Inimigo.transform.position, out hit))
{
Vector3 Point = hit.point;
DistanciaParede = Vector3.Distance(Player.transform.position, Point);
if (DistanciaParede >DistanciaMaxima)
{
transform.localRotation = Quaternion.Lerp(transform.localRotation, Rotacional.transform.rotation, 2f * Time.deltaTime);
DistanciaMaxima += 0.1f;
}
}
}
}
void ResetarRot()
{
Rot2 = 0;
}
}
Última edição por Dom3000 em Ter Mar 27, 2018 11:23 am, editado 2 vez(es)
Re: [TUTORIAL] Inteligência Artificial
Cara, gostei do pathfinding que você fez, ksks... Você poderia tentar um tipo de pathfinding mais avançado também, estude sobre algoritmos de pathfinding, são tipos de lógicas que o cara monta para fazer um pathfinding funcional. Eu recomendo você estudar o algoritmo mais usado, o algoritmo A*
https://pt.wikipedia.org/wiki/Algoritmo_A*
https://pt.wikipedia.org/wiki/Algoritmo_A*
Daniel Pires da Silva- Avançado
- PONTOS : 2753
REPUTAÇÃO : 37
Idade : 20
Áreas de atuação : Cursando C#
Respeito as regras :
Re: [TUTORIAL] Inteligência Artificial
cara como falei esse sistema é muito pesado e inviavél em campos grandesDaniel Pires da Silva escreveu:Cara, gostei do pathfinding que você fez, ksks... Você poderia tentar um tipo de pathfinding mais avançado também, estude sobre algoritmos de pathfinding, são tipos de lógicas que o cara monta para fazer um pathfinding funcional. Eu recomendo você estudar o algoritmo mais usado, o algoritmo A*
https://pt.wikipedia.org/wiki/Algoritmo_A*
Re: [TUTORIAL] Inteligência Artificial
Parabéns ai cara!Dom3000 escreveu:olá trago um tutorial de uma AI que fiz
se acharem util se inscreva no meu canal
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//[ExecuteInEditMode]
public class Pathing : MonoBehaviour
{
[Tooltip(" Velocidade do movimento do player")]
public float Velocidade = 20;
[Tooltip(" distancia que esta a parede mais proxima")]
public float DistanciaParede,DistanciaMaxima=5;
[Tooltip("o obj Player e o Obj Inimigo")]
public GameObject Player, Inimigo;
[Tooltip("o Box collider")]
public BoxCollider Detector;
[Tooltip("um Obj Vazio que esta no mesmo ponto do Player")]
public GameObject Rotacional;
public bool Olhando, AlgoNaFrente, Movendo, Rodando;
void FixedUpdate()
{
Rotacionando();
Rotacional.transform.LookAt(Inimigo.transform);
}
float DistanciaMenor;
float croOlhando;
private void OnTriggerStay(Collider other)
{
if (other.gameObject.GetComponent<Collider>())
{
AlgoNaFrente = true;
RaycastHit hit;
Debug.DrawLine(Player.transform.position, Player.transform.right, new Color(1, 1, 1));
Debug.DrawLine(Player.transform.position, -Player.transform.right, new Color(1, 1, 1));
if (!Physics.Linecast(Player.transform.position, Player.transform.right, out hit))
{
}
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.GetComponent<Collider>())
{
AlgoNaFrente = false;
Invoke("ResetarRot", 1f);
}
}
public int Rot1,Rot2;
void Rotacionando()
{
if (AlgoNaFrente)
{
if (Rot2 != 5)
{
Rot2 = 5;
Rot1 = Random.Range(0, 2);
}
if (Rot1 == 0)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y + 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
if (Rot1 == 1)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y - 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
}
else
{
Movendo = true;
SeMovendo();
Lokar();
if (Olhando)
{
if (Rot2 != 5)
{
Rot2 = 5;
Rot1 = Random.Range(0, 2);
}
Movendo = false;
if (Rot1 == 0)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y + 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
if (Rot1 == 1)
{
Vector3 RotAnglePlayer = transform.localEulerAngles;
Vector3 Rot = new Vector3(0, RotAnglePlayer.y - 10, 0);
transform.rotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(Rot), 10f * Time.deltaTime);
}
}
}
}
void SeMovendo() {
Rigidbody Rig = GetComponent<Rigidbody>();
Rig.velocity=(transform.forward * Time.deltaTime * Velocidade*10);
}
void Lokar()
{
RaycastHit hit;
Debug.DrawLine(Player.transform.position, Inimigo.transform.position, new Color(1, 1, 0));
if (!Physics.Linecast(Player.transform.position, Inimigo.transform.position, out hit))
{
transform.localRotation = Quaternion.Lerp(transform.localRotation, Rotacional.transform.rotation, 2f * Time.deltaTime);
Olhando = false;
DistanciaMaxima = 5;
}
else
{
if (Physics.Linecast(Player.transform.position, Inimigo.transform.position, out hit))
{
Vector3 Point = hit.point;
DistanciaParede = Vector3.Distance(Player.transform.position, Point);
if (DistanciaParede >DistanciaMaxima)
{
transform.localRotation = Quaternion.Lerp(transform.localRotation, Rotacional.transform.rotation, 2f * Time.deltaTime);
DistanciaMaxima += 0.1f;
}
}
}
}
void ResetarRot()
{
Rot2 = 0;
}
}
Tópicos semelhantes
» Tutorial Inteligencia Artificial 2D[GODOT]
» [TUTORIAL] Inteligência artificial, inimigo e AIPoints
» [TUTORIAL] Consertando a inteligência artificial do cyberpunk 2077
» Inteligencia Artificial
» Inteligencia artificial?
» [TUTORIAL] Inteligência artificial, inimigo e AIPoints
» [TUTORIAL] Consertando a inteligência artificial do cyberpunk 2077
» Inteligencia Artificial
» Inteligencia artificial?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos