🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity

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

Q&A

解決済

1回答

2668閲覧

パーティクルの色を変更したい

Bruno_5239

総合スコア23

C#

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

Unity

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

0グッド

0クリップ

投稿2020/11/30 12:21

編集2020/11/30 12:52

現在、Unityでゲーム開発しています。
ブーストの残量によってそこから放出されるパーティクルの色を変更、という演出を実装したいのですが、パーティクルの色が変わりません。
mainの指定のあたりで躓いているのでしょうか。
旧形式の資料が混在しているのでその周りの有益な資料がなかなか見つかりません。
どなたかお力添えお願いいたします。
Unityのverは2019.2.3f1です。

画像のように、値は切り替わっているようですがインスペクター及びゲーム画面では変わっていません
イメージ説明

c#

1private float currentBoostRemain = 100; //ブースト燃料の残り 2 [SerializeField] 3 private Color boostNormalColor = new Color(0, 245, 255, 255); 4 [SerializeField] 5 private Color boostOverHeatColor = new Color(255, 0, 110, 255); 6/// 7if (TouchUtility.GetTouch() == TouchInfo.Moved || TouchUtility.GetTouch() == TouchInfo.Stationary) 8 { 9 //残りブーストの残量を計算 10 currentBoostRemain -= boostCost * Time.deltaTime;  11 if (currentBoostRemain < 0) 12 currentBoostRemain = 0; 13 14 if (isBurst) 15 currentBoostRemain = boostMax; 16 else 17 { 18 var l = Mathf.InverseLerp(0, boostMax, currentBoostRemain);//0~Maxの間の残りブーストの割合を計算 19 var main = boostParticle.main; 20 var c = main.startColor.color;//割合に応じたカラーの値を取る 21 c.r = Mathf.Lerp(boostOverHeatColor.r, boostNormalColor.r, l); 22 c.g = Mathf.Lerp(boostOverHeatColor.g, boostNormalColor.g, l); 23 c.b = Mathf.Lerp(boostOverHeatColor.b, boostNormalColor.b, l); 24 c.a = Mathf.Lerp(boostOverHeatColor.a, boostNormalColor.a, l); 25 26 main.startColor = c; 27 } 28 29 if (!boostParticle.isEmitting && currentBoostRemain > 0) 30 { 31 SetBoostParticleActive(true); 32 } 33 }

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

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

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

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

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

ayousanz

2020/11/30 16:20

保存はしていますか?(たまに忘れることがあるので) 再起動とかで治る可能性はあります (昔パーティクルを触った時は普通色は変わったので)
guest

回答1

0

ベストアンサー

基となる色のデフォルト値が...

C#

1 [SerializeField] 2 private Color boostNormalColor = new Color(0, 245, 255, 255); 3 [SerializeField] 4 private Color boostOverHeatColor = new Color(255, 0, 110, 255);

となっていますが、値が大きすぎて白飛びしてしまい色が変わっていないように見えた...という可能性はないでしょうか。
以前に「Unityでのスクリプトによる色変化がおかしいです」とのご質問を見かけたことがあるのですが、同様に

C#

1 [SerializeField] 2 private Color boostNormalColor = new Color32(0, 245, 255, 255); 3 [SerializeField] 4 private Color boostOverHeatColor = new Color32(255, 0, 110, 255);

としてみるとどうでしょうか。
なおboostNormalColorboostOverHeatColorはシリアライズ対象になっているようですから、コード上のデフォルト値を書き換えても、すでにオブジェクトにアタッチ済みのスクリプトコンポーネントの色設定はそのままになるかと思います。リセットするか、あるいは新しくアタッチしなおしてやる必要があるかもしれません。

投稿2020/11/30 18:50

Bongo

総合スコア10811

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

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

Bruno_5239

2020/11/30 21:32

ご指摘いただいたとおりColor32で指定したところ、色が変化するのを確認しました! ありがとうございます! 普通のColorだと0~1指定だったのですかね。。インスペクターでも0~255指定だったのでそうなのかとおもていました。。 的確なアドバイスありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問