actionScript書きの日記

アラフォーFlashデベロッパのブログ。actionscriptやobjective-cを経て、現在はUnity、Spine、AfterEffectsがメイン。

UnityでResourcesフォルダを使用せずに動的にオブジェクトを生成する方法

前提

Resourcesフォルダが非推奨になっているとは知っていたのだが、ではどうするのか、ということを知らなかった。動的にオブジェクトを生成したいときはpublicで変数をもたせてそこに生成したいオブジェクトを代入し、Instantiate関数で生成する方法を撮っていた。だがこれだとstatic関数内でオブジェクトを生成することが出来ないので、コードベースで生成する方法を調査した。

 

対処法

Addressableアセットシステムを使うことで、生成したいオブジェクトのパスを登録することが出来る。その登録内容をもとに、動的にオブジェクトを生成することが可能となる。

以下の記事に助けて頂いた。本当に分かりやすくまとめてくださっている。感謝申し上げる。

light11.hatenadiary.com

UnityのList内の要素を全て削除する方法

Unityで変数として設定したList内のオブジェクトを全て削除して空にしたいときは、Clear関数を使用する。

RemoveAll関数と混同したので、備忘録として。

ちなみに「RemoveAll」関数は、条件に合致する要素を全て削除する関数となる。

以下の記事に助けていただいた。感謝申し上げる。

www.sejuku.net

LitシェーダーをVisualEffectGraphで使用するとパーティクルが消える件

youtu.be

上記のチュートリアルがとても分かりやすく参考になったのだが、一点詰まってしまったことがあったので備忘録としてメモ。

ShaderGraphでVisualEffect用のシェーダーを作成して、それをVisualEffectGraphで使用するのだが、ふと気が向いて「Fragment」ブロックの「Material」の設定を「Lit」に変更した途端に、このシェーダーを使用したパーティクルが表示されなくなった。

 

f:id:goodbyegirl1974:20211111173023j:plain

このあたり、どこまで気にするかは人それぞれなのかと思うが、個人的には解決しておきたいと考える。

いろいろ調べた所公式サイトに回答が記載されていた。

docs.unity3d.com

 They come in a regular (unlit) and a Lit variety (HDRP-only).

 

と記載があり、自分はURPでプロジェクトを作成していたため、使用できないLitを使用したから非表示になった、ということだ。簡単なことなのだが、調べるのにかなり手こずったなあ。

UnityのShaderを用いた画像の歪みの実装

なかなかに面白い動画があったので、実際にやってみた。

youtu.be

この動画は自分にとって有用な情報がいくつも入っていてとても参考にさせて頂いた。この場を借りて感謝申し上げる。

さて、この動画の6分12秒あたりから、UnityのShaderを用いて画像にディストーションをかける方法が解説されている。

簡潔にいうと、UVのXとYにノイズの要素を足して、UV座標にゆらぎを与えるということだ。

f:id:goodbyegirl1974:20211109221855j:plain

実際にはノイズのコントラストを調整したり、スクロールさせたりするためにもう少しノードを足すけれども、一番の基本部分はこの状態である。

このシェーダを実行すると、以下のような効果が得られる。

f:id:goodbyegirl1974:20211109222941p:plain

なかなかに面白い効果になる。上下にスクロールさせれば水流などが表現できそうだ。

Substance Designerで透過画像を作成する方法

一時期離れていたSubstance Designerをまた触り始めている。理由としては、シームレスなテクスチャを作るのに便利、というのがある。UV Scrollをさせたりする場合にはつなぎ目は重要になるので。

今回は、Substance Designerで透過画像を作成する方法を備忘録として書いておく。

対応としては、「Alpha Merge」ノードを使用する。RGBに元画像を、Aにアルファ抜きする型を入力する。この場合、白が不透明部分、黒が透明部分となる。

 

こちらの記事に助けていただいた。感謝申し上げる。

shamimatsu.com

Unity2020で右クリックでUnlitShaderGraphが作成できない件

前提

Unityで「Universal Renderer Pipeline」のプロジェクトを作成し、右クリックでUnlitShaderGraphを作成しようとするも、「Create→Shader」と進んで該当項目がない。

 

対処法

各ShaderGraphが「Blank Shader Graph」に統合されたため、今後はこれをまず作成し、「Master Node」の代わりに実装された「Master Stack」に適宜パラメータを追加して対応する。

 

これは本当に驚いた。久しぶりにShaderGraphのチュートリアルを見て「よし作ろう」と思ったら初っ端で躓いたのである。この躓き方は久しぶりに味わった。

変更点としては、これまでShaderのタイプごとに用意されていた「Master Node」を廃して、代わりにカスタマイズ可能な「Master Stack」が実装されている。これはMasterに持たせるパラメータをユーザーが任意に設定できるもので、これまでよりも設定の幅が広がることになるだろう。

同時に、こちらも新たに実装された「Graph Inspector」の「Active Targets」において「Universal」を設定すると、それに基づいた設定が可能になる。ここで「Material」の種類を選択するとそれに応じたMasterのパラメータを自動設定してくれるので、最初はこのあたりから始めることになるだろう。

 

以下の2つの記事に大きく助けていただいた。感謝申し上げる。

note.com

bravememo.hatenablog.com

また、Unityからも公式のアナウンスが出されている。やはり毎日追いかけないとだめだな。。。。

blog.unity.com

Unityでオブジェクトを指定した角度に回転させる方法のまとめ

前提

Unity上のオブジェクトを、指定した角度に回転させたい。例えば、Rotationの値が(0, 0, 90)になるようにしたい。

 簡単なようでいて、この対応が意外とややこしいので、備忘録として。

 

対応

対応は2種類の方法がある。

  1. Transformの「eulerAngles」を指定する方法。
  2. transform.rotationを指定する方法。

 

Transformの「eulerAngles」を指定する方法。

this.gameObject.transform.eulerAngles = new Vector3(0, 0, 90);

Transformの「eulerAngles」はVector3で指定できるので便利。

 

transform.rotationを指定する方法。

transform.rotation = Quaternion.AngleAxis(90.0f, new Vector3(0, 0, 1));

「Quaternion.AngleAxis」を使用して角度と回転軸を指定すると、それに見合ったQuaternionの値を返してくれる。Transform.rotationにそのまま代入できるのは便利。

 

参考

以下の記事に助けて頂いた。他にもよくまとまっていて素晴らしい記事。感謝申し上げる。

tama-lab.net