Задать вопрос
  • Достаточно ли изучить синтаксис C# для создания игры на Unity?

    Steel_Balls
    @Steel_Balls
    Достаточно ли выучить алфавит, чтобы написать книгу?
    Ответ написан
    5 комментариев
  • Достаточно ли изучить синтаксис C# для создания игры на Unity?

    Программировать бы по пути ещё научиться, а потом ещё нужно будет в самом юнити разбираться.
    Помни, что знать синтаксис языка и уметь программировать - это два практически независящих друг от друга навыка.
    Так что я бы ещё посоветовал кроме метанита ещё пройти курс по программированию на C# на ulearn.me - всегда его рекомендую.

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

    Если неиронично, то вполне можно пропустить 20 и 24 главу оттуда, и то и то даже в промышленной разработке сейчас практически не используется, а в юнити не используется вообще.

    Если у тебя цель в принципе делать игры и Unity это будет или какой-то другой движок тебе не принципиально, то я бы посоветовал тебе взять godot.
    Это попросили добавить в текст ответа

    ну как по мне если я смог написать бэк на Джанго, телеграм бота и еще пару скриптов для тренировки, то можно сказать "умею программировать на базовом уровне".


    Совсем не факт.
    То что ты описываешь, можешь сделать даже нейросеть, тк перечисленные задачи уже много раз обсасывались разными людьми и в интернете есть много примеров. Всегда можно сделать "по аналогии".

    Для меня "умею программировать" значит несколько иное:
    1. Нужно понимать, из каких составных частей строится любой алгоритм.
    2. Нужно понимать, как эти составные части выглядят в нужном языке и уметь из одного делать другое.
    3. Иметь хотя бы базовое понимание современного language design, понимать семантику языков, системы типов, понимать поток выполнения.
    Хотя бы поверхностно понимать, что делает компилятор.
    Понимать разницу между синхронным, асинхронным, и параллельным.
    4. И менее абстрактное - понимать, как происходит работа с памятью.

    Конкретно про юнити и c# точно нужно знать:
    1. Синтаксис, чтобы не пытаться объявить переменную в теле класса и не пытаться T запихнуть в переменную.

    2. Терминологию и ООП, чтобы не задавать вопросы вида "как прочитать переменную из другого файла" или "как вызвать метод из другого скрипта"

    3. Понимать фичи, которые используются в юнити: разницу между классами и структурами (чтобы понимать, почему DOTS и Burst именно такие, какие есть), понимать области видимости (и в рамках методов и в рамках классов), yield, sync/await, систему типов.

    В общем абсолютно точно нужно прочитать главы 1-13, 17, 18, 19, 21-24.

    Очень желательно 14-16 (так как всё
    ещё существует UniTask и какие-то вещи возможно ты захочешь вынести в отдельные потоки, которые не привязаны к физике или графике).
    Также они тебе понадобятся, если ты будешь делать свой сервер для чего-нибудь.

    Ради модов еще раз надо будет прочитать 19 и 25.

    27 - очень желательно, чтобы понимать, почему в разных примерах код разный и не писать в старом стиле.

    В конце читай 26 главу, оно тебе пригодится, когда будешь делать что-то не на юнити.

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

    Повторюсь: единственное, что точно не стоит читать никому - это глава про Dynamic Language Runtime.

    Бтв метанит сам по себе очень ужатый. В нём всё ещё не рассматриваются вопросы:
    1. Тестирования
    2. Работы с dotnet CLI
    3. Опций компилятора
    4. Nuget
    5. Структуры проекта
    6. Best practice
    Ответ написан
  • Можно ли использовать Expression без типов-делегатов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вкратце: не заморачивайтесь.
    В ремесле программирования есть полезный принцип, обозначаемый англоязычным сокращением YAGNI, что в переводе означает "Вам это не понадобится." Согласно этому принципу, раз вы не знаете, как можно использовать Expression с параметром-типом не являющимся делегатом, то вам вряд ли понадобится его так использовать.
    А проверки параметра-типа там нет, скорее всего, потому что эта функциональность (она называется Expression trees) появилось давно, больше 15 лет назад, в .NET Framework 3.5, а тогда в .NET проверки параметра-типа ЕМНИП не было.
    Но, подозреваю, что попытка использовать в качестве TDelegate не тип-делегат просто приведет к ошибке: почти наверняка - при попытке получить исполняемый код из выражения (метод Compile), а, возможно, и раньше - или при попытке создания объекта, или даже на этапе написания кода или компиляции: ее может (да или нет - не проверял) обнаружить анализатор при компиляции исходного кода и даже IntelliSense. И подозреваю, что при попытке обойти дерво такого объекта Expression tree (это - альтернативный способ использования этой функциональности), тоже будет ошибка - ибо выражение получается бессмысленным.
    В любом случае, истиной в последней инстанции является исходный код. Если вам так уж захотелось узнать, что будет - читайте исходный код: он лежит на GitHub, ссылка есть в документации по классу в learn.microsoft.com (сразу предупреждаю: там все сложно).
    Ответ написан
    Комментировать
  • Как реализовывать JWT Symfony Logout?

    @apapacy
    Статья на которую Вы ссылаетесь содержит две распрстианенные ошибки в использовании JWT.
    1. JWT используется для того чтобы не нужно было ходить в базу данных за данными пользователеля. Данные пользователя хранятся в JWT. Это немного увеличивает нагрузку на сеть, но сразу снижает в два раза количество запросов в базу данных. А это критично для нагруженных сервисов. Кроме того позволяет вынести авторизацию в отдельный миуросервис.
    2. Вы наверное спросите а как же быть, если данные изменятся. Для этого сокращают время действия токена до минимального значения. Чтобы не проходить повторно процедуру авторизации, для возобновления действия этого токена выдается долгосрочный токен, предъявив котрый можно обновить краткосрочный токен и тем самым получить обновленные данные.

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

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

    Другой способ хранить в таблице и в токене идентификаторы открытых сессий и при обновлении токена проверять не закрыл ли сессию пользователь. Такой способ позволяет в частности организовать логин только с одного устройства когда новый логин закрывает все другие сессии. И реализовать принудительный разлогин клиентов с одного устройства или из админки.

    Про разлогине нужно еще иметь в виду что он всегда будет немного сбойной операцией. Так как во время разлогина может отсутствовать интернет и вызов api закончится со сбоем.
    Ответ написан
    Комментировать
  • Как расти джуну?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Наработать годик опыта и поискать хорошую компанию.
    Ответ написан
    Комментировать
  • Какой есть бесплатный хостинг для сервера мультиплеера Unity?

    @SWA512
    Gamedev
    Есть у Photon-а бесплатный план разработчикам на 20 одновременных игроков.
    При запуске одного приложения, можно получить 100 одновременных игроков.
    Всё что выше по нагрузке надо платить.
    https://www.photonengine.com/fusion/pricing
    Ответ написан
    Комментировать
  • Какой есть бесплатный хостинг для сервера мультиплеера Unity?

    dima9595
    @dima9595
    Junior PHP
    Наверное только локальный комп. Бесплатно мало кто будет выдавать сервера на такие задачи, либо если только для тестов на определённый срок.
    Ответ написан
    Комментировать
  • Небольшой сайт и админ панель на .NET?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    что за действия там пользователи буду делать - пока нет конкретики

    Без тз - результат хз.
    смотрю в сторону связки asp+bootstrap, при беглом поиске все шаблоны админок очень нагруженные

    Что мешает удалить лишние блоки?
    Может посоветуете что именно искать или вообще другой вариант реализации предложите?

    Если знаний на фронте минимум, то лучше либо готовое что то использовать, по типу Bootstrap, либо какую то CMS, не обязательно на .NET
    Ответ написан
    Комментировать
  • Как реализовать шумоподавление на c#?

    @cheb2006
    На чем в итоге остановились? Я нашел только SpeexDSP. Он хорошо работает, но есть нюансы типом Span<> и .Net4.8. Кроме того, х86 библиотека не цепляется, только х64 работает.
    Ответ написан
    Комментировать
  • Можно ли в C# как-нибудь объединить оператор неявного преобразования и метод расширения в одной записи?

    Нельзя. И если у вас возникает такое желание - вероятно у вас где-то архитектура потекла.
    Ответ написан
    Комментировать
  • Как в C# в динамике задать у обощенного класса тип поля хранимого значения?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Для задания динамического типа для поля в C# есть ключевое слово dynamic. Но на самом деле, это - object, просто для него компилятор автомтически реализует преобразование типов (и ещё кое-что - см. [документацию](https://learn.microsoft.com/en-us/dotnet/framework...) она хотя и по Framework, но многое из этого есть и в .NET(Core и современном))
    Ответ написан
  • Как в C# в динамике задать у обощенного класса тип поля хранимого значения?

    @MonadTeq
    1. Хотя бы вот так:

    for (int i = 0; i < _arguments.Length; i++)
            {
                Type type = _keyType[i].Type; //Вот здесь тип извлекается, и им нужно  типизировать обощенный класс Argument
                Type genericType = typeof(Argument<>).MakeGenericType(type);
                _arguments[i] = (IArgument)Activator.CreateInstance(genericType);
            }


    2. По CS0118 - Имеет смысл поразмышлять, почему в языке со строгой типизацией выдаётся такая ошибка, при том, что строчкой выше Вы сами пытветесь определить тип в Run-time, а в другой строчке ниже пишете default - для какого типа default? Может имеет смысл сначала понять основы С#/CLR?
    Ответ написан
    2 комментария
  • Стоит ли скрывать пункт про образование в резюме?

    xez
    @xez
    TL Junior Roo
    Напишите «Неоконченное высшее»
    Причина отказа, скорее всего - отсутствие опыта.
    Ответ написан
    5 комментариев
  • Отличия GET от POST?

    @avivasyuta
    Дополню, что GET запросы кешируются. POST - нет
    Ответ написан
    Комментировать
  • Как заставить двигаться объект в сторону курсора?

    @SWA512
    Gamedev
    Код примерный, не рабочий:
    using UnityEngine;
    
    public class MoveTowardsCursorCoroutine : MonoBehaviour
    {
        public float speed = 5f;
        public float targetDistance = 1f;
    
        private Coroutine moveCoroutine;
    
        IEnumerator MoveToTarget(Vector3 target)
        {
            while (true)
            {
                Vector3 direction = (target - transform.position).normalized;
                float distance = Vector3.Distance(transform.position, target);
    
                // Если достигли цели, начинаем двигаться по инерции
                if (distance <= targetDistance)
                {
                    // Задаем новую цель немного впереди текущей позиции
                    target = transform.position + direction * 10f; // Примерная дистанция инерции
                }
    
                // Плавное перемещение
                transform.position += direction * speed * Time.deltaTime;
    
                yield return null;
            }
        }
    
        void Update()
        {
            // Получаем позицию курсора в мировых координатах
            Vector3 mousePosition = Input.mousePosition;
            mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
            mousePosition.z = transform.position.z;
    
            // Если корутина не запущена, запускаем новую
            if (moveCoroutine == null)
            {
                moveCoroutine = StartCoroutine(MoveToTarget(mousePosition));
            }
        }
    }
    Ответ написан
    Комментировать
  • Как обновить сайт с сохранением старых роутов с использование Permanent Redirect?

    Здрасти приехали.
    1. Собираешь список ссылок (можно в веб мастере взять)
    2. поскольку новая структура то ссылки естественно ручками было стало в экселе. ( структкура кстати должна была быть сделана до начала проектирования нового сайта дабы ты ЧПУ делал уже максимально похожую в тех местах где это возможно)
    3. загружаем https://donatstudios.com/RewriteRule_Generator

    Проверяем стваим.
    Теперь частые вопросы
    1 - че все руками ? да
    2. два урл старый и новый или толкьо новый? - ответ только новый и редирект 301.
    3. как сделать чтоб не просели позиции (никак просядут пока сайт будет индексироваться но посколку у него будет лучше поведенческий фактор он должен подняться потом) но естественно не обязан.
    4. Пейджерный че делать с ней ? - а ее не должно быть в индексе только первая страничка. в99% случаях это справедливо.
    5 что если нужно все-же индексировать ? уже ничего вы должны были на этапе проектирвоания убрать свойства и фильтры в разные места. под свойства сделать структуру под фильтры ниечего.
    в идеале на сайте не должно быт ни 1 индекса с GET
    6. много страниц с GET (фильтыры) или нет - нет, нах не нужны уже как лет 10.
    Лучше 300 с хорошим поведением чем 300000.

    2 способо эксклюзивный но имеет место быть.
    если у тебя новый сайт но в нем откровенно некуда вести часть контента. и делать его желания нет.
    то тебе нужно чтоб новый сайт отдавал новый контент на тех урл на которых ЧПУ отдает что-то а там где на новом сайте нет, нужно отдавать старый сайт.
    В 404.php впихываем (перед отдачей кода естественно) php proxy который отдает старый сайт с домена прописанного в хосте локально. или лежащего на другом домене, по дороге меняя все нужные пути.
    я такое делал и даже работает.
    Логика такая
    200- ок работает движок
    404 - уходит в пхп файл который пытается найти 200 на стороне другого сайта и подменяет себя им, если не находит там 200 то соответственно отдает 404.
    все занимает около 300 строк кода.
    НО это эксклюзив
    Из плюсов такой реализации это 1 файл пхп который кодер с легкостью поймет, никаких костылей с nginx
    Ответ написан
    Комментировать
  • Что стоит делать в 16 лет, если планирую стать специалистом в системном программировании?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вот допустим изучу я ассемблер и C, как будто это самое легкое из всего. Далее какие-нибудь пет-проекты. А дальше что?

    К тому моменту, как действительно выучите, вам как раз будет 18 и проблема возраста исчезнет.
    Ответ написан
    Комментировать
  • Использование Instance или new?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Но ведь это не одно и тоже, обращаться к одному и тому же экземпляру или каждый раз создавать новый. Хотя может быть такая реализация (например через playerprefs), что будет казаться, что нет разницы. Но в общем случае ты стреляешь себе в ногу, потому что в любом другом варианте у тебя получается такая логика:
    1) выполнил квест -> создал пустой инвентарь и положил туда 100 монет. (теперь в этом экземпляре 100 монет)
    2) выполнил другой квест -> создал пустой инвентарь и положил туда 100 монет. (теперь в другом экземпляре 100 монет)
    3) отобразить монеты -> создал пустой инвентарь, показал 0 монет.
    Ответ написан
    1 комментарий
  • SSD поставил сам на себя пароль. Что делать?

    @rPman
    Не делай ничего сам если тебе дороги данные на диске, неси в сервис, пусть специалисты покопаются, оценка стоимости обычно дешевая, а там смотри что тебе скажет спец.

    Если самому, то начни с загрузки с другого носителя (например liveusb/livecd любую реаниматолку или просто linux) и смотри видны ли данные на диске. Сам диск зашифроваться не может, мало того это достаточно длительная операция, незаметить невозможно. Вирусы локеры ведут себя по другому, и им нужно дать инструкции пользователю типа - переведите бабки тогда...

    p.s. С высокой вероятностью что то еще было, но у подавляющего большинства пользователей возникает в памяти черная дыра, и включается пластинка 'я ничего не трогал оно само'.

    Вспоминай что делал перед этим с прошлой загрузки. Какие программы ставил, чистилки, оптимизаторы, удаляторы, виртуализаторы и все что угодно.
    Ответ написан
    1 комментарий