Скрипт Unity Editor для заполнения сериализованного массива дочерними элементами указанного GameObject - PullRequest
0 голосов
/ 29 июня 2018

У меня есть сериализованное поле 'GameObject', которое я хотел бы автоматически заполнить дочерними элементами игрового объекта, который я хочу указать вручную.

Бонусные баллы, если я могу сделать невозможным ручное изменение этого массива на компоненте, а отображать его только в состоянии, выделенном серым цветом.

Возможна ли эта операция? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Решение:

[CustomEditor( typeOf( ClassYouWantToManage ) )]
class ClassYouWantToManageEditor
{
  ClassYouWantToManage value;

  void OnEnable()
  {
   // target is the upcasted version of your managed class
   value = (ClassYouWantToManage) target;
  }

  public override void OnInspectorGUI()
  {
    // specifiedObject is the 'parent', with whos children you want to populate the array. has to be public
    if (value.specifiedObject == null)
    {
      throw new Exception ("Specified object is null");
    }

    // targetArray is the array you want to populate with children. has to be public
    // simple population alg
    value.targetArray = new GameObject[specifiedObject.transform.ChildCount];
    for (int i = 0; i < specifiedObject.transform.ChildCount; i++)
    {
      value.targetArray[ i ] = specifiedObject.transform.GetChild( i ).gameObject;
    } 
  }
}  
0 голосов
/ 29 июня 2018

Это поможет?

GameObject[] myArray;
GameObject parent;

void GetChildren()
{

    myArray=new GameObject[parent.transform.childCount];
    for (int i=0;i<parent.transform.childCount;i++)
    myArray[i]=parent.transform.GetChild(i).gameObject;

}

Что касается отображения в нередактируемом состоянии - это возможно, но требует написания специального редактора / инспектора для этого компонента.

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