ホームページ  >  記事  >  バックエンド開発  >  Unity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。

Unity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。

little bottle
little bottle転載
2019-04-29 18:03:094252ブラウズ

Unity のシェーダーには、次の 4 つのレンダリング モードがあります。

——Opaque(不透明)
——Cutout(镂空)
——Fade(隐现)
——Transparent(透明)

以前は、特定のゲーム オブジェクトにフリーズ効果を追加する必要がありましたが、私のシェーダーでは
がシェーダは完全にフリーズしており、そのカラー値はパラメータで調整できません。その後、同僚が、レンダリング モードを変更することでオブジェクト自体のアルファ値を
変更できると教えてくれたので、最初のステップは、次のように、ランタイム シェーダー レンダリング モードの変更に関するコードをインターネットで見つけることでした。
http://www.voidcn.com/article...

関連チュートリアル:

C# ビデオ チュートリアル

次に、簡単なコード操作があります。 、次のように。

       //获取目标身上的渲染组件
       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 を入手したところ、状況は次のようになりました。はるかに簡単です。

Unity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。

これが私が入手したマテリアルですが、マテリアルを通してマテリアルに含まれるシェーダを確認することができ、各値に対応するパラメータが確認できます。

Unity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。

この場合、変更を行う必要があるのは、メソッド Materials.SetFloat(); および同様のメソッドを呼び出すことだけです。括弧内には 2 つの

パラメータがあります。 1 つは String 型のパラメータで、変更するパラメータが String を通じて取得されることを示し、2 つ目は変更された値です。

この間、問題が発生しました。いろいろ調べた結果、コンパイラの問題であることがわかりました。最初の方法を使用したところ、通常のレンダリング モードを変更できました

条件を使用し、グラデーション効果を実現するために 3 つの色が順番に置き換えられますが、
階層パネルでこのオブジェクトを選択すると、変更されたオブジェクトが突然変更前のデフォルト状態に戻ってしまいます。または
事前に選択しておきます 変更対象のオブジェクトが選択されている場合、つまりコンパイル状態ではゲームオブジェクトを選択できず、そのレンダリング状況をインスペクターパネルで確認できない場合も同様の効果が生じます。ランタイム レンダリングについて
この動作を説明するには、
実行時にゲーム オブジェクト シェーダーのレンダリング モードを変更すると、そのレンダリング モードを表示すると、そのレンダリング モード
プロパティがリセットされます。

以上がUnity 3D では、シェーダーのランタイム ステータスとレンダリング モードで発生する問題について簡単に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。