top of page

1分間 Unity講座 座標を更新する方法 メソッド編


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


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



1分間Unity講座 座標を更新する方法」では Transformコンポーネントの position プロパティを更新することで、オブジェクトの座標を更新しました。

今回は Transformコンポーネントが持つ Translate() というメソッドを活用して座標を更新する方法ご紹介します。


ローカル空間に対する動き

まずはオブジェクトが持つローカル空間に対する移動です。

Transformコンポーネントの positionプロパティ を更新するのと同じ効果があります。

Unityワールド空間とローカル空間
void FixedUpdate()
{
	//上矢印キーが押されたら
	if (Input.GetKey(KeyCode.UpArrow))
	{
		//上方向に 0.1の速さで進む
    		transform.Translate(transform.up * 0.1f);
	}
	//下矢印キーが押されたら
	if (Input.GetKey(KeyCode.DownArrow))
	{
    		//上方向に -0.01の速さで進む
    		transform.Translate(-transform.up * 0.1f);
	}
	//Dキーが押されたら
	if (Input.GetKey(KeyCode.D))
	{
    		//右方向に 0.01の速さで進む
    		transform.Translate(transform.right * 0.1f);
	}
	//Aキーが押されたら
	if (Input.GetKey(KeyCode.A))
	{
    		//右方向に -0.01の速さで進む
    		transform.Translate(-transform.right * 0.1f);
	}
	//Wキーが押されたら
	if (Input.GetKey(KeyCode.W))
	{
    		//前方向に 0.01の速さで進む
    		transform.Translate(transform.forword * 0.1f);
	}
	//Sキーが押されたら
	if (Input.GetKey(KeyCode.S))
	{
		//前方向に -0.01の速さで進む
    		transform.Translate(-transform.forword * 0.1f);
	}
}	

Translate()メソッドは、最終引数でワールド空間、またはローカル空間に対する命令なのかを指定することが出来ます。

ローカル空間を指定する場合は Space.Self と指定します。


例えば下の図のように、オブジェクトをZ軸中心に45度傾けた状態で上矢印キーをおすと、45度傾いたオブジェクトの上方向(ワールド空間では斜め上方向)に移動します。


Unityのろ
void FixedUpdate()
{
	//上矢印キーが押されたら
	if (Input.GetKey(KeyCode.UpArrow))
	{
		//上方向に 0.1の速さで進む
    		transform.Translate(0, 0.1f, 0, Space.Self);
	}
	//下矢印キーが押されたら
	if (Input.GetKey(KeyCode.DownArrow))
	{
    		//上方向に -0.01の速さで進む
    		transform.Translate(0, -0.1f, 0, Space.Self);
	}
	//Dキーが押されたら
	if (Input.GetKey(KeyCode.D))
	{
    		//右方向に 0.01の速さで進む
    		transform.Translate(0.1f, 0, 0, Space.Self);
	}
	//Aキーが押されたら
	if (Input.GetKey(KeyCode.A))
	{
    		//右方向に -0.01の速さで進む
    		transform.Translate(-0.1f, 0, 0, Space.Self);
	}
	//Wキーが押されたら
	if (Input.GetKey(KeyCode.W))
	{
    		//前方向に 0.01の速さで進む
    		transform.Translate(0, 0, 0.1f, Space.Self);
	}
	//Sキーが押されたら
	if (Input.GetKey(KeyCode.S))
	{
		//前方向に -0.01の速さで進む
    		transform.Translate(0, 0, -0.1f, Space.Self);
	}
}	

ワールド空間に対する動き

ワールド空間に対する記述方法も同じです。

このケースではキャラクターが傾いていた場合、X,Y,Z軸は常に固定され、ワールド空間に対するX軸方向、Y軸方向、Z軸方向となります。


Unityのワールド空間の軸
void FixedUpdate()
{
	//上矢印キーが押されたら
	if (Input.GetKey(KeyCode.UpArrow))
	{
		//上方向に 0.1の速さで進む
    		transform.Translate(Vector3.up * 0.1f);
	}
	//下矢印キーが押されたら
	if (Input.GetKey(KeyCode.DownArrow))
	{
    		//上方向に -0.01の速さで進む
    		transform.Translate(-Vector3.up * 0.1f);
	}
	//Dキーが押されたら
	if (Input.GetKey(KeyCode.D))
	{
    		//右方向に 0.01の速さで進む
    		transform.Translate(Vector3.right * 0.1f);
	}
	//Aキーが押されたら
	if (Input.GetKey(KeyCode.A))
	{
    		//右方向に -0.01の速さで進む
    		transform.Translate(-Vector3.right * 0.1f);
	}
	//Wキーが押されたら
	if (Input.GetKey(KeyCode.W))
	{
    		//前方向に 0.01の速さで進む
    		transform.Translate(Vector3.forword * 0.1f);
	}
	//Sキーが押されたら
	if (Input.GetKey(KeyCode.S))
	{
		//前方向に -0.01の速さで進む
    		transform.Translate(-Vector3.forword * 0.1f);
	}
}	

ワールド空間の移動を指定する場合は、最終引数に Space.World と指定します。


void FixedUpdate()
{
	//上矢印キーが押されたら
	if (Input.GetKey(KeyCode.UpArrow))
	{
		//上方向に 0.1の速さで進む
    		transform.Translate(0, 0.1f, 0, Space.World);
	}
	//下矢印キーが押されたら
	if (Input.GetKey(KeyCode.DownArrow))
	{
    		//上方向に -0.01の速さで進む
    		transform.Translate(0, -0.1f, 0, Space.World);
	}
	//Dキーが押されたら
	if (Input.GetKey(KeyCode.D))
	{
    		//右方向に 0.01の速さで進む
    		transform.Translate(0.1f, 0, 0, Space.World);
	}
	//Aキーが押されたら
	if (Input.GetKey(KeyCode.A))
	{
    		//右方向に -0.01の速さで進む
    		transform.Translate(-0.1f, 0, 0, Space.World);
	}
	//Wキーが押されたら
	if (Input.GetKey(KeyCode.W))
	{
    		//前方向に 0.01の速さで進む
    		transform.Translate(0, 0, 0.1f, Space.World);
	}
	//Sキーが押されたら
	if (Input.GetKey(KeyCode.S))
	{
		//前方向に -0.01の速さで進む
    		transform.Translate(0, 0, -0.1f, Space.World);
	}
}	

活用シーンのまとめ

Transformコンポーネントの座標を更新し、移動する方法を2つご紹介しました。

通常の移動では、

transform.position += transform.right  0.01f; 
transform.Translate(transform.right  0.01f); 

上の2つの動きは同じです。しかし、特定のケースでワールド空間での移動を明示的に行いたい場合は、transform.Translateメソッドが便利です。


 

ファイブボックスでは、Unityの個別指導のオンラインレッスンを行っています。

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

Comments


bottom of page