приватное / публичное поле не видно в инспекторе, когда я использую GridLayoutGroup в единстве - PullRequest
0 голосов
/ 19 мая 2019

личное / публичное поле не отображается в инспекторе при использовании GridLayoutGroup

вот пример

enter image description here

Вот как я определяю свои переменные:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine.UI; 
using UnityEngine; 
using UnityEditor; 

public class Myscript : GridLayoutGroup 
{ 
    [SerializeField] private bool ishhh; 
}

1 Ответ

1 голос
/ 19 мая 2019

Большинство встроенных компонентов Unity имеют соответственно [CustomEditor], перезаписывающего Инспектора по умолчанию.

В частности, GridLayoutGroup имеет специальный инспектор с именем GridLayoutGroupEditor, перезаписывающий инспектор для любого класса, полученного из GridLayoutGroup.

& RightArrow; Вы должны унаследовать его, чтобы создать специальный редактор для класса, производного от GridLayoutGroup.

Чтобы сделать дополнительные поля видимыми, вы можете сделать что-то вроде, например,

using UnityEditor;

...

[CustomEditor(typeof(Myscript))]
public class MyScriptEditor : GridLayoutGroupEditor
{
    private SerializedProperty ishhh;

    // Called when the Inspector is loaded
    // Usually when the according GameObject gets selected in the hierarchy
    private void OnEnable ()
    {
        // "Link" the SerializedProperty to a real serialized field
        // (public fields are serialized automatically)
        ishhh = serializedObject.FindProperty("ishhh");
    }

    // Kind of the Inspector's Update method
    public override void OnInpectorGUI ()
    {
        // Draw the default inspector
        // base.OnInspectorGUI();

        // Fetch current values into the serialized properties
        serializedObject.Update();

        // Automatically uses the correct field drawer according to the property type
        EditorGUILayout.PropertyField(ishhh);

        // Write back changed values to the real component
        serializedObject.ApplyModifiedProperties();
    }
}

Важное замечание: Поместите этот сценарий в папку с именем Editor, чтобы исключить его из сборки во избежание ошибок, связанных с пространством имен UnityEditor.

В качестве альтернативы (поскольку я вижу, что у вас уже есть код using UnityEditor в вашем примере кода), вы можете оставить его в том же сценарии, но затем вам придется вручную использовать #if Pre-Processors для удаления все кодовые блоки / строки выключены, которые используют что-то из пространства имен UnityEditor, например

#if UNITY_EDITOR

    using UnityEditor;

#endif

...

#if UNITY_EDITOR

    // any code using UnityEditor

#endif

В противном случае вы не сможете собрать свое приложение, поскольку UnityEditor существует только в самом редакторе Unity и полностью удален для сборок.


Примечание: напечатано на смартфоне, поэтому никаких гарантий, но я надеюсь, что идея проясняется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...