Как я могу сравнить данные Transforms, если они идентичны, а затем проверить, являются ли они нулевыми? - PullRequest
0 голосов
/ 07 сентября 2018

Внутри OnSelectionChange() внутри сценария EditorWindow:

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

Сначала я хочу проверить, совпадает ли одно из данных преобразования в text с данными преобразования выбранного объекта. Затем в редакторе в иерархии я удаляю объект, и теперь это null. Теперь selected - это null. Теперь я хочу проверить, что если объект null, но также был идентичным в первой проверке, тогда установите флаг на true, а если он не null или не идентичен, установите флаг на false.

private void OnSelectionChange()
{
    selectionChanged = true;

    var selections = Selection.objects.OfType<GameObject>().ToList();
    var test = TransformSaver.LoadTransforms();

    if (selections.Count > 0)
        tempsel = selections;

    if (tempsel.Count > 0)
    {
        for (int x = 0; x < tempsel.Count; x++)
        {
            for (int i = 0; i < test.Length; i++)
            {
                var selected = tempsel[x];

                if (selected.transform.parent == test[i].parent &&
                    selected.transform.name == test[i].name &&
                    selected.transform.localPosition == test[i].pos &&
                    selected.transform.localRotation == test[i].rot &&
                    selected.transform.localScale == test[i].scale)
                {
                    hasLoaded = true;
                }
            }
        }

        for (int y = 0; y < selections.Count; y++)
        {
            if (selections[y] == null && hasLoaded == true)
            {
                hasLoaded = false;
            }
        }
    }
}

Следующим шагом является использование флага, чтобы решить, следует ли включить true или false кнопку внутри OnGUI:

private void Load()
{
    if (selectionChanged)
    {
        if (hasLoaded == true)
        {
            GUI.enabled = true;
        }
        else
        {
            GUI.enabled = false;
        }
    }
    if (GUILayout.Button("Load"))
    {
        TransformSaver.LoadTransform();
        hasLoaded = false;
    }
}

Но пока безуспешно.

Основная логика цели, как я понимаю, может быть, они должны быть другими, но вот как я объясняю, что я хочу сделать:

  1. Для сравнения данных преобразований между выборками и проверкой.

  2. Установите флаг в значение true, если данные идентифицируются в одном или нескольких объектах выборок по отношению к тестовому массиву.

  3. Чтобы проверить, являются ли один или несколько объектов выборки нулевыми, и являются ли они нулевыми, проверьте, были ли они идентифицированы в первой проверке (1).

  4. Если оба выбранных объекта один или несколько, а тест Преобразовывает данные, один или несколько идентифицируются, а также только в нулевое значение, тогда для другого флага устанавливается значение true.

  5. Используйте новый флаг, если он равен true или false, чтобы решить, следует ли включить true / false, кнопка «Загрузить»

Последний класс TransformSaver, из которого тест получает массив данных Transforms: (У меня есть еще одна кнопка «Сохранить», которая сохраняет выборку объектов, а затем я использую LoadTransforms(), чтобы вернуть массив данных сохраненных преобразований из Файл JSON)

 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using UnityEngine.SceneManagement;

 public static class TransformSaver
 {
     [System.Serializable]
     public class Transform
     {
         public string sceneName;
         public string name;
         public UnityEngine.Transform parent;
         public Vector3 pos;
         public Quaternion rot;
         public Vector3 scale;
     }

     //Save Transform
     public static void SaveTransform(UnityEngine.Transform[] tranformToSave)
     {
         Transform[] trnfrm = new Transform[tranformToSave.Length];
         for (int i = 0; i < trnfrm.Length; i++)
         {
             trnfrm[i] = new Transform();

             trnfrm[i].sceneName = tranformToSave[i].gameObject.scene.name;
             trnfrm[i].name = tranformToSave[i].name;
             trnfrm[i].parent = tranformToSave[i].parent;
             trnfrm[i].pos = tranformToSave[i].localPosition;
             trnfrm[i].rot = tranformToSave[i].localRotation;
             trnfrm[i].scale = tranformToSave[i].localScale;
         }

         string jsonTransform = JsonHelper.ToJson(trnfrm, true);
         //PlayerPrefs.SetString("transform", jsonTransform);
         File.WriteAllText(@"d:\json\json.txt", jsonTransform);
     }

     public static Transform[] LoadTransforms()
     {
         string jsonTransform = File.ReadAllText(@"d:\json\json.txt");
         if (jsonTransform == null)
         {
             return null;
         }

         Transform[] savedTransforms = JsonHelper.FromJson<Transform>(jsonTransform);

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