Movimiento de un esqueleto Dirigido por Otro esqueleto
Movimiento de un esqueleto Dirigido por Otro esqueleto
Hace muy poco he Empezado a Usar el bge para la realización de software interactivo con objetivos educacional.
Este Foro me pareció una buena idea para buscar ayuda a un problema que desde hace mucho me está molestando.
El asunto es este:
He realizado un modelo 3D antropomórfico, el cual responde bien a las diferentes animaciones que se le ha puesto, sin embargo he notado, que las operaciones que debe realizar son muchas, y en situaciones estas deben realizarse de manera combinada, realizando las animaciones por separado: de la parte superior del cuerpo, y de la parte inferior del cuerpo, sin embargo muchos problemas han surgido
- Si la Malla es Única, y los esqueletos son separados, solo responde a uno de los esqueletos
- si el esqueleto es único, pero con acciones por separado (cuidando no generar animaciones en los huesos no correspondientes) el esqueleto solo ejecutara una de las animaciones, ya sea la parte superior del cuerpo, o la inferior,
con el pasar del tiempo, y bajo el método de ensayo y error, descubrí que podía mover parte del esqueleto principal usando un esqueleto secundario anexo a este, en el modo de edición de animaciones todo va bien, los huesos emparentados responden a los movimientos del esqueleto secundario, sin embargo a la hora de ejecutarlo, (pese a que las animaciones del esqueleto secundario si se reproducen), los huesos del esqueleto principal ya no responden, y el esqueleto vuelve a quedar intacto, desconozco que pueda ser un problema de parentesco entre las dos armaduras , de ser así como podría solucionarlo.
en caso que esto no tenga remedio, que me encantaría no fuese así,¿de que manera puedo realizar las acciones por separado?, y que se ejecuten las animaciones de la parte inferior del esqueleto (piernas, pies) y la superior (brazos, tórax, cabeza, etc.)
cabe resaltar que las animaciones las ejecuto mediante sripts y evito usar los ladrillos de lógica con regularidad.
Este Foro me pareció una buena idea para buscar ayuda a un problema que desde hace mucho me está molestando.
El asunto es este:
He realizado un modelo 3D antropomórfico, el cual responde bien a las diferentes animaciones que se le ha puesto, sin embargo he notado, que las operaciones que debe realizar son muchas, y en situaciones estas deben realizarse de manera combinada, realizando las animaciones por separado: de la parte superior del cuerpo, y de la parte inferior del cuerpo, sin embargo muchos problemas han surgido
- Si la Malla es Única, y los esqueletos son separados, solo responde a uno de los esqueletos
- si el esqueleto es único, pero con acciones por separado (cuidando no generar animaciones en los huesos no correspondientes) el esqueleto solo ejecutara una de las animaciones, ya sea la parte superior del cuerpo, o la inferior,
con el pasar del tiempo, y bajo el método de ensayo y error, descubrí que podía mover parte del esqueleto principal usando un esqueleto secundario anexo a este, en el modo de edición de animaciones todo va bien, los huesos emparentados responden a los movimientos del esqueleto secundario, sin embargo a la hora de ejecutarlo, (pese a que las animaciones del esqueleto secundario si se reproducen), los huesos del esqueleto principal ya no responden, y el esqueleto vuelve a quedar intacto, desconozco que pueda ser un problema de parentesco entre las dos armaduras , de ser así como podría solucionarlo.
en caso que esto no tenga remedio, que me encantaría no fuese así,¿de que manera puedo realizar las acciones por separado?, y que se ejecuten las animaciones de la parte inferior del esqueleto (piernas, pies) y la superior (brazos, tórax, cabeza, etc.)
cabe resaltar que las animaciones las ejecuto mediante sripts y evito usar los ladrillos de lógica con regularidad.
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
¿Y por que tienes dos armatures para un solo objeto?
Puedes unir las dos armatures seleccionado las dos y Ctr+J
Puedes unir las dos armatures seleccionado las dos y Ctr+J
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Si lo que buscas es animar por ejemplo el movimiento de los brazos por un lado y el de los pies por otro, esto se hace creando dos animaciones en el Dope Sheet > Action Editor y luego se pueden mezclar en el NLA_Editor
https://www.youtube.com/user/realsolima ... ?query=NLA
https://www.youtube.com/user/realsolima ... ?query=NLA
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Sin embargo en el BGE las animaciones no se Ejecutan
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
¿Como estás ejecutando las acciones con PlayAction()? ¿ Podrias poner un ejemplo del código?
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
saque este código de uno de los tutoriales de fisicomolon, y es el que he usado por bastante tiempo:
import bge
g= bge.logic
co = bge.logic.getCurrentController()
o= co.owner
scene = g.getCurrentScene()
import mathutils
#[SENSORES]#
sensor = co.sensors["Keyboard"]
#[ACTUADORES]#
act = co.actuators["Action"]
AKEY= sensor.getKeyStatus(97)
SKEY= sensor.getKeyStatus(115)
DKEY= sensor.getKeyStatus(100)
WKEY= sensor.getKeyStatus(119)
SPACEKEY= sensor.getKeyStatus(32)
if (WKEY==0 and SKEY==0 and DKEY==0 and AKEY==0):
act.action= "RESPIRACION"
act.frameStart = 2.0
act.frameEnd = 80.0
act.blendIn = 11.0
act.mode = 4
act.priority = 1
act.layer = 0
co.activate("Action")
if (WKEY==2 or SKEY==2 or DKEY==2 or AKEY==2):
act.action= "CAMINATA"
act.frameStart = 2.0
act.frameEnd = 40.0
act.blendIn = 11.0
act.mode = 4
act.priority = 1
act.layer = 0
co.activate("Action")[/shadow]
import bge
g= bge.logic
co = bge.logic.getCurrentController()
o= co.owner
scene = g.getCurrentScene()
import mathutils
#[SENSORES]#
sensor = co.sensors["Keyboard"]
#[ACTUADORES]#
act = co.actuators["Action"]
AKEY= sensor.getKeyStatus(97)
SKEY= sensor.getKeyStatus(115)
DKEY= sensor.getKeyStatus(100)
WKEY= sensor.getKeyStatus(119)
SPACEKEY= sensor.getKeyStatus(32)
if (WKEY==0 and SKEY==0 and DKEY==0 and AKEY==0):
act.action= "RESPIRACION"
act.frameStart = 2.0
act.frameEnd = 80.0
act.blendIn = 11.0
act.mode = 4
act.priority = 1
act.layer = 0
co.activate("Action")
if (WKEY==2 or SKEY==2 or DKEY==2 or AKEY==2):
act.action= "CAMINATA"
act.frameStart = 2.0
act.frameEnd = 40.0
act.blendIn = 11.0
act.mode = 4
act.priority = 1
act.layer = 0
co.activate("Action")[/shadow]
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Buenas, lo estás haciendo con un actuador Action, el código activa este actuador.Lo que veo en el código son tres errores.
Primero co = bge.logic.getCurrentController() lo debes de poner como g.getCurrentController() ya que bge.logic. lo has guardado en una variable que se llama g , luego en scene lo usas bien g.getCurrentScene(), no pasa nada no da error pero el código vuelve a buscar bge.logic sin necesidad ya que lo tiene guardado en la variable g mucho mas accesible.
Segundo : en los 2 if sustituye co.activate ("Action") por co.activate(act), act es la variable donde está guardado el actuador que se llama "Action".
Tercero: en la última linea de código [/shadow] no hace nada, es mas generará un error, bórralo eso no tiene que estar ahí, el actuador no tiene la propiedad /shadow.
Bien, creo que cuando corrijas eso te irá bien las animaciones pero tienes que tener en cuenta que en bge si un esqueleto tiene varias animaciones tienes que establecer prioridades a la hora de ejecutarlas, 0 máxima prioridad, en tu código tienes act.priority = 1 en las dos animaciones, creo que no va a haber problema por la forma en que se ejecutan las animaciones pero te puede pasar.Prueba y me dices si tienes algún problema.
Saludos.
La última linea del código te tiene que dar error en lo que pone [/shadow],
Primero co = bge.logic.getCurrentController() lo debes de poner como g.getCurrentController() ya que bge.logic. lo has guardado en una variable que se llama g , luego en scene lo usas bien g.getCurrentScene(), no pasa nada no da error pero el código vuelve a buscar bge.logic sin necesidad ya que lo tiene guardado en la variable g mucho mas accesible.
Segundo : en los 2 if sustituye co.activate ("Action") por co.activate(act), act es la variable donde está guardado el actuador que se llama "Action".
Tercero: en la última linea de código [/shadow] no hace nada, es mas generará un error, bórralo eso no tiene que estar ahí, el actuador no tiene la propiedad /shadow.
Bien, creo que cuando corrijas eso te irá bien las animaciones pero tienes que tener en cuenta que en bge si un esqueleto tiene varias animaciones tienes que establecer prioridades a la hora de ejecutarlas, 0 máxima prioridad, en tu código tienes act.priority = 1 en las dos animaciones, creo que no va a haber problema por la forma en que se ejecutan las animaciones pero te puede pasar.Prueba y me dices si tienes algún problema.
Saludos.
La última linea del código te tiene que dar error en lo que pone [/shadow],
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
En breve tratare de alcanzar los resultados de esa prueba, sin embargo, quisiera saber, ¿hay alguna forma diferente de, mediante scripts, reproducir dos animaciones a la vez en un mismo esqueleto?, de manera que las animaciones de las piernas tales como andar, correr, saltar, arrodillarse, se combinen con las animaciones de los brazos , sostener un objeto, señalar algo , etc, que sea funcional en el Game Engine .
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Buenas , si se puede hacer siempre y cuando las animaciones de cada hueso no entren en contradicción, es decir no puedo decirle a un hueso que rote a la derecha en una animación y en otra animación decirle que rote a la izquierda y lanzar las dos animaciones en el mismo tiempo, es de lógica, no crearía errores pero blender ejecutaría una de las dos.Si puedo entre hoy o mañana te haré un video para explicar como se hace, es mejor verlo.
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Lo se, trato de que ambas animaciones no se superpongan a la hora de ejecutarse.
Agradecería inmensamente el hecho de que pudieras hacerme alcance de ese vídeo, seria de gran ayuda.
Agradecería inmensamente el hecho de que pudieras hacerme alcance de ese vídeo, seria de gran ayuda.
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Buenas, te pongo el enlace del video, lo siento pero me explico fatal, si tienes alguna duda coméntamela.
Saludos.
Ah!, te pongo un enlace también a foro3d.com en la sección de scripts para un ejemplo que tengo puesto de playAction().
https://www.youtube.com/watch?v=JBHFrulQYTA
https://www.foro3d.com/f115/playaction- ... 26590.html
Saludos.
Ah!, te pongo un enlace también a foro3d.com en la sección de scripts para un ejemplo que tengo puesto de playAction().
https://www.youtube.com/watch?v=JBHFrulQYTA
https://www.foro3d.com/f115/playaction- ... 26590.html
Re: Movimiento de un esqueleto Dirigido por Otro esqueleto
Agradezco la ayuda, tratare en lo posible poner en practica lo que me has mostrado, contaré sobre los resultados en breve.