Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Rotación del jugador en 3° persona.

Iniciado por Dingodile45, Marzo 27, 2018, 09:42:28 PM

Tema anterior - Siguiente tema
Marzo 27, 2018, 09:42:28 PM Ultima modificación: Marzo 27, 2018, 10:55:21 PM por Dingodile45
Hola!


Necesito algo de ayuda en realizar un script (Preferiblemente en JavaScript) para que un InGameObject (En este caso, el del jugador) pueda rotar usando el mouse en un eje, haciendo que el jugador rote de lado a lado usando el mouse, esto se utiliza en juegos como Skyrim y Oblivion cuando la tercera persona está activa, tengo una cámara orbital para el jugador que lo sigue hacia arriba y hacia abajo, también hacia los lados, y lo que quiero es que la cámara siempre muestre la espalda del jugador.


Muchisimas gracias de antemano!

Marzo 27, 2018, 11:18:18 PM #1 Ultima modificación: Marzo 27, 2018, 11:18:49 PM por lightbug
Cita de: Dingodile45 date=1522179748Necesito algo de ayuda en realizar un script (Preferiblemente en JavaScript) para que un InGameObject (En este caso, el del jugador) pueda rotar usando el mouse en un eje, haciendo que el jugador rote de lado a lado usando el mouse, esto se utiliza en juegos como Skyrim y Oblivion cuando la tercera persona está activa, tengo una cámara orbital para el jugador que lo sigue hacia arriba y hacia abajo, también hacia los lados, y lo que quiero es que la cámara siempre muestre la espalda del jugador.
   


necesitas ayuda? porque por lo que leo en el post describiste todo como para que alguien se ponga a trabajar y te envíe el script, quizas no fue tu intención pero suena así ya que ni mencionaste inconvenientes ni nada que has tenido.
 
Podrías empezar mirando la doc de rotación, fijate los métodos de transform (pista RotateAround )  ...
 
https://docs.unity3d.com/ScriptReference/Transform.html
 
... y también los de Quaterinion para generar quaternions (basicamente orientaciones unicas , matrices no preparadas para ser leidas directamentes sino "acumuladas" en base a entradas del programador) ...
 
https://docs.unity3d.com/ScriptReference/Quaternion.html
 
... con todo esto podés o directamente Rotar tu objeto o asignar a transform.rotation un quaternion (o acumulaciones de estos). Recordá que un quaternion afecta a otro por multiplicación de quaternions, y el orden importa.
 
https://docs.unity3d.com/Manual/QuaternionAndEulerRotationsInUnity.html
 
Con esto no solo vas a poder hacer esto en particular sino te va a despejar las dudas de cualquier rotación que desees.
 
Como en tercera persona como mencioné antes fijate el RotateAround o en quaternion fijate el AngleAxis o AxisAngle o relacinado con rotar alrededor de un punto.
 
Saludos
 
PD: dejá el JS que ya murió jajaj

Cita de: lightbug date=1522185498necesitas ayuda? porque por lo que leo en el post describiste todo como para que alguien se ponga a trabajar y te envíe el script, quizas no fue tu intención pero suena así ya que ni mencionaste inconvenientes ni nada que has tenido.
   
   
      Podrías empezar mirando la doc de rotación, fijate los métodos de transform (pista RotateAround )  ...
   
   
      https://docs.unity3d.com/ScriptReference/Transform.html
   
   
      ... y también los de Quaterinion para generar quaternions (basicamente orientaciones unicas , matrices no preparadas para ser leidas directamentes sino "acumuladas" en base a entradas del programador) ...
   
   
      https://docs.unity3d.com/ScriptReference/Quaternion.html
   
   
      ... con todo esto podés o directamente Rotar tu objeto o asignar a transform.rotation un quaternion (o acumulaciones de estos). Recordá que un quaternion afecta a otro por multiplicación de quaternions, y el orden importa.
   
   
      https://docs.unity3d.com/Manual/QuaternionAndEulerRotationsInUnity.html
   
   
      Con esto no solo vas a poder hacer esto en particular sino te va a despejar las dudas de cualquier rotación que desees.
   
   
      Como en tercera persona como mencioné antes fijate el RotateAround o en quaternion fijate el AngleAxis o AxisAngle o relacinado con rotar alrededor de un punto.
   
   
      Saludos
   
   
      PD: dejá el JS que ya murió jajaj
   


Hola! Antes que nada perdón por colocar mi pregunta en Interfaz en vez de Scripting.


Disculpa si me expliqué así, sinceramente no fue mi intención. He tratado algo de crear la script, pero al usar los GetAxis del Mouse y hacer que el objeto rote en Vector3 me enredo y no pasa nada en cuanto la rotación del personaje, literalmente no ocurre nada de nada, no he probado el Quaternion asi que supongo que por ahí debe de estar lo que me ayudará a hacerlo.


Muchisimas gracias por pasarme esas páginas web! Las leeré detalladamente para ver que de nuevo puedo aprender y utilizar en los scripts.


Por ultimo, me gusta más el JavaScript porque lo siento más sencillo, he visto en varios foros que nadie lo utiliza y que lo hacen principalmente mediante el C#, pero supongo que todo lo que hace el C# lo puede hacer el JavaScript.


Saludos y gracias!

Marzo 28, 2018, 02:58:50 AM #3 Ultima modificación: Marzo 28, 2018, 03:00:19 AM por lightbug
Cita de: Dingodile45 date=1522196040Disculpa si me expliqué así, sinceramente no fue mi intención. He tratado algo de crear la script, pero al usar los GetAxis del Mouse y hacer que el objeto rote en Vector3 me enredo y no pasa nada en cuanto la rotación del personaje, literalmente no ocurre nada de nada, no he probado el Quaternion asi que supongo que por ahí debe de estar lo que me ayudará a hacerlo.
   


Mirá te digo lo que siempre digo vos querés relacionar input, con rotacion con quaternions (porque necesitás lo del "around" ) y también vas a necesitar dar el toque a la orientación (depende del tipo especifico de rotación que estás buscando), pero resulta que si metés en juego todo esto es muy probable que si falla la input por ej, nunca vas a ver el efecto de los otros, aunque estén bien. Entonces no tentemos al diablo, anda por lo básico:
 
Que entendés del Ej de la página? este:
 

using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
    void Update() {
        transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);
    }
}

 
dice : "Rotates the transform about axis passing through point in world coordinates by angle degrees. "
 
eso te dice que te parás en un punto (en el mundo), seteas un eje (up, down, forward o el que quieras) y le mandas la cantidad de angulos que rotás.
 
Tampoco siempre es tan así, yo personalmente con los quaternions me peleo mas de una vez por más que los he usado por años y "los entiendo", pero resulta que al final siempre pasa algo.
 
Ahora, en tu caso, si querés rotar tipo 3ra persona, cual sería tu eje derotación ? (Vector3.up o podría coincidir con transform.up del player ... Vector3-up y transform.up son cosas distintas) cual sería el punto por el cual rotás? El player ( + una cierta altura para que quede lindo) y el angulo de rotación? el valor capturado cuadro a cuadro:
 
Un EJ que rota una referencia (no necesariamente la camara, podés usar esto para suavizar la pos de la cámara con esta ref e independizarla):
 

m_targetReference.RotateAround (m_target.position, Vector3.up, Input.GetAxisRaw ("Mouse X") * dt_ms);

 
dt_ms es DeltaTime en ms (o sea x1000) , la verdad no se por qué estaba estaba eso allí pero bueno...
 
Cita de: Dingodile45 date=1522196040Por ultimo, me gusta más el JavaScript porque lo siento más sencillo, he visto en varios foros que nadie lo utiliza y que lo hacen principalmente mediante el C#, pero supongo que todo lo que hace el C# lo puede hacer el JavaScript.
   


Mirá, no va en que te guste o no, Unity ya no soportará (es decir ni siquiera te andará) nada de UnityScript (o el JS que usan) así que todo en lo que te acostumbres en JS será una perdida de tiempo, tendrás que aprender C# a las buenas o a las malas.
 
fijate: https://blogs.unity3d.com/es/2017/08/11/unityscripts-long-ride-off-into-the-sunset/
 
 

Etiquetas: