1. 程式人生 > >Unity3d 2017.3 自定義編輯器 列舉 隱藏與顯示

Unity3d 2017.3 自定義編輯器 列舉 隱藏與顯示

今天第一次自定義編輯器,記錄一下心得。

1.在Editor資料夾下建立一個指令碼,將此指令碼與想自定義編輯器的指令碼繫結

2.在OnEnable()方法中獲取原指令碼中,需要操作的物件。

3.OnInspectorGUI()中,EditorGUILayout.PropertyField(Enemy);方法的先後順序,決定了編輯器中排列的先後順序。

4.如果需要下拉選單,請定義列舉型別

5.最後,不要忘了test.ApplyModifiedProperties();將之前的程式碼應用。

using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(EnemyAI))]//關聯修改的指令碼
public class NewBehaviourScript1 : Editor
{
    //序列化
    private SerializedObject test;
    //各個公開變數
    public SerializedProperty Enemy;
    private SerializedProperty Player;
    private SerializedProperty ChooseEnemyPattern;
    private SerializedProperty ChooseEnemyType;
    private SerializedProperty PatrolA;
    private SerializedProperty PatrolB;
    private SerializedProperty LaserTX;
    private SerializedProperty ATInterval;
    private SerializedProperty EnemyAttackRange;
    private SerializedProperty EnemyMoveSpeed;
    private SerializedProperty EnemyRotateSpeed;


    void OnEnable()
    {
        //獲取到相關物件
        test = new SerializedObject(target);
        //獲取選擇
        ChooseEnemyPattern = test.FindProperty("ChooseEnemyPattern");
        //獲取各個公開變數
        Enemy = test.FindProperty("Enemy");
        Player = test.FindProperty("Player");
        ChooseEnemyType = test.FindProperty("ChooseEnemyType");
        PatrolA = test.FindProperty("PatrolA");
        PatrolB = test.FindProperty("PatrolB");
        LaserTX = test.FindProperty("LaserTX");
        ATInterval = test.FindProperty("ATInterval");
        EnemyAttackRange = test.FindProperty("EnemyAttackRange");
        EnemyMoveSpeed = test.FindProperty("EnemyMoveSpeed");
        EnemyRotateSpeed = test.FindProperty("EnemyRotateSpeed");
    }
    public override void OnInspectorGUI()
    {
        test.Update();//更新test
        //各個模式下均公開的變數
        EditorGUILayout.PropertyField(Enemy);
        EditorGUILayout.PropertyField(Player);
        EditorGUILayout.PropertyField(ChooseEnemyType);
        EditorGUILayout.PropertyField(ChooseEnemyPattern);
        if (ChooseEnemyPattern.enumValueIndex == 0)//AT模式下公開的變數
        {
            EditorGUILayout.PropertyField(PatrolA);
            EditorGUILayout.PropertyField(PatrolB);
            EditorGUILayout.PropertyField(LaserTX);
            EditorGUILayout.PropertyField(EnemyAttackRange);
            EditorGUILayout.PropertyField(EnemyMoveSpeed);
        }
        else if (ChooseEnemyPattern.enumValueIndex == 1)//MT模式下公開的變數
        {
            EditorGUILayout.PropertyField(LaserTX);
            EditorGUILayout.PropertyField(ATInterval);
            EditorGUILayout.PropertyField(EnemyAttackRange);
            EditorGUILayout.PropertyField(EnemyMoveSpeed);
            EditorGUILayout.PropertyField(EnemyRotateSpeed);
        }
        test.ApplyModifiedProperties();//應用
    }
}

選擇AT之後

選擇MT之後

相關推薦

Unity3d 2017.3 定義編輯 列舉 隱藏顯示

今天第一次自定義編輯器,記錄一下心得。 1.在Editor資料夾下建立一個指令碼,將此指令碼與想自定義編輯器的指令碼繫結 2.在OnEnable()方法中獲取原指令碼中,需要操作的物件。 3.OnInspectorGUI()中,EditorGUILayout.Propert

Unity3D」(9)定義編輯選單擴充套件總結

新增選單 [MenuItem("Tools/MyOption")] private static void MyOption() { // 自定義選單Tools } [MenuItem("Tools/Sub/MyOption")] priva

Unity3D 定義編輯介面(Inspector)

今天看一個指令碼,本想看看在 Inspector 介面的變數在腳本里的用途,然後查詢變數名的時候怎麼也找不到,自己也是驚訝。通過網上搜索才瞭解到原來 Inspector介面 是可以自己定義的。 當然自己定義,當然也需要寫一個指令碼來改的。可能是為了讓介面整潔的目的。 首先

@InitBinder裝配定義編輯

format init imp ini con edit r.java 自定義 class @InitBinder裝配自定義編輯器   第一步:BaseController.java,標註@InitBinder     public class BaseController

Unity 定義編輯窗口 畫線

狀態 nbsp ongui shmat 定義 技術 load oid clas 最近在學習狀態機, 想自己實現一個可視化編輯器, 需要將多個狀態之間用線條連接起來, 效果如下: 代碼如下: Material m;Vector2 start;Vector2 end

eclipse rcp 解決定義編輯editor重複開啟的問題

參考部落格:https://blog.csdn.net/linuxchyu/article/details/16984737 在eclipse rcp程式設計中,我們經常會自定義編輯器用於開啟自定義的檔案,會遇到每次雙擊檔案都開啟編輯器的問題,如何解決這個問題呢,我所知道的有兩種方法: 方法

Unity 定義編輯視窗的使用

Unity 自定義編輯器視窗功能強大,可以實現所有希望實現的功能。我在近期的專案中仿照魔獸爭霸3開發了一套簡單的遊戲單位功能元件,其中包括單位資料、移動方式、動畫播放、武器系統等等。如果用傳統的Inspector來修改各項屬性十分不方便,所以實現一個簡單直觀的自

canvas定義編輯

// 獲取視訊資訊 var oVideo = document.querySelector('#video'); // 獲取播放暫停按鈕 var oStopToP = document.querySelector('.stopToP'); var oPlayToS =

Wordpress之二__定義編輯按鈕

做一個很簡單的功能 框架上大概就是新增一個快捷鍵 編輯文章的時候,可以在文章頭加上鍊接,例如:  =================== 明日花->2015  bababalabala ,bala, =================== 首先想到的當然是- 1.wo

【Unity3D5.6版本使用(1)】定義編輯獲取場景所有物件Tag生成Json

在unity3D5.x版本中,一部分以前的程式碼無法正常執行,比如:載入場景時,使用Application.loadedLevel會提示“已過時”,需要使用EditorSceneManager.OpenScene(FileName[scount]);所以寫一篇記

vivado設定定義編輯notepad++設定高亮方法

vivado2015.03下tools->option->general->text editor -> 選擇custom editor, 右邊的 ... 瀏覽按鈕,如下圖

拓展編輯功能--Unity定義編輯視窗

最近學習了Unity自定義編輯器視窗,下面簡單總結,方便用到時回顧。 新建一個指令碼: using UnityEngine; using System.Collections; using Unit

[Unity編輯]定義編輯介面

編輯器GUI類 1.GUI、GUILayout 2.EditorGUI、EditorGUILayout 編輯器類(指令碼要放在Assets/Editor資料夾中,要使用UnityEditor的名稱空間): 1.EditorWindow(重點是OnGUI()的編寫) u

Spring整理3 -- 定義屬性編輯

在我們注入屬性時,遇到是日期型別,如果按普通屬性去注入,則會報錯,那我們該怎麼解決?解決辦法:自定義屬性編輯器。 什麼是屬性編輯器,作用? 自定義屬性編輯器,spring配置檔案中的字串轉換成相應的物件進行注入spring已經有內建的屬性編輯器,我們可以根據需求自己定義屬性編

spring boot框架學習7-spring boot的web開發(3)-定義消息轉換

spring boot 凱哥java本章節主要內容:通過前面的學習,我們了解並快速完成了spring boot第一個應用。spring boot企業級框架,那麽spring boot怎麽讀取靜態資源?如js文件夾,css文件以及png/jpg圖片呢?怎麽自定義消息轉換器呢?怎麽自定義spring mvc的配置

(12)Reactor 3 定義數據流——響應式Spring的道法術

響應式編程 Spring WebFlux 本系列文章索引《響應式Spring的道法術器》前情提要 響應式流 | Reactor 3快速上手 | 響應式流規範本文源碼 2.2 自定義數據流 這一小節介紹如何通過定義相應的事件(onNext、onError和onComplete) 創建一個 Flux 或

類的學習筆記(3)——定義裝飾及裝飾的理解

例一: 實現多加100 def fun1(x):      def fun2(y):           return x(y)+100       return fun2              #裝飾器 def ff(y):       return y*y   

定義資料型別 --- 列舉型別全解(swift2.3

自定義資料型別 — 列舉(swift) 下面簡單的介紹列舉這一自定義資料型別的應用 列舉的基本語法 列舉中rawValue應用 列舉中associatedValue應用 可選型的實質型別就是列舉 列舉的遞迴應用 一:列舉的基礎語法 imp

在struts2中配置定義攔截放行多個方法

return med ttr limit ring req tac cat invoke 源碼: 自定義的攔截器類: //自定義攔截器類:LoginInterceptor ; package com.java.action.interceptor; import j

SpringMVC 定義轉換

del 轉化 string sna 問題 print request package type 實踐SpringMVC轉化器是遇到的問題:表單提交沒有經過自定義轉換器(解決:表單用post方式提交) 自定義轉化器代碼 package cn.liangqinghai.