このブログは「ファイブボックス一分間Unity講座」の補足説明となる記事です。主にUnityに初めて触れる方や初心者向けの講座になります。
Unityを自由に使いこなせるようになっている方にとっても、ちょっとお役に立つ情報を掲載していますので、もしよければご参照ください。
前回までの記事でキャラクターが前進、速度を変化しながらその速度に応じ、歩くアニメーション、走るアニメーションを遷移することができるようになりました。
今回はスクリプトファイルから右回転、左回転ができるようにしてみます。
下の動画は「一分間Unity講座 スクリプトファイルで左右の回転を実現する方法」 のショート動画です。ご興味がございましたら、こちらの動画もご参照ください!
1、素材の調整
前回までの課題と同じように Unity-Chan の素材を使用しますが、このまま回転のプログラムを実装すると、Unity-Chanが想定外の方向に回転してしまいます。左右の回転、つまりY軸を中心とした回転のみ有効にするために、InspectorからRigidbodyコンポーネントの Constraints プロパティの FreezeRotation、XとZにチェックを入れます。このことで、X軸とZ軸の回転が無効となり、Y軸を中心とした回転のみが実現されることになります。
2、スクリプトファイルを使った回転
事前に回転速度を管理する変数:rotSpeed を用意します。Start関数で初期値に5.0f を代入しておきます。変数名、初期値の値は任意です。
float rotSpeed; //回転速度を管理する変数を宣言
void Start()
{
rotSpeed = 5.0f; //回転速度の初期値に5.0を代入
}
続いてUpdate関数内でDキーが押されたら右回転、Aキーが押されたら左回転を行うプログラムを作成します。
1,angularVelocity を直接更新
オブイジェクトの角度はRigidbodyの angularVelocityプロパティが管理しています。まずは angularVelocity の値を直接更新する方法です。
angularVelocityに値が入ると、その力で回転し続けます。キーを離したときに angularVelocityの値をもとすには、その値を0にすればいいのですが、自然に収束するようにUndate関数内で、 angularVelocityに0.99程度の値をかけ続けます。
void Update()
{
//回転速度を減衰
rb.angularVelocity *= 0.99f;
if (Input.GetKey(KeyCode.D)) //Dキーが押されたら
{
//y軸を中心に右方向に回転
rb.angularVelocity += Vector3.up * rotSpeed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.A)) //Aキーが押されたら
{
//y軸を中心に右方向に回転
rb.angularVelocity += Vector3.up * rotSpeed * Time.deltaTime;
}
}
2,AddTorque()メソッドを使ってangularVelocity を更新
angularVelocityの値は、RigidbodyコンポーネントのAddRoeque()メソッドを使用することで更新することもできます。
void Update()
{
//回転速度を減衰
rb.angularVelocity *= 0.99f;
if (Input.GetKey(KeyCode.D)) //Dキーが押されたら
{
//y軸を中心に右方向に回転
rb.AddTorque(0, rotSpeed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.A)) //Aキーが押されたら
{
//y軸を中心に右方向に回転
rb.AddTorque(0, -rotSpeed * Time.deltaTime, 0);
}
}
3、TransformのRotation の使い分け
オブジェクトの向きは、TransformコンポーネントのRotationプロパティが管理していますが、RigidbodyコンポーネントのangularVelocityで同様に回転を管理することができます。それぞれ次のような特徴を持っており、使用目的に応じ使い分けすると良いでしょう。
1. TransformのRotationプロパティの特徴
直接的な回転:
Transform.rotationを変更すると、オブジェクトの回転が即座に設定されます。この方法は非常にシンプルで、オブジェクトを特定の角度に回転させたい場合に便利です。
物理エンジンの影響なし: この方法では、物理エンジンの影響を受けず、物理的なシミュレーションは行われません。したがって、他のオブジェクトとの衝突や力の影響を無視して回転させることができます。
2. RigidbodyのangularVelocity
物理的な回転:
Rigidbody.angularVelocityを変更すると、物理的な力を使用してオブジェクトを回転させます。オブジェクトが回転しているかのような物理的なシミュレーションを行います。
物理エンジンの影響:
物理エンジンの影響を受けるため、衝突や外部の力(例えば、他のオブジェクトからの衝突力など)の影響を受けながら回転します。よりリアルな動作を必要とする場合に適しています。
使い分け
TransformのRotation: 簡単に特定の角度に回転させたいとき、または物理エンジンを使わないオブジェクトに対して使用します。
RigidbodyのangularVelocity: 物理的な動作が必要で、オブジェクトの回転が他の力や衝突の影響を受ける場合に使用します。
今回はすでにRigidbodyを使用した動きを採用していますので、Rigidbodyを使用した回転を使っています。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
Comments