ユーザ用ツール

サイト用ツール

wiki:unity:tips:080

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
wiki:unity:tips:080 [2015/02/20 07:36]
step
— (現在)
ライン 1: ライン 1:
-====== 080 スクリプトからShaderの種類を変更する ====== 
  
-===== 概要 ===== 
-Unity におけるシェーダは、マテリアルを通して実装されています。 
-マテリアルをゲームオブジェクトにアタッチすることで見た目を変化させたりできます。 
- 
-{{:​wiki:​unity:​tips:​unity_shader_sel.png?​200|}} 
- 
-Unityに標準搭載のシェーダは、マテリアルの設置画面から選択できます。 
- 
-スクリプトからシェーダを入れ替えるには以下の様にします。 
-<code csharp> 
-gameObject.renderer.material.shader = Shader.Find( "​Self-Illumin/​Diffuse"​ ); 
-</​code>​ 
-この状態で再生ボタンを押すとシェーダーが変更され、見た目が変わると思います。 
- 
- 
-==== Androidなどの端末に出力すると上手く表示されない ==== 
-~Shader.Find 関数でシェーダを取得し設定しているのだから問題ない様に見えます。 
-しかし端末に転送するとShader.Findで返ってくる値はnullです。なぜ? 
- 
-これは、内臓シェーダが全てパッケージに含まれる訳ではないためです。Unityでは、ビルド時に必要なファイルをかき集めてパッケージを作成しますが、スクリプトで文字列指定されているファイルまでは流石に見ません。なので、"​Self-Illumin/​Diffuse"​シェーダは使われていないものとしてパッケージが作成されたわけです。それで、これを解決するにはどうすれば良いのか?それは冒頭にも述べた様にシェーダはマテリアルを通して実装されています。従って、シェーダ用のマテリアルデータを用意してあげれば良いのです。 
- 
-{{:​wiki:​unity:​tips:​unity_shader_sel_2.png?​200|}} 
- 
-マテリアルを複数個作りResourcesフォルダに入れます。 
-シェーダの設定を別々にしておきます。 
- 
-<code csharp> 
-Material diffuseBlockMaterial = Resources.Load<​Material>​( "​diffuseBlockMaterial"​ ); 
-Material illuminBlockMaterial = Resources.Load<​Material>​( "​Self-IlluminBlockMaterial"​ ); 
-</​code>​ 
-マテリアルを事前にロードしておいて... 
- 
-<code csharp> ​ 
-gameObject.renderer.material.shader = illuminBlockMaterial.shader;​ 
-</​code>​ 
-必要なタイミングで入れ替えます。これできちんと反映される様になりました。 
- 
- 
-==== 設定からパッケージに取り込むシェーダーを設定できる ==== 
-エディターの設定そ行えば、シェーダーファイルをResources以下に用意する必要は無いみたいです。 
- 
-[Edit > Project > Settings > Graphics]を選択します。 
-{{:​wiki:​unity:​tips:​unity_always_shader.png|}} 
- 
-ここにシェーダーファイルを設定しておけば、ビルド時に取り込まれます。 
- 
-[[http://​blog.livedoor.jp/​nanashisoft/​archives/​52686561.html|Unity:​ビルド時にシェーダーを必ず含める方法 : Nanashi-soft]] 
Permalink wiki/unity/tips/080.1424417777.txt.gz · 最終更新: 2015/02/20 07:36 by step

oeffentlich