ファイブボックス一分間Unity講座、主にUnityに初めて触れる方や、初めて間もない方向けのステップアップ講座です。
ファイブボックス公式Youtube「Unityマニア」の「1分間Unity講座」の記事の詳細説明になります。
ご興味があれば、こちらもご覧ください。
今回はオブジェクトのTransformコンポーネントの初期設定方法です。
まずは前回(一分間Unity講座Transformコンポーネントの初期状態を設定)で作成したPlayerControlle.cs をダブルクリックで立ち上げ、スクリプトファイルの編集を行います。
Unityの座標軸について
Unityは大きく2つの座標軸があります。
ワールド座標
ワールド空間に対し、常に同じ方向を示しており、私たちのいる空間の「東西南北および上下」のようなイメージで、常に同じ方向を指し示します。
座標を指定する際は次のような形で
new Vector3(x,y,z)、 Vector3.right、 Vector3.up、Vector3.forward
のような形で表されます。
ローカル座標
それぞれのオブジェクトが持つ座標軸で、左右がx軸、上下がy軸、前後がw軸となります。オブジェクトの向きによって常に相対的な方向となります。
transform.right、transform.up、transform.forward
のような形で表されます。
今回はローカル座標を使って、キャラクターを上下、前後左右に移動させてみます。
条件分岐
C#スクリプト では「もし」は if ( ){ } ステートメント を使用します。
() の条件が成立したら、{ } 内の処理を行う、という意味になります。
上矢印キーが押されたら、は
if (Input.GetKey(KeyCode.UpArrow))
Input.Getkey() は ( )内のキーが押されたときに信号を上げ続けます。
上矢印キーは KeyCode.UpArrow で表記します。
ローカル座標を使った動き
上下の動き
上下の動きは、次のコードになります。
//上矢印キーが押されたら
if (Input.GetKey(KeyCode.UpArrow))
{
//上方向に 0.01の速さで進む
transform.position += transform.up * 0.01f;
}
//下矢印キーが押されたら
if (Input.GetKey(KeyCode.DownArrow))
{
//上方向に -0.01の速さで進む
transform.position -= transform.up * 0.01f;
}
このコードの中に登場した「+=」は加算演算代入子という、コードを簡略化するプログラムになります。このことで「transform.position 」と複数記述する必要がなくなり、入力が簡素化、ミスの抑制につながり、PC側の処理速度も若干ですが早くなるようです。
transform.position += transform.up * 0.01f;
//下のコードと同じ意味
transform.position = transform.position + transform.up * 0.01f;
下矢印キーが押されたときは「-=」になります。
「transform.down」なんてコードはないので、「transform.up」にマイナスをかけた値になります。
左右の動き
Aキーで左に移動、Dキーで右に移動をさせます。
//Dキーが押されたら
if (Input.GetKey(KeyCode.D))
{
//右方向に 0.01の速さで進む
transform.position += transform.right * 0.01f;
}
//Aキーが押されたら
if (Input.GetKey(KeyCode.A))
{
//右方向に -0.01の速さで進む
transform.position -= transform.right * 0.01f;
}
前後の動き
最後はWキーで前方へ、Sキーで後方へ移動する処理です。
//Wキーが押されたら
if (Input.GetKey(KeyCode.W))
{
//前方向に 0.01の速さで進む
transform.position += transform.forward * 0.01f;
}
//Sキーが押されたら
if (Input.GetKey(KeyCode.S))
{
//前方向に -0.01の速さで進む
transform.position -= transform.forward * 0.01f;
}
ワールド座標を使った移動
ワールド座標を使う場合は、次のようになります。
右辺の「transform」を「Vector3」に置き換えるだけなので、簡単ですね。
//上矢印キーが押されたら
if (Input.GetKey(KeyCode.UpArrow))
{
//上方向に 0.01の速さで進む
transform.position += Vector3.up * 0.01f;
}
//下矢印キーが押されたら
if (Input.GetKey(KeyCode.DownArrow))
{
//上方向に -0.01の速さで進む
transform.position -= Vector3.up * 0.01f;
}
//Dキーが押されたら
if (Input.GetKey(KeyCode.D))
{
//右方向に 0.01の速さで進む
transform.position += Vector3.right * 0.01f;
}
//Aキーが押されたら
if (Input.GetKey(KeyCode.A))
{
//右方向に -0.01の速さで進む
transform.position -= Vector3.right * 0.01f;
}
//Wキーが押されたら
if (Input.GetKey(KeyCode.W))
{
//前方向に 0.01の速さで進む
transform.position += Vector3.forward * 0.01f;
}
//Sキーが押されたら
if (Input.GetKey(KeyCode.S))
{
//前方向に -0.01の速さで進む
transform.position -= Vector3.forward * 0.01f;
}
また上のコードは次のように置き換えることもできます。
//上矢印キーが押されたら
if (Input.GetKey(KeyCode.UpArrow))
{
//上方向に 0.01の速さで進む
transform.position += new Vector3(0, 0.01f, 0);
}
//下矢印キーが押されたら
if (Input.GetKey(KeyCode.DownArrow))
{
//上方向に -0.01の速さで進む
transform.position -= new Vector3(0, 0.01f, 0);
}
//Dキーが押されたら
if (Input.GetKey(KeyCode.D))
{
//右方向に 0.01の速さで進む
transform.position += new Vector3(0.01f, 0, 0);
}
//Aキーが押されたら
if (Input.GetKey(KeyCode.A))
{
//右方向に -0.01の速さで進む
transform.position -= new Vector3(0.01f, 0, 0);
}
//Wキーが押されたら
if (Input.GetKey(KeyCode.W))
{
//前方向に 0.01の速さで進む
transform.position += new Vector3(0, 0, 0.01f);
}
//Sキーが押されたら
if (Input.GetKey(KeyCode.S))
{
//前方向に -0.01の速さで進む
transform.position -= new Vector3(0, 0, 0.01f);
}
いろいろな書き方がありますが、まずは一つ覚えて、徐々にバリエーションを増やしていくのがいいと思います。
ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。