今回はUnreal Engineにて次のようなケースで試せる解決策を紹介する。
Sprite Rendererだと次のようなパーティクルを
Ribbon Rendererに差し替えて次のようにしたい
※デフォルトのリボンマテリアルは尻尾側の色が自動で薄くなる
でも、普通に作ると...
そうなるんかーい!
これを解決する策を紹介する。
少し長くなるので先に何を使うかだけ書いておく
RibbonLinkOrderを設定Sample Particle From Other Emitterの場合はParticle ID Sampling=Apply Sampled ID as Ribbon IDに変更あくまで再現して確認したい人向けなので、解決策だけ読みたい方はこの項はスキップして良い。
軽く作成の概要を書いておく。
Spawn Burst Instantaneousにてパーティクルを生成するエミッタTorus Locationにて円状にパーティクルを配置Handle Radius=0にすると1列の円にDistributionのU PositionにReturn Normalized Exec Indexを設定しないとパーティクルは重なってしまう以上で完成。
なぜかRibbon Rendererで描画するとリボンがぐちゃぐちゃになる。
パーティクルのスポーンに新しいスクラッチパッドモジュールを追加
ダブルクリックしてノードエディタのようなものが出る
この画面に入ると複雑そうで気が引けるが一瞬で終わる。
少し右のMap Setのノードで+を押してRibbonLinkOrderをセット。
そこに実行インデックスを挿せば完成。
※実行インデックスはexecで検索すれば出る。
必ず適用を押すこと
これで既に次のようになっているはずだ。
実は私もあまり細かいことはわかっていない。
海外のフォーラムを読む感じだとSpawn Burst Instantaneousで生成したリボンはデフォルトで生成順につながらないらしい。
ではこのRibbonLinkOrderとはなにかというとリボンの接続順を明示するパラメータのようだ。
デフォルトではこのパラメータは用意されておらず、上のスクラッチパッドにて「実行インデックス」という名称が示す通りパーティクルの生成順にRibbonLinkOrderを設定している。
次は少し複雑な例。中級者以上向け。
先ほどと殆どおなじエミッター
もう一つ別のエミッターを作って、上のパーティクルをスタート地点として外に向かってパーティクルを撃つ。
使うのはSpawn Particles From Other Emitter
Sprite Rendererだと実行結果は次
このままのイメージで外側にリボンとして点を結びたい。
では、リボンレンダラに切り替える。
美しい配列ではあるが、思っていたのと違う。
外に繋ぐ場合(リボンを別々にする場合)はどうすればよいのだろうか。
Sample Particles From Other EmitterのParticle ID > Particle ID Sampling
こちらをApply Sampled ID as Ribbon IDに変える。
正しくリボンが表現できた。
これはSpawn Particles From Other Emitterで生成されたパーティクルに、それぞれRibbon IDというアトリビュートを付与するという設定。
このときRibbon IDは発生している元のパーティクルのIDと同じ数字が設定される。
※デフォルトのままだとこのアトリビュートは何も設定されない。
つまり1本のリボンにつながっているパーティクルは全て同じRibbon IDというのを持っている。
Ribbon IDが同じモノは一つのリボンにつながるが、違うものはつながらない。
発生源のパーティクルはそれぞれ別のIDを持っているので、そこから発生したパーティクルだけが接続されているということ。
※内部の実際の数字はちょっと違う。あくまで例
今回はちょっと理解が難しいが、ひとまず解決策として2つ紹介した。
ただ、リボンがつながらない理由はケースバイケースでこの他にも様々なエラーが考えられる。
上のケースはおそらく最も良くあるケースなのでこの2つは覚えておきたい。
