※当メディアのリンクにはアフィリエイト広告が含まれています

【Unity】常に同じ高さまでバウンドするオブジェクトを作成する

自分用のメモみたいなものです。

Physics Materialを使用してバウンドさせてみる

何も考えずにバウンドさせようと思った場合、Physics MaterialのBouncinessに0よりも大きい値を入力する方法が一番簡単です。
常に同じ高さにバウンドさせる場合、1(エネルギー損失なし)を入力すればきっと大丈夫と思いやってみた結果、どうもうまくいかない。
シーンを再生して様子を見ていると、少しずつ高くなってます。

重力の設定とかで頑張ればうまくいくかもしれないけど、そこまで頑張りたくない。

バウンドさせるのではなく、打ち返す

バウンドと表現するとPhysics Materialを使うイメージですが、今回やりたいのは常に同じ高さまで飛び上がってくれればいいわけで、AddForceを使用して常に同じ力でY軸方向に打ち返してあげればPhysics Materialを使用せずとも実現可能です。

地面となるCubeの方に以下のスクリプトを追加すれば、画像のような挙動になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleCollision : MonoBehaviour {

    [SerializeField]
    private Rigidbody rb; // ←バウンドさせたいオブジェクト

    private void OnCollisionEnter(Collision collision)
    {
        rb.AddForce(Vector3.up * 10f, ForceMode.Impulse);
    }
}

最後に

このやり方は一例であって、他にもやり方はいろいろあります(多分)。
手っ取り早くその場でバウンドし続けるオブジェクトを作成したい場合はこのやり方か、1フレームごとにPositionを更新するようなスクリプトを作成することになると思います。