Nano Hash - криптовалюты, майнинг, программирование

Сериализация ссылок на GameObject

Проект, над которым я работаю, имеет некоторые специфические требования к дизайну, и я пытаюсь найти решение, которое их удовлетворяет (и понимая, что, скорее всего, «это невозможно»).

  1. 3D-модели будут храниться в одном или нескольких пакетах активов, на которые будут ссылаться, чтобы будущие обновления можно было с минимальными усилиями передавать в несколько приложений (40 программ не нужно перекомпилировать).
  2. Пакеты ресурсов считаются в определенной степени нестабильными (они могут изменяться извне, чтобы позволить обновлять 3D-ресурсы и текстуры, обновления никогда не должны требовать повторной компиляции исполняемого файла Unity).
  3. Никакой код не может быть включен в пакеты ресурсов (множество причин; прежде всего, Unity не может запускать код, отсутствующий в его dll, поэтому ресурсы сценариев должны присутствовать в базовом приложении; также существует проблема накладных расходов: эти модели очень точно детализированные, сотни деталей (буквально вплоть до отдельных винтов), каждая из которых может быть неразборной по отдельности).

Мне нужно найти способ, как в редакторе, так и во время выполнения, чтобы иметь возможность однозначно ссылаться на отдельные части 3D-ресурсов, чтобы разработчики приложений могли указать, какие биты должны иметь функциональность и какого рода, в то время как во время выполнения приложение должно иметь возможность чтобы найти эти биты, чтобы применить функциональность.

Рассмотренные варианты и их недостатки:

  • Преобразование имен объектов иерархии. Сломается, если объект будет переименован, перемещен (переподчинен) или удален (возможно, если маловероятно, создает невидимые зависимости). Нарушает требование №2.
  • Использование GUID. Требует, чтобы каждый объект в иерархии имел прикрепленный скрипт, хранящий информацию. Нарушает требование №3.
  • Использование комплектов ассетов как включенных (скомпилированных в проект) ресурсов. Нарушает требование №1.
  • Адресуемые пакеты ресурсов Unity. В настоящее время не готов к использованию в производстве и не будет готов к сроку сдачи этого проекта.
13.11.2018

  • Я бы использовал имена преобразований и считал это правилом для активов. То же самое, например, с с использованием интерфейсов или отражения -> имена просто должны соответствовать шаблону и не могут быть другими/ошибочными и т. д. 14.11.2018
  • @derHugo Это почти единственное, что я решил, тоже сработает. Я просто знаю, что где-то в будущем кто-то облажается (потому что активы не будут иметь версии, ну, у них будет иметь идентификатор версии, но более старые версии не будут храниться или распространяться ). 14.11.2018

Ответы:


1

Я бы использовал имена преобразований, но с изюминкой: перечислите преобразования в файле (JSON или что-то еще) и дайте каждому GUID, а затем включите его в пакет. По сути, вы бы использовали параметр GUID, но без сценариев. Если иерархия изменится, вы можете просто отредактировать файл метаданных, чтобы он также удовлетворял требованию отсутствия повторной компиляции.

14.11.2018
  • Как редактируется файл метаданных? Как назначаются гиды? Помните, что я работаю здесь с очень большими наборами данных, более 1000 объектов (я еще не получил доступ к производственному активу, чтобы увидеть, сколько их на самом деле, но я видел более старое приложение, похожее на то, что мы делаем) , от 800 до 1800 GO - хорошая оценка). Это должно быть автоматизировано, и если объект переопределен, он должен сохранить тот же guid. 14.11.2018
  • Это вам решать на основе требований вашего проекта, но вам понадобится сценарий редактора для создания файла и некоторый способ идентификации объектов. Возможно, вы могли бы кэшировать имена (и надеяться, что они не изменятся) в файле в вашем редакторе и использовать его в качестве ссылки для поиска объектов с измененным родительским статусом. Новые объекты получают случайные идентификаторы. 16.11.2018
  • Если вы думаете, что можете разработать систему, которая всегда отслеживает все изменения от всех исполнителей и никогда не ломается, вы можете попробовать, но не ожидайте, что зайдете слишком далеко. 17.11.2018
  • Я не писал спецификацию. Я просто должен это реализовать. И если нет идеального решения, то это ответ, который я могу послать наверх. 17.11.2018
  • Спецификации, которые вы разместили здесь, ничего не говорят о нулевом взаимодействии с художниками. Они должны что-то делать для поддержки вашего рабочего процесса. Как еще вы узнаете, какой из 200 старых винтов представляет новый? 18.11.2018
  • На самом деле я задавал этот вопрос, и я не получил ответа. Я даже не знаю, кто эти художники, и идея состоит в том, чтобы этот проект использовался командами людей, которые даже не являются моей компанией, в неизвестный момент времени в будущем. 18.11.2018
  • О, это... сложно. Вы захотите придумать набор инструкций, которым будут следовать художники. Вы просто не можете поддерживать произвольный рабочий процесс художника (по крайней мере, если вы не начнете кодировать плагины 3ds max). Я действительно думаю, что большинство 3D-пакетов дают новым объектам уникальные имена. Вы можете просто потребовать, чтобы они сохраняли имена постоянными. 18.11.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..