top of page

1分間 Unity講座 座標を更新する方法

ファイブボックス一分間Unity講座、主にUnityに初めて触れる方や、初めて間もない方向けのステップアップ講座です。


ファイブボックス公式Youtube「Unityマニア」の「1分間Unity講座」の記事の詳細説明になります。





ご興味があれば、こちらもご覧ください。


今回はオブジェクトのTransformコンポーネントの初期設定方法です。

まずは前回(一分間Unity講座Transformコンポーネントの初期状態を設定)で作成したPlayerControlle.cs をダブルクリックで立ち上げ、スクリプトファイルの編集を行います。

Unityのスクリプトファイルを編集

Unityの座標軸について

Unityは大きく2つの座標軸があります。


ワールド座標

ワールド空間に対し、常に同じ方向を示しており、私たちのいる空間の「東西南北および上下」のようなイメージで、常に同じ方向を指し示します。

座標を指定する際は次のような形で

new Vector3(x,y,z)、 Vector3.right、 Vector3.up、Vector3.forward

のような形で表されます。


ローカル座標

それぞれのオブジェクトが持つ座標軸で、左右がx軸、上下がy軸、前後がw軸となります。オブジェクトの向きによって常に相対的な方向となります。

transform.right、transform.up、transform.forward

のような形で表されます。

Unityのワールド座標とローカル座標

今回はローカル座標を使って、キャラクターを上下、前後左右に移動させてみます。




条件分岐

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の個別指導のオンラインレッスンを行っています。

ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。


Comments


bottom of page