1

シリアル化されたプロパティ パスなどを理解していないので、助けてください。カスタムエディターと通常のスクリプトの 2 つのスクリプトを作成しました。エディター スクリプトの最初のスクリプトで slotContents 変数を折りたたみ可能な状態で参照する方法を誰かが知っている場合。ありがとう

    using UnityEngine;
using System.Collections;

public class Inventory : MonoBehaviour {
    public GUISkin mainDesignSkin;
    public GUISkin craftDesignSkin;
    public bool enableCraftingMenu = true;
    public int craftSlot1;
    public int craftSlot2;
    public int craftResult; //Make this private users do not need to see this it will clutter editor.
    public int [] slotContents;
}

そして2つ目の脚本。

using UnityEngine;
using System.Collections;
using UnityEditor;
//Decalres type for editor.
[CustomEditor(typeof(Inventory))]
public class InventoryUiCustomEditor : Editor {
    public override void OnInspectorGUI ()
    {
        base.OnInspectorGUI ();
        Inventory ItemReference = (Inventory)target;
        EditorGUILayout.LabelField("First we need to set our skin look in the skins folder or assign your own designs.");
        EditorGUILayout.LabelField("Please assign even if crafting is disabled to avoid accidental null reference errors.");
        EditorGUILayout.Separator();
        ItemReference.mainDesignSkin = (GUISkin) EditorGUILayout.ObjectField("Apply the skin entitled 'Main' here.", ItemReference.mainDesignSkin, typeof (GUISkin), false);
        ItemReference.craftDesignSkin = (GUISkin) EditorGUILayout.ObjectField("Apply the skin entitled 'Craft' here.", ItemReference.craftDesignSkin, typeof (GUISkin), false);
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Should the crafting menu be enabled in this Scene?");
        EditorGUILayout.Separator();
        ItemReference.enableCraftingMenu = EditorGUILayout.Toggle("Enable Crafting", ItemReference.enableCraftingMenu); 
        if (ItemReference.enableCraftingMenu == true){
            EditorGUILayout.Separator();
            EditorGUILayout.LabelField("The below fields are for your testing only they will be automatically overridden.");
            EditorGUILayout.LabelField("The following fields can be used as a tester however will only work on valid recipes check the");
            EditorGUILayout.LabelField("documentation video for a tutorial on this.");
            EditorGUILayout.Separator();
            ItemReference.craftSlot1 = EditorGUILayout.IntField("Item 1", ItemReference.craftSlot1);
            ItemReference.craftSlot2 = EditorGUILayout.IntField("Item 2", ItemReference.craftSlot2);
            ItemReference.craftResult = EditorGUILayout.IntField("Result of mixing above two items.", ItemReference.craftResult);


        }
    }
}
4

1 に答える 1

0

このリンクを確認してください: http://answers.unity3d.com/questions/571411/is-it-possible-to-make-ac-script-variable-changea.html

これは、回答の詳細が記載されているため、読む必要があるリンクです: http://docs.unity3d.com/ScriptReference/Serializable.htmlまた、Serialize.Field を検索します。

ユーザーVaraquilexは、スポットではない場合でも閉じています。

コードは次のようになります。

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Inventory : MonoBehaviour 
{
    public GUISkin mainDesignSkin;
    public GUISkin craftDesignSkin;
    public bool enableCraftingMenu = true;
    public int craftSlot1;
    public int craftSlot2;
    public int craftResult; //Make this private users do not need to see this it will clutter editor.
    [SerializeField] 
    public int [] slotContents;
}
于 2015-01-19T22:24:13.290 に答える