Код: Выделить всё
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
[*]Следующий foreach выполняется для цикла через SortedList и надежно назначать идентификаторы NetworkedObject.
Это отлично сработало в маленьких/средних сценах, но у меня начались серьезные проблемы с большими сцены – у меня хороший компьютер, и италяция занимает 12 секунд, а цель моей игры – средние ПК.
Итак, есть ли у вас какие-либо идеи, как я могу оптимизировать этот алгоритм?
Подробнее здесь: https://stackoverflow.com/questions/673 ... gner-unity