Академический Документы
Профессиональный Документы
Культура Документы
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.
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
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
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
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
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
Diego Garcs
Scripts: Ejemplo
Diego Garcs
28/05/2013
Diego Garcs
28/05/2013
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
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
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
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
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
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
lowHealth
Diego Garcs
28/05/2013
Diego Garcs
28/05/2013
SM: Simple
class SM { enum States { eIdle, eAttack, eRunAway };
// States
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
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
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
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
RunAway
Diego Garcs
28/05/2013
SM Jerrquicas (HSM)
Agrupar un conjunto de nodos en un grupo
Cover Shoot Chase
Idle
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
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