簡體   English   中英

如何使自定義檢查器在Unity中添加對象引用

[英]How to make custom inspector add object reference in Unity

我無法弄清楚如何在我的自定義檢查器中顯示紋理字段,文檔解釋了如何做到這一點。

我有一個腳本,在我的主腳本中有一個帶有紋理類型的Icon字段,但需要將其寫入自定義檢查器。 請解釋我如何做到這一點。 我的主腳本存儲為ItemReference,以便我可以訪問它的變量。

我已經離開了下面的內容,所以你可以看到我在重寫檢查員的位置。

using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(Item))]
public class ItemCustomEditor : Editor {

    //IMPORTANT!! TWEAKING THIS SCRIPT WITHOUT KNOWLEDGE OF THE UNITY EDITOR API MAY BREAK FUNCTIONS OF OTHER SCRIPTS IN GAME SUCH AS MAKING ALL VARIABLES INVISIBLE.
    public override void OnInspectorGUI(){
        base.OnInspectorGUI();
        Item ItemReference = (Item)target;
        EditorGUILayout.Separator();
        EditorGUILayout.Separator();
        ItemReference.ID = EditorGUILayout.IntField("Item ID", ItemReference.ID);

    }
}

這是編輯器腳本,這是編輯器腳本引用的普通腳本。

    using UnityEngine;
using System.Collections;

public class Item : MonoBehaviour {
    //First we declare variables that the database will use
    public int ID;
    public Texture icon;
    //Drop and use buttons can be turned off by setting value to #000 this is not recommended for the Use Button as user will not be able to use items; however can come in handy 
    //If you want to ban dropping items in cutscenes or certain areas to set that up use a trigger and set the string to #000 to void the command.
    public string dropButton;
    public string useButton;
    public bool autoDestruct;
    public bool clickToCollect;
    public bool enterToCollect;
    void Update(){
        // Automatic human error detection system detects invalid characters in fields that would usually break system and removes the problem to ensure smooth operation.
        // This system is set up and does not require the user to tweak setting; ONLY MODIFY IF YOU ARE PROFFICIENT IN C#.
            if (useButton.Length > 1){
                useButton = "#000";
                Debug.LogError ("UseButton command may not contain more than 1 letter or number please shorten your command; Your use button has been disabled.");
            }
            else if (useButton.Contains("!") || useButton.Contains("@") || useButton.Contains ("%") || useButton.Contains ("^")){
                useButton = "#000";
                Debug.LogError ("UseButton command must not contain symbols please edit your command.");
            }
            if (useButton.Contains ("&") || useButton.Contains ("*") || useButton.Contains ("(") || useButton.Contains (")") || useButton.Contains ("-") || useButton.Contains ("_")) {
                useButton = "#000";
                Debug.LogError ("UseButton command must not contain symbols please edit your command.");
            }
            if (useButton.Contains ("/") || useButton.Contains ("+") || useButton.Contains ("=") || useButton.Contains (".") || useButton.Contains (",") || useButton.Contains ("?")) {
                useButton = "#000";
                Debug.LogError ("UseButton command must not contain symbols please edit your command.");
            }
            if (useButton.Contains (">") || useButton.Contains ("<") || useButton.Contains ("~") || useButton.Contains ("`")) {
                useButton = "#000";
                Debug.LogError ("UseButton command must not contain symbols please edit your command.");
            }
            if (useButton == "" || dropButton == "" || icon == null){
                Debug.LogWarning("Please ensure all items in the ITEMDB script are assigned you are missing values for 1 or more variables. As is some functionalities may not work as expected");
            }
            if (clickToCollect == true && enterToCollect == true){
                Debug.LogError("You have checked both click to collect and enter to collect options in: " + this.gameObject.name + "'s ItemDB script please ensure only one is selected.");
            }
        }
    }

你要做的是使用ObjectField並指定所需的類型(紋理)。

以下是MonoBehavi上整數和Texture屬性的自定義編輯器的示例代碼:

using UnityEngine;
using System.Collections;
using UnityEditor;

[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor {

    public override void OnInspectorGUI()
    {
        var script = (MyScript) target;

        script.someProperty = EditorGUILayout.IntField("A value", script.someProperty);
        script.texture = (Texture) EditorGUILayout.ObjectField("Image", script.texture, typeof (Texture), false);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM