最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在unity腳本中控制Inspector面板的參數(shù)操作

 更新時(shí)間:2021年04月15日 09:27:24   作者:頭號(hào)理想  
這篇文章主要介紹了在unity腳本中控制Inspector面板的參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

在編寫腳本的過程中我們會(huì)遇到一些小問題

比如一個(gè)的變量 為了在其他腳本中可以調(diào)用 我們需要寫成public類型的

這樣的話在Inspector面板中會(huì)出現(xiàn)此變量 這篇博客會(huì)給大家介紹一些方法去避免這些小問題

1.[Header(" ")]

這個(gè)的作用是給它下面的所有變量一個(gè)總標(biāo)題

2.[Tooltip("")]

這個(gè)的作用是給下面的第一行(緊鄰的語句)注釋

這個(gè)注釋和雙斜杠的注釋不同

這個(gè)注釋的效果是在unity中鼠標(biāo)拖到變量的名字上 他會(huì)出現(xiàn)注釋(括號(hào)的雙引號(hào)中的注釋)

在這里我給大家一個(gè)例子 讓大家可以明白一點(diǎn)

[Header("GameObject")]
    [Tooltip("手槍")]
    private GameObject SmallGunPlayer;
    [Tooltip ("AK47"), SerializeField]
    private  GameObject BiglGunPlayer;

它的效果是

然后把鼠標(biāo)拖到變量上邊的時(shí)候是

大家對(duì)照腳本中的語句可以很輕易的理解了

3.[HideInInspector]

這個(gè)的用法是和在這篇博客開頭的差不多

就是我們?cè)谝粋€(gè)不想出現(xiàn)在Inspector面板上出現(xiàn)的public變量

我們就在這個(gè)語句上添加[HideInInspector]即可

在unity的Inspector面板上就不會(huì)出現(xiàn)了

因?yàn)檫@個(gè)比較好理解 就不給例子了

4.[SerializeField]

這個(gè)和上面的語句相反 這個(gè)是private的變量

添加上這個(gè)語句之后的話

在unity的Inspector面板上可以改變其值 相當(dāng)于public變量

不過private 具有一定的保護(hù)級(jí)別 這是和直接用public的區(qū)別

在這里最后提一下,以上語句可以一起用 效果可以重疊

具體效果在上面給出的代碼和圖片中可以發(fā)現(xiàn)

5.[Range( , )]

這個(gè)的用法是寫在一個(gè)變量的前邊(上邊)

然后在unity的Inspector面板上就是一個(gè)類似于Slider的效果

[Range(2, 25)]
 public int maxRandomValue = 5;

6.[Serializable]

這個(gè)的作用是 我們?cè)谀_本中聲明一個(gè)類的時(shí)候

我們可以把它其中的變量改成一個(gè)可以展開 折疊的變量

可能上面的描述不太準(zhǔn)確 下面給大家一個(gè)例子

public Mydate date;
   [Serializable]
   public class Mydate
    {
        public  float q;
        public  float w;
        public  float m;
        public  float r;
    }

它的效果是

很容易就看懂了吧

在上邊提到了類,在這里給一些小白朋友們介紹一下最簡(jiǎn)單的類在unity中的用法

[Serializable ]
    public class prefebs
    {
        public GameObject Bullet;
        public GameObject Robot;
        public Transform Position;
    }
    public prefebs Prefebs;
    private void Update
    {
    	Prefebs.Robot.transform.Translate(transform.up*Time.deltatime*10);
    }

在上邊很容易可以知道 在創(chuàng)建類之后在沒在update start等中調(diào)用

通過上邊介紹的所有方法可以制作出很多讓你意想不到的效果

并且可以讓你感覺這個(gè)真的好用

補(bǔ)充:Unity編輯器——Inspector 面板擴(kuò)展

將EditorGUI 擴(kuò)展在 Inspector 面板上

