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

Unity Shader:常用的C#與shader交互的方法

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

? 俗話說久病成醫(yī),雖然不是專業(yè)技術(shù)美術(shù),但代碼寫久了自然會積累一些常用的shader交互方法。零零散散的,總結(jié)如下:

1,改變UGUI的材質(zhì)球?qū)傩?/h3>

? 有時候我們需要改變ui的一些屬性,從而實(shí)現(xiàn)想要的效果。通常UGUI上有如下屬性,而我們想要改變,就需要獲取到Material這個屬性:

Unity Shader:常用的C#與shader交互的方法,U3D,shader,unity,c#,游戲引擎,shader

? 這里拿Image來舉例,?簡單的調(diào)用示例如下(關(guān)聯(lián)測試):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 測試UI閃白效果
/// </summary>
public class TestUIShan : MonoBehaviour
{
    public Image image;

    public Material material;

    private bool isShan = false;

    // Start is called before the first frame update
    void Start()
    {
        material = image.material;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            isShan = !isShan;           
            material.SetFloat("_Switch", isShan ? 1 : 0);           
        }
    }
}

? 我們可以通過代碼看出,我們可以直接獲取到面板上的Material屬性,然后通過SetFloat之類的Set方法,來改變UGUI的材質(zhì)球?qū)傩浴?/p>

2,改變物體的材質(zhì)球?qū)傩?/h3>

? 這里多了一步,不是直接改變Material,而是先new一個MaterialPropertyBlock然后再將其賦值給Renderer屬性。實(shí)現(xiàn)示例代碼如下:

 /// <summary>
    /// 改變子物體顏色
    /// </summary>
    public void ChangeColor(Transform _tran, bool _isHas)
    {
        var _render = _tran.GetComponent<MeshRenderer>();
        if (_render != null)
        {
            var _pro = new MaterialPropertyBlock();
            _pro.SetFloat("_IsEnable", _isHas ? 0 : 1);
            _render.SetPropertyBlock(_pro);
        }
        var _render1 = _tran.GetComponent<SkinnedMeshRenderer>();
        if (_render1 != null)
        {
            var _pro = new MaterialPropertyBlock();
            _pro.SetFloat("_IsEnable", _isHas ? 0 : 1);
            _render1.SetPropertyBlock(_pro);
        }
        if (_tran.childCount > 0) foreach (Transform idx in _tran) ChangeColor(idx, _isHas);
    }

? 這里是通過SetFloat來控制_IsEnable這個屬性的開關(guān),同理我們可以調(diào)用別的set方法來改變對應(yīng)的屬性。

3,替換shader

? 這個就更簡單了,只需要得到Material的shader屬性并替換即可,示例代碼如下:


    /// <summary>
    /// 替換shader
    /// </summary>
    public void ChangeShader(Transform _tran, Shader _s)
    {

        if (_tran.name.Contains("diban") || _tran.name.Contains("qiang")) return;//0511佳琪定
        var _render = _tran.GetComponentInChildren<MeshRenderer>();
        if (_render != null)
        {
            _render.material.shader = _s;
        }
        var _render1 = _tran.GetComponentInChildren<SkinnedMeshRenderer>();
        if (_render1 != null)
        {
            _render1.material.shader = _s;
        }
        if (_tran.childCount > 0) foreach (Transform idx in _tran) ChangeShader(idx, _s);

    }

? 關(guān)鍵函數(shù)為? _render1.material.shader = _s; 直接賦值替換即可。

4,批量獲取父節(jié)點(diǎn)下,所有具有某一屬性的物體

? 其實(shí)通過2/3函數(shù),我們可以看出用遞歸去獲取父物體下所有具有renderer屬性物體的方法,實(shí)現(xiàn)起來實(shí)在太繁瑣了,那么有沒有更簡單的方法呢?

? 答案是有的,使用_tran.GetComponentsInChildren即可,示例代碼如下:

var _ms = transform.GetComponentsInChildren<SkinnedMeshRenderer>();

5,改變?nèi)謘hader屬性

? 比如我們有很多使用了某一shader的物體,其中包括AI、場景等等,如果要頻繁改變這些材質(zhì)球的某一屬性,不可能遍歷去尋找的。

? 好在引擎為我們提供好了方法,示例函數(shù)如下:

 Shader.SetGlobalFloat("_YydInterval", _getTime);

? 同理我們可以用set來改變更多的屬性,比如Shader.SetGlobalTexture來改變?nèi)值馁N圖等等。文章來源地址http://www.zghlxwxcb.cn/news/detail-632803.html

到了這里,關(guān)于Unity Shader:常用的C#與shader交互的方法的文章就介紹完了。如果您還想了解更多內(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ī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • Unity騷操作:更改u3d導(dǎo)出apk時候所使用的 gradle、GradleTemplates、VisualStudioGradleTemplates、minifyEnabled是否開啟混淆等

    Unity騷操作:更改u3d導(dǎo)出apk時候所使用的 gradle、GradleTemplates、VisualStudioGradleTemplates、minifyEnabled是否開啟混淆等

    測試unity版本:5.6.4 gradle文件夾:里面的是一些unity用自身打包apk時候用到的一些工具 GradleTemplates文件夾: ???libTemplate.gradle? mainTemplate.gradle ?settingsTemplate.gradle 附上讓Unity自身打APK的時候?使用上鏡像并且設(shè)置上 build:gradle通用工具讓?需要生成AS工程的時候?可以讓AS識別

    2024年02月14日
    瀏覽(52)
  • U3D面試匯總?。?!

    ① 微軟開發(fā)的一種 OOP 編程語言。專門用于.NET應(yīng)用而開發(fā)。 ② 面向?qū)ο蟮?三大特征 (封裝,繼承,多態(tài))。除了三大特征以外,C#還添加了 事件和委托 ,增強(qiáng)了編程的靈活性。 ③ 簡單,安全 。C#不再使用指針,而且不允許直接讀取內(nèi)存等不安全操作。提供了相比C/C++,

    2023年04月08日
    瀏覽(47)
  • U3D熱更新技術(shù)

    U3D熱更新技術(shù)

    @作者 : SYFStrive @博客首頁 : HomePage ??: 個人社區(qū)(歡迎大佬們加入) ??: 社區(qū)鏈接?? ???♀?: 創(chuàng)作不易轉(zhuǎn)發(fā)需經(jīng)作者同意?? ??: 程序員每天堅持鍛煉?? ?? U3D熱更新技術(shù) (??) ??:開發(fā)者將測試好的代碼,發(fā)布到應(yīng)用商店的審核平臺,平臺方會進(jìn)行穩(wěn)定性及性

    2024年02月02日
    瀏覽(25)
  • U3D通過按鈕點(diǎn)擊實(shí)現(xiàn)場景切換

    U3D通過按鈕點(diǎn)擊實(shí)現(xiàn)場景切換

    1.新建UI,選擇button選項,新建button; ? 3.新建一個空對象,掛載一個scenechange c#腳本; 4.編寫腳本,1頭文件using UnityEngine.SceneMangement ? ? ? ? ? ? ? ? ? ?2public void change() { ? ? ? ? ? ? ? ? ? ? scenemanager.loadscene (1)? }//括號中的數(shù)字為第2步中場景后面的數(shù)字 ? ? ? ? ?

    2024年02月07日
    瀏覽(35)
  • Unity | Shader基礎(chǔ)知識(第十集:shader常用外部資產(chǎn)單詞速成)

    Unity | Shader基礎(chǔ)知識(第十集:shader常用外部資產(chǎn)單詞速成)

    目錄 一、外部資產(chǎn)簡介 二、常用的外部資產(chǎn)單詞 三、常用的外部資產(chǎn)單詞和引入內(nèi)部 四、圖片資產(chǎn)外部調(diào)整的具體講解 1.Tiling,中文:鋪地磚 2.Offset,中文:偏移 五、作者的話 一、外部資產(chǎn)簡介 在第六集中,我們加入過外部顏色資源。 Unity | Shader基礎(chǔ)知識(第六集:語法

    2024年04月13日
    瀏覽(31)
  • Unity | Shader基礎(chǔ)知識(第九集:shader常用單詞基礎(chǔ)知識速成)

    Unity | Shader基礎(chǔ)知識(第九集:shader常用單詞基礎(chǔ)知識速成)

    目錄 一、頂點(diǎn)(Vertex)和法線(Normal) 二、UV信息 三、 基礎(chǔ)數(shù)據(jù)種類 1 基礎(chǔ)數(shù)據(jù)種類 2 基礎(chǔ)數(shù)據(jù)數(shù)組 3 基礎(chǔ)數(shù)據(jù)數(shù)組的賦值 4 對數(shù)據(jù)數(shù)組的調(diào)用 四、 基礎(chǔ)矩陣 1 基礎(chǔ)矩陣種類 ?2?對矩陣數(shù)組的調(diào)用 2.1對一個數(shù)據(jù)的調(diào)用 ?2.2對多個數(shù)據(jù)的調(diào)用 ?2.3對數(shù)據(jù)的賦值 五、基礎(chǔ)紋理種

    2024年02月01日
    瀏覽(38)
  • unity URP 利用particle system制作簡單的shader交互

    unity URP 利用particle system制作簡單的shader交互

    首先這里制作了一個簡單交互,使用shader grapgh,根據(jù)計算距離和變化數(shù)值的差實(shí)現(xiàn)交互后的擴(kuò)散,同時計算消散遮罩讓它逐漸談去。 將他賦予材質(zhì)物體,根據(jù)腳本傳入位置和逐漸變化的大小后,呈現(xiàn)這樣的效果。 但是,shader graph這樣的工具,在做這種效果非常快的同時,也

    2024年02月07日
    瀏覽(27)
  • 【U3D引擎】沒有切換中文選項&切換中文模式?

    【U3D引擎】沒有切換中文選項&切換中文模式?

    第一步,查看是否有勾選簡體中文模塊 第二步,拉到底部,勾選簡體中文,點(diǎn)擊繼續(xù) 第三步,勾選已閱讀同意后點(diǎn)擊安裝 第四步,等待下載安裝完成 過程中會自動安裝VS軟件 如有下載失敗可重新下載 注:如果重復(fù)提示錯誤也沒有沒有關(guān)系,直接略過就好, 第五步,隨便打

    2024年02月06日
    瀏覽(29)
  • AVProVideo??一、一款U3D視頻播放插件介紹

    AVProVideo??一、一款U3D視頻播放插件介紹

    ?? 商務(wù)合作:https://skode.cn/file/businesscard/wechat.jpg ?? 本文由 星河造夢坊公司官方 原創(chuàng)! ?? 如果你有技術(shù)問題或項目開發(fā),都可以加上方的聯(lián)系方式,和我聊一聊你的故事?? 前段時間看到有人問: 橙哥,AVProVideo支持8K全景視頻嘛? 看來,好多人對這款插件的支持的功能

    2024年02月07日
    瀏覽(24)
  • Unity中C#如何訪問并修改Shader材質(zhì)

    Unity中C#如何訪問并修改Shader材質(zhì)

    我們寫好Shader后,很多效果是需要結(jié)合腳本來控制顯示的。我們在這篇文章中,使用C#腳本來訪問修改材質(zhì)中的屬性,來體驗一下腳本怎么控制Shader材質(zhì)在游戲中互動時變化 我們 OnGUI 這個生命周期函數(shù)中,進(jìn)行操作 void OnGUI() { } 使用GUI.Button(position,text);可以繪制一個按鈕 pu

    2024年02月04日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包