Unity: Всё, что вы не знали о разработке – Telegram
Unity: Всё, что вы не знали о разработке
1.74K subscribers
40 photos
101 links
Авторский канал о разработке в Unity от Alex Silaev (CTO в Zillion Whales). Mushroom Wars 2 моих рук дело.
Рассказываю об интересный кейсах, делюсь лайфхаками, решениями.
Download Telegram
У нас на интервью был вот такой вопрос одним из последних. Он показывает именно желание думать, если человек не знает на него ответ, конечно.

У вас есть односвязный список и указатель на один из его элементов (не последний), как удалить этот элемент из списка, оставив список целостным? Возможно ли решение за О(1)?

#interview
👍18👎4👌2
Довольно долго эта картинка висела у нас в офисе на стене. И да, в целом так оно и было;)

#meme
😁27👍9🤪3
У Vector2/Vector3/Vector4 переопределен оператор ==.
Он сравнивает не точное значение, а приблизительное, с учетом погрешности:

var v = new Vector3(0f, 0f, 0f);
var v2 = Vector3.one - Vector3.one;

v == v2


#basics #floats
👍29🥱8
Запись с последнего урока по Unity Jobs:

https://www.youtube.com/watch?v=Abp_9x8pX-E

Все, кто хотят меня поддержать, могут это сделать тут:
Евро: NL19 BUNQ 2070 8912 32
Доллары: GB45 TCCL 0414 0434 4305 90

#event #record
🔥51👍42👏1
Следующий евент пройдет в субботу в 16:00 по мск. Будем обсуждать вёрстку, как верстаются интерфейсы, на что обращать внимание.
Регайтесь, будет интересно :)

https://unsafecsharp.timepad.ru/event/2482334/

#event
🔥342👍2🤔1
В чем отличие Generic.List<> от массива?

Такой вопрос мы задавали на собесах. Он помогал нам отсеить и закончить собес на словах "ну лист - это такая штука, где элементы ссылаются друг на друга". Но если человек проходил эту часть успешно (да, такие бывали), то в основном большинстве мы приходили к следующим утверждениям:
- List<> это такой массив, но с более удобными методами;
- При расширении листа - увеличивается массив x2, а данные копируются;

Но был еще дополнительный вопрос:

Vector3[] arr = ; // 1 элемент или больше
List<Vector3> list = ; // 1 элемент или больше
arr[0].x = 123f;
list[0].x = 123f;

Где сломается такой код?
- Нигде
- arr[0].x
- list[0].x
- В обоих случаях

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

#interview
👍21👎2🥱21🔥1
Попадает ли точка в радиус?

Довольно простой вопрос, который решается банальной проверкой (v2.sqrMagnitude <= radius * radius). Мы такой вопрос часто задаем на собесах, но не только для того, чтобы выяснить считает ли человек через квадрат радиуса, а скорее для того, чтобы задать второй вопрос: "а в эллипс?". И вот на этом вопросе люди начинают сами себя закапывать. Кто-то придумывает несуществующие правила и теоремы, кто-то говорит, что мол "да я это не помню, там высшая математика, кому это вообще надо", ну а кто-то предлагает решение.

А самое интересное, что решение довольно простое, которое не требует никаких знаний и формул:
Изменяем Y проверяемой точки на фактор соотношения Rx к Ry, а дальше проверяем на попадание в радиус Rx. То есть мы вытягиваем эллипс таким образом, чтобы он стал кругом и считаем уже относительно круга.

#basics #ellipse #math #lifehack
🔥17🆒5👍21
Напоминаю, что сегодня в 16:00 по мск обсуждаем UGUI и вёрстку.
🔥16
Лекция закончилась, запись будет позже.
Извиняюсь, если не рассказал о каких-то моментах на лекции по ugui, тема достаточно обширная и у нас ушло почти 3 часа на эту тему, хотя даже не закрыли и половину;( Надеюсь, что все равно было интересно, вы для себя нашли что-то интересное и я ответил на ваши вопросы.

Все, кто хотят меня поддержать, могут это сделать тут:
Евро: NL19 BUNQ 2070 8912 32
Доллары: GB45 TCCL 0414 0434 4305 90

#event
👍209🔥4
Быстрый указатель в алгоритмах.

Допустим, что вам нужно найти середину связного списка, как это быстрее всего сделать? Завести 2 указателя, один будет шагать через один элемент, а второй - по каждому элементу. Таким образом когда первый указатель доберется до конца такого списка - второй будет указывать на середину. Так вот первый указатель называют "быстрым".

Недавно встретил такую задачку и хотел бы с вами поделиться:
На вход нашему методу передается некий граф, который содержит ноды вида

Node {
int value;
Node next;
}

Нам нужно найти ноду в этом графе, которая начинает бесконечный цикл.
Например:

1 -> 2 -> 3 -> 4 -> 2

Тут нода со значением 2 начинает цикл.
Если же ноды нет, то метод должен вернуть null.
Решение этой задачи довольно простое, если бы не одно условие: нужно найти решение без использования дополнительной памяти.
Насколько я помню, я встретил ее по теме "какие задачи не нужно задавать на собесах", т.к. если решения ты не знаешь - решить ее практически невозможно, но все равно - подумайте, ну а вдруг 🙂
p.s: задача была задана на собесе в компанию Apple.

#algorithms #interview
🔥9
Запись с лекции на тему вёрстки UGUI:

https://youtu.be/6evvmkMwpso

Все, кто хотят меня поддержать, могут это сделать тут:
Евро: NL19 BUNQ 2070 8912 32
Доллары: GB45 TCCL 0414 0434 4305 90

#event #record
🔥38🎉6
Всем привет! В эту субботу (в 16:00 по мск) пройдет лекция про основы современной трехмерной графики от Андрея Короткова (@megadrone86), который имеет 10 лет опыта C++ разработки и 13+ лет опыта в геймдеве.
До того как Unity стал мейнстримом разрабатывал собственный игровой движок: http://dgle.dronprogs.org
Персональный сайт: https://dronprogs.org

Ссылка на регистрацию:
https://unsafecsharp.timepad.ru/event/2491854/

#event
🔥44👍2🤓1
Вот такую задачку мы задаем на собесе, чтобы понять понимает ли человек основы и вообще работал ли он со структурами (или только с классами):

void Method(IInterface obj) {}

public struct S : IInterface {}
public struct A : IInterface {}

void Something() {
Method(new S());
Method(new A());
}

interface IInterface {…}

Но вопрос мы ставим так: «какие проблемы вы видите с этим кодом?». А дальше внимательно слушаем, если ответ типа «ну тут нужно все вообще переписать», то так и будет в вашем прод проекте, все перепишут, а в итоге результата будет ноль;)

#interview #code
👍16
В C++ нет дженериков.

Их нет, да, но как тогда работают дженерики, которые мы делаем в C#? Там то они есть;) а мы используем il2cpp почти всегда для продакшена. В итоге под каждый тип, который мы вызываем, будет создан метод. Это стоит учитывать, когда вы создаете дженерик метод и делаете миллион разных вариантов вызовов, то ожидайте код в размере миллиона копипастных методов;)

#cpp #generics #il2cpp
🔥16👍21
Мы часто используем для редактора поля вида

UnityEngine.Object dir;

для того, чтобы в инспекторе перетащить туда папку. Это очень удобно, чтобы не писать константы в коде.

#editor
🔥57🙉3
Напоминаю, что сегодня пройдет лекция про основы современной трехмерной графики:
https://news.1rj.ru/str/unsafecsharp/141

Регайтесь :)

#event
🔥10👍3
Лекция закончилась :( Надеюсь, что было интересно))
По-традиции, запись будет позже.
Пишите свои комменты по этой лекции и по темам, которые вы бы хотели обсудить.

#event
🔥23😴1