こんにちは、SAT-BOXのコアラです。
少し前にこんな記事を書きました
sat-box.hatenablog.jp
記事の内容を端的に言うと、これ↓をやりたかったけどできなかった、という話です。
ParticleSystemで使われているMinMaxCurveは、スクリプトから設定することはできますがInspectorからはできませんでした。
ですが、Unity2018.2からどうやら可能になったらしいです。
試してみましょう
using UnityEngine; public class Sample : MonoBehaviour { public ParticleSystem.MinMaxCurve minMaxCurve; }
このように記述したスクリプトをゲームオブジェクトに貼り付けると
出てきました、2018.2以前ではできなかったことです
そして、プルダウンには4項目ありますが、MinMaxCurveをわざわざ使うなら Random Between Two Curve 一択でしょう!
そして冒頭の画像と同じこの状態にできます
さて、ここからはおまけです。
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で決めておけば、ランダムな曲線になります。
以上です、参考までにどうぞ。