3

これは、私がやろうとしていることから単純化されたコードです:

var angle = 1.57;
if ( this.transform.rotation.y > angle ){
  this.transform.rotation.y--;
} else if ( this.transform.rotation.y < angle ){
  this.transform.rotation.y++;
}

私は AS3 でコーディングするのに慣れていて、Flash でそれを行うと完全に動作しますが、Unity3D では動作しません。その理由や、どうすればその効果を得ることができるかを理解するのに苦労しています。

誰でも私を助けることができますか?ありがとう!

編集:

私のオブジェクトは、「でこぼこの」床で運転する2つのカプセルコライダーを備えたリジッドボディカーであり、ある時点で方向の精度が失われます.階層回転システムが原因だと思います.

(transform.eulerAngles のヒントを提供してくれた kay に感謝)

4

7 に答える 7

12

transform.rotationQuaternionを取得します。transform.rotation.eulerAngles.y代わりに試してください。

于 2012-02-16T22:02:06.510 に答える
3

Transform Rotation は、オブジェクトを回転させるのではなく、角度を設定するために使用されるため、回転を取得し、変更を追加してから、新しい回転を設定する必要があります。

代わりに transform.rotate を使用してみてください。

ここで Unity3d スクリプトのリファレンスを確認してください: http://unity3d.com/support/documentation/ScriptReference/Transform.Rotate.html

于 2012-05-11T03:00:44.620 に答える
1

これまでのところ、2 つの問題が見られます。まずはUnityの階層ローテーション。達成しようとしていることに基づいて、次のいずれかを操作する必要があります

transform.localEulerAngles
or
transform.eulerAngles

2 つ目は、ベクターはすべて値渡しであるため、この方法でオイラー角を変更することはできません。

transform.localEulerAngles.y--;

このようにする必要があります:

Vector3 rotation = transform.localEulerAngles;
rotation.y--;
transform.localEulerAngles = rotation;
于 2012-08-03T14:13:27.040 に答える
0

新しいクォータニオン オブジェクトを作成する必要があります

transform.rotation = Quaternion.Euler ( transform.rotation.x, transform.rotation.y++, transform.rotation.z );

transform.Rotate 関数を使用することもできます。

于 2012-06-17T16:40:36.663 に答える
0

transform.Rotate( ) を使用するという上記の提案は、おそらく実際に回転させるために必要なことですが、transform.Rotate( ) の変数は方向ではなく速度/速度であるため、transform.Rotate( )角度のある回転が必要な場合は、複数の軸を使用する必要があります。元:

class Unity // Example is in C#
{
    void Update( )
    {
        gameObject.transform.Rotate(0, 1, 0);
    }
}

これにより、オブジェクトが y 軸を中心に速度 1 で回転します。

これが役立つかどうか教えてください。それが妨げになる場合は、別の方法で説明できます。

于 2012-06-21T20:15:34.763 に答える