Gracias Gracias:  0
Resultados 1 al 1 de 1

Tema: Blender Game Engine --andando--como mover el actor

  1. #1
    Administrador y fundador. Avatar de 3dpoder
    Fecha de ingreso
    Apr 2002
    Mensajes
    15,459

    Blender Blender Game Engine --Andando--como mover el actor

    Blender Game Engine ---Andando!

    como mover el actor diferentes alternativas y consecuencias

    Bueno! de nuevo en carrera. Si ya conseguis distinguir entre un actor dinamico y uno estático, y entendes algo de las propiedades dinámicas de los materiales, no vas a tener problema en seguir esta guia.
    Como escenario de pruebas, tome una caja (cubo) e inverti las normales hacia adentro (para que desde afuera sean tranparentes y nos permitan ver el contenido y sirvan de fondo) y las texturize (similar a la técnica rotoscopia). le agregue nuestro actor dinamico (a partir de ahora la “nave”) que por cuestiones de normalización de criterios, el “adelante” de la nave coincide con el eje Y del objeto y visto desde arriba, el eje X apunta a la derecha del objeto. Con esto conseguiremos que mi adelante sea el tuyo también, y así.



    Presumo que ya sabes que es un Logic Brik (LB), y como agregarlos a los actores. Tanto a la nave como al cubo (que bautise “suelo”) tienen aplicado material, con los valores que tiene por defecto un material nuevo.
    Con la nave seleccionada, entrar a la ventana del engine (el packman azul) y... que clase de movimiento queremos?
    Si solo deseamos que se desplaze en una dirección (por ejemplo adelante) bastara con aplicarle una fuerza en el eje Y (como es en la dirección positiva del eje, será una fuerza positiva). Observando la imagen de arriba, van a notar que el eje Y de la nave no cincide con el eje Y global (es hacia adonde apunta el dedo de mi hermano, no es el mio).





    Eso es importante cuando la “L” del actuador no esta presionada. presionada=local no presionada=global. si esta local, la fuerza o desplazamiento (según sea el caso) se aplica en la dirección del eje del objeto, si es global, en la dirección del eje global. por defecto es como aparece en la imagen de arriba (donde escribi “local”y “global”al costado y los ejes debajo de cada columna).
    Volviendo al ejemplo, conecte un sensor keyboard(uparrou en pulse mode,los tre puntitos arriba)>controlador and>actuador motion (force 10 en el eje Y) consiguiendo que mi nave se desplaze hacia adelante! (si no sabes como hacerlo, entonces busca algún tutorial más básico para aprender)
    Si tu nave no se desplaza hacia adelante, o lo hace hacia otro lado, revisa el tutorial desde el principio, y verifica el eje del objeto Y coincida con el frente de mesh del mismo.
    La nave se desplazara hacia adelante cada vez más rápido si mantenemos presionada la flecha “arriba” hasta impactar con algún objeto en su camino o caer al vacio. Lo que sucede es que le aplicamos una FUERZA, un empujon, y este empujon se repite varias veces por segundo si mantenemos presionada la tecla en cuestion. para que el impulos se aplique una sola vez es necesario desactivar el pulse mode, y entonces solo dará un empujon por cada presión de la tecla. A mayor fuerza, mayor empujon que se transformara en mayor velocidad. Si en lugar de aplicar una fuerza en el eje Y lo hacemos en el eje X, el desplazamiento será lateral. Probar agregando otro juego de sensor>controlador>actuador, pero con otra tecla. para seleccionar la tecla a la que responde el sensor, simplemente presionar el botón izquierdo del mouse en el renglon gris a la derecha de “Key” e inmediatamente presional la tecla que deseamos actibve el sensor. Hay más opciones de keyboard, pero para otro tutorial.
    Si aplicamos la fuerza en el eje Z, que en este caso mira hacia arriba, sucedera que... por defecto la gravedad (no de grave, sino de atracción gravitacional) del engine es de 9.8 metros sobre segundo cuadrado (en realidad la unidad la supongo yo, para que coincida con la gravedad promedio terrestre y sea más comodo de usar), y tiene una dirección constante de menos Z, es decir que todos los objetos dinamicos son afectados por una fuerza de 9.8 hacia el eje -Z global (se puede modificar la magnitud desde la ventana World o la magnitud y la dirección mediante composición de fuerza en los tres ejes desde python) ...retomando, si la fuerza positiva en el eje Z es menor o igual que 9.8, no observaremos diferencia, pero si es mayor a 9.8 entonces nuestro actor se desplazara hacia arriba con velocidad creciente. por ejemplo, con fuerza Z = 9.9 se elevara muy lentamente al principio.
    Retomando la fuerza en el eje Y, como hasta ahora nuestra nave es un objeto no-rigido, no tendrá tendencia a rodar al rozar con el suelo mientras se desplaza (como sucede con cualquier cuerpo esférico, no olvidemos que a los efectos del engine, por lo menos hasta la versión 2.25, la evaluacion física se calcula tomando la esfera que rodea el centro del objeto de radio Size). Si activamos Rigid Body, la nave... es que esta loca? comenzara a oscilar hacia adelante y hacia atrás hasta que comienze una carrera demente por el escenario. Lo que sucedió es que aplica la fuerza en el eje Y positivo de la nave... que además sufre un torque (fuerza aplicada para hacer girar) que proviene de el rozamiento de las superficies de la nave y del suelo (como llevar un aro o barril rodando) y esta relacionado con el coeficiente de rozamiento de los materiales de los objetos. Si el suelo tiene rozamiento cero, entonces no habrá torque, no habrá giro extraño... pero la nave no se detendrá al soltar el botón, que que las fuerzas que detienen a los cuerpos en movimiento son las de rozamiento o friccion. También como amortiguacion del movimiento se puede utilizar Damp. Además, si no hay rozamiento, la nave nunca podrá girar correctamente (dejemos los giros para más adelante).
    Que pesado que me estoy poniendo con las fuerzas y la física! mejor cambienos a movimientos más sinteticos, simples.
    podemos desplazar el objeto en cualquier dirección con dLoc (posición relativa), que aumenta o disminuye la posición del objeto en la cantidad y eje que elijamos. Estar atento con local y global!. La nave se va a mover contidades exactas, y no va a tener consecuencias secundarias como inercia o giros imprevistos. Claro, tampoco conviene aplicarle desplazamientos muy grandes, ya que al pasar INSTANTANEAMENTE de una posición a otra, es perfectamente capaz de atravesar paredes y actores, con resultados no deseados, además de perder la sensación de continuidad en el desplazamiento.
    Y las rotaciones? o siempre vamos a mirar para alla?
    Los más listos ya se habrán fijado que tenemos casilleros dRot y Torque. Adivinaron, dRot aplica rotaciones en el eje (por ejemplo si aplicamos una rotación dRot en el eje Z, que es el eje que mira hacia arriba, la nave girara hacia la derecha o hacia la izquierda, en cambio si aplicamos la misma rotación al eje x, siempre local, la nave girara levantando o bajando la nariz). para que la nave gire exactamente 90 grados, la rotación debera ser de 45 (?) esdecir, de la mitad del ángulo medido en grados, por motivos que no comprendo, esto es así.
    Para Torque, es como si aplicaramos una fuerza, como si tomaramos el alambre del eje al que lo aplicamos con dos dedos y lo impulsamos como a un trompo. Y al igual que este, se ira perdiendo velocidad hasta detenerse, en función de su masa y de los factores de rozamiento.
    Aun nos quedan dos filas por probar... son linV y angV, que podemos traducir como Velocidad Linear y Velocidad Angular. directamente se configura la velocidad en un eje (local o global) a lo largo del mismo o al rotar en el.
    Es el podemos elegir si deseamos que nuestra nave avance con continuidad, con inercia, pero a una velocidad constante, que no se incremente ni disminuya mientras la estamos aplicando. (con Force, la velocidad se incrementaba a cada instante, no aplicabamos una velocidad sino una aceleración). Tenemos además la opción de que SI incremente la Velocidad Linear a la existente precionando el botón add a la izquierda de la fila linV.
    Y lo mismo podemos acotar respecto de angV, aunque sin la opción add.
    Mejor que decir es hacer
    Vamos a algo practico que nos permita apreciar diferencias.
    Si nuestranave se encuentra en la situcion de tener que sortear una rampa para avanzar en su peligrosa mision




    vamos aintentar primero aplicando una fuerza Y positiva a nuestro actor dinamico “nave” de masa 1 y size 1, con el rozamiento en 0.05 tanto para el material de la nave como para el escenario y la rampa.




    Pero que paso? nuestra nave comienza a avanzar lentamente, timidamente intenta la rampa... y retrocede. Un fracaso. la aceleración de 1 es insuficiente para alcanzar la velocidad de escape necesaria para subir toda la rampa, y finalmente la ley de gravedad gana. en rojo el reto, en verde el resultado.





    Con fuerza 2 no creo que lo logre, mejor probemos con fuerza 3...



    (que apurado estoy, ni siquiera edito bien las imágenes!)


    Ahora cambiemos a dLoc. Borremos el valor de Force y escribamos en dLoc (columna Y) 0.10, es decir, que avance un décimo de Blender Unit (un cuadradito Blender de la grilla cuando esta mide 1)




    Y probamos el resultado... FRACASO ESTRUENDOSO!!!
    La nave avanza hasta la rampa lenta y constante, pero al llegar no puede subir más que unos milimetros miserables y retrocede acobardada (gráfico idem del fracaso con force 1). Lo que sucedió es que la nave avanza un décimo de unidad (en este caso un décimo de su propio Size o radio), lo que en el plano le representa avanzar a velocidad constante, cada iteracion (o instante del engine) avanza identica distancia. Pero al avanzar sobre un plano inclinado, se agrega al avance horizontal una fuerza hacia abajo y atrás por la acción de la gravedad, en este caso mayor em cantidad de desplazamiento que el avanze. no olvidemos que el engine continua evaluando al actor aunque lo que le aplicamos fuera un desplazamiento y no una fuerza. Por esto, si estaría en el vacio caería como cualquier otro actor dinamico con el adicional del movimiento en el eje y (la componente de ambas acciones).
    Para no extenderme el lector podrá en este punto estudiar la alternativa de aumentar dLoc y probar linV por su cuenta y riesgo, variando magnitudes para ver que sucedera en cada caso.
    Voy a tocar muy brevemente ahora el tema de
    Subir la rampa, saltar el pozo.
    Primero establescamos el escenario. En las mismas condiciones que veniamos manejando hasta ahora, pero con un foso de tres unidades de ancho. Si caemos, nunca nadie volvera a saber de nosotros (en un espacio virtual, existen los agujeros sin fondo, tengan mucho miedo. Si no lo toman en cuenta en un juego y no tienen tecla de abortar, la caida será eterna en serio)




    configuramos linV en X=0.0 Y=4.5 Z=4.0




    y el salto al precionar la tecla “Uparrow” será exitoso!...se puede probar con force para obtener un resultado similar, con la componente de dos fuerzar perpendiculares, se obtiene una resultante (suma de vectores, se puede hacer con lápiz y papel).
    Pero lo que me preocupa es que fue demaciado facil... les aseguro que olvidamos algo.
    Probemos de nuevo solo que precionemos varias veces la tecla de saltar, o activemos el pulse mode (da lo mismo). Oops! la nave salta y salta en al aire, ya no necesita tocar tierra y el peligro de caer por los pozos es casi nulo, lo que arruinara nuestro juego de principio a fin. Como evitarlo? ya mismo aporto una alternativa al “salto compulsivo”
    Agregamos un sensor “Touch” y conectarlo al controlador And existente. Configurar el casillero MA (material) con el material del suelo (en este caso los bloques del suelo están con dicho material, es conveniente que todo lo que sea pared tenca asignado otro material para que ella nave no trepe por las paredes). y convendria asignar un botón para avanzar y otro para saltar.




    Resalte todo lo que debemos tener en cuenta: la tecla con la que se activa el sensor, si al mantener precionada la tecla la activacion se repite (pulse mode), el material que debe estar tocando la nave al momento de presionar la tecla de saltar para que efectivamente aplique un impulos hacia arriba. Por separado el impulos hacia adelante, y cada Logic Brik con su nombre, para poder saber que función cumple (esto se puede volver muy confuso, hay que desarrollar criterios, normas y documentación que nos permitan “mapear” el trabajo realizado). Ahora se puede avanzar y saltar en forma independiente, y solo saltara cuando la condicion tecla de saltar este presionada al mismo tiempo que la nave este tocando el material suelo. PRACTICA PRACTICA PRACTICA ETC.



    ... y hasta la próxima!!!



    CJD (Claudio Javier Dobniewski)


    Última edición por 3dpoder; 14-10-2007 a las 01:01
    Si vas a subir un trabajo al foro, hazlo adjuntando la imagen, archivo, vídeo o lo que sea, no publicando enlaces de otros sitios. http://www.foro3d.com/f45/forma-correcta-de-insertar-imagenes-y-archivos-en-nuestro-mensaje-98930.html

    |Agradecer cuando alguien te ayuda es de ser agradecido|

Temas similares

  1. Blender Blender Game engine en Red
    Por 3dpoder en el foro Blender Art Magazine nº 14
    Respuestas: 0
    Último mensaje: 08-04-2014, 09:30
  2. Blender como anclar un objeto sin emparentar blender game engine
    Por matamba100 en el foro Animación y Rigging
    Respuestas: 4
    Último mensaje: 05-08-2012, 14:33
  3. Blender como crear metal cromado para blender game engine
    Por matamba100 en el foro Materiales y Texturizado
    Respuestas: 5
    Último mensaje: 30-07-2012, 09:22
  4. Game engine Blender
    Por MAYAMAN en el foro Videojuegos
    Respuestas: 2
    Último mensaje: 14-03-2010, 20:32
  5. Blender game engine
    Por GEKKONIDAE en el foro Blender
    Respuestas: 21
    Último mensaje: 09-10-2008, 14:27

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •