Heim  >  Artikel  >  Backend-Entwicklung  >  Unity 3D erläutert kurz die Probleme, die beim Shader-Laufzeitstatus und im Rendering-Modus auftreten

Unity 3D erläutert kurz die Probleme, die beim Shader-Laufzeitstatus und im Rendering-Modus auftreten

little bottle
little bottlenach vorne
2019-04-29 18:03:094176Durchsuche

Der Shader in Unity verfügt über vier Rendering-Modi:

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

Ich hatte schon einmal das Bedürfnis, einem bestimmten Spielobjekt einen Einfriereffekt hinzuzufügen, aber meinem Shader
ist ein vollständig eingefrorener Shader und sein Farbwert kann nicht über Parameter angepasst werden. Später sagte mir mein Kollege, dass ich
den Alpha-Wert des Objekts selbst ändern könnte, indem ich den Rendering-Modus ändere. Der erste Schritt bestand also darin, im Internet den Code zum Ändern des Laufzeit-Shader-Rendering-Modus wie folgt zu finden.
http://www.voidcn.com/article...

Verwandte Tutorials:

C#-Video-Tutorial

Dann gibt es einfache Codeoperationen ,wie folgt.

       //获取目标身上的渲染组件
       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>
Da der Alpha-Wert von Farbe schreibgeschützt ist und nicht geändert werden kann, Farbe jedoch geändert werden kann, müssen Sie den RGB-Wert der Zielobjektfarbe

abrufen und dann eine Farbe instanziieren und verwenden Sie den Konstruktor, um ihn auf den gewünschten Alpha-Wert zu ändern. Wie folgt:

       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 属性就可以实现了
Eigentlich ist diese Methode nicht sehr gut, hauptsächlich weil der angegebene Shader den Attributwert nicht ändern kann. Später habe ich einen Shader bekommen, der den Attributwert

ändern kann, und die Dinge wurden viel einfacher.

Unity 3D erläutert kurz die Probleme, die beim Shader-Laufzeitstatus und im Rendering-Modus auftreten

Dies ist das Material, das ich erhalten habe. Sie können den im Material enthaltenen Shader durch das Material finden und die Parameter sehen, die jedem Wert entsprechen.

Unity 3D erläutert kurz die Probleme, die beim Shader-Laufzeitstatus und im Rendering-Modus auftreten

In diesem Fall muss die Änderung nur durch den Aufruf der Methode Material.SetFloat(); und ähnlicher Methoden vorgenommen werden. In den Klammern stehen zwei Parameter Einer ist ein Parameter vom Typ String, der angibt, dass der Parameter, den Sie ändern möchten, über String erhalten wird, und der zweite ist der geänderte Wert.


Während dieser Zeit stieß ich auf ein Problem und stellte fest, dass es sich um ein Problem mit dem Compiler handelte. Als ich die erste Methode verwendete, konnte ich den Rendering-Modus normal ändern > Bedingungen, und ich habe drei Farben verwendet, die nacheinander ersetzt werden, um den Verlaufseffekt zu erzielen, aber wenn ich dieses Objekt im

Hierarchiebedienfeld auswähle, kehrt das sich ändernde Objekt plötzlich in den Standardzustand vor der Änderung zurück, oder wenn

Sie wählen es im Voraus aus. Der gleiche Effekt wird angezeigt, wenn das Objekt geändert werden soll, das heißt, dieses Spielobjekt kann im Kompilierungsstatus nicht ausgewählt werden und sein Renderstatus kann nicht im Inspektorfenster angezeigt werden mit einem Laufzeit-Rendering. Wörter, die
dieses Verhalten beschreiben:
Wenn Sie den Rendering-Modus eines Spielobjekt-Shaders zur Laufzeit ändern, führt die Anzeige seines Rendering-Modus dazu, dass dessen Rendering-Modus-
-Eigenschaften zurückgesetzt werden.



Das obige ist der detaillierte Inhalt vonUnity 3D erläutert kurz die Probleme, die beim Shader-Laufzeitstatus und im Rendering-Modus auftreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen