【Unity】演出作成時見つけた色々

はじめに

はじめまして、ソーシャルゲーム事業部のUnityエンジニアのナタニエルです。
この記事はカヤックUnityアドベントカレンダー2018の10日目の記事になります。

本記事では自分がUnityで演出を作る作業の間見つけたUnity本来の便利な機能の紹介をします。

そして最初に断って置きますが、以下の画像やスクリーンショットはUnityバージョン5.6で取られました。

演出作成中に知ってると便利な機能

インスペクターのリストに複数のオブジェクトやコンポネントを一気に設定する方法

SerializeFieldpublicGameObjectやコンポネントのリファレンスを複数保持したいときには一つ一つのオブジェクトをドラッグするより、以下の手順で複数同時に設定できます。

f:id:nathaniel-rokanta:20181203144921p:plain
複数を同時に設定したい

1.Inspectorをロックします
インスペクターのタブの右上に開いた錠前があります。
Inspectorをロックするためにはこちらの錠前をクリックします。

f:id:nathaniel-rokanta:20181203144925g:plain
インスペクターをロック

2.設定したいオブジェクトかコンポネントを選択し、ドラッグします

f:id:nathaniel-rokanta:20181203144937g:plain
ドラッグ

※終わった後錠前の解除も忘れないでください。

色情報の保存・読み込み

UnityColorのウィンドウの下にはPresetsってところがあります。
このPresetsは以下のように使えます。
- 現在の色の情報を保存 - 保存された色の情報を読み込む

保存する方法はPresetsには現在の色が表示されてるボタンのようなものがあります。
それをクリックするだけで色の情報は保存されます。

f:id:nathaniel-rokanta:20181203144858g:plain
色情報保存

保存された色情報を読み込むには保存された色情報をクリックするだけです。

f:id:nathaniel-rokanta:20181203144909g:plain
色情報読み込む

※最新のUnityではSwatchesと呼ばれます。
 https://docs.unity3d.com/ja/current/Manual/PresetLibraries.html

生成されたパーティクルを後で動かす方法

普段パーティクルシステムを使う時、生成されたパーティクルの動きは全部パーティクルシステムの設定で制御されてます。 ただし、その設定された動きの上に別の動きを加えたい時もあります。 探した結果、UnityのコンポネントのWindZoneで上記のことができます。

WindZoneは風の影響を地形に与えるためのコンポーネントですが、パーティクルの動きに干渉させることもできます。
これによってパーティクスシステムによって生成されたパーティクルをパーティクルシステム内で設定された動き以外で動かすことができます。

先ずは動かないパーティクルを生成するパーティクルシステムを準備します。
※動かないのは単に効果を分かりやすく見せるためです。

f:id:nathaniel-rokanta:20181203144815p:plain
動かないパーティクル

そしてWindZoneを設置します。

f:id:nathaniel-rokanta:20181203144819g:plain
WindZoneの設置

生成されたパーティクルがWindZoneの効果を受けるための設定をします。

f:id:nathaniel-rokanta:20181203144833g:plain
パーティクルシステム設定

実際に動かしてみます。

f:id:nathaniel-rokanta:20181203144840g:plain
実行

※公式のWindZoneの情報です。
 https://docs.unity3d.com/ja/current/Manual/terrain-WindZones.html

Inspectorに公開された変数の見た目の整理

コンポネントのスクリプトを作成する時、変数をInspectorに公開することが結構あります。
公開された変数が少ない場合はそんなに気になりませんが、数が多くなると見づらくなります。

f:id:nathaniel-rokanta:20181203145005p:plainf:id:nathaniel-rokanta:20181203145008p:plain
コンポネントスクリプト・表示1

この場合はHeaderという属性を使うことで表示された変数を区分して、見やすくすることができます。

f:id:nathaniel-rokanta:20181203145011p:plainf:id:nathaniel-rokanta:20181203145015p:plain
コンポネントスクリプト・表示2

おまけ

パーティクルシステムに2つマテリアルが設定された時の解決方法

この問題は5.5と5.6に発生した問題で、2017.1にはもう修正されました。
多分もうあまり使われてませんが、もし問題がまだあるバージョンを使っててこの問題を遭遇した場合の対策として目を通して貰えれば幸いです。

先ずは問題の方です。
上記で指定された問題有りバージョンで時々パーティクルシステムのマテリアルを変更する時以下の状態に遭遇することはあると思います。

f:id:nathaniel-rokanta:20181203144953p:plain
一つのパーティクルシステムに2つマテリアル

見ての通り、2つのマテリアルが設定されてますが、Rendererの中には一つのマテリアルしか表示されてません。
その表示されてるマテリアルを右クリックしても削除するコマンドがなくて、Rendererに表示されてるマテリアルをNoneにしてもそのRendererに使われたマテリアルしか消えなくて、もうひとつのマテリアルがそのまま残ってます。

自分も最初の頃結局諦めて、もう一回最初からそのパーティクルシステムを組み込むことにしました。
けれど、この問題を簡単に解決する方法がありました。

以下の手順を実行すれば、その余分のマテリアルを削除できます。

1.Trailsを有効に

f:id:nathaniel-rokanta:20181203144956p:plain
余分マテリアル発見
二つ目の余分のマテリアルはTrailsを有効にすることによってRendererTrail Materialとして設定されてます。

2.Trail Materialに設定されてるマテリアルをNone

f:id:nathaniel-rokanta:20181203144959p:plain
余分マテリアル削除

3.Trailsを使ってない場合はまた無効に

f:id:nathaniel-rokanta:20181203145002p:plain
Trails無効

これで二つ目のマテリアルを削除できました!

上記の情報は以下のUnity Answersからです。
https://answers.unity.com/questions/1423075/particle-multiple-material.html

おわりに

以上で少ないながらこちらから提供できる小ネタになります。

明日は君塚さんの「Oculus Go向けコンテンツを最速で作るぞ」です。 ぜひ読んでみてください!