Shader Graphを触ろうとしたら、開幕でエラーを吐いて、詰まったメモ

解決方法

https://answers.unity.com/questions/1512009/why-my-shader-graph-always-purplewhy-my-shader-gra.html

Window > Package Manager > All >SRPCore をインストール

Window > Package Manager > All > Lightweight Render Pipeline もインストール

create > Rendering > LightweightAsset で新しいLightweightAsset を作る

作ったものを、登録する。Edit> Project Settings > GraphicsSettings > Scriptable Render PipelineAsset

登録した後、Shader Graphをインストールする。(Window > Package Manager > All > Shader Graph) 

起きた症状

https://forum.unity.com/threads/feedback-wanted-shader-graph.511960/page-25 で困っている人と同じ症状。

Assertion failed: Assertion failed on expression: 'success' UnityEditor.EditorApplication:Internal_CallUpdateFunctions()

Unity 2018.1と2018.2で同様の症状が起きた。

ShaderFogeメモ

Unity2018では、ShaderForgeは使えない。
https://forum.unity.com/threads/shader-forge-a-visual-node-based-shader-editor.222049/page-120 ShaderForgeで作られたシェーダーは、エラーを吐いてしまう。これは、廃止された要素があるため。
https://forum.unity.com/threads/missing-changed-light_attenuation-macro.511767/ LIGHT_ATTENUATIONは、Unity 5が2015年に出荷されて以来廃止されました.UNITY_LIGHT_ATTENUATIONに置き換えられました。 さまざまなTRANSFER_SHADOWマクロも廃止されました。シェイダーを更新する方法については、このチュートリアルを参照してください。
http://catlikecoding.com/unity/tutorials/rendering/part-17/

修正方法は後程調べる

NGUIの使い方 その2~UIRootについて~

NGUIをダウンロードすると、メニューに【NGUI】が追加されます。
NGUI – Creat – 2D UI を選択します。

071201

シーン中のNGUIを管理する本体です。
以降基本的に作成されたNGUIのオブジェクトは、このUI Rootの子になります。

注意する事は、スケーリング。
値を見てもらえば分かりますが、0.0001・・などの1以下の値が入っています。
従って、パーティクルなどをRootのこにする、サイズが意図しない形になります。

NGUIで使用するオブジェクトに、パーティクルを出す場合は、
スケールを考え、専用で用意する必要が出てきます。

こちらも合わせてチェック
=>スケール1以下のパーティクルは、カメラ外に出ると、消滅してしまう

Camera は基本的にNGUIのオブジェクトを専用に写す形になります。

flexible (フレキシブル)
よく分かりません。 むしろ教えてください。
constrained (制約)
画面の大きさに応じて、縦または横の比率を維持したまま、スケーリングされます。
This setting will keep UI look the same on all screen size relative to the width of the screen.
you will be able tu see more or less on the top and bottom sides sides of the screen as the aspect ratio changes.
(この設定は、UIが画面の幅にすべての画面サイズの相対的に同じに見えるし続けます。
あなたはTUが、アスペクト比の変化に応じて画面の上側と下側の側面には、多かれ少なかれを見ることができるようになります。)

実行例
640*960の画面サイズに対し、Width640 height960 を入力。
Width640 にチェックを入れる。

スクリーンサイズ 640*960(比率2:3)

072603

スクリーンサイズ 540*960(比率9:16)

072604

スクリーンサイズ 768*1024(比率3:4)

072605

上記から分かるように、 基準にした比率より、縦長の場合は、上下を追加。
横長の場合は、中央をへらし、左右をピッタリにしています。
アンドロイドなどの複数端末に対応する場合、子の設定+Anchors(アンカー)を使うだけで、実現できるかもしれません。


=>複数端末に対応する方法例

constrained On Mobiles (携帯電話上で制約)
PC上ではflexibleで扱われ、携帯端末ではconstrained になる設定らしい。
Content Width
Content Height
基準となるサイズです。
フルHD(1920×1080)を基準にする場合は、子の半分960*540で作成するなど、
等倍の値を入力しない。
画像大きすぎて、テクスチャが馬鹿にならないので。

レイヤーに相当する機能です。
UIPanel の子のオブジェをまとめて、優先度を管理します。

↑手前に表示(優先度:高)

UIPanel(Depth:10)
┗UIWidget

UIPanel(Depth:1)
┗UIWidget
┗UIWidget

UIPanel(Depth:0)
┗UIWidget

ただし注意として、
共通の画像アトラスを表示していても、
UIPanelを挟むと、ドローコールがその都度発生するので注意しましょう。

この場合は、ドローコール2
UIPanel
┗textureB
┗textureA
┗textureA
┗textureA

この場合は、ドローコール3
UIPanel
┗textureB
┗textureA
UIPanel
┗textureA
┗textureA

この場合は、ドローコール4
UIPanel
┗textureB
┗textureA
UIPanel
┗textureB
┗textureA

Alpha
パネル全体の、透過度です。
0にすると、見た目上消えます。 Animatorで透明度をアニメーション使用とすると、うまくいきません。具体的には、0 => 1 で変化するような挙動をしたり、
そもそも表示されないなど、バグがある様子。
UIWidgetも同じような挙動をするので、
自作のコンポーネントなりを追加して、操作する必要があります。(3.9現在)
 
Depth
Panel同士の優先度設定。
値が大きいパネルほど、前面に表示される。
Clipping
■None
デフォ設定。
画面サイズに一致します。

■Texturemask
テクスチャを使った、マスク機能が使えます。

■Soft Clip
四角形の形状で、マスク効果が得られます。
Render Q
■Automatic
■Start At
■Explicit
Sort Order
Normals
Cull
Sisible
padding
Offset
Static
Panel Tool
071901 071902

スケール1以下のパーティクルは、カメラ外に出ると、消滅してしまう

shuriken particle system not rendering particles when off screen

http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html

NGUIとパーティクルの相性は、はっきり言ってよくないです。

1.スケーリング
UIRootが0.002とかいう、超絶小さいサイズになっているので、
スケールをあわせないで作ったパーティクルが使えない。
2.表示の優先順位がうまくいかない
共通の一つのカメラを使って表示した場合
パーティクルを手前に出すか、出さないしか出来ない。

具体的には、NGUIでパーティクルを挟めない。

上記を踏まえて、かつパーティクルエミッタのサイズは、
1以下にしてはいけない。

1以下にするとどうなるか。
カメラ外に、パーティクルシステムが出てしまうと、
発生してたものも含めて消えてしまう。

Scene上では、発生している。けど、Game上には表示されない。

どうするか。

方法1
UIRoot外でパーティクルシステムをクリエイト。
UIRoot以下に移動。
パーティクルはスケーリングがかかる(480倍等)
その状態で、UIにきちんと映るように、作成。