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

unity 編輯器時讀取FairyGUI圖集單個圖像

這篇具有很好參考價值的文章主要介紹了unity 編輯器時讀取FairyGUI圖集單個圖像。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

原因

想要在編輯器擴展也能訪問FairyGUI圖集里面的小圖,隨便找了一下沒有找到接口自己做一個

方法

使用UIPackage.GetItemByURL獲得小圖信息。從圖集中復(fù)制出小圖,如果有旋轉(zhuǎn)就逆旋轉(zhuǎn)90度即可
圖集里面的小圖是有可能旋轉(zhuǎn)的,可以通過訪問 NTexture.rotated 判斷在圖集中是否旋轉(zhuǎn)

獲取小圖在圖集中的起始位置

X偏移坐標可以直接 uvRect.min.x * nativeTexture.width 得到真實的X偏移
Y坐標可以根據(jù)uvRect賦值反過來獲得,原有公式是

uvRect.min.y = 1 - region.yMax / _nativeTexture.height

那么真實的公式就是

y = (1 - startOffset.y) * nativeTexture.height - textureSize.y

無非就是交互律。還原public NTexture(Texture texture, Rect region) 構(gòu)造傳入來的region參數(shù)

獲得偏移和大小后只需要使用RenderTexture把小圖讀出來就好

        RenderTexture renderTex = RenderTexture.GetTemporary(nativeTexture.width, nativeTexture.height, 24, RenderTextureFormat.Default, RenderTextureReadWrite.Linear);
        Graphics.Blit(nativeTexture, renderTex);
        RenderTexture previous = RenderTexture.active;
        RenderTexture.active = renderTex;

        Texture2D resultTexture = new Texture2D(textureSize.x, textureSize.y, nativeTexture.format, false);
        resultTexture.ReadPixels(new Rect((int)startOffset.x, (int)startOffset.y, textureSize.x, textureSize.y), 0, 0);
        resultTexture.Apply();

        RenderTexture.active = previous;
        RenderTexture.ReleaseTemporary(renderTex);

圖集中的小圖是會旋轉(zhuǎn)的應(yīng)該如何還原

Texture2D.GetPixel 和 Texture2D.SetPixel 接口讀寫非常慢
可以直接使用GetPixelData或者GetPixels導(dǎo)出圖像數(shù)據(jù)數(shù)組,操作完成后刷新圖像數(shù)據(jù)
根據(jù) nativeTexture.format 類型使用Color或者Color32格式讀取

var colorArray = resultTexture.GetPixelData<Color32>(0)

有數(shù)組后簡單逆旋轉(zhuǎn)90數(shù)組數(shù)據(jù),就可以得到原來的小圖文章來源地址http://www.zghlxwxcb.cn/news/detail-709356.html

for (int i = 0; i < textureSize.x; i++)
{
    for (int j = 0; j < textureSize.y; j++)
    {
        colors[i * textureSize.y + j] = colorArray[textureSize.x - 1 - i + j * textureSize.x];
    }
}

完整代碼

    public Texture GetTexture(string url)
    {
        PackageItem packageItem = UIPackage.GetItemByURL(url);
        if (packageItem == null)
            return null;

        NTexture nTexture = packageItem.texture;
        Texture2D nativeTexture = nTexture.nativeTexture as Texture2D;

        var startOffset = nTexture.uvRect.min;
        var textureSize = new Vector2Int(nTexture.width, nTexture.height);
        if (nTexture.rotated)
            textureSize = new Vector2Int(nTexture.height, nTexture.width);
        startOffset.x *= nativeTexture.width;
        startOffset.y = (1 - startOffset.y) * nativeTexture.height - textureSize.y;


        RenderTexture renderTex = RenderTexture.GetTemporary(nativeTexture.width, nativeTexture.height, 24, RenderTextureFormat.Default, RenderTextureReadWrite.Linear);
        Graphics.Blit(nativeTexture, renderTex);
        RenderTexture previous = RenderTexture.active;
        RenderTexture.active = renderTex;

        Texture2D resultTexture = new Texture2D(textureSize.x, textureSize.y, nativeTexture.format, false);
        resultTexture.ReadPixels(new Rect((int)startOffset.x, (int)startOffset.y, textureSize.x, textureSize.y), 0, 0);
        resultTexture.Apply();

        RenderTexture.active = previous;
        RenderTexture.ReleaseTemporary(renderTex);

        if (nTexture.rotated)
        {
            var colorArray = resultTexture.GetPixelData<Color32>(0);
            Texture2D rotationTexture = new Texture2D(textureSize.y, textureSize.x, nativeTexture.format, false);
            var colors = rotationTexture.GetPixelData<Color32>(0);

            for (int i = 0; i < textureSize.x; i++)
            {
                for (int j = 0; j < textureSize.y; j++)
                {
                    colors[i * textureSize.y + j] = colorArray[textureSize.x - 1 - i + j * textureSize.x];
                }
            }

            rotationTexture.SetPixelData(colors, 0);
            rotationTexture.Apply();
            Object.Destroy(resultTexture);
            resultTexture = rotationTexture;
        }

        return resultTexture;
    }

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

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

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

相關(guān)文章

  • unity 簡單實現(xiàn)tilemap的保存和讀取(以便用于關(guān)卡編輯器)

    ? ? ? ? 最近在學(xué)習(xí)使用Tiledmap,用于制作地圖確實很方便快捷,但總不能一個關(guān)卡就做一個prefab?還是必須將其保存為文本文件才行啊,于是有了以下的嘗試:?? ? ? ? 先定義一個Tiledmap類,用于存儲單個Tiledmap信息 tiles是保存的所有tile塊。key為坐標值,value為使用的tile

    2024年02月13日
    瀏覽(23)
  • 【HTML】標簽讀取富文本編輯器的內(nèi)容

    【HTML】標簽讀取富文本編輯器的內(nèi)容

    1.正確讀取富文本內(nèi)容示例: 代碼: ?顯示結(jié)果: ?在這個例子中, {$row.content} ?是直接輸出從數(shù)據(jù)庫中獲取的富文本內(nèi)容,包括可能存在的HTML標簽和屬性,這樣可以確保富文本能夠按照預(yù)期樣式呈現(xiàn)。 2. 錯誤讀取富文本內(nèi)容示例及其原因分析: ?代碼: ?顯示結(jié)果: 分析

    2024年02月02日
    瀏覽(38)
  • Unity編輯器擴展 | 編輯器擴展基礎(chǔ)入門

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

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

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

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

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

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

    Unity 可視化節(jié)點編輯器(GraphView、編輯器擴展)

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

    2024年02月12日
    瀏覽(43)
  • Unity編輯器紫色

    紫色原因是因為編輯器內(nèi)跑了其他平臺的shader兼容性導(dǎo)致的,需要動態(tài)的去修改shader,主要用到Unity的api :? Shader.Find(shaderName); 具體的工具代碼如下: Shader的添加形式大概有兩種: 跟隨AssetBundle 打進包里面,可以直接使用 ? ? ? 自建材質(zhì) ?

    2024年02月03日
    瀏覽(25)
  • Unity編輯器擴展(外掛)

    Unity編輯器擴展(外掛)

    每日一句:未來的樣子藏在現(xiàn)在的努力里 目錄 什么是編譯器開發(fā) C#特性[System.Serializable] 特殊目錄 命名空間 /*檢視器屬性控制*/ ?? ?//添加變量懸浮提示文字 ??? //給數(shù)值設(shè)定范圍(最小0,最大150) //指定輸入框,擁有5行 //默認顯示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)系,點擊Brower..,找到VS2017的應(yīng)用程序

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

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

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

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

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

    2024年02月04日
    瀏覽(77)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包