EditorGUI 和 GUI 的用法幾乎完全一致,目前來說前者多用于編輯器開發(fā),后者多用于發(fā)布后調(diào)試編輯器??傊鼈兌际瞧疠o助作用的。 EditorGUI 提供的組件非常豐富,常用的繪制元素包括文本、按鈕、圖片和滾動(dòng)框等。做一個(gè)好的編輯器,是離不開 EditorGUI 的。如圖:我們將 EditorGUI 拓展在 Inspector 面板上了,相關(guān)代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class Script_03_23 : MonoBehaviour
{
    public Vector3 scrollPos;
    public int myId;
    public string myName;
    public GameObject prefab;
    public MyEnum myEnum = MyEnum.One;
    public bool toogle1;
    public bool toogle2;
    public enum MyEnum
    {
        One=1,
        Two,
    }
 
#if UNITY_EDITOR
    [CustomEditor(typeof(Script_03_23))]
    public class ScriptEditor_03_23 : Editor
    {
        private bool m_EnableToogle;
        public override void OnInspectorGUI()
        {
            //獲取腳本對(duì)象
            Script_03_23 script = target as Script_03_23;
 
            //繪制滾動(dòng)條
            script.scrollPos =
                EditorGUILayout.BeginScrollView(script.scrollPos, false, true);
            script.myName = EditorGUILayout.TextField("text", script.myName);
            script.myId = EditorGUILayout.IntField("int", script.myId);
 
            script.prefab = EditorGUILayout.ObjectField("GameObject", script.prefab,
                typeof(GameObject), true) as GameObject;
 
            //繪制按鈕
            EditorGUILayout.BeginHorizontal();
            GUILayout.Button("1");
            GUILayout.Button("2");
            script.myEnum = (Script_03_23.MyEnum)EditorGUILayout.EnumPopup("MyEnum:",
                script.myEnum);
 
            EditorGUILayout.EndHorizontal();
 
            //Toogle 組件
            m_EnableToogle = EditorGUILayout.BeginToggleGroup("EnableToogle",
                m_EnableToogle);
            script.toogle1 = EditorGUILayout.Toggle("toogle1", script.toogle1);
            script.toogle2 = EditorGUILayout.Toggle("toogle2", script.toogle2);
            EditorGUILayout.EndToggleGroup();
 
            EditorGUILayout.EndScrollView();
        }
    }
}
#endif

EditorGUILayout —— 是EditorGUI 自動(dòng) 布局版本。

EditorGUILayout.BeginScrollView —— 函數(shù)原型: public static Vector2 BeginScrollView( Vector2 scrollPosition, bool alwaysShowHorizontal, bool alwaysShowVertical, params GUILayoutOption[] options);

scrollPosition參數(shù): 顯式使用的位置

alwaysShowHorizontal —— 表示可選的參數(shù),始終顯示水平滾動(dòng)條。如果為false或省略,那么則僅當(dāng)ScrollView中的內(nèi)容比ScrollView本身更寬時(shí)才會(huì)顯示。

alwayShowVertical —— 表示可選的參數(shù),始終顯示垂直滾動(dòng)條。如果為false或省略,那么只有當(dāng)ScrollView中的內(nèi)容比ScrollView本身高時(shí)才會(huì)顯示。

EditorWindows 窗口

Unity 提供編輯器窗口,開發(fā)者可以自由拓展自己的窗口。 Unity 編輯器系統(tǒng)自帶的視圖窗口其實(shí)也是用 EditorWindows 實(shí)現(xiàn)的。如圖所示,我們來制作一個(gè)簡(jiǎn)單的編輯窗口,它繪制元素時(shí)同樣使用 EditorGUI 代碼。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_03_24Window : EditorWindow
{
 
    [MenuItem("Window/Open My Window")]
    static void Init()
    {
        Script_03_24Window window = (Script_03_24Window)EditorWindow.GetWindow(typeof(Script_03_24Window));
        window.Show();
    }
 
    private Texture m_MyTexture = null;
    private float m_MyFloat = 0.5f;
    void Awake()
    {
        Debug.LogFormat("窗口初始化時(shí)調(diào)用");
        m_MyTexture = AssetDatabase.LoadAssetAtPath<Texture>("Assets/unity1.png");
    }
    void OnGUI()
    {
        GUILayout.Label("Hello World!!", EditorStyles.boldLabel);
        m_MyFloat = EditorGUILayout.Slider("Slider", m_MyFloat, -5, 5);
        GUI.DrawTexture(new Rect(0, 30, 100, 100), m_MyTexture);
    }
    void OnDestroy()
    {
        Debug.LogFormat("窗口銷毀時(shí)調(diào)用");
    }
    void OnFocus()
    {
        Debug.LogFormat("窗口擁有焦點(diǎn)時(shí)調(diào)用");
    }
    void OnHierarchyChange()
    {
        Debug.LogFormat("Hierarchy視圖發(fā)生改變時(shí)調(diào)用");
    }
    void OnInspectorUpdate()
    {
        //Debug.LogFormat ("Inspector每幀更新");
    }
    void OnLostFocus()
    {
        Debug.LogFormat("失去焦點(diǎn)");
    }
    void OnProjectChange()
    {
        Debug.LogFormat("Project視圖發(fā)生改變時(shí)調(diào)用");
    }
    void OnSelectionChange()
    {
        Debug.LogFormat("Hierarchy或者Project視圖中選擇一個(gè)對(duì)象時(shí)調(diào)用");
    }
    void Update()
    {
        //Debug.LogFormat ("每幀更新");
    }
}

EditorWindows 下拉菜單

如圖 所示,在 EditorWindows 編輯窗口的右上角,有個(gè)下拉菜單,我們也可以對(duì)該菜單中的選項(xiàng)進(jìn)行拓展,不過這里需要實(shí)現(xiàn) IHasCustomMenu 接口。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_03_25Window : EditorWindow,IHasCustomMenu
{
    void IHasCustomMenu.AddItemsToMenu(GenericMenu menu)
    {
        menu.AddDisabledItem(new GUIContent("Disable"));
        menu.AddItem(new GUIContent("Test1"), true, () =>
        {
            Debug.Log("Test1");
        });
 
        menu.AddItem(new GUIContent("Test2"), true, () =>
        {
            Debug.Log("Test2");
        });
 
        menu.AddSeparator("Test/");
        menu.AddItem(new GUIContent("Test/Tes3"), true, () =>
        {
            Debug.Log("Tes3");
        });
    }
        [MenuItem("Window/TAOTAO My Window")]
    static void Init()
    {
        Script_03_25Window window = (Script_03_25Window)EditorWindow.GetWindow(typeof(Script_03_25Window));
        window.Show();
    }
}

上述代碼中,我們通過 AddItem()方法來添加列表元素,并且監(jiān)聽選擇后的事件。

預(yù)覽窗口

選擇游戲?qū)ο蠡蛘哂螒蛸Y源后, Inspector 面板下方將會(huì)出現(xiàn)它的預(yù)覽窗口,但是有些資源是沒有預(yù)覽信息的,不過我們可以監(jiān)聽它的窗口方法來重新繪制它,如圖 所示,相關(guān)代碼如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor; 
[CustomPreview(typeof(GameObject))]
public class Script_03_26 : ObjectPreview
{ 
    public override bool HasPreviewGUI()
    {
        return true;
    }
    public override void OnPreviewGUI(Rect r, GUIStyle background)
    {
        GUI.DrawTexture(r, AssetDatabase.LoadAssetAtPath<Texture>("Assets/Unity.png"));
        GUILayout.Label("Hello World!");
    }
}

獲取預(yù)覽信息

有些資源是有預(yù)覽信息的,比如模型資源。在預(yù)覽窗口中,我們可以看到它的樣式。如果需要在自定義窗口中顯示它,就需要獲取它的預(yù)覽信息。如圖所示,選擇一個(gè)游戲?qū)ο蠛?,?huì)在自定義窗口中顯示它,相關(guān)代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Script_03_27window : EditorWindow
{
    private GameObject m_MyGo;
    private Editor m_MyEditor;
 
    [MenuItem("Window/TAOSHUI Open My Window")]
    static void Init()
    {
        Script_03_27window window = (Script_03_27window)EditorWindow.GetWindow(typeof(Script_03_27window));
        window.Show();
    }
     void OnGUI()
    {
        //設(shè)置一個(gè)游戲?qū)ο?
        m_MyGo = (GameObject)EditorGUILayout.ObjectField(m_MyGo, 
            typeof(GameObject), true);
        if(m_MyGo !=null)
        {
            if(m_MyEditor==null)
            {
                //創(chuàng)建Editor 實(shí)例
                m_MyEditor = Editor.CreateEditor(m_MyGo);
            }
            //預(yù)覽它
            m_MyEditor.OnPreviewGUI(GUILayoutUtility.GetRect(500, 500),
               EditorStyles.whiteLabel );
        }
    }
}

在上述代碼中,預(yù)覽對(duì)象首先需要通過 Editor.CreateEditor()拿到它的 Editor 實(shí)例對(duì)象,接著調(diào)用 OnPreviewGUI()方法傳入窗口的顯示區(qū)域。

相關(guān)文章

  • C#數(shù)據(jù)類型實(shí)現(xiàn)背包、隊(duì)列和棧

    C#數(shù)據(jù)類型實(shí)現(xiàn)背包、隊(duì)列和棧

    本文詳細(xì)講解了C#數(shù)據(jù)結(jié)構(gòu)類型,并實(shí)現(xiàn)背包、隊(duì)列和棧的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • c#如何使用 XML 文檔功能

    c#如何使用 XML 文檔功能

    這篇文章主要介紹了c#如何使用 XML 文檔功能,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • 分享WCF聊天程序--WCFChat實(shí)現(xiàn)代碼

    分享WCF聊天程序--WCFChat實(shí)現(xiàn)代碼

    無意中在一個(gè)國外的站點(diǎn)下到了一個(gè)利用WCF實(shí)現(xiàn)聊天的程序,作者是:Nikola Paljetak。研究了一下,自己做了測(cè)試和部分修改,感覺還不錯(cuò),分享給大家
    2015-11-11
  • C#中圖片如何自適應(yīng)pictureBox大小

    C#中圖片如何自適應(yīng)pictureBox大小

    文章描述了如何在C#中實(shí)現(xiàn)圖片自適應(yīng)pictureBox大小,并展示修改前后的效果,修改步驟包括兩步,作者分享了個(gè)人經(jīng)驗(yàn),希望對(duì)大家有所幫助
    2025-01-01
  • c# 提取文檔信息的示例

    c# 提取文檔信息的示例

    這篇文章主要介紹了c# 提取文檔信息的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2021-02-02
  • 教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像

    教你創(chuàng)建一個(gè)帶診斷工具的.NET鏡像

    本文編寫的初衷是因?yàn)樵谌豪镉泻芏嘈』锇橛龅缴a(chǎn)環(huán)境性能問題的時(shí)候,.NET的runtime鏡像中沒有帶一些工具,安裝和使用起來很麻煩,所以分享一些我們公司內(nèi)部一些技巧,對(duì).NET鏡像帶診斷工具相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-07-07
  • c#解壓文件的實(shí)例方法

    c#解壓文件的實(shí)例方法

    該方法適應(yīng)應(yīng)用桌面快捷鍵壓縮的文件,zip,rar格式的文件進(jìn)行解壓!
    2013-05-05
  • WPF中引入WindowsForms控件的方法

    WPF中引入WindowsForms控件的方法

    這篇文章主要介紹了WPF中引入WindowsForms控件的方法,結(jié)合實(shí)例形式分析了在WPF中調(diào)用Windows Forms控件的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-07-07
  • C#基于DBContext(EF)實(shí)現(xiàn)通用增刪改查的REST方法實(shí)例

    C#基于DBContext(EF)實(shí)現(xiàn)通用增刪改查的REST方法實(shí)例

    這篇文章主要介紹了C#基于DBContext(EF)實(shí)現(xiàn)通用增刪改查的REST方法實(shí)例,是C#程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C#多線程TPL常見操作誤區(qū)與異常處理

    C#多線程TPL常見操作誤區(qū)與異常處理

    本文詳細(xì)講解了C#多線程TPL常見操作誤區(qū)與異常處理,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

米易县| 西充县| 库车县| 邵阳市| 额济纳旗| 罗田县| 黑龙江省| 昭通市| 东乡族自治县| 松滋市| 抚松县| 罗城| 宜君县| 墨竹工卡县| 阆中市| 株洲市| 宣化县| 保康县| 讷河市| 丰城市| 瓦房店市| 长治市| 淮安市| 互助| 阳江市| 尼木县| 布拖县| 牟定县| 罗田县| 珲春市| 涿州市| 柳江县| 集贤县| 红安县| 舞钢市| 山阴县| 大竹县| 大连市| 武强县| 会东县| 乌兰浩特市|