【Unity】往復して移動し続けるブロック(GameObject)を作る
往復して移動し続けるブロック(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の値を変えると振幅のスピードが変わる。
ディスカッション
コメント一覧
まだ、コメントがありません