Оптимизация присваивателя уникального идентификатора GameObject UnityC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизация присваивателя уникального идентификатора GameObject Unity

Сообщение Anonymous »

Недавно я работал над дверной системой для своей многопользовательской игры, и у меня возникла проблема с идентификатором двери (который указывает, с какой дверью взаимодействовать). Я хотел избежать назначения идентификаторов вручную, поскольку в моей игре много дверей, поэтому я нашел решение — вместо ненадежного FindObjectsOfType я создал следующий зациклитель сцены:

Код: Выделить всё

void IterateThroughScene(Scene scene)
{
SortedList sortedObjects = new SortedList();

foreach (GameObject sceneRootObject in scene.GetRootGameObjects())
{
foreach (NetworkedObject netObj in sceneRootObject.GetComponentsInChildren())
{
Vector3 position = netObj.transform.position;
string transformHash = position.x.ToString("0.00") + position.y.ToString("0.00") + position.z.ToString("0.00");
transformHash = Hashing.MD5(transformHash);

sortedObjects.Add(transformHash, netObj);
}
}

Dictionary preparedObjects = new Dictionary();
ushort lastId = _ids[scene.name];

foreach (var part in sortedObjects)
{
NetworkedObject preparedObject = part.Value;
preparedObject.GetObjectData().id = lastId;
preparedObjects[lastId] = preparedObject;
lastId++;
}

_ids[scene.name] = lastId;
_registeredObjects[scene.name] = preparedObjects;
}
Здесь я пошагово описываю, что делает этот метод:
  • SortedList создается для хранения объектов< /li>
    2 foreach получают все объекты на сцене

    здесь скрипт генерирует MD5 позиции и добавляет ее в SortedList
[*]После этого создается экземпляр Dictionary для хранения окончательных данных.
[*]Следующий foreach выполняется для цикла через SortedList и надежно назначать идентификаторы NetworkedObject.

Это отлично сработало в маленьких/средних сценах, но у меня начались серьезные проблемы с большими сцены – у меня хороший компьютер, и италяция занимает 12 секунд, а цель моей игры – средние ПК.
Итак, есть ли у вас какие-либо идеи, как я могу оптимизировать этот алгоритм?

Подробнее здесь: https://stackoverflow.com/questions/673 ... gner-unity
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»