2016-04-15 64 views
0

オブジェクトのグループを90度回転させようとしているので、すべてのオブジェクトを同じ親に設定してから、親を回転させて、それは私が見ることができないほど速いです、どうすればそれを遅くすることができますか?私は以下のコードの両方を試してみましたが、どちらも同じです:このコードは、アップデートによって呼び出される関数に表示されます\際にボタンUnity内のオブジェクトのグループの回転が速すぎる

float totalRotation = 0; 
    while (Mathf.Abs(totalRotation) < 90){ 
     totalRotation += Time.deltaTime; 
     Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, Time.deltaTime); 
    } 

上のユーザを押すと、この1

Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, 90f); 

おかげで前進!

+0

投稿コードフラグメントは、まったく役に立たない**です。誰もこのコードが現れる場所を知る人はいません。 – Fattie

+0

@JoeBlowが編集されました。 – msLangdon95

答えて

0

使用角度の要因、私はあなたが実際にUpdateでこれをしないことを推測するwhileに基づいて

Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, Time.deltaTime * 0.5f); 

のようなもの。いずれにしても、更新は1つでフレームであるため、これは機能しません。あなたはwhileにこのような関連する何かをしたくありません。代わりにwhileifに変更してください。そうすれば、ローテーションが遅すぎるため、要因が大きくなります。現在のところ、あなたのローテーションは即座です。

編集:
このような何かが働くだろう:

public bool isRotating = false; 
public float speed = 20.0f; 

public Vector3 targetRotation; 

void Update() 
{ 
    if(isRotating) 
    { 
     if(Vector3.Distance(transform.eulerAngles, targetRotation) > 1.0f) 
     { 
      transform.Rotate(Vector3.up * Time.deltaTime * speed); 
     } 
     else 
     { 
      transform.eulerAngles = targetRotation; 
      isRotating = false; 
     } 
    } 
} 

は、これが唯一のyの周りになります。

+0

あなたが絶対に正しいなら、私は場合にそれを回したと要因が大きく作られた、私はちょうどそれが90度回転したいと多くの要因とそれらのどれを試してみました正しいようだ: – msLangdon95

+0

\あなたは回転をクランプできるかの例を編集。答えるため –

0

この部分はうまくいきません。アップデートを参照してください

実際に間違った方法でそれをしました。ユニティの動きは、一度だけではなく、更新を通してゆっくりと行われるべきです。 ChristophKnのように、私はコルーチンを使うことを勧めます。

const float speed = 180; 
IEnumerator Rotate() { 
    float rotated = 0; 
    while (rotated < 90) { 
     float rotation = speed*Time.fixedDeltaTime; 
     rotated += rotation; 
     Parent.transform.RotateAround(temp.transform.position, flag*Vector3.right, rotation); 
     //wait for the next fixed update to continue. 
     yield return new WaitForFixedUpdate(); 
    } 
} 

、回転を開始私はスクリプトが、アニメーションを使用していない、これを行うには、別のアイデアを持っているStartCoroutine(Rotate);

EDIT

を呼び出すために:

  • まず、回転を追加アニメーションを親オブジェクトにドラッグすると、必要な角度に回転します。

  • オブジェクトのグループを回転するには、質問のときと同じようにその親に設定してからアニメーションを開始します。

  • アニメーションの最後に(animation eventsを使用してメソッドを呼び出すことができます)、グループ内のすべてのオブジェクトに対してSetParent(null,true)を呼び出します。これで親は削除されますが、世界の位置は保持されます。

  • 最後に、親の回転を元の値に設定します。

これが役に立ちます。

+0

おかげで、私はそれを試してみましたが、それがすべてで回転しませんでした:(! – msLangdon95

+0

それもwhileループに取得していない、私は前にprint文を追加し、ループの中で、それはその中に1に達していませんでした。。 – msLangdon95

+0

OK OK、私はそれが回転 – DRKblade

関連する問題