You are on page 1of 16

28/05/2013

Diego Garcs

28/05/2013

Comportamiento
Forma en que se especifica las acciones que realizan los NPCs Cules?
o Que accin llevar a cabo

Cundo?
o En que momento empezar a hacerla

Cmo?
o Qu pasos seguir para realizarla

Diego Garcs

28/05/2013

Implementacin Accin
Animacin
o Una pieza clave para comunicar acciones al jugador o Casi cualquier accin llevar una o varias animaciones asociadas o No confundir comportamiento con animacin

Movimiento
o o o o Coordinacin entre steerings y animaciones de movimiento Evitar moverse resbalando Evitar caminar en el sitio Pathfinding

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Eleccin Accin
Dos ramas principales Escriptado
o Desde diseo o Siempre igual

Emergente
o Capacidad de decisin o Autonoma o Vara segn distintos factores: jugador, entorno, etc.

No es blanco o negro, muchos niveles de gris

Diego Garcs

28/05/2013

Escriptado
Igual que en el cine o teatro El NPC sigue un guin preestablecido No se adaptan a la situacin
o Slo funciona si el comportamiento no depende de otros factores o O si se dan las condiciones para poder aplicarse

Tiene su aplicacin en los juegos modernos


o Cinemticas in-game o Misiones de escolta o Personajes de ambiente con los que no se interacta

Diego Garcs

28/05/2013

Escriptado
Diseador tiene control 100% No se van a producir comportamientos no previstos
o Aunque s comportamientos no adecuados para la situacin

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Escriptado
Muy dficil de contemplar todas las posibilidades Slo funciona en los casos que hemos previsto Para comportamientos sencillos es buena opcin Se complica muy rpidamente Dficil visualizar qu est haciendo el NPC
o Depuracin de problemas

Fcil que se convierta en algo muy tcnico

Diego Garcs

28/05/2013

Emergente
Da cierta libertad al NPC Teatro de improvisacin
o Directrices de comportamiento o Libertad para adaptarse a situaciones no previstas

Se definen ciertas acciones o comportamientos Se usan o combinan segn la situacin

Diego Garcs

28/05/2013

Emergente
Es muy dificil o imposible hacer algo totalmente emergente El diseador pierde control El NPC no tiene porqu hacer exactamente lo que el diseador pensaba que era lo ms adecuado Complejo ajustarlo a las necesidades del diseo
o Me gustara que si ocurre esta situacin haga esta accin o Pero si ocurre esta otra no o

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Emergente
No es necesario comtemplar todos los casos Comportamiento slido
o En respuesta a una accin del jugador reacciona el NPC o Tal vez no sea la accin ms dramtica o Pero es una accin razonable

Facilidad de reuso en distintos niveles


o Incluso juegos

Diego Garcs

28/05/2013

Escriptado - Emergente
Mucho terreno gris Es un continuo No son dos opciones Un NPC quedar en una situacin intermedia
o Ni 100% escriptado o Ni 100% emergente

Diego Garcs

28/05/2013

Escriptado vs Scripts
Un script es slo una opcin para comportamientos escriptados Aunque la forma ms sencilla es mediante scripts

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Scripts
El comportamiento se define como unas lneas de lua El personaje se crea en el mundo Comienza a ejecutar su script Contina su script hasta que termina o muere

Diego Garcs

28/05/2013

Scripts
Un cdigo de lua no tiene que ser super rgido
o Puede adaptarse o Condiciones para realizar unas acciones u otras

No tiene porque ser una secuencia de animaciones


o Como sera hacer una cinemtica offline

No tiene porque ser una lista de acciones seguidas


o o o o o o Primero ve a este punto Luego abre el cofre Luego coge una espada Luego ve a la mesa Luego deja la espada
28/05/2013

Diego Garcs

Scripts: Ejemplo

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Mquinas de Estado (SM)


Se basan en: Definir estados en los que puede estar el NPC Definir cmo se pasa de un estado a otro
o Transiciones

Un NPC esta siempre en un estado


o Y slo un estado

Diego Garcs

28/05/2013

SM: Ejemplo

Diego Garcs

28/05/2013

SM: Estados
Situacin en la que se encuentra en el NPC en un momento dado Se suele empezar una accin al entrar en el estado Se contina con esa accin hasta salir del estado Por ejemplo:
o Al entrar al estado de no alerta Poner animacin de mirar alrededor o Continuar con esta animacin (o sus variantes) o Parar la animacin al salir del estado

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

SM: Transiciones
Parte de un estado y acaba en otro Constan de una serie de condiciones Examinan:
o El entorno: mundo, otros NPCs, personajes o El estado interno: Variables del NPC

Se cumplen condiciones de la transicin

Cambio de estado

Diego Garcs

28/05/2013

SM: Proceso
Incializar mquina de estados con estado inicial Ejecutar acciones del estado inicial
o Ejemplo: Reproducir una animacin

Evaluar sus transiciones en orden Si se cumple una


o Actualizar estado actual al destino de la transicion o Ejecutar accin del nuevo estado

Diego Garcs

28/05/2013

SM: Extensiones
Es posible aadir acciones para cada evento de la SM Entrada en un estado
o Queremos reproducir un sonido cuando se entra al estado o No queremos hacerlo en cada iteracin dentro del estado

Salida de un estado
o Queremos eliminar un efecto

Usar una transicin


o o o o Poner un dilogo u otro dependiendo de la condicin que ha disparado Se est cubriendo detrs de las cajas! Est huyendo! Tal vez llevan al estado Persecucin, pero con condiciones distintas

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

Efectos en estado

Diego Garcs

28/05/2013

Efectos en estado

Diego Garcs

28/05/2013

SM: Extensiones
Es posible aadir acciones para cada evento de la SM Entrada en un estado
o Queremos reproducir un sonido cuando se entra al estado o No queremos hacerlo en cada iteracin dentro del estado

Salida de un estado
o Queremos eliminar un efecto

Usar una transicin


o o o o Poner un dilogo u otro dependiendo de la condicin que ha disparado Se est cubriendo detrs de las cajas! Est huyendo! Tal vez llevan al estado Persecucin, pero con condiciones distintas

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

SM: Implementacin
Multitud de formas de implementacin No existe la forma de implementar mquinas de estados Dependiendo de las necesidades
o Ms flexible o Ms sencillo

Dependiendo de los usuarios


o Diseadores van a desarrollar mquinas de estados? o Tarea del programador de C++?

Diego Garcs

28/05/2013

SM: Simple
Estados: enums + procedimientos Transiciones: funciones Mquina de estados: switch + condiciones if
class SM { enum States { eIdle, eAttack, eRunAway };
Diego Garcs 28/05/2013

SM: Simple
canSeePlayer Idle !canSeePlayer !canSeePlayer Attack RunAway class SM {
// States

void idle(); void attack(); void runaway();


// transiciones

lowHealth

bool canSeePlayer() const; bool lowHealth() const;

Diego Garcs

28/05/2013

Diego Garcs

28/05/2013

SM: Simple
class SM { enum States { eIdle, eAttack, eRunAway };
// States

void idle(); void attack(); void runaway();


// transiciones

bool canSeePlayer() const; bool lowHealth() const;

public: SM(); void update(); private: States m_currentState; };


Diego Garcs 28/05/2013

SM: Simple
void SM::update() { switch(m_currentState) { case eIdle: { break; } case eAttack: { break; } case eRunAway: { break; } } }
Diego Garcs 28/05/2013

SM:Simple
canSeePlayer Idle !canSeePlayer !canSeePlayer Attack RunAway

lowHealth

case eIdle: { PlayAnimation("idle"); if (canSeePlayer()) { m_currentState = eAttack; } break; }

Diego Garcs

28/05/2013

Diego Garcs

10

28/05/2013

SM:Simple
canSeePlayer Idle !canSeePlayer !canSeePlayer Attack RunAway

lowHealth

case eAttack: { PlayAnimation("shoot"); if (lowHealth()) { m_currentState = eRunAway; } else if (!canSeePlayer()) { m_currentState = eIdle; } break; }
28/05/2013

Diego Garcs

SM:Simple
canSeePlayer Idle !canSeePlayer !canSeePlayer Attack RunAway

lowHealth

case eRunAway: { PlayAnimation("run"); if (!canSeePlayer()) { m_currentState = eIdle; } break; }

Diego Garcs

28/05/2013

SM: Flexible
Encapsular en clases La lgica no est en el cdigo sino en los datos Posible cambiar lgica sin recompilar Posible cambiar lgica mediante un editor Posible cambiar lgica por diseadores Ms complejo que versin simple programada

Diego Garcs

28/05/2013

Diego Garcs

11

28/05/2013

SM: Flexible
Clase estado
o Lista de acciones o Lista de transiciones

Clase accin
o o o o o Clase abstacta Reproduccin de animaciones Reproduccin de sonido Creacin de efectos etc.

Clase transicin
o Estado destino o Condicin de disparo

Diego Garcs

28/05/2013

SM: Flexible
class State { Action* m_enterAction; Action* m_exitAction; Action* m_stateAction; Transitions m_transitions; public: void onEnter(); void update(); void onExit(); const Transitions& getTransitions(); };
Diego Garcs 28/05/2013

SM: Flexible
class Transition { Condition* m_condition; State* m_targetState; Action* m_triggerAction; public: bool canTrigger() const; State* trigger(); };

Diego Garcs

28/05/2013

Diego Garcs

12

28/05/2013

SM: Flexible
class CanSeePlayer: public Condition { public: bool check() const { /* raycast to player pos*/ } class AndCondition: public Condition };
{ public: AndCondition(Condition* c1, Condition* c2); bool check() const { return m_c1->check() && m_c2->check();} private: Condition* m_c1; Condition* m_c2; };
Diego Garcs 28/05/2013

class Condition { public: bool check() const = 0; };

SM: Flexible
class Action { public: void start() {}; void update() {}; void end() {}; }; class GotoAction: public Action { public: void start() { /* pathfind to destination */ } void update() { /* move through path */ } GotoAction(const Pos3D& pos); private: Pos3D m_destination; };

Diego Garcs

28/05/2013

SM: Flexible
class SM { std::vector<State*> m_States; State* m_currentState; public: void load(); void start(); void update(); };

Diego Garcs

28/05/2013

Diego Garcs

13

28/05/2013

SM: Flexible
void SM::update() { m_currentState->update(); const Transitions& trans = m_currentState->getTransitions(); for tran in trans { if (tran.canTrigger()) class SM { { m_currentState->onExit(); std::vector<State*> m_States; State* nextState = tran.trigger(); State* m_currentState; public: nextState->onEnter(); void load(); m_currentState = nextState; void start(); return; void update(); }; } } }
Diego Garcs 28/05/2013

SM: Tamao
Estado Attack generalmente mucho ms complicado
Cover Shoot Chase

Reload OutOfCover Melee

RunAway

Diego Garcs

28/05/2013

SM Jerrquicas (HSM)
Agrupar un conjunto de nodos en un grupo
Cover Shoot Chase

Idle

Reload OutOfCover Melee

RunAway

Diego Garcs

28/05/2013

Diego Garcs

14

28/05/2013

HSM
Agrupar un conjunto de nodos en un grupo El grupo funciona como un estado normal En su update actualiza su mquina de estados interna
class SM { std::vector<State*> m_States; State* m_currentState; public: void load(); void start(); void update(); };

class State { Action* m_enterAction; Action* m_exitAction; Action* m_stateAction; Transitions m_transitions; public: void onEnter(); void update(); void onExit(); const Transitions& getTransitions(); };
28/05/2013

Diego Garcs

HSM
Al entrar en el estado reinicio la mquina de estados En el update del estado gestiono la mquina de estados
class State { Action* m_enterAction; Action* m_exitAction; Action* m_stateAction; Transitions m_transitions; public: void onEnter(); void update(); void onExit(); const Transitions& getTransitions(); };

SM::start SM::update

Diego Garcs

28/05/2013

HSM
No es posible saltar a un estado interno
Cover Shoot Chase

Idle

Reload OutOfCover Melee

RunAway

Diego Garcs

28/05/2013

Diego Garcs

15

28/05/2013

HSM
Implementacin ms compleja La complejidad ya no se puede encapsular fcilmente En la bibliografa hay soluciones para ello

Diego Garcs

28/05/2013

Diego Garcs

16

You might also like