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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

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

Q&A

解決済

1回答

2507閲覧

unity のパーティクルシステムの中のrendererへのアクセス方法とorderInlayerへのアクセスについて

BRAK

総合スコア98

Unity

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

0グッド

0クリップ

投稿2020/09/21 04:19

編集2020/09/21 04:21

unity のパーティクルシステムの中のrendererへのアクセス方法とorderInlayerへのアクセスの仕方がわかりません

色々調べたのですが、どうやら、ParticleSystemとは別にParticleSystemRendererに分かれていることがわかり、これでアクセスをしたのですが、そもそもorderInlayerというのがなくどうしよもない状態になっています。
またParticleSystemRendererでsortingLayerNameというのがあり、これで名前を変えてコードをうったのですが何も変わらなかったのでそもそもParticleSystemRendererコンポーネントというのを使ってアクセスするのかもわからない状態です。

コード for (int i = 0; i < 3; i++) { for(int j = 0; j < effect[6].transform.childCount; j++) { ParticleSystemRenderer particleSystem = effect[6].transform.GetChild(j).GetComponent<ParticleSystemRenderer>(); particleSystem.sortingOrder = i; } Instantiate(effect[5], new Vector2(transform.position.x + x * i,transform.position.y + y * i), angleZ); }

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

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

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

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

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

sakura_hana

2020/09/22 05:09

「orderInlayer」はスクリプト上だと「sortingOrder」でいいと思います。 検証方法が何か間違っている可能性があります。やったこと・何が起こっているのかを詳しく記載してください。 (今のコードだと「effect[6]」のsortingOrderを変えたのに「effect[5]」を新規生成しているので何も変わっていないように見えるとかではないでしょうか?)
BRAK

2020/09/22 05:39

あー、なるほど。 effect[5]とeffect[6]には同じものが入っていて、大本の素材であるeffect[5]とeffect[5]が複数入っているeffect[6]に分かれています。 やろうとしたことは、大本のeffect[5]をfor文でorderInlayerを+1ずつ上げてeffect[6]がそれを参照してレイヤーの異なるものを順番に3つ生成しようという考えだったのですが、このやり方ではどうやら参照できないということみたいです。
BRAK

2020/09/22 05:46

今effect[5]で生成してみたらiの順番通りにレイヤー設定できていました。 とりあえず調べて仮説を立てた通り実行できたので良かったです。 ちなみにeffect[6]の中にはeffect[5]が4つ入っています。
sakura_hana

2020/09/22 06:26

解決して何よりです。何をどうしたか自己回答してベストアンサーを付けてください。
BRAK

2020/09/22 06:42

さっきは解決していなかったのですが、今、実装して解決させました。 質問なのですが、prefab化させたものをprefab化したもので参照するときはどうすればよかったですか? refの元の値を参照するとかならいけるような気がするのですがどうしょうか。
sakura_hana

2020/09/22 07:23

>prefab化させたものをprefab化したもので参照する 仰っている意味がよく分かりません。 まずPrefabオブジェクトを元にInstantiateした時点で、生成後のオブジェクトとPrefabオブジェクトの間には関連が無くなるというか「同じクラスが付いているが別インスタンス」になります。 これ以上は具体的に何がしたいのか把握できないので、整理して別質問としてもらえればと思います。
guest

回答1

0

自己解決

コード for (int i = 1; i < 4; i++) { for(int j = 0; j < effect[5].transform.childCount; j++) { //親の子(4つ) GameObject parson = effect[5].transform.GetChild(j).gameObject; for (int k = 0; k < parson.transform.childCount; k++) { //親の子の子(5コ)のレイヤーをiと同じにする ParticleSystemRenderer effectLayer = parson.transform.GetChild(k).GetComponent<ParticleSystemRenderer>(); effectLayer.sortingOrder = i; } } GameObject fireFes = Instantiate(effect[5], new Vector2(transform.position.x + x * i,transform.position.y + y * i), angleZ); }

うーん、もっといいコードあると思うのですが、とりあえず自身の子を取得する方法しか知らなかったのでこれで実装しました。
refかなんか使えばうまくいくのかなぁ・・・

投稿2020/09/22 06:40

BRAK

総合スコア98

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問