Страница 1 из 1

Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 15:51
FreeUnity
(c#) Вопрос о Инспекторе объектов Unity3d 3.4

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;


public class Serr : MonoBehaviour{
       
        public bool canClose = true;
              public Color c = Color.red;
       
        [Serializable]
        public class a1
        {
        public int p = 5;
        public Color c = Color.white;
       
        }
       
        [Serializable]
        public class b1
        {      
                public int p = 5;
        public Color c = Color.white;
        }


        }
 


Не могу понять, почему в инспекторе объектов не отображается параметры класса Test, так же как и в CharacterMotor.js?

Не хотелось бы использовать EditorGUILayout.Foldout


Буду признателен за помощь. :-bd
Спасибо.


P.S.: Я начинающий

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 17:11
Order
Скорее всего класс приватный, нужно сделать паблик.

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 17:17
Neodrop
Собственно, исходя из этого кода, именно потому, что класс приватный. Равно как я не вижу и публичной переменной его типа.

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 17:58
FreeUnity
Обновил код.
А если сеиализовать класс в классе?

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 18:37
waruiyume
В инспекторе вроде-бы только экземпляры видны.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;


public class Serr : MonoBehaviour
{

    public bool canClose = true;
    public Color c = Color.red;

    [Serializable]
    public class A1
    {
        public int p = 5;
        public Color c = Color.white;

    }
    [Serializable]
    public class B1
    {
        public int p = 5;
        public Color c = Color.white;
    }

    [SerializeField]
    public A1 a1 = new A1();
    [SerializeField]
    public B1 b1 = new B1();

}

 

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 21:46
AndreyMust19
Почти правильно. [System.Serializable] нужно использовать только при описании класса, чтобы указать движку что его можно сериализовать.
Потом, чтобы объект появился в инспекторе, просто объявите его в публичной области видимости. Тогда все сериализуемые поля этого объекта будут видны в инспекторе как его часть.
Указывайте [SerializeField] перед приватным полем, если несмотря на закрытую область видимости хотите его сериализовать тоже.

Re: Вопрос Serializable

СообщениеДобавлено: 07 дек 2011, 22:27
waruiyume
Почти правильно.

Ну так покажите "правильный" пример (popcorn) .

Re: Вопрос Serializable

СообщениеДобавлено: 08 дек 2011, 00:35
AndreyMust19
Да подавитесь пожалуйста:

Example.cs
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

[System.Serializable]
public class Example {
        public float f;
        public int i;
        public GameObject go;
}


ExampleUse.cs
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class ExampleUse : MonoBehaviour {

public Example e1;
}


Поля f, i, go будут видны в скрипт-компоненте ExampleUse как элементы списка.

Re: Вопрос Serializable

СообщениеДобавлено: 08 дек 2011, 09:23
FreeUnity
Спасибо огромное разобрался. Работает. При много благодарен. :ymdaydream: