【Unity】往復して移動し続けるブロック(GameObject)を作る

Unity

スポンサーリンク

往復して移動し続けるブロック(GameObject)を作る方法を紹介します。

完成動作

往復して移動し続けるブロック(GameObject)を作成

1.例としてCubeを設置します。名前はCubeMoveRepeatedlyにします。※わかりやすいようにMaterialで赤色を付けています。

往復して移動し続けるスクリプトを作成

1.MoveRepeatedly.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

public class MoveRepeatedly : MonoBehaviour
{
	[SerializeField]
	[Tooltip("X軸方向に移動する振幅(0にすると移動しない)")]
	private float amplitudeX = 4.0f;

	[SerializeField]
	[Tooltip("Y軸方向に移動する振幅(0にすると移動しない)")]
	private float amplitudeY = 4.0f;

	[SerializeField]
	[Tooltip("Z軸方向に移動する振幅(0にすると移動しない)")]
	private float amplitudeZ = 4.0f;

	[SerializeField]
	[Tooltip("振幅する速さ")]
	private float amplitudeSpeed = 2.0f;

	/// <summary>
	/// ゲーム開始時の場所
	/// </summary>
	private Vector3 startPosition;

	// Start is called before the first frame update
	void Start()
	{
		// ゲーム開始時の位置
		startPosition = this.transform.position;

	}

	private void FixedUpdate()
	{
		// 移動させる
		// Mathf.Sin()にTime.timeを入れることで、-1から+1の間の値を取得できる。それにamplitudeSpeedをかけることで振幅の幅を作れる。
		// そして、startPositionを足すことで、スタート位置から左右に動くようになる。
		transform.position = new Vector3((Mathf.Sin((Time.time) * amplitudeSpeed) * amplitudeX + startPosition.x), (Mathf.Sin((Time.time) * amplitudeSpeed) * amplitudeY + startPosition.y), (Mathf.Sin((Time.time) * amplitudeSpeed) * amplitudeZ + startPosition.z));
	}
}

スクリプトを往復して移動させ続けたいブロック(GameObject)にアタッチする

1.MoveRepeatedly.csを往復して移動させ続けたいブロック(CubeMoveRepeatedlyオブジェクト)にアタッチする。

完成

これでブロック往復して移動し続ける。

Amplitude X(Y,Z)の値を変えると振幅の大きさが変わる。(0にすると、その軸の方向には移動しない。)
Amplitude Speedの値を変えると振幅のスピードが変わる。

Unity

Posted by ton