Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ramunda en Agosto 28, 2016, 01:47:21 AM

Título: Rotación objecto
Publicado por: ramunda en Agosto 28, 2016, 01:47:21 AM
Buenas noches, una pregunta por favor.
 
Necesito que una plataforma de vueltas cuando algo se le choca.
 
 si le añado esto:
 

public float speed;
transform.Rotate(20,*Time.deltaTime*speed,);

 
Gira sin problemas sobre su axis.
 
Pero si le añado la colisión:
 

using UnityEngine;
using System.Collections;
public class gira : MonoBehaviour {
public float speed;
//public float time;
 
void OnCollisionEnter(Collision collision){
   
   foreach (ContactPoint contact in collision.contacts) {
   transform.Rotate(20,*Time.deltaTime*speed,);
  }
}
}

 
Gira pero se detiene en el primer segundo de el time.deltatime.
 
Probé con trigger en vez de collision y el resultado es el mismo.
 
Probé añadiendo un float tiempo pero hace caso omiso...
 
Agradeceria una idea.
 
Gracias
 
 
Título: Rotación objecto
Publicado por: Biarox1166 en Agosto 28, 2016, 02:30:18 AM
El problema es(creo yo) que al utilizar la void OnColllisionEnter o un triggerEnter, esto solo se va a "revisar" una vez que algo entre o choque pero luego de eso todo lo que esté dentro de la void se desactiva, proba o usar Stay o crear una bool "girar" que sea true cuando suceda la colición y en el Update creá un condicional que diga que cuando "girar" sea true, el objeto rote.Algo así:
 

using UnityEngine;
using System.Collections;
public class gira : MonoBehaviour {
public float speed;
public bool girar = false;
 
     void Update () {
       if(girar){
           transform.Rotate(20,*Time.deltaTime*speed);
        }
    }
 
void OnCollisionEnter(Collision collision){
   
   girar = true;
     
  }
}
}

 
E incluso puedes crear una corutina para que cuando pase X tiempo girar se vuelva false(ya que ví que creaste una variable time). Espero haberte ayudado : )
Título: Rotación objecto
Publicado por: ramunda en Agosto 28, 2016, 02:44:08 AM
Biarox1166, simplemente has dado en el clavo, no se me ocurrió usar una bool...en fin va perfecto, y si efectivamente tenia pensado meterle un timer o algo, pero como me lio con las coorutinas pues ago uso de el timer de los novatos jejejjejjee, lo dejo asi;
 

using UnityEngine;
using System.Collections;
public class gira : MonoBehaviour {
public float speed;
public bool girar = false;
 
void Update ()
{
if(girar){
transform.Rotate(20,,*Time.deltaTime*speed);
}
}
void OnCollisionEnter(Collision collision){
girar = true;
Invoke ("para",3);
}
void para()
{
girar = false;
    }
    }

 
Así meto mano de la bool y le digo que a los 3 segundos me la desactive y yata :)
 
Mil gracias :)
Título: Rotación objecto
Publicado por: Biarox1166 en Agosto 28, 2016, 02:53:39 AM
De nada @ramunda!!!!!!! buenísimo que te pude ayudar y no hay problema con lo de las corutinas habeces también me mareo un poco jajaja saludos.
Título: Rotación objecto
Publicado por: ramunda en Agosto 28, 2016, 02:54:41 AM
Cita de: Biarox1166 date=1472345619De nada @ramunda!!!!!!! buenísimo que te pude ayudar y no hay problema con lo de las corutinas habeces también me mareo un poco jajaja saludos.
   


:), Salut!!