Cómo hacer que mi personaje se incline hacia arriba y abajo junto con MouseLook

Hiroshi Daigh - 10/06/2014 19:46
Hola qué tal soy nuevo en este foro y mi consulta es la siguiente:
Estoy creando un juego multiplayer en primera persona en Blender, tengo un modelo con un esqueleto emparentado, en el tiene un cubo que se encarga de la colisión y un plano, tengo los logics bricks configurados para mover el personaje con las teclas, también tengo el script que mueve la cámara en distintas posiciones y emparentado a un empty.

Mi problema es el siguiente, y es que quiero que mi personaje se incline mirando hacia arriba o abajo según la posición de rotación de la cámara junto con el MouseLok, o hacer que la animación corra dependiendo si la cámara rota hacia arriba o hacia abajo, pero no sabría cómo hacerlo, quiero que el modelo se incline o deforme esto lo quiero para qué también pueda verse la inclinación de otros personajes para ser más real la cosa. Espero que mi idea les pueda dar a entender que es lo que quiero. Desde ya agradezco su cooperación.

He probado con una animación y propertys, pero el inconveniente lo tengo cuando se cruzan los renders, getWindow.Width y height ya qué mientras quiero hacer la animación que se doble hacía abajo el otro eje no me deja ya que el getWindow establece a 0 las coordenadas para qué el mouse puede permanecer en el medio y se me hace un quilombo.

Dejare una imagen de mi proyecto de lo que quiero lograr.


🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #194884



-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #194884

LaUrA-28 - 04/01/2026 12:30
Para lograr que tu personaje se incline hacia arriba y abajo junto con el MouseLook en Blender, necesitas aplicar la rotación de la cámara al hueso del cuello o la cabeza del esqueleto. El enfoque moderno y recomendado es utilizar Python y el sistema de lógica de Blender, evitando depender exclusivamente de Logic Bricks para mayor control.

Primero, asegúrate de que tu cámara está controlada por un script de MouseLook. Este script normalmente ajusta la rotación local de la cámara (o del empty al que está emparentada) en el eje X (para mirar arriba/abajo). Necesitas acceder a ese valor de rotación.

Crea un script de Python en un controlador lógico. Asigna este controlador a un objeto siempre activo, como el empty padre de la cámara o el propio personaje. En el script, obtén las referencias a los objetos clave: la cámara (o el empty que rota verticalmente) y el hueso del personaje que quieres inclinar (por ejemplo, el hueso de la cabeza o el torso superior).

Dentro de un bucle continuo (usando un controlador "Always" pulsado a un sensor "Python"), lee la rotación en el eje X de la cámara. Es crucial usar rotación local (camera.localOrientation.to_euler() o similar) para obtener el valor correcto. Luego, aplica esta rotación al hueso. No apliques el valor completo directamente, sino una fracción del mismo para que la inclinación del cuerpo sea más sutil que el movimiento de la cámara. Por ejemplo, multiplica el ángulo por 0.3 o 0.5.

Debes limitar el ángulo de inclinación para que sea realista. Define un límite máximo y mínimo (por ejemplo, entre -30 y 30 grados en radianes) usando funciones como min() y max(). Luego, establece la rotación del hueso en el eje X a este valor limitado y escalado. Usa bone.rotation_euler para asignar la rotación en modo Euler.

Para los personajes de otros jugadores en multijugador, este valor de inclinación calculado debe ser una variable que se sincronice a través de la red. En tu lógica de red, envía la rotación del hueso (o el ángulo calculado) junto con la posición y rotación general del personaje. En el cliente receptor, aplica este valor recibido directamente al hueso del personaje remoto para que todos vean la inclinación correctamente.

Un error común es intentar usar getWindowWidth/Height para esto, lo cual no es necesario. El enfoque correcto es basarse únicamente en la rotación ya calculada por tu script de MouseLook. Olvida esas funciones para este propósito específico.

Para herramientas actuales, si tu proyecto lo permite, considera migrar a Godot o Unreal Engine 5, que tienen sistemas de animación en red y control de cámara/cuerpo integrados y más robustos para multijugador. Pero dentro de Blender, la solución está en un script Python que vincule la rotación de la cámara a la rotación de un hueso, con límites y factor de escala.