ホームページ >バックエンド開発 >C#.Net チュートリアル >Unity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。
Unity のシェーダーには、次の 4 つのレンダリング モードがあります。
——Opaque(不透明) ——Cutout(镂空) ——Fade(隐现) ——Transparent(透明)
以前は、特定のゲーム オブジェクトにフリーズ効果を追加する必要がありましたが、私のシェーダーでは
がシェーダは完全にフリーズしており、そのカラー値はパラメータで調整できません。その後、同僚が、レンダリング モードを変更することでオブジェクト自体のアルファ値を
変更できると教えてくれたので、最初のステップは、次のように、ランタイム シェーダー レンダリング モードの変更に関するコードをインターネットで見つけることでした。
http://www.voidcn.com/article...
//获取目标身上的渲染组件 var renderer = GetComponentsInChildren<renderer>(); // 建立一个冰冻数组 第二个数组元素是事先找好的冰冻特效 Material[] frostMatetials = new Material[2] { renderer.material, frostEffect }; //添加冰冻特效到人物身上的数组中 renderer.materials = frostMatetials; //实例化一个渲染模式变量 var fadeMode = SetMaterialRenderingMode.RenderingMode.Fade; //根据网上的方法更改你的 Shader 渲染模式为 Fade SetMaterialRenderingMode.SetMaterialRenderingModeMethod( renderer.materials[0],fadeMode);</renderer>Color のアルファ値は読み取り専用で変更できませんが、Color は変更できるため、ターゲットの
オブジェクト Color の RGB 値を取得して、Color をインスタンス化する必要があります。コンストラクターを使用して、希望するアルファ値に変更します。次のように:
Color currentcolor03 = new Color { a = 0.8f, r = renderer.materials[0].color.r, g = renderer.materials[0].color.g, b = renderer.materials[0].color.b }; //替换目标 Color 属性就可以实现了実際、この方法はあまり良くありません。主に指定された Shader が属性値を変更できないためです。その後、
属性値を変更できる Shader を入手したところ、状況は次のようになりました。はるかに簡単です。
パラメータがあります。 1 つは String 型のパラメータで、変更するパラメータが String を通じて取得されることを示し、2 つ目は変更された値です。
条件を使用し、グラデーション効果を実現するために 3 つの色が順番に置き換えられますが、
階層パネルでこのオブジェクトを選択すると、変更されたオブジェクトが突然変更前のデフォルト状態に戻ってしまいます。または
事前に選択しておきます 変更対象のオブジェクトが選択されている場合、つまりコンパイル状態ではゲームオブジェクトを選択できず、そのレンダリング状況をインスペクターパネルで確認できない場合も同様の効果が生じます。ランタイム レンダリングについて
この動作を説明するには、
実行時にゲーム オブジェクト シェーダーのレンダリング モードを変更すると、そのレンダリング モードを表示すると、そのレンダリング モード
プロパティがリセットされます。
以上がUnity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。