Primero que nada debes saber que esto no es una característica o función de Unity en realidad se trata de una TÉCNICA de optimización.
En que consiste?
Esta técnica consiste en instanciar un numero determinado de objetos al iniciar o cargar el nivel, luego desactivarlos para activarlos parcial o totalmente. Y esto tiene un impacto positivo en el rendimiento del videojuego ya que es mas barato en recursos activar y desactivar un objeto ya instanciado, que instanciar un objeto nuevo y destruirlo posteriormente.OJO que sea mas barato en recursos no quiere decir que deba usarse sin medida, ya que al activar el objeto el motor debe renderizar nuevamente el objeto como si de un objeto nuevo se tratase, pero con esto nos ahorramos la carga del objeto en memoria.Veamos un poco de código para aplicar esta técnica...1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #2
General (Antiguo) / Creando una Clase Básica de Inteligencia Artificial (AI)Octubre 10, 2015, 07:58:44 PM
Saludos colegas y entusiastas de la programación, quiero iniciar este articulo diciéndoles de entrada que no voy a tocar todos los aspectos de la inteligencia artificial ni tampoco haré ejemplos extensos ya que si lo hiciera podría escribir un libro de al menos unas 500 paginas, al menos con mi conocimiento, estoy seguro que otros podrían escribir de mas paginas, ya que es un tema bastante extenso.Lo primero que debemos hacer (se aplica a todo en programación) es establecer el o los problemas, les recomiendo que busquen unahttp://wwwhatsnew.com/2014/03/28/herramientas-crear-mapas-mentales-internet/">herramienta* para crear mapas mentales o tener un pizarron o mas simple un lápiz y un papel porque esto requerirá de unaLÓGICA ACERTADA, recuerden que lo que pretendemos hacer es crear una simulación de inteligencia, analicemos el siguiente mapa mental:https://eleazarcelis.files.wordpress.com/2015/10/captura__09_10_2015__224407.jpg"> Lo que primero debemos saber es que nuestro actor con AI deberá tener un comportamiento principal, este comportamiento definirá sus acciones y movilidad. Este actor también deberá tener varios estados por ejemplo "en ***cucion" "default"(viene dado por el comportamiento, ejem.: patrullando, explorando,...),"bajo ataque", "en alerta" y los que uds. consideren que pudiera aplicar, estos estados serán importante para informar a otros componentes que esta haciendo el actor.Lo segundo que deberemos definir es un área de acción en los casos de patrullaje y de defensa, esto sera necesario para definir la movilidad del actor.La movilidad de un actor puede gestionarse perfectamente a través de un navmesh, esto nos ahorrara mucho calculo. El navagent se encargara de encontrar una ruta hacia un punto este punto se puede definir en cualquier momento al igual que la velocidad a la que se dirigirá hacia él, y también la distancia de frenado, estos son 3 aspectos que nos harán la vida mas fácil. Ahora que tengamos esto listo podremos resolver nuestro siguiente problema y es quizás el punto mas importante en AI para videojuegos la percepción.La PercepciónLa percepción se podría definir como "el primer conocimiento de una cosa por medio de las impresiones que comunican los sentidos". La percepción disparara comportamientos y acciones en nuestro actor con AI de allí su importancia en programarla. Lo primero que debemos definir son lossentidos que tendrá nuestro actor, como vieron en la imagen yo solo he definido la vista, el tacto y la audición, aunque pudieran definirse otros, inclusive sentidos de fantasía como la habilidad de percibir enemigos que estén detrás de las paredes por ejemplo.Empecemos por el menos complejo, el tacto. Digo que este sentido es el menos complejo ya que este ya viene preparado por uniti con los colliders, un simple OnCollisionEnter podrá notificar que algo o un enemigo ha sido detectado. Y esto nos llevara a un punto importante, ladireccion de dicha interacción, para ello podemos recurrir a la propiedad "contacts[0].point"http://docs.unity3d.com/ScriptReference/ContactPoint-point.html">* del objeto "Collision" que nos da OnCollisionEnter, con ello podemos calcular la dirección de dicha interaccion, por ejemplo:
Para este sentido pudiéramos usar un SphereCollider y activar isTrigger, de manera de usar su radio como radio de detección, es decir el actor podrá "escuchar" todo lo con este dentro de este radio, para ello podríamos usar la función OnTriggerStay(Collider other) para gestionar la información, por ejemplo:
|
Lo que primero debemos saber es que nuestro actor con AI deberá tener un comportamiento principal, este comportamiento definirá sus acciones y movilidad. Este actor también deberá tener varios estados por ejemplo "en ***cucion" "default"(viene dado por el comportamiento, ejem.: patrullando, explorando,...),"bajo ataque", "en alerta" y los que uds. consideren que pudiera aplicar, estos estados serán importante para informar a otros componentes que esta haciendo el actor.Lo segundo que deberemos definir es un área de acción en los casos de patrullaje y de defensa, esto sera necesario para definir la movilidad del actor.La movilidad de un actor puede gestionarse perfectamente a través de un navmesh, esto nos ahorrara mucho calculo. El navagent se encargara de encontrar una ruta hacia un punto este punto se puede definir en cualquier momento al igual que la velocidad a la que se dirigirá hacia él, y también la distancia de frenado, estos son 3 aspectos que nos harán la vida mas fácil. Ahora que tengamos esto listo podremos resolver nuestro siguiente problema y es quizás el punto mas importante en AI para videojuegos la percepción.La Percepción
nia en escena todos perdieron la referencia al
Acá les comparto el código fuente de una clase que ya yo he creado: