ファイブボックス一分間Unity講座、主にUnityに初めて触れる方や、初めて間もない方向けのステップアップ講座です。
ファイブボックス公式Youtube「Unityマニア」の「1分間Unity講座」の記事の詳細説明になります。
前回のブログでご説明した通り、オブジェクトの回転はtransformコンポーネント の Rotationプロパティが管理しています。前回は Rotation プロパティを直接更新してオブジェクトを回転させましたが、今回はTransformコンポーネントがもつ、 Rotate() メソッドを使ってオブジェクトを回転させてみます。
ローカル座標に対する回転
void Update()
{
if (Input.GetKey(KeyCode.UpArrow)) //上矢印キーが押されたら
{
//X軸を中心に 1 の速さで回転
transform.Rotate(Vector3.right);
}
if (Input.GetKey(KeyCode.DownArrow)) //下矢印キーが押されたら
{
//X軸を中心に -1 の速さで回転
transform.Rotate(-Vector3.right);
}
if (Input.GetKey(KeyCode.D)) //Dキーが押されたら
{
//Y軸を中心に 1 の速さで回転
transform.Rotate(Vector3.up);
}
if (Input.GetKey(KeyCode.A)) //Aキーが押されたら
{
//Y軸を中心に -1 の速さで回転
transform.Rotate(-Vector3.up);
}
if (Input.GetKey(KeyCode.W)) //Wキーが押されたら
{
//Z軸を中心に 1 の速さで回転
transform.Rotate(Vector3.forward);
}
if (Input.GetKey(KeyCode.S)) //Sキーが押されたら
{
//Z軸を中心に 1 の速さで回転
transform.Rotate(-Vector3.forward);
}
}
なお Rotate()メソッドのカッコ内の値は、それぞれ以下の様に置き換えることができます。
Vector3.right ⇒ new Vector3(1, 0, 0)
Vector3.up ⇒ new Vector3(0, 1, 0)
Vector3.forword ⇒ new Vector3(0, 0, 1)
Rotate()メソッドは、引数に回転方向だけを指定した場合、ローカル座標に対し回転するという特性を持っています。
例えば下の図のようにオブジェクトを傾けた状態で以下のコードで回転させたとき、オブジェクトはローカル座標のY軸を中心に回転します。
transform.Rotate(Vector3.up);
これは、Rotate()メソッドの第二引数に Space.Self という言葉が隠れているためです。
transform.Rotate(Vector3.right, Space.Self);
transform.Rotate(Vector3.up, Space.Self);
transform.Rotate(Vector3.forword, Space.Self);
Space.Self は、ローカル座標に対する指示を表しており、Rotate()メソッドはデフォルトでローカル座標に対する動きを表しています。
ワールド座標に対する回転
ワールド座標に対する指定する際は、第二引数に Space.World と指定します。
void Update()
{
if (Input.GetKey(KeyCode.UpArrow)) //上矢印キーが押されたら
{
//X軸を中心に 1 の速さで回転
transform.Rotate(Vector3.right, Space.World);
}
if (Input.GetKey(KeyCode.DownArrow)) //下矢印キーが押されたら
{
//X軸を中心に -1 の速さで回転
transform.Rotate(-Vector3.right, Space.World);
}
if (Input.GetKey(KeyCode.D)) //Dキーが押されたら
{
//Y軸を中心に 1 の速さで回転
transform.Rotate(Vector3.up, Space.World);
}
if (Input.GetKey(KeyCode.A)) //Aキーが押されたら
{
//Y軸を中心に -1 の速さで回転
transform.Rotate(-Vector3.up, Space.World);
}
if (Input.GetKey(KeyCode.W)) //Wキーが押されたら
{
//Z軸を中心に 1 の速さで回転
transform.Rotate(Vector3.forward, Space.World);
}
if (Input.GetKey(KeyCode.S)) //Sキーが押されたら
{
//Z軸を中心に 1 の速さで回転
transform.Rotate(-Vector3.forward, Space.World);
}
}
回転させたい対象と回転軸を明確にして、命令してみてください。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
Comments