質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1167閲覧

Unityのパーティクルについて

kaurwama

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/06/20 03:44

編集2019/06/20 04:35

前提・実現したいこと

Unityについて質問です。
(コーディングだけではないので、適した質問場所ではないかもしれませんが、
もしヒントでもあればよろしくお願いいたします。)
Unityのパーティクルで図のように、指定した位置・順番で
水を流す・光を通すなどを実現したいと考えています。
イメージ説明
イメージ説明

実現させる方法として
①発生位置をA→B→C→Dのようにずらしていく
②始点・終点を設定する
これら2つの方法を考えたのですが、どのように実装すればいいかわかりませんでした。

水・光などのアセットを使って、実現できればと考えています。

ご教授よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ku__ra__ge

2019/06/20 04:02

パーティクルを発生させているゲームオブジェクトを移動させればいいだけに思えますが、どこがわからないのでしょうか。さすがにゲームオブジェクトを移動させる方法が分からないわけではないですよね?
kaurwama

2019/06/20 04:28

ご回答ありがおとうございます。 自分がAfterEffectsを用いて、水の表現を作っていた時 Emitterの位置から球状にパーティクルを放出させ、 それを動かすことによって水の流れを作っていました。 (わかりにくいと思うので、質問部分に画像を添付しておきます。) そのため、Unityでも同じようにできるのではないだろうか、と思い制作していたのですが、 Unityのアセットストアにある水の表現は噴水など、 既に水の流れを持っていて、そのEmitterの位置を変えても、 水の流れではなく、噴水の位置が変わっていく表現しか作ることができませんでした。 (説明が下手で申し訳ありません。) あまり時間がなく、自力で水の表現を作るのではなく、 アセットストアからの利用を考えています。
kaurwama

2019/06/20 04:33

harunasan様 ご回答ありがとうございます。 拝見させていただきます。 パーティクルについて知識が薄く、 アセットを修正することができておりませんでした。 こちらの表現でできないか試してみたいと思います。
kaurwama

2019/06/20 04:44

吹き出す方向(速度の方向?)などを変更して 調整してみたいと思います。
guest

回答1

0

ベストアンサー

流れを曲げる手段の候補としてParticle System Force Fieldはいかがでしょうか?
フィールドをちまちま並べるのは少々面倒かもしれませんが、一応それらしくなりそうな気がします。

結果

追記
ParticleSystemForceFieldを付けたオブジェクトを移動・回転・拡大縮小すると効果範囲もちゃんと変形しますので、たとえば下記コードのようにフィールドオブジェクトを数珠つなぎに参照させて、常に次のオブジェクトの方を向くようにしてやれば、オブジェクトの位置を調整するだけで向きを自動的に合わせてくれるでしょうからレイアウトが楽になりそうです。

C#

1using UnityEngine; 2 3[RequireComponent(typeof(ParticleSystemForceField))] 4[ExecuteAlways] 5public class FieldDirector : MonoBehaviour 6{ 7 // インスペクター上でnextFieldに次の目標となるオブジェクトをセットしておき 8 // 全体としてフィールドオブジェクトが数珠つなぎになるようにする 9 public Transform nextField; 10 private ParticleSystemForceField field; 11 12 private void OnEnable() 13 { 14 this.field = this.GetComponent<ParticleSystemForceField>(); 15 } 16 17 private void Update() 18 { 19 if (this.nextField == null) 20 { 21 return; 22 } 23 24 // Y軸を次の目標の方角へ向ける(Y軸方向に力をかけるよう設定されていることを前提としています) 25 this.transform.rotation = Quaternion.LookRotation(this.nextField.position - this.transform.position) * 26 Quaternion.Euler(90.0f, 0.0f, 0.0f); 27 } 28 29 private void OnDrawGizmos() 30 { 31 // 次の目標に向かって線を引き、また効果範囲をわかりやすくするため枠線を描く 32 Gizmos.color = Color.yellow; 33 if (this.nextField != null) 34 { 35 Gizmos.DrawLine(this.transform.position, this.nextField.position); 36 } 37 38 Gizmos.matrix = this.transform.localToWorldMatrix; 39 Gizmos.DrawWireCube(Vector3.zero, new Vector3(2.0f, this.field.length, 2.0f)); 40 } 41}

手動操作に限らず、スクリプトで位置を操作しても問題ないはずです。下記のようなスクリプトでフィールドを移動させると...

C#

1using UnityEngine; 2 3public class FieldMotor : MonoBehaviour 4{ 5 [SerializeField] private float amplitude = 3.0f; 6 [SerializeField] private float angularSpeed = 15.0f; 7 private float phase; 8 9 private void Start() 10 { 11 this.phase = Mathf.Asin(Mathf.Clamp(this.transform.position.x / this.amplitude, -1.0f, 1.0f)); 12 } 13 14 private void Update() 15 { 16 this.phase += this.angularSpeed * Mathf.Deg2Rad * Time.deltaTime; 17 var position = this.transform.position; 18 position.x = Mathf.Sin(this.phase) * this.amplitude; 19 this.transform.position = position; 20 } 21}

下図のように流れが変化しました。フィールドの形状はある程度長くして、雨どいを並べるような感じでレイアウトするのがよさそうに思います。

結果

投稿2019/06/21 16:59

編集2019/06/28 18:58
Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaurwama

2019/06/28 15:21

@Bongo さま 回答ありがとうございます! こちらのパーティクルの曲がる位置はUnity上からではなく プログラムからでも制御可能でしょうか? (調べてみたところ曲がる位置はDirectionに依存しているようなので、 プログラム上でA→Bのベクトルを計算して、Directionに反映させる...?)
Bongo

2019/06/28 19:03

おっしゃるように力場の方向をスクリプトでコントロールする手もありそうですが、単純にフィールドオブジェクトのTransformを操作してやってもいいんじゃないかと思います。試しにオブジェクトをスクリプトで移動させてみた結果を追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問