Noticias

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

Rotar objeto 90 grados por teclas

Iniciado por gonzilla, Julio 18, 2016, 10:25:39 PM

Tema anterior - Siguiente tema
Julio 18, 2016, 10:25:39 PM Ultima modificación: Julio 19, 2016, 10:21:23 AM por pioj
Buenas. Tengo este script y aunque he tratado de configurarlo para que rote 90 grados cada vez que se teclea la tecla correspondiente, no logro poner los valores que sirvan. Lo coloco tal como funciona pues lo demas seria disparate (igual no soy programador pero creanme que lo he intentado). Agradezco cualquier ayuda.
 

var speed = 30;
function Update () {
if (Input.GetKey(KeyCode.T))
transform.Rotate(Vector3.up* speed *Time.deltaTime );
if (Input.GetKey(KeyCode.R))
transform.Rotate(-Vector3.up* speed *Time.deltaTime );
}

 
 

pasa algo cuando presionas los botones? aunque sea cambiar los valores en el impector? puede ser que no este entrando en los if tambien

Lo que te estara pasando es que rotara sin control mientras tienes la tecla pulsada, para que no te pase eso utiliza Input.GetKeyDown. Te pongo un ejemplo con tu codigo:
 
 
 

// grados que se va a rotar //
var angle = 90;
function Update () {
// si se ha pulsado la tecla T //
if (Input.GetKeyDown(KeyCode.T))
// gira en el eje de las "y" 90 grados
transform.Rotate(Vector3.up, angle)
if (Input.GetKeyDown(KeyCode.R))
transform.Rotate(Vector3.up, angle * (-1))
}

 
 
 
Mira a ver si te sirve y cualquier duda dimelo.

Podrias probar con InputManager.
 
 

Julio 22, 2016, 03:37:41 PM #4 Ultima modificación: Julio 22, 2016, 09:30:32 PM por pioj
Lo que hice fue modificarlo un poco pero no funciona. Probe con Input.GetKeyDown y nada. No se que le falta. habia pensado en el input manager , quiza sea por ahi...
 
 
 

//grados que se va a rotar//
var angle = 90;
function Update ()    {
// si se ha pulsado la tecla T//
if (Input.GetKey("R"));
// gira en el eje Y 90 grados//
transform.Rotate(Vector3.up,angle);
if (Input.GetKey("T"));
transform.Rotate(Vector3.up,angle * (-1));
}

 
 


 
El InputManager tiene los ejes Horizontal y Vertical, los cuales funcionan (o emulan) como analogicos si mal no equivoco.
 
Puedes uar estos ejes para rotar y con Math.Clamp limitar la rotación.

Cita de: gonzilla date=1468873539Buenas. Tengo este script y aunque he tratado de configurarlo para que rote 90 grados cada vez que se teclea la tecla correspondiente, no logro poner los valores que sirvan. Lo coloco tal como funciona pues lo demas seria disparate (igual no soy programador pero creanme que lo he intentado). Agradezco cualquier ayuda.
   
   

var speed = 30;
function Update () {
if (Input.GetKey(KeyCode.T))
transform.Rotate(Vector3.up* speed *Time.deltaTime );
if (Input.GetKey(KeyCode.R))
transform.Rotate(-Vector3.up* speed *Time.deltaTime );
}

   
       
   


1. tienes que usar Input.GetKeyDown en vez de Input.GetKey porque si no lo que este dentro del if se ejecutara MIENTRAS la tecla este pulsada y no solo cuando se pulse
 
2. transform.Rotate no es lo mas adecuado para lo que quieres lograr (se puede usar pero es mas complicado, al menos en mii opinion)
 
 
 
creo que lo mas optimo seria esto
 

private var euler : Vector3;
public var angle : float = 90;
function Update () {
    if (Input.GetKeyDown(KeyCode.T)) {
       euler = transform.rotation.eulerAngles;
         transform.rotation = Quaternion.Euler(euler + Vector3.up * angle);
    }
     else if (Input.GetKeyDown(KeyCode.R)) {
       euler = transform.rotation.eulerAngles;
         transform.rotation = Quaternion.Euler(euler + Vector3.down * angle);
    }
}

 
 

Excelente!! Quiza se pueda suavizar un poco pero hace lo que buscaba. Gracias a todos.

Etiquetas: