国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity編輯器紫色

這篇具有很好參考價值的文章主要介紹了Unity編輯器紫色。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

紫色原因是因為編輯器內(nèi)跑了其他平臺的shader兼容性導(dǎo)致的,需要動態(tài)的去修改shader,主要用到Unity的api :?Shader.Find(shaderName);

具體的工具代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ShaderManager
{
    public static ShaderManager Instance;
    public static ShaderManager GetInstance()
    {
        if (Instance == null)
        {
            Instance = new ShaderManager();
        }
        return Instance;
    }
    List<Renderer> results = new List<Renderer>();
    List<Image> imageResults = new List<Image>();
    /// <summary>
    /// 修改一個AssetBundle內(nèi)的所有shader
    /// </summary>
    public void ResetAllMaterials(AssetBundle bundle)
    {
        //對Material進(jìn)行更改
        var materials = bundle.LoadAllAssets<Material>();
        foreach (Material m in materials)
        {
            var shaderName = m.shader.name;
            if (shaderName == "Hidden/InternalErrorShader")
                continue;
            var newShader = Find(shaderName);
            if (newShader != null)
            {
                m.shader = newShader;
            }
            else
            {
                Debug.LogWarning("unable to refresh shader: " + shaderName + " in material " + m.name);
            }
        }
        //對GameObject進(jìn)行更改
        var gameObjects = bundle.LoadAllAssets<GameObject>();
        foreach (var go in gameObjects)
        {
            results.Clear();
            //物件上的材質(zhì)
            go.GetComponentsInChildren<Renderer>(true, results);
            if (results.Count > 0)
            {
                for (int ii = 0; ii < results.Count; ii++)
                {
                    for (int k = 0; k < results[ii].sharedMaterials.Length; ++k)
                    {
                        var m = results[ii].sharedMaterials[k];
                        UseEditorShader(m);
                    }
                    //粒子
                    if (results[ii] is ParticleSystemRenderer particleRender)
                    {
                        UseEditorShader(particleRender.sharedMaterial);
                        UseEditorShader(particleRender.trailMaterial);
                    }
                }
            }
            //貼圖上的材質(zhì)
            imageResults.Clear();
            go.GetComponentsInChildren<Image>(true, imageResults);
            if (imageResults.Count > 0)
            {
                for (int ii = 0; ii < imageResults.Count; ii++)
                {
                    UseEditorShader(imageResults[ii].material);
                }
            }
        }
    }
    
    /// <summary>
    /// 修改單個物件的Shader
    /// </summary>
    /// <param name="go"></param>
    public void ResetEditorShader(GameObject go)
    {
        if (go == null)
        {
            return;
        }
        results.Clear();
        go.GetComponentsInChildren<Renderer>(true, results);
        if (results.Count > 0)
        {
            for (int ii = 0; ii < results.Count; ii++)
            {
                for (int k = 0; k < results[ii].sharedMaterials.Length; ++k)
                {
                    var m = results[ii].sharedMaterials[k];
                    UseEditorShader(m);
                }
            }
        }
    }
    void UseEditorShader(ref Shader shader)
    {
        if (shader == null)
            return;
        var shaderName = shader.name;
        var newShader = Find(shaderName);
        if (newShader != null)
            shader = newShader;
    }
    void UseEditorShader(Material material)
    {
        if (material == null || material.shader == null)
            return;
        var shaderName = material.shader.name;
        var newShader = Find(shaderName);
        if (newShader != null)
            material.shader = newShader;
    }
    Shader Find(string shaderName)
    {
        Shader outShader = Shader.Find(shaderName);
        if (outShader == null)
        {
            outShader = Shader.Find("Standard");
        }
        return outShader;
    }
}

Shader的添加形式大概有兩種:

  1. 跟隨AssetBundle 打進(jìn)包里面,可以直接使用
    ? ? ?
    ShaderManager.GetInstance().ResetAllMaterials(bundleInfo.bundle);
  2. 自建材質(zhì)
                material = new Material(shader);
    #if EDITOR_RUN_OTHER_PLAT
                material.shader = Shader.Find(material.shader.name);
    #endif

?文章來源地址http://www.zghlxwxcb.cn/news/detail-768738.html

到了這里,關(guān)于Unity編輯器紫色的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity編輯器擴(kuò)展 | 編輯器擴(kuò)展基礎(chǔ)入門

    Unity編輯器擴(kuò)展 | 編輯器擴(kuò)展基礎(chǔ)入門

    前言 當(dāng)談到游戲開發(fā)工具,Unity編輯器是一個備受贊譽(yù)的平臺。它為開發(fā)者提供了一個強(qiáng)大且靈活的環(huán)境,使他們能夠創(chuàng)建令人驚嘆的游戲和交互式體驗。 然而,Unity編輯器本身也是可以擴(kuò)展和定制的,這為開發(fā)者提供了進(jìn)一步提升工作流程和增強(qiáng)功能的機(jī)會。 在Unity 編輯器

    2024年02月10日
    瀏覽(88)
  • 【Unity編輯器擴(kuò)展】 | 編輯器擴(kuò)展入門基礎(chǔ)

    【Unity編輯器擴(kuò)展】 | 編輯器擴(kuò)展入門基礎(chǔ)

    前言 當(dāng)談到游戲開發(fā)工具,Unity編輯器是一個備受贊譽(yù)的平臺。它為開發(fā)者提供了一個強(qiáng)大且靈活的環(huán)境,使他們能夠創(chuàng)建令人驚嘆的游戲和交互式體驗。 然而,Unity編輯器本身也是可以擴(kuò)展和定制的,這為開發(fā)者提供了進(jìn)一步提升工作流程和增強(qiáng)功能的機(jī)會。 在Unity 編輯器

    2024年02月10日
    瀏覽(33)
  • Unity 可視化節(jié)點(diǎn)編輯器(GraphView、編輯器擴(kuò)展)

    Unity 可視化節(jié)點(diǎn)編輯器(GraphView、編輯器擴(kuò)展)

    ??前幾天把導(dǎo)師的項目打包發(fā)布交了一稿,這半個星期除了再把項目縫縫補(bǔ)補(bǔ)外(說實話項目做到后邊實在有些無聊,都是些瑣碎的東西而且自己也學(xué)不到什么,純粹是 浪費(fèi) 消磨時間)無聊逛Unity商店發(fā)現(xiàn)了個有意思的東西,說實話一開始我以為只是單純繪制的2D動畫:

    2024年02月12日
    瀏覽(43)
  • Unity編輯器擴(kuò)展(外掛)

    Unity編輯器擴(kuò)展(外掛)

    每日一句:未來的樣子藏在現(xiàn)在的努力里 目錄 什么是編譯器開發(fā) C#特性[System.Serializable] 特殊目錄 命名空間 /*檢視器屬性控制*/ ?? ?//添加變量懸浮提示文字 ??? //給數(shù)值設(shè)定范圍(最小0,最大150) //指定輸入框,擁有5行 //默認(rèn)顯示5行,最多顯示10行內(nèi)容,再多用滾動條控

    2024年01月24日
    瀏覽(25)
  • 修改unity代碼編輯器

    修改unity代碼編輯器

    將 ? Unity ?自帶的 MonoDevelop ?替換成微軟的 VS ?2017?編輯器。 操作步驟 : 第一步:選擇Edit選項卡下的Preferences..選項 第二步:選擇External Tools 第三步:修改右側(cè)的External Script Editor,選擇VS2017 ?有的小伙伴可能下拉框中沒有VS2017選項,沒關(guān)系,點(diǎn)擊Brower..,找到VS2017的應(yīng)用程序

    2024年02月11日
    瀏覽(26)
  • Unity 編輯器常用方法

    自動根據(jù)RuntimeInitializeLoadType選擇一個時機(jī)執(zhí)行。靜態(tài)方法 AfterSceneLoad 在場景加載之后初始化子系統(tǒng)。這意味著子系統(tǒng)將在場景加載完成后進(jìn)行初始化,并在場景加載后的腳本執(zhí)行時可用。 BeforeSceneLoad 在場景加載之前初始化子系統(tǒng)。這意味著子系統(tǒng)將在場景加載之前進(jìn)行初始

    2024年02月07日
    瀏覽(18)
  • 【Unity知識樹】Unity編輯器加速小技巧

    【Unity知識樹】Unity編輯器加速小技巧

    ? 運(yùn)行游戲時不重新編譯腳本 現(xiàn)象:每次運(yùn)行游戲都會彈出一個重新加載腳本的框,耽誤幾秒鐘時間。 ? ? 提速技巧:勾選工程設(shè)置 編輯器 Enter Play Mode Options的選項即可。 ? ? 以后如果腳本沒有改動,運(yùn)行時不會重新編譯。 ? 取消不必要的csproj腳本工程文件 新版本的Uni

    2024年02月12日
    瀏覽(20)
  • 【Unity UIToolkit】UIBuilder基礎(chǔ)教程-制作簡易的對話系統(tǒng)編輯器 3步教你玩轉(zhuǎn)Unity編輯器擴(kuò)展工具

    【Unity UIToolkit】UIBuilder基礎(chǔ)教程-制作簡易的對話系統(tǒng)編輯器 3步教你玩轉(zhuǎn)Unity編輯器擴(kuò)展工具

    隨著Unity開發(fā)的深入,基本的Unity編輯器界面并不能滿足大部分玩家高階開發(fā)的要求。為了提高開發(fā)的效率,有針對性的定制化擴(kuò)展編輯器界面是提高開發(fā)效率的不錯選擇。 今天就給大家?guī)鞺nity官方提高的編輯器擴(kuò)展工具UIToolkit(集成了UIBuilder和UI Debugger等插件)的使用教程。

    2024年02月04日
    瀏覽(77)
  • 面試題 :Unity編輯器基礎(chǔ)

    面試題 :Unity編輯器基礎(chǔ)

    ? 1、請描述游戲動畫有幾種,以及其原理。 關(guān)鍵幀動畫 :每一幀動畫序列當(dāng)中包含了頂點(diǎn)的空間位置信息以及改變量,然后通過插值運(yùn)算,得出動畫效果。選中某一游戲?qū)ο?,?chuàng)建animation,添加屬性Transform,MeshRender、collider。還可以添加關(guān)鍵幀,在關(guān)鍵幀上Add Animation Even

    2023年04月17日
    瀏覽(24)
  • Unity編輯器拓展-Odin

    Unity不支持泛型類型序列化,例如字典原生Unity不支持序列化,而Odin可以繼承序列化的Mono實現(xiàn) 功能強(qiáng)大且使用簡單,原生Unity想實現(xiàn)一些常見的功能需要額外自己編寫Unity擴(kuò)展的編碼,實現(xiàn)功能只需要加一個特性即可Odin幫忙寫好了內(nèi)部管理和實現(xiàn) 編輯器的窗口實現(xiàn)簡單且美觀

    2024年02月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包