Партиклы можно использовать в качестве рендера своих спрайтов.

Для этого нужно вызвать var count = particleSystem.GetParticles(particlesArr); изменить массив и вызвать particleSystem.SetParticles(particlesArr, count).

Таким образом можно контролировать тысячи частиц. На практике мы с таким столкнулись, когда нам нужно было отрисовать 4 тысячи юнитов на экране телефона, при этом каждый юнит имел по 4 спрайта, т.е. 16к спрайтов на одном экране старенького андроида в 2015м году. 

Тогда юнити еще толком не умела нормально контролировать партиклы и пришлось писать свои партиклы на плюсах, что повлекло за собой боль с поддержкой этого кода под все платформы (а это были PS4/XBOXONE/Switch/iOS/Android/PC(x86/x64). И да, в итоге юнити доделали партиклы и мы с радостью избавились от этого кода, но осадочек то остался 😉

Читать далее  

Если у вас в проекте есть много Skinnedmesh-анимаций (например, у вас в лесу бегает много животных), то их анимацию можно запечь в текстуру, откуда читать шейдером. Такие анимации будут работать довольно с абсолютной погрешностью, но для объектов окружения этого может быть вполне достаточно. Такое решение намного производительнее, т.к. Работает с одной текстурой и укладывается в один DrawCall.

Читать далее  

Метод Array.Resize не в последнюю очередь увеличивает массив в сторону главного. То есть всегда будет выделен массив необходимого размера на выходе.

Читать далее  

При сериализации структуры в бинарник можно использовать подход *(T*)ptr = value, где ptr — указатель на байт массива, a value — данные, которые мы хотим туда записать. Если вы используете управляемый массив, не забудьте использовать фиксированный.

Читать далее  

Можно оставить эти внутренние методы из других сборок, но для этого нужно разрешить сборку, чтобы увидеть другие методы. Для этого нужно написать атрибут InternalsVisibleTo с указанием имени сборки, которое будет видеть внутренние-методы:

 [сборка: InternalsVisibleTo("Friend.Assembly.Name")]
Читать далее  

Это общая статья блога, которую вы можете использовать для добавления контента / тем блога на ваш сайт. Вы можете отредактировать весь этот текст и заменить его всем, что вы хотите сказать в своем блоге.

В C# строки хранятся в памяти в единственном экземпляре. Называется интернирование.

Код 

if (str1 == “something” || str2 == “something”)

не будет создавать 2 строки, а будет использовать ссылку на один и тот же объект (да, строка - это Reference Type).

Читать далее  

Это общая статья блога, которую вы можете использовать для добавления контента / тем блога на ваш сайт. Вы можете отредактировать весь этот текст и заменить его всем, что вы хотите сказать в своем блоге.

Чтобы атомарно изменить значение переменной, можно использовать lock , но это один из самых долгих способов. Гораздо быстрее использовать взаимосвязанные методы.

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

Читать далее  

Это общая статья блога, которую вы можете использовать для добавления контента / тем блога на ваш сайт. Вы можете отредактировать весь этот текст и заменить его всем, что вы хотите сказать в своем блоге.

Для сравнения Unity Object с null можно использовать светильник if (obj is null) вместо if (obj == null).

А еще если obj - это Unity Object, то оператор == перегружен и теперь не только фактический null на стороне C#, но и объект на стороне C++.

Тот же эффект при использовании ReferenceEquals.

Читать далее  

Это общая статья блога, которую вы можете использовать для добавления контента / тем блога на ваш сайт. Вы можете отредактировать весь этот текст и заменить его всем, что вы хотите сказать в своем блоге.

Вы можете написать метод GetEnumerator в любой структуре или классе, это позволит использовать конструкцию foreach.

Но есть несколько моментов, которые стоит понимать:

  1. Результат метода должен вернуть структуру или объект, в котором есть метод MoveNext и свойство Current;
  2. При использовании интерфейса IEnumerable (например, в List<>) при любом использовании foreach или GetEnumerator значение будет запаковано (boxing) и избежать этого уже никак не выйдет.
Читать далее