TGViewer
Лаборатория Лиса Лаборатория Лиса @foxfoxcsharp · 79 subscribers
Post #4 133
📱 Лисье погружение в unsafe код в Unity! Часть 1: Указатели и Jobs 🦊

Фыр-фыр! Дорогие разработчики, спешу поделиться результатами увлекательного исследования работы с указателями в Unity Jobs System!

🔍 Что удалось раскопать:
Мы научились получать прямой доступ к структурам данных через указатели, сохраняя при этом всю красоту работы в инспекторе Unity!

📝 Ключевые моменты реализации:

Структура данных помечается атрибутами [Serializable] и [StructLayout(LayoutKind.Sequential)]
Используем unsafe код и fixed для безопасного получения указателей
Добавляем [NativeDisableUnsafePtrRestriction] для работы с указателями в Jobs
Сохраняем полный контроль через инспектор Unity и кнопки редактора
Возможность манипулировать данными прямо во время выполнения джобы
[SerializeField] private DataContainer dataContainer; // Важно: поле класса, не локальная переменная!
unsafe void Start()
{
fixed (DataContainer* ptr = &dataContainer)
{
job = new UnsafeTestJob
{
dataPtr = ptr
};
}
}

⚠️ Важные аспекты безопасности:

Жизненный цикл данных:
Структура ДОЛЖНА быть полем MonoBehaviour и сериализована Unity
Это гарантирует, что GC не переместит данные
Локальные переменные использовать НЕЛЬЗЯ!
Завершение работы:
public void OnDestroy()
{
if (!jobHandle.IsCompleted)
{
dataContainer.isActive = false; // Сначала сигнализируем о завершении
jobHandle.Complete(); // Дожидаемся остановки джобы
}
}

Race Conditions:
Будьте осторожны при параллельной записи в одни и те же поля
Используйте атомарные операции или синхронизацию при необходимости
Burst-компиляция может переупорядочивать операции чтения/записи
🎮 Практическое применение:

Многопоточная обработка данных без копирования
(Например использование Job для ИИ)
Прямое управление состоянием из основного потока
Возможность отладки через инспектор
Чистая интеграция с системой сериализации Unity
Радостно виляет хвостом

🔜 Что дальше?
В следующей части будем исследовать работу с IntPtr для управляемых типов данных! Попробуем обойти ограничения BurstCompiler и организовать безопасное управление managed памятью из Jobs!

💡 P.S. Помните: с большой силой приходит большая ответственность! Работа с указателями требует особой внимательности и понимания жизненного цикла данных.

🛠️ Полезные советы:

Всегда проверяйте IsCompleted перед Complete()
Используйте [SerializeField] для структур данных
Добавьте проверки на null и валидность указателей
Тщательно тестируйте при смене сцен и уничтожении объектов

#ЛисыПишутКод #CSharp #Unity #GameDev #Optimization #MultiThreading #UnsafeCode #UnityJobs #BurstCompiler #Programming
  • ❤‍🔥 1
More from @foxfoxcsharp
  1. Oct 7, 2026Вот более щедящий режим, тут хотя бы уже видно на каком моменте уже моделька начинает... Я…
  2. Oct 7, 2026Я тут накатил еще моделей, самая большая которая мне понравилась по уму и качеству и по ск…
  3. Oct 7, 2026Последние результаты ГЕНЕРАЦИЯ, ток/с модель 2k 8k 16k 32k 64k 128k ----------------------…
  4. Oct 6, 2026Ну в общем === qwen3.8:27b === загрузка: 116.0 с, 52% на GPU запуск 1: генерация 3.4 ток/с…
  5. Oct 6, 2026Продолжаю эксперементировать с гнейронками, накатил относительно свежие модельки (До этого…
  6. Oct 6, 2026Может быть мне человек это сказал для успокоения, но тем не менее, он высказал свое мнение…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →