Español (ES)
Usuario anónimo
Iniciar sesión | Regístrate gratis
Foro de Desarrollo de Videojuegos

Responder / Comentar
Foro Desarrollo de Videojuegos
Por Juan-poder-azure3009
Hace 5 años / Respuestas: 29 / Lecturas: 950

Como puedo saber la diferencia entre una dirección y otra?

Pues eso que quiero girar al personage mientras ataco y para ésto necesito saber la diferencia respecto a donde muevo el joystick o por lo menos saber si ésta es hacia la izquierda de donde está mirando el personaje o a la derecha.

ejemplo 1: el personje mira hacia adelante, el yoistick hacia la izquierda(aqui rotaria el personaje hacia la izquierda)

ejemplo 2: el personaje mira hacia la derecha, el yoistick hacia adelante(aqui rotaria hacia la izquierda)

En resumen sólo necesito saber si tengo que girarlo en positivo o en negativo según en la posición que se encuentre el personaje respecto al joystick.

va @Snakey a ver si tu lo sabes, tu que dices que Unity es fácil 
Noleod6335Hace 5 años1
Si usas el método (no obsoleto) de animación, te hará el cambio él solito. Por lo demás, no entiendo muy bien el problema. ¿A qué te refieres con "adelante"? Me vendría bien saber qué tipo de juego es.

A ver, la dirección la puedes sacar fácilmente (con la rotación del objeto mismo) y de ahí mirar hacia dónde estás mandando el joystick. Haces la resta vectorial de ambos y el que sea menor, debería ser el lado para el que gires (si lo haces manualmente).

EDIT: Por cierto, el Joystick es un input. Si vas a la pestaña de inputs del editor, tendrás por ahí el joystick. En un sidescroller, por ejemplo, A y D son -1 y 1, respectivamente. En cambio, el joystick va de -1 a 1 (pasando por todos los puntos intermedios). Eso se realiza cogiendo el input horizontal / vertical.
EDITADO EL 12-06-2018 / 15:07 (EDITADO 1 VEZ)
Juan-poder-azure3009Hace 5 años2
@Noleod
Mostrar cita
Si usas el método (no obsoleto) de animación, te hará el cambio él solito. Por lo demás, no entiendo muy bien el problema. ¿A qué te refieres con "adelante"? Me vendría bien saber qué tipo de juego es. A ver, la dirección la puedes sacar fácilmente (con la rotación del objeto mismo) y de ahí mirar hacia dónde estás mandando el joystick. Haces la resta vectorial de ambos y el que sea menor, debería ser el lado para el que gires (si lo haces manualmente). EDIT: Por cierto, el Joystick es un input. Si vas a la pestaña de inputs del editor, tendrás por ahí el joystick. En un sidescroller, por ejemplo, A y D son -1 y 1, respectivamente. En cambio, el joystick va de -1 a 1 (pasando por todos los puntos intermedios). Eso se realiza cogiendo el input horizontal / vertical.
Si, eso habia pensado, ahora el problema que tengo es que al usar el Get Vector 3 me sale un error. éste es el script: using UnityEngine; using CnControls; [RequireComponent(typeof(CharacterController))] public class ThidPersonExampleController : MonoBehaviour { private Transform _mainCameraTransform; private Transform _transform; float f; private CharacterController _characterController; private Animator anim; private bool disponible; private void Awake() { _mainCameraTransform = Camera.main.GetComponent(); _characterController = GetComponent(); anim = GetComponent(); } public void Update() { var inputVector = new Vector3(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical")); Vector3 movementVector = Vector3.zero; disponible = anim.GetBool("disponible"); if (disponible == true && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); _transform.forward = movementVector; anim.SetBool("Bool", true); _characterController.Move(movementVector * Time.deltaTime * 5); } else if (disponible == false && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); [b] Vector3 _tdirection = GetComponent(); Vector3 player = _mainCameraTransform.TransformDirection(_tdirection); player.Normalize(); f = player.x; _transform.Rotate(Vector3.right, f);[/b] Debug.Log("movementVector = " + movementVector + " inputVector = " + inputVector); } else { anim.SetBool("Bool", false); } } } el último if entra en juego cuando estoy atacando y muevo el joistick al mismo tiempo que es cuando queria que se ejecutáse, los otros conditionals son para moverse de forma normal(cosa que funciona bien). lo de la camera es para marcar la dirección según el angulo de la cámara respecto al personaje. El juego es un Hack & Slash 3D con camara y controles de consola aunque para android(vamos que te puedes mover libremente con el joystick y rotar la camara arrastrando el dedo) Voy a ver ahora como hago para que no me salga el error del Vector 3 ya que no me deja hacer Get sobre él. El script aún no lo he terminado debido a lo del Vector3(se que le faltan cosas, pero es que no puedo ver como funciona) El error es éste: ArgumentException: GetComponent requires that the requested component 'Vector3' derives from MonoBehaviour or Component or is an interface. He probado a declarar el Vector 3 antes del Start() pero sucede igual. Ése es el gran problema que tengo ahora, no poder saber el Vector3 del transform.direction actual del personaje ya que no puedo hacer get Vector3.
EDITADO EL 12-06-2018 / 20:27 (EDITADO 3 VECES)
Noleod6335Hace 5 años3
@Juan-poder-azure
Mostrar cita
@Noleod
Mostrar cita
Si usas el método (no obsoleto) de animación, te hará el cambio él solito. Por lo demás, no entiendo muy bien el problema. ¿A qué te refieres con "adelante"? Me vendría bien saber qué tipo de juego es. A ver, la dirección la puedes sacar fácilmente (con la rotación del objeto mismo) y de ahí mirar hacia dónde estás mandando el joystick. Haces la resta vectorial de ambos y el que sea menor, debería ser el lado para el que gires (si lo haces manualmente). EDIT: Por cierto, el Joystick es un input. Si vas a la pestaña de inputs del editor, tendrás por ahí el joystick. En un sidescroller, por ejemplo, A y D son -1 y 1, respectivamente. En cambio, el joystick va de -1 a 1 (pasando por todos los puntos intermedios). Eso se realiza cogiendo el input horizontal / vertical.
Si, eso habia pensado, ahora el problema que tengo es que al usar el Get Vector 3 me sale un error. éste es el script: using UnityEngine; using CnControls; [RequireComponent(typeof(CharacterController))] public class ThidPersonExampleController : MonoBehaviour { private Transform _mainCameraTransform; private Transform _transform; float f; private CharacterController _characterController; private Animator anim; private bool disponible; private void Awake() { _mainCameraTransform = Camera.main.GetComponent(); _characterController = GetComponent(); anim = GetComponent(); } public void Update() { var inputVector = new Vector3(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical")); Vector3 movementVector = Vector3.zero; disponible = anim.GetBool("disponible"); if (disponible == true && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); _transform.forward = movementVector; anim.SetBool("Bool", true); _characterController.Move(movementVector * Time.deltaTime * 5); } else if (disponible == false && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); [b] Vector3 _tdirection = GetComponent(); Vector3 player = _mainCameraTransform.TransformDirection(_tdirection); player.Normalize(); f = player.x; _transform.Rotate(Vector3.right, f);[/b] Debug.Log("movementVector = " + movementVector + " inputVector = " + inputVector); } else { anim.SetBool("Bool", false); } } } el último if entra en juego cuando estoy atacando y muevo el joistick al mismo tiempo que es cuando queria que se ejecutáse, los otros conditionals son para moverse de forma normal(cosa que funciona bien). lo de la camera es para marcar la dirección según el angulo de la cámara respecto al personaje. El juego es un Hack & Slash 3D con camara y controles de consola aunque para android(vamos que te puedes mover libremente con el joystick y rotar la camara arrastrando el dedo) Voy a ver ahora como hago para que no me salga el error del Vector 3 ya que no me deja hacer Get sobre él. El script aún no lo he terminado debido a lo del Vector3(se que le faltan cosas, pero es que no puedo ver como funciona) El error es éste: ArgumentException: GetComponent requires that the requested component 'Vector3' derives from MonoBehaviour or Component or is an interface. He probado a declarar el Vector 3 antes del Start() pero sucede igual. Ése es el gran problema que tengo ahora, no poder saber el Vector3 del transform.direction actual del personaje ya que no puedo hacer get Vector3.
Hostia, nunca he hecho un GetComponent, ¿eso funciona? Generalmente se usan otros métodos para obtenerlo. Entiendo que lo que quieres hacer es... ¿Mover la cámara en la dirección en la que ataca? Deberías coger la rotación del quaternion del personaje y luego meterla en la cámara. Quizás unas imágenes me ayudarían a entenderlo mejor.
Juan-poder-azure3009Hace 5 años4
@Noleod
Mostrar cita
@Juan-poder-azure
Mostrar cita
@Noleod
Mostrar cita
Si usas el método (no obsoleto) de animación, te hará el cambio él solito. Por lo demás, no entiendo muy bien el problema. ¿A qué te refieres con "adelante"? Me vendría bien saber qué tipo de juego es. A ver, la dirección la puedes sacar fácilmente (con la rotación del objeto mismo) y de ahí mirar hacia dónde estás mandando el joystick. Haces la resta vectorial de ambos y el que sea menor, debería ser el lado para el que gires (si lo haces manualmente). EDIT: Por cierto, el Joystick es un input. Si vas a la pestaña de inputs del editor, tendrás por ahí el joystick. En un sidescroller, por ejemplo, A y D son -1 y 1, respectivamente. En cambio, el joystick va de -1 a 1 (pasando por todos los puntos intermedios). Eso se realiza cogiendo el input horizontal / vertical.
Si, eso habia pensado, ahora el problema que tengo es que al usar el Get Vector 3 me sale un error. éste es el script: using UnityEngine; using CnControls; [RequireComponent(typeof(CharacterController))] public class ThidPersonExampleController : MonoBehaviour { private Transform _mainCameraTransform; private Transform _transform; float f; private CharacterController _characterController; private Animator anim; private bool disponible; private void Awake() { _mainCameraTransform = Camera.main.GetComponent(); _characterController = GetComponent(); anim = GetComponent(); } public void Update() { var inputVector = new Vector3(CnInputManager.GetAxis("Horizontal"), CnInputManager.GetAxis("Vertical")); Vector3 movementVector = Vector3.zero; disponible = anim.GetBool("disponible"); if (disponible == true && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); _transform.forward = movementVector; anim.SetBool("Bool", true); _characterController.Move(movementVector * Time.deltaTime * 5); } else if (disponible == false && inputVector.sqrMagnitude > 0.001f) { movementVector = _mainCameraTransform.TransformDirection(inputVector); movementVector.y = 0f; movementVector.Normalize(); [b] Vector3 _tdirection = GetComponent(); Vector3 player = _mainCameraTransform.TransformDirection(_tdirection); player.Normalize(); f = player.x; _transform.Rotate(Vector3.right, f);[/b] Debug.Log("movementVector = " + movementVector + " inputVector = " + inputVector); } else { anim.SetBool("Bool", false); } } } el último if entra en juego cuando estoy atacando y muevo el joistick al mismo tiempo que es cuando queria que se ejecutáse, los otros conditionals son para moverse de forma normal(cosa que funciona bien). lo de la camera es para marcar la dirección según el angulo de la cámara respecto al personaje. El juego es un Hack & Slash 3D con camara y controles de consola aunque para android(vamos que te puedes mover libremente con el joystick y rotar la camara arrastrando el dedo) Voy a ver ahora como hago para que no me salga el error del Vector 3 ya que no me deja hacer Get sobre él. El script aún no lo he terminado debido a lo del Vector3(se que le faltan cosas, pero es que no puedo ver como funciona) El error es éste: ArgumentException: GetComponent requires that the requested component 'Vector3' derives from MonoBehaviour or Component or is an interface. He probado a declarar el Vector 3 antes del Start() pero sucede igual. Ése es el gran problema que tengo ahora, no poder saber el Vector3 del transform.direction actual del personaje ya que no puedo hacer get Vector3.
Hostia, nunca he hecho un GetComponent, ¿eso funciona? Generalmente se usan otros métodos para obtenerlo. Entiendo que lo que quieres hacer es... ¿Mover la cámara en la dirección en la que ataca? Deberías coger la rotación del quaternion del personaje y luego meterla en la cámara. Quizás unas imágenes me ayudarían a entenderlo mejor.
No, se ve que eso del GetComponent al Vector 3 no funciona, pero como podria obtenerlo por otro método? Lo que quiero es que mientras ataque si mueves el joistick hacia una dirección te rote el personaje hacia ésa(mientras atacas ya lo tengo configurado para que no puedas mover al personaje) [b]Actualizado:[/b] ya lo he conseguido, por lo visto tenia que hacer get a la transform.rotation del personaje, creia que me iba a dar rotaciones en grados y por lo tanto no me iba a servir pero me da valores de 0 a 1 que es lo que yo queria, ahora ya puedo seguir con el script
EDITADO EL 13-06-2018 / 15:27 (EDITADO 1 VEZ)
1 VOTO
Juan-poder-azure3009Hace 5 años5
Al final no se puede hacer el script sin que tenga bugs ya que en la rotación del personaje que va desde 0 a 1 en una mitad y de 0 a -0.8 en la otra, cuando deberia de ir de 0 a - 1 o -0.9 al menos, bug de Unity, no implementaré éste sistema ya que va a provocar que gire en la dirección contraria cuando esté en ésa rotación (0.9 cuando es -0.9) el personaje, además de que no tiene precisión éste vector3 ya que va de 0.1 en 0.1 y éstos son saltos demasiado largos.
Zafiro121869Hace 5 años6
Por lo que veo, ibas o [b]vas[/b] a implementar un buen sistema de combate, no solo limitarse a atacar en una sola dirección, a ver si consigues otra forma de llevarlo a cabo, lastima que no sepa mucho de programación, si no te echaba una mano sin duda! 

Aveces las cosas más simples son las más difíciles de resolver, a lo mejor solo hay que cambiar algunas cosas en tu script para que funcione  
EDITADO EL 13-06-2018 / 18:01 (EDITADO 1 VEZ)
Juan-poder-azure3009Hace 5 años7
@Zafiro12
Mostrar cita
Por lo que veo, ibas o [b]vas[/b] a implementar un buen sistema de combate, no solo limitarse a atacar en una sola dirección, a ver si consigues otra forma de llevarlo a cabo, lastima que no sepa mucho de programación, si no te echaba una mano sin duda! Aveces las cosas más simples son las más difíciles de resolver, a lo mejor solo hay que cambiar algunas cosas en tu script para que funcione
Hombre podria ver de hacerlo de otra manera pero entre que es muy complicado y que le tengo que meter una serie de conditionals no se si me sale rentable ya que podria repercutir en el rendimiento al ser para android, aparte de que en un punto de la rotación me va a girar al contrario debido a que Unity calcula mal ésa coordenada(me registra la posición -0.9 en 0.9 al estar cerca del 1), aparte que debo sincronizar la dirección a la que giro con la rotación actual de la cámara, si la cámara fuése fija o el personaje estuviése mirando siempre hacia adelante seria más fácil. Aunque gracias por los animos jaja de todas formas seguiré pensando a ver si se me ocurre alguna otra alternativa a ése script(y el que creé a partir de ése) Por cierto si puedes atacar en la dirección que desees es sólo que con el script que queria hacer funcionar podrias rotar al personaje en medio de un combo o ataque.
EDITADO EL 13-06-2018 / 19:23 (EDITADO 2 VECES)
1 VOTO
Snakey317Hace 5 años8
Create una variable que indique hacia donde mira el personaje partiendo de un estado inicial por defecto y cada vez que muevas el joystick en el eje X, inviertes hacia donde esta mirando el personaje dependiendo del valor del X del joystick

en C++ son 3 jodidas lineas

algo asi como:

bool LOOKING = false;   // false = izquierda , true = derecha

//Suponiendo que 0 sea el jostick en posicion centrada

if(coord_EJEX_JOSTICK < 0) LOOKING = false;
else if(coord_EJËX_JOSTICK >0) LOOKING = true;

PINTA_PERSONAJE();
EDITADO EL 13-06-2018 / 23:39 (EDITADO 3 VECES)
Snakey317Hace 5 años9
Cuando llamas al método GetComponent, requiere que el componente del que desea obtener referencia se derive de: MonoBehaviour, Component o sea una interfaz. Vector3 no se deriva de ninguno de ellos, porque su cadena de herencia se ve de la siguiente manera:

      UnityEngine.Vector3
      System.ValueType
      System.Object

aqui hay un usuario que dice tener ese problema
[url]https://answers.unity.com/questions/1468671/derives-from-monobehaviour-or-component-or-is-an-i.html[/url]

este es el codigo que no le funciona

void OnTriggerStay(Collider col)
     {
         //If the wolf stumbles upon any footstep trackers this gets their specific instance and sequence number.
         if (col.gameObject.CompareTag("tracking")) {
             footstepTracking thisFoot = col.GetComponent();
             if (PlayerInSight == false) {
                 this.gameObject.GetComponent  ().destination = nextFootLoc;
             }
         
 
             foreach (GameObject footprint in footTrack){
                 footstepTracking thatFoot = footprint.GetComponent();
                 Debug.Log (thatFoot.Seq);
                 if (thatFoot.Seq == (thisFoot.Seq + 1)) {
                     nextFootLoc = thatFoot.GetComponent ();
                     Debug.Log ("The next footprint is" + thatFoot.Seq);
                 }



y esta es la respuesta con la solucion....a ver si a partir de ahi solucionas tu error



foreach (GameObject footprint in footTrack)
 {
     footstepTracking thatFoot = footprint.GetComponent();
     
     if (thatFoot == null)
         continue;
     
     Debug.Log (thatFoot.Seq);
     if (thatFoot.Seq == (thisFoot.Seq + 1)) 
     {
         nextFootLoc = thatFoot.transform.position;
         Debug.Log ("The next footprint is" + thatFoot.Seq);
         break;
     }
 }
EDITADO EL 14-06-2018 / 00:02 (EDITADO 4 VECES)
Juan-poder-azure3009Hace 5 años10
@Snakey
Mostrar cita
Create una variable que indique hacia donde mira el personaje partiendo de un estado inicial por defecto y cada vez que muevas el joystick en el eje X, inviertes hacia donde esta mirando el personaje dependiendo del valor del X del joystick en C++ son 3 jodidas lineas algo asi como: bool LOOKING = false; // false = izquierda , true = derecha //Suponiendo que 0 sea el jostick en posicion centrada if(coord_EJEX_JOSTICK < 0) LOOKING = false; else if(coord_EJËX_JOSTICK >0) LOOKING = true; PINTA_PERSONAJE();
El problema es que nada más rote un grado hacia la izquierda o derecha ya no lo reconoce lo del Vector 3, es por éso que si quiero que sea la rotación totalmente funcional o bien necesito valores de 0.01 no de 0.1 en 0.1 como sucede con el Vector 3, lo cual me obligaria a usar la rotación en grados cosa con la que también podria utilizar tu sistema, el problema vendria en que con sólamente el personaje esté rotado un grado menos o más ya habria que poner como 0 el yoistick a ése angulo ya que tiene que girar a partir de ahi y actualizarse ése punto conforme el personaje rote lo más mínimo (cosa que puede ir desde los 0 hasta los 360 grados o algo así) lo cual deberia de tener un bool e if para cada grado posible. Aunque gracias por tu ayuda también Snakey, me has dado otra perspectiva a tener en cuenta también. Buen apunte también lo del Get Vector 3, hoy descubrí como funciona, tengo que asignarle valores de diferente manera, por ejemplo... Transform trans; trans = GetComponent(); Vector3 vec3 = new Vector 3(trans.rotation.x, trans.rotation.y); He puesto un ejemplo muy simplificado, pero bueno es que el script no lo tengo a mano ahora mismo, no se siquiera si me daria errores ya que suelo trabajar en Visual Studio para los scripts y ahi te avisa si está bien y te sugiere el orden.
EDITADO EL 14-06-2018 / 02:12 (EDITADO 2 VECES)
Snakey317Hace 5 años11
Vaya, me alegro que mi ayuda sirva de algo......lo del Vector3 simplemente busque por el tipo de error y mire algo parecido en otro foro

de todas formas, en mi anterior mensaje de C++ es simplemente para "VOLTEAR" el personaje conforme muevas el joystick y creo que tu lo que quieres hacer es ROTAR x grados no?
EDITADO EL 16-06-2018 / 11:51 (EDITADO 1 VEZ)
Juan-poder-azure3009Hace 5 años12
@Snakey
Mostrar cita
Vaya, me alegro que mi ayuda sirva de algo......lo del Vector3 simplemente busque por el tipo de error y mire algo parecido en otro foro de todas formas, en mi anterior mensaje de C++ es simplemente para "VOLTEAR" el personaje conforme muevas el joystick y creo que tu lo que quieres hacer es ROTAR x grados no?
Sí, rotarlo según la dirección actual del personaje desde la perspectiva de la cámara, la verdad es que he probado varias técnicas pero ninguna parece que funcione con la precisión que yo quiero o sin bugs.
Snakey317Hace 5 años13
Es que te cuento,.... lo primero que tienes que hacer es informarte sobre los valores que toma el mando....mejor dicho, el RANGO de valores que puede tomar segun lo mueves o cliqueas.......sabiendo eso puedes estructurar varios IF o lo que sea para que segun REBASE un valor o este por DEBAJO en el RANGO .....hacer tal o cual cosa en el juego

ten en cuenta que si es el rudder joystick (esos 2 manditos que giran analogicamente que vienen en algunos pads) tienes que establecer una zona de valores como "area ciega" para cuando se mueve un poco el rudder pero no afecta al juego.....afectaria con un movimiento mas acusado en el rudder

yo te aconsejaria, como primer toma de contacto, que utilizases mejor la CRUCETA de direcciones de los gamepads o bien 2 de los botones delanteros del gamepad (los que se presionan con los dedos indices) para crear la rotacion.....con los 2 botones delanteros, solo tienes que comprobar si estan pulsados y si lo esta uno u otro aplicar un factor de rotacion al personaje o la camara

te lo digo, porque creo que asi es mas sencillo de probar, tenerlo funcionando y cuando veas mejor, ir a por otro sistema que se te ocurra.
EDITADO EL 17-06-2018 / 13:20 (EDITADO 14 VECES)
Snakey317Hace 5 años14
Es que te cuento,.... lo primero que tienes que hacer es informarte sobre los valores que toma el mando....mejor dicho, el RANGO de valores que puede tomar segun lo mueves o cliqueas.......sabiendo eso puedes estructurar varios IF o lo que sea para que segun REBASE un valor o este por DEBAJO en el RANGO .....hacer tal o cual cosa en el juego

ten en cuenta que si es el rudder joystick (esos 2 manditos que giran analogicamente que vienen en algunos pads) tienes que establecer una zona de valores como "area ciega" para cuando se mueve un poco el rudder pero no afecta al juego.....afectaria con un movimiento mas acusado en el rudder

yo te aconsejaria, como primer toma de contacto, que utilizases mejor la CRUCETA de direcciones de los gamepads o bien 2 de los botones delanteros del gamepad (los que se presionan con los dedos indices) para crear la rotacion.....con los 2 botones delanteros, solo tienes que comprobar si estan pulsados y si lo esta uno u otro aplicar un factor de rotacion al personaje o la camara



te lo digo, porque creo que asi es mas sencillo de probar, tenerlo funcionando y cuando veas mejor, ir a por otro sistema que se te ocurra

este mensaje parece ser util 

[url]https://gamedev.stackexchange.com/questions/59491/gamepad-thumbsticks-active-range[/url]

en la MSDN tambien tienes informacion sobre la adquisicion de coordenadas de los joysticks 

[url]https://msdn.microsoft.com/en-us/library/windows/desktop/ee418270(v=vs.85).aspx[/url]
Juan-poder-azure3009Hace 5 años15
@Snakey
Mostrar cita
Es que te cuento,.... lo primero que tienes que hacer es informarte sobre los valores que toma el mando....mejor dicho, el RANGO de valores que puede tomar segun lo mueves o cliqueas.......sabiendo eso puedes estructurar varios IF o lo que sea para que segun REBASE un valor o este por DEBAJO en el RANGO .....hacer tal o cual cosa en el juego ten en cuenta que si es el rudder joystick (esos 2 manditos que giran analogicamente que vienen en algunos pads) tienes que establecer una zona de valores como "area ciega" para cuando se mueve un poco el rudder pero no afecta al juego.....afectaria con un movimiento mas acusado en el rudder yo te aconsejaria, como primer toma de contacto, que utilizases mejor la CRUCETA de direcciones de los gamepads o bien 2 de los botones delanteros del gamepad (los que se presionan con los dedos indices) para crear la rotacion.....con los 2 botones delanteros, solo tienes que comprobar si estan pulsados y si lo esta uno u otro aplicar un factor de rotación en eje o la camara te lo digo, porque creo que asi es mas sencillo de probar, tenerlo funcionando y cuando veas mejor, ir a por otro sistema que se te ocurra este mensaje parece ser util [url]https://gamedev.stackexchange.com/questions/59491/gamepad-thumbsticks-active-range[/url] en la MSDN tambien tienes informacion sobre la adquisicion de coordenadas de los joysticks [url]https://msdn.microsoft.com/en-us/library/windows/desktop/ee418270(v=vs.85).aspx[/url]
Si, la verdad es que la rotación sólo a izquierda, derecha, frente y detrás como si fuése un pad pero aplicándoselo al joystick se podria, el problema es que la gente apunta hacia el enemigo, y no suele comprobar si haciendo movimiento unidireccional sucede algo, ya que como sucede en algunos juegos de consola(sólo algunos) se puede rotar apuntando hacia la dirección deseada no obligando al jugador a bajar la posición actual del pulgar hacia la zona unidireccional. La cosa es que me esperaba que me dijéses éso de los if por encima y por debajo de tal valor ya que sabia que entendias bastante de programación y me parece que has dado crédito de ello en éste hilo. El rango de giro oscila entre el valor de 0 y 360 o +200 y va subiendo por milésimas al rotar suavemente, ahi está el problema, que como la rotación de la camara va a ser cada vez diferente y la rotación del jugador también tenemos un caso en donde habria que crear +200 if si se quiere el giro apuntando simplemente, aunque si lo hago unidireccional como sugieres la posible rotación con el joystick no habria problema, aunque el jugador estándar no suele probar a hacer ésto, el simplemente apunta y si ve que no gira cree que no puede y en el caso pudiése al tener que bajar el pulgar a ésa posición acabaria en algo que podria cansar el dedo a la larga.
Responder / Comentar
Anterior
Subir
Foros > Desarrollo de Videojuegos > Como puedo saber la diferencia entre una dirección y otra?

Hay 29 respuestas en Como puedo saber la diferencia entre una dirección y otra?, del foro de Desarrollo de Videojuegos. Último comentario hace 5 años.

  • Regístrate

  • Información legal
Juegos© Foro 3DJuegos 2005-2024. . SOBRE FORO 3DJUEGOS | INFORMACIÓN LEGAL