名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

【Unity】MinMaxCurveをInspectorで設定してみた

こんにちは、SAT-BOXのコアラです。

少し前にこんな記事を書きました
sat-box.hatenablog.jp

記事の内容を端的に言うと、これをやりたかったけどできなかった、という話です。
f:id:sat-box:20180903170553p:plain

ParticleSystemで使われているMinMaxCurveは、スクリプトから設定することはできますがInspectorからはできませんでした。
ですが、Unity2018.2からどうやら可能になったらしいです。

試してみましょう

using UnityEngine;
public class Sample : MonoBehaviour {
    public ParticleSystem.MinMaxCurve minMaxCurve;
}

このように記述したスクリプトをゲームオブジェクトに貼り付けると

f:id:sat-box:20180903172832p:plain
出てきました、2018.2以前ではできなかったことです

そして、プルダウンには4項目ありますが、MinMaxCurveをわざわざ使うなら Random Between Two Curve 一択でしょう!
そして冒頭の画像と同じこの状態にできます
f:id:sat-box:20180903170553p:plain


さて、ここからはおまけです。

MinMaxCurveを使う目的として、作成した2曲線の間からランダムな曲線を取得したい、というのが一般的だと思います、ランダムの必要がなければAnimationCurveで十分ですよね。
ですので、そのやり方を書いておきます。

using UnityEngine;
public class Sample : MonoBehaviour {
    public ParticleSystem.MinMaxCurve minMaxCurve;
    private float lerpFactor;
    
    void Start() {
        lerpFactor = Random.value;
    }

    void Update() {
        float value = minMaxCurve.Evaluate(Time.time, lerpFactor);
        transform.position = Vector3.up * value;
    }
}

特に意味もなく大したこともしてないですが、MinMaxCurve内のランダムな曲線に従って上下に動くスクリプトです。

ポイントとしては、Evaluate関数lerpFactorです。

Evaluate関数はAnimationCurveにもありますが、MinMaxCurveの場合はlerpFactorという引数が増えています。
このlerpFactorが、2曲線の間の、どの曲線になるかを決めます。
なので、それをStart関数などで0~1で決めておけば、ランダムな曲線になります。

以上です、参考までにどうぞ。