Si realmente estás interesado en este mundo, te aconsejo que mis referencias no sean las únicas que mires, posiblemente esté equivocado o pueda mejorarse mucho mas las cosas que hago como me han demostrado hace poco, lo cual me gusta.
En primer lugar hablaré del motor para IA que voy a usar ya que no es necesario reinventar la rueda, hay muchísimos motores que podemos encontrar, tanto para Unity3D como para el resto de sistemas.
Enlace a la Asset Store: http://u3d.as/43a
Bien, este motor, además de ser gratuito, está muy bien documentado, cuenta con sorporte, tutoriales creados por la comunidad, etcétera...
En esta primera entrada sobre este extra a añadir a Unity3D vamos a ver que, realmente es sencillo hacer una IA básica, recalcaré esto de básica porque si quieres un comportamiento como el de una persona, tan solo ponte a pensar en que, ¿Se pondrá enfermo? ¿Sen cansará? ¿Tendrá un rango de visión como el de una persona normal? ¿Hablará? y un sin fin de cosas por las cuales probablemente deberíamos plantear nuestro juego paso a paso, subamos escalones y no escalemos muros.
Para empezar, una vez tengamos el asset descargado podremos ver que trae ejemplos para los distintos lenguajes que trata Unity3D, C#, UnityScript (Javascript) y Boo, además de que, la única parte negativa de este plugin es estar creado como una librería de manera que a priori no podremos editar el código en caso de querer adaptar algo de los comportamientos que trae predefinidos este plugin.
En primer lugar deberíamos hacer un diagrama de comportamientos, podriamos plantearlo visualmente como una base de datos, de manera que planteemos todos los comportamientos que vamos a tener con nuestra IA, si va a caminar, por qué lo va a hacer, si va a hablar, en definitiva, como dije en la introducción tiempo atrás, reconocer ciertos patrones para ejecutar ciertas acciones.
Patrones básicos |
using UnityEngine; using System.Collections; public class Prueba : MonoBehaviour { public GameObject pj; void Start() { ruta_de_vigilancia(); } //Transformamos nuestro Update en una función de control void Update() { //Si está mas cerca de 100 if(Vector3.Distance(pj.transform.position, transform.position)<100) { //Y mas cerca de 5 if(Vector3.Distance(pj.transform.position, transform.position)<5) { golpear(); } else { perseguir(); } } else { ruta_de_vigilancia(); } } void ruta_de_vigilancia() { //El enemigo está vigilando Debug.Log("Estoy vigilando"); } void perseguir() { //El enemigo persigue al personaje Debug.Log("Estoy persiguiendo"); } void golpear() { //El enemigo golpear al personaje Debug.Log("Estoy golpeando"); } }Este código tiene poco que explicar ya que esta vez lo he dejado dentro del código, para la próxima, daré explicaciones mas detalladas sobre el uso de RAIN, espero que haya servido de ayuda y haya dejado un poco mas claro, aunque posiblemente no mucho aún de como programar inteligencias artificiales.
Este código no está completo a posta, lo he dejado con debugs en vez de hacerlo avanzar o golpear ya que quiero mas adelante empezar con mecanim y usar ambas cosas combinadas mas adelante.
comentarios
ResponderEliminar:v :v :v :v AH, WUEBO
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarNo se ve tan complicado cuando ya estuviste rompiéndote la cabeza con los scripts de Adobe Flash Professional xD
ResponderEliminarmuy bueno, lo hice que caminara con el NavMesh
ResponderEliminar