❤❤Fungus新課程即將發布,快寫問卷拿優惠❤❤
顯示具有 自訂編輯器 標籤的文章。 顯示所有文章
顯示具有 自訂編輯器 標籤的文章。 顯示所有文章

2016年9月13日 星期二

Unity C# 程式心得分享 Custom Inspector 自訂檢視器 多個物件啟動關閉或改透明度




使用情境/需求:
(建議看影片比較好懂…)
編輯的時候希望看到全部的物件,正式玩遊戲的時候又希望關掉某些物件一開始不要啟動。同時這些物件若啟動之後會有圖片漸漸浮現的效果,所以這些正式玩遊戲時要關掉的物件同時也要改成全透明

效果

一鍵切換數個物件為透明與關閉狀態
一鍵切換數個物件為實色與啟動狀態
一鍵在場景裡選取數個物件,可以統一修改

為什麼需要自訂檢視器?
能躺著的話幹嘛要站著呢
省時間,省麻煩,加速開發時程

如何自訂檢視器
a.一個繼承自monobehaviour的c#腳本
b.還有繼承自Editor的c#腳本,同時要放在指名為Editor資料夾裡

快速鍵
Array的項目欄位可以按Shift+Delete 清空或刪除


Selector.cs (放在某個game object底下)


using UnityEngine;
using System.Collections;
using UnityEditor;

public class Selector : MonoBehaviour
    {
    public string 註解 = "註解";
    public GameObject [ ] 遊戲物件清單;

    public void 開啟物件 ( GameObject 項目 )
        {
        項目.SetActive ( true );
        }
    public void 開啟物件 ( GameObject [ ] 遊戲物件清單 )
        {
        foreach ( var 項目 in 遊戲物件清單 )
            {
            if ( 項目 != null )
                {
                開啟物件 ( 項目 );
                }
            }
        }

    public void 關閉物件 ( GameObject 項目 )
        {
        項目.SetActive ( false );
        }
    public void 關閉物件 ( GameObject [ ] 遊戲物件清單 )
        {
        foreach ( var 項目 in 遊戲物件清單 )
            {
            if ( 項目 != null )
                {
                關閉物件 ( 項目 );
                }
            }
        }

    public void 修改透明度 ( GameObject 項目 , float 透明度 )
        {
        SpriteRenderer 顏色渲染器 = 項目.GetComponent<SpriteRenderer> ( );
        Color 顏色 = 顏色渲染器.color;
        顏色.a = 透明度;
        顏色渲染器.color = 顏色;
        }

    public void 改透明 ( GameObject 項目 )
        {
        修改透明度 ( 項目 , 0 );
        }
    public void 改透明 ( GameObject [ ] 遊戲物件清單 )
        {
        foreach ( var 項目 in 遊戲物件清單 )
            {
            if ( 項目 != null )
                {
                改透明 ( 項目 );
                }
            }
        }

    public void 改實色 ( GameObject 項目 )
        {
        修改透明度 ( 項目 , 1 );
        }
    public void 改實色 ( GameObject [ ] 遊戲物件清單 )
        {
        foreach ( var 項目 in 遊戲物件清單 )
            {
            if ( 項目 != null )
                {
                改實色 ( 項目 );
                }
            }
        }

    public static void 選擇場景內物件 ( GameObject [ ] 遊戲物件清單 )
        {
        Selection.objects = 遊戲物件清單;
        }

    }


=======================
SelectorEditor.cs (要放到Editor資料夾裡, 不用放在某個game object底下)
using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(Selector))]
public class SelectorEditor : Editor {
    public override void OnInspectorGUI ( )
        {
        Selector selector = ( Selector )target;
        DrawDefaultInspector();

        EditorGUILayout.BeginHorizontal();
        if ( GUILayout.Button("透明+關閉") )
            {
            selector.改透明 ( selector.遊戲物件清單);
            selector.關閉物件 ( selector.遊戲物件清單 );
            }
        if ( GUILayout.Button ( "實色+啟動" ) )
            {
            selector.改實色 ( selector.遊戲物件清單 );
            selector.開啟物件 ( selector.遊戲物件清單 );
            }
        EditorGUILayout.EndHorizontal ( );

        if ( GUILayout.Button("選擇以上物件") )
            {
            Selector.選擇場景內物件 ( selector.遊戲物件清單 );
            }

        }

    }

=======================
影片縮圖的素材:Designed by Freepik


2016年9月2日 星期五

Unity 好用小工具 整合Photoshop 的 Psd Importer 教學

Unity 大約2019版開始有內建官方PSD importer,只要在photoshop裡把檔案轉存為PSB格式,就可以直接拉到Unity裡並保留圖層關係。
注意是PSB格式才有效,不是PSD,雖然它叫做PSD importer...
官方說明 或搜尋 unity package psd importer
https://docs.unity3d.com/Packages/com.unity.2d.psdimporter@4.0/manual/index.html



===以下是舊版文章的備份 僅供參考======



youtube教學影片
https://youtu.be/0FcfV_DLn6c

Unity PSD匯入器  Unity PSD importer

簡介:
可保留Photoshop的PSD檔圖層階層關係並且匯入Unity裡面,省下大量重新排列與對齊圖檔的時間

測試用的PSD檔下載
https://drive.google.com/drive/folders/0B9pF8Hbq-lgVaTByaU0wTmVjVHc


注意:
Photoshop 的PSD檔不能有混合選項或調整圖層之類的附加效果
目前測試可以支援形狀圖層與智慧型圖層

轉換混合選項或圖層樣式為一般圖層:
在Photoshop裡存檔以後點擊影像-->複製,只複製合併圖層不要打勾,按確定, 原版檔案就可以關掉了(避免不小心覆蓋到原始檔案)

按住Ctrl不放可跳著點選想要合併的圖層,再按Ctrl + E 合併圖層
按住Shift不放可連線點選想要合併的圖層,再按Ctrl + E 合併圖層

(此時範例PSD檔裡可以整理愛心與箭頭圖層)


下載 PSD importer
(網路上有另一個同名的插件,為了避免抓錯檔,可以從這裡下載)
下載(ChemiKhazi版)
https://github.com/ChemiKhazi/UnityPsdImporter


安裝 PSD importer
開啟一個新的Unity專案,Assets 裡新建一個Editor資料夾(名稱要一樣),把剛下載好的Unity PSD importer壓縮檔裡,bin資料夾底下的PhotoShopImporter.dll放到Editor資料夾裡
(若無法直接丟進Editor資料夾,可先解縮放到桌面上以後再丟進去)

匯入整理好的PSD:
整理好的PSD先丟到Assets裡,再點滑鼠右鍵,選擇PSD Importer




A.轉換為一般物件
選擇爸爸資料夾,等同於Photoshop PSD檔裡的爸爸群組,點擊 Sprite Creation 裡的 Create 2D Sprites按鈕,爸爸會變成父物件,底下的各個圖層會變成子物件,同時保留位置與階層關係


B.轉換為Canvas UI物件
功能表:GameObject-->UI新建一個Canvas物件,Assets裡在要轉換的PSD檔點滑鼠右鍵,選擇PSD Importer,選擇爸爸資料夾,等同於Photoshop PSD檔裡的爸爸群組,點擊場景裡的Canvas物件,再點擊Sprite Creation裡的Create UI Images按鈕,爸爸群組會變成Canvas底下的物件,同時保留位置與階層關係

轉成UI之前要新建一個Canvas物件




Kevin MacLeod」創作的「Cold Funk - Funkorama」是根據「Creative Commons Attribution」(https://creativecommons.org/licenses/by/4.0/) 授權使用

Kevin MacLeod」創作的「Hackbeat」是根據「Creative Commons Attribution」(https://creativecommons.org/licenses/by/4.0/) 授權使用
影片縮圖的素材:Designed by Freepik