2016-11-17 17 views
0

Я новичок в развитии Unity. У меня есть мяч с RigidBody 2D, и я хочу, чтобы он вращался в течение 1 секунды. Не имеет значения скорость. Скорость может быть автоматически.Как повернуть rigidBody2d за определенный период?

Я хочу просто: при втором 0 находиться в исходном положении и на втором 1 находиться в конечном положении. Вращение может быть: 180, 360, 720 .. и т. Д.

Я пробовал с angularVelocity, но никогда не останавливался. Я попытался добавить крутящий момент, но тот же. Я не знаю, как справиться с этим.

rb.angularVelocity = 180; 

или

rb.AddTorque(90); 
+0

вы можете использовать angularVelocity и через одну секунду вы можете установить angularVelocity к нулю – luizcarlosfx

+0

Как я могу знать, если он находится в правильном положении после того, как за одну секунду? –

+0

место вы имеете в виду вращение? – Bijan

ответ

1

Если вы хотите достичь точного вращения после определенного промежутка времени, это означает, что ваша скорость вращения будет вычислена автоматически. Для того, чтобы добиться чего-то вроде этого я бы рекомендовал использовать сопрограммная:

public class TestScript : MonoBehaviour 
{ 
    public float targetAngle; 
    public float rotationDuration; 

    void Update() 
    { 
     //This is only to test the coroutine 
     if(Input.GetKeyDown(KeyCode.Space)) 
     { 
      StartCoroutine(RotateBall(targetAngle, rotationDuration)); 
     } 
    } 

    private IEnumerator RotateBall(float a_TargetAngle, float a_Duration) 
    { 
     Vector3 startLocalEulerAngles = GetComponent<RectTransform>().localEulerAngles; 
     Vector3 deltaLocalEulerAngles = new Vector3(0.0f, 0.0f, a_TargetAngle - startLocalEulerAngles.z); 
     float timer = 0.0f; 

     while(timer < a_Duration) 
     { 
      timer += Time.deltaTime; 
      GetComponent<RectTransform>().localEulerAngles = startLocalEulerAngles + deltaLocalEulerAngles * (timer/a_Duration); 
      yield return new WaitForEndOfFrame(); 
     } 

     GetComponent<RectTransform>().localEulerAngles = startLocalEulerAngles + deltaLocalEulerAngles; 
    } 
} 
+0

что должно быть 'RectTransform'? Потому что я получаю эту ошибку: 'Нет никакого RectTransform, прикрепленного к игровому объекту. –

+0

Существует двумерный игровой объект –

+0

использовать преобразование вместо GetComponent , я не знаю, что он пытался сделать – luizcarlosfx