チャムコード

チャーさんのUnityゲームラボです。Unityでゲーム制作する時に使うコードやノウハウをメインに発信しています。Unityでゲーム制作したいと思っているなら読んでください。

ゲーム開発ノウハウ

Unityでオブジェクトを上下移動(往復)させる機能の作り方

投稿日:2023年11月21日 更新日:

うも、チャーさんです。

あなたはUnityでオブジェクトを自動で上下移動させたい

と思っていますか?

 

オブジェクトを上下に自動で往復させたり、

動く床として上下に自動で往復させたり、

そんな風にしたいですよね。

 

この記事では、Unityでオブジェクトを自動で上下移動させる

方法を書いていますので、読めばあなたはUnityでオブジェクトを

上下に往復移動させることができます。

 

ですが、読まなければ、意外とどうしたらこの機能が

実現できるかわからないと悩むかもしれません。

そうなりたくなければ、このまま記事を読み進めてください。

 

動画はこちら

 

 

Unityでオブジェクトを上下移動(往復)させる機能の作り方

 

ということで早速結論です。

Unityでオブジェクトを上下に往復移動させたい場合は、

Mathf.Sin()関数を使いましょう。

 

これは高校で習う、三角関数のSin(サイン)ですが、

 

このメソッドは、

Mathf.Sin(Time.time)と書くことで、

−1から1までの数字を返してくれます。

 

 

なのでこのメソッドを使えば、オブジェクトを自動で

上下に移動させてかつ上下に往復させることができます。

 

ということで具体的には、以下のようなコードを書きましょう。

void Update()
{
transform.position = new Vector3(transform.position.x,Mathf.Sin(Time.time),transform.position.z);
}

 

こう書くことで、Unityでオブジェクトが上下に

往復移動してくれます。

 

 

ということでこれはどういうコードなのか

説明しますと、まず

 

transform.position はこのスクリプトをつけてるオブジェクト

の座標のことです。

 

そこにnew Vector3で新しく座標を代入して、

位置を更新し続けてます。

 

 

で先ほど紹介した、Mathf.Sin(Time.time)は-1から1

までの数字を少数で返してくるので、

 

y軸の値が常に-1から1までの間で増減して、

オブジェクトが上下に移動して往復してくれるわけです。

 

 

ということで一度上記のコードを書いて

実行してみてください。

 

するとオブジェクトが上下にゆらゆら動きます。

 

 

オブジェクトを現在位置で上下に移動させる方法

 

で次にこのままだと、オブジェクトは常に1から-1の

間で動くことになります。

 

Scene上でオブジェクトを例えばy軸の8に設定しても

1~-1のとこに座標が強制移動させられてしまいます。

 

ですがそれだと困りますよね。

ということで現在位置で上下移動させたいって場合は

以下のコードを書きましょう。

 

 

public class クラス名 : MonoBehaviour
{
Vector3 startPos;
    // Start is called before the first frame update
    void Start()
    {
        startPos = transform.position;
    }
 
    // Update is called once per frame
    void Update()
    {
    float posY = startPos.y + Mathf.Sin(Time.time)*4;
        transform.position = new Vector3(transform.position.x,posY,transform.position.z);
    }
}
 

すると現在の位置で上下に移動してくれるようになります。

 

これも一応補足すると、やってることとしては、

現在のy軸座標にMathf.Sin()で出てくる、1~-1を足してる

だけです。

 

例えば、現在のオブジェクトのy座標が8だとしたら、

そこに-1から1を足すので、7~9の間で、

オブジェクトが上下移動してくれるわけです。

 

 

で、オブジェクトの現在y座標を示してるのが、

startPos.yの部分でして、そこにMathf.Sin(Time.time)を

足したものをposYという変数に代入して、

 

transform.position = new Vector3(transform.position.x,posY,transform.position.z);

y軸の部分に代入してやることで、現在y座標から-1から1を足した

数値で上下するわけです。

 

 

またあとはMathfメソッドで出てくる数値に数字を

掛け算すると、

 

Mathf.Sin(Time.time)*4;

(こんな感じに)

 

上下異動幅を大きくすることもできるので

ぜひやってみてください。

 

 

まとめ

 

ということでまとめに入ります。

 

Unityでオブジェクトを上下移動させたい場合は、

Mathf.Sin(Time.time)

を使いましょう。

 

そしてそれをy座標の部分に入れて、

y座標の値を増減させて、上下移動を実現しましょう。

 

 

ということで、Unityでオブジェクトを上下移動させる方法でした。

読んでいただいてありがとうございました。

 

でわ。

 

チャーさん

 

-ゲーム開発ノウハウ

関連記事

UnityでHPを回復させる機能を作る方法(簡単なやり方です)

どうも、チャーさんです。 この記事では、UnityでHPを回復させる方法を お話しします。   ゲームでは基本プレイヤーが回復することが多い のでプレイヤーのHPの回復方法を書きます。 &n …

Unityで動く床(滑らない、往復)の作り方はコチラ

どうも、チャーさんです。 あなたはUnityで動く床、それも滑り落ちず 往復するやつを作りたいと思っていますか?   この記事を読めばそれは実現します。 ですが読まないと結構つまづきます。 …

no image

unityでキー入力で攻撃する方法(3分以内にできます)

どうも、チャーさんです。 あなたはunityでキー入力による攻撃を したいですか?   この記事ではunityでキー入力で攻撃を する方法を書いてますので、あなたがこれを読めば、 キー入力で …

Unityでジャンプする方法(空中ジャンプ防止機能付き)

どうも、チャーさんです。   あなたはUnityでジャンプ機能を作りたい と思っていますか?この記事では、パソコンの キーボードを押したら、ジャンプする機能の作り方を説明します。 &nbsp …

Unityでのゲームオーバー機能の作り方をわかりやすく説明

  どうも、チャーさんです。 この記事では、Unityでゲームオーバー画面の 作り方を説明します。   この記事を読めば、あなたはゲームオーバー画面を作れて さらにゲームオーバーの …

no image

unityでターン制のゲームを作るにはコレを使いましょう

どうも、チャーさんです。 あなたはunityでターン制ゲームを作りたい そう思っていませんか?   この記事ではunityでターン制のゲームを 作る方法を書いています。   なので …

最新記事

チャーさん

Unityに関する記事を書いてます。

 

[簡単な経歴]

 

2018年-プログラムを始めUnityの存在を知りハマる。

2019年-エンジニアとして仕事開始(web系)

2021年-UnityでVR開発等にも手を出し始める。

現在-エンジニアとして活動しながらUnityも続行中。

 

youtubeでは、Unityに関する動画をあげてるので、

あなたのUnityスキルアップにどうぞ。