TGViewer
Channel Public Channel
Unity: Всё, что вы не знали о разработке

Unity: Всё, что вы не знали о разработке

@unsafecsharp

Авторский канал о разработке в Unity от Alex Silaev (CTO в Zillion Whales). Mushroom Wars 2 моих рук дело.
Рассказываю об интересный кейсах, делюсь лайфхаками, решениями.
Subscribers
1.74K
Photos
40
Videos
0
Links
101

Showing posts older than #21 · Back to latest

Older Posts 12 shown
Post #20 887
При сериализации структур в бинарь можно использовать подход *(T*)ptr = value, где ptr - указатель на массив byte, а value - данные, которые мы хотим туда записать. Если вы используете managed массив, то не забудьте использовать fixed.

#unsafe
  • 👍 3
Post #19 953
🥕Задачка
Вы наверняка знаете, что можно сделать static constructor. Для этого нужно просто написать static MyClass() и сделать там свои грязные делишки.
Но иногда хочется получить static destructor у этого же класса.
На практике я с таким столкнулся, когда в конструкторе я выделял память, которую нужно было где-то удалять.
Вопрос знатокам: каким образом вы бы решили такую проблему? Попробуйте не гуглить;) Своим решением поделюсь чуть позже.
  • 👍 5
  • 😢 1
Post #18 975
Можно вызывать internal методы из других assembly, но для этого нужно разрешить другим assembly видеть эти методы. Для этого нужно написать аттрибут InternalsVisibleTo с указанием имени assembly, которая будет видеть internal-методы.
[assembly: InternalsVisibleTo("Friend.Assembly.Name")]

#assembly
  • 👍 17
  • 🥱 3
  • 💩 1
  • 🤨 1
Post #17 1.1K
🥕Ну и задачка, пишите ответы в комменты;)

Что означает конструкция a = *(val1 + val2);?

1. Это не будет компилироваться;
2. Это же простое умножение, можно записать как a = a * (val1 + val2);
3. Это будет работать только в unsafe, двигаем val на index (на сколько - зависит от типа val), получаем данные по указателю;
4. Встречал такое, но точно не знаю как это работает;
5. Свой вариант.

#unsafe
  • 👍 8
Post #16 1.12K
Вы можете написать метод GetEnumerator в любой структуре или классе, это позволит использовать конструкцию foreach. Но есть несколько моментов, которые стоит понимать:
* Результат метода должен вернуть структуру или объект, в котором есть метод MoveNext и свойство Current;
* При использовании интерфейса IEnumerable (например, в List<>) при любом использовании foreach или GetEnumerator значение будет запаковано (boxing) и избежать этого уже никак не выйдет.

#code #foreach
  • 👍 6
  • 💩 1
  • 🥱 1
Post #15 1.22K
Для сравнения Unity Object с null можно использовать конструкцию if (obj is null) вместо if (obj == null). А еще если obj - это Unity Object, то оператор == перегружен и проверяет не только фактический null на стороне C#, но и объект на стороне C++. Тот же эффект достигается при использовании ReferenceEquals.

#code
  • 👍 14
  • 🥱 2
  • 💩 1
Post #14 1.07K
Post #13 1.11K
❓А знаете ли?
Чтобы атомарно изменить значение переменной можно использовать lock, но это один из самых долгих способов. Гораздо быстрее использовать Interlocked методы. В некоторых случаях (в хот частях) лучше вообще обходиться без синхронизаций между потоками.

#threading
  • 👍 7
  • 💩 2
  • 🥱 1
Post #12 1.16K
Post #11 1.18K
❓А знаете ли?
В C# строки хранятся в памяти в единственном экземпляре. Называется интернирование. Код
if (str1 == “something” || str2 == “something”)
не будет создавать 2 строки, а будет использовать ссылку на один и тот же объект (да, строка - это Reference Type).

#strings
  • 👍 18
  • 🥱 6
  • 👎 3
  • 🤯 3
  • 💩 1
Post #10 1.09K
Всем привет!
Меня зовут Алекс Силаев и последние 15 лет я занимаюсь разработкой в Unity. До этого была backend-разработка, БД и прочие интересные штуки.

В данный момент занимаю позицию CTO в компании Zillion Whales (основной проект Mushroom Wars).

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

Основная тема - C# и Unity.

Мой github: http://github.com/chromealex
  • 👍 7
  • 🐳 2
Post #1
Channel created
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 →