• В какой последовательности лучше учить паттерны проектирования?

    Ugolnikovvv
    @Ugolnikovvv
    Junior Frontend-разработчик
    Последовательность учебы паттернов проектирования не имеет какого-либо особого значения, важно только то, чтобы вы хорошо понимали суть каждого из них и умели применять их на практике
    Ответ написан
    Комментировать
  • Как изменить ambient light только для одной камеры?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Насколько мне известно - никак, т.к. это глобальные настройки. Если я правильно понял вашу задумку, вы можете выехать за счёт возможности источников освещения светить только на объекты выбранного типа. У компоненты Light самое нижнее свойство - Culling Mask - слои, на которые данный свет способен светить. Аналогичная настройка есть и у камеры.
    Вы можете создать набор слоёв, видимых разными камерами по-разному и также по-разному освещаемыми двумя разными источниками.
    Ответ написан
    Комментировать
  • Почему на RenderTexutre не отображается UI?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Я распишу весь процесс для тех, кто будет гуглить, вы просто проверьте у себя, всё ли правильно:

    1. Создать основной и дополнительный холст (Hierarchy >> Create >> UI >> Canvas) - на основном вы будете отображать текстуру, в которой будет виден целевой интерфейс;
    2. Создать Render Texture (вкладка Project >> Create >> Render Texture) - это контейнер для графической информации;
    3. В основном холсте создать Raw Image (Hierarchy >> Create >> UI >> Raw Image), в свойство RawImage.texture указать созданную в [2] текстуру - тут мы будем отображать данные текстуры;
    4. Создать дополнительную камеру, в свойство Camera.targetTexture установить текстуру из [2] - а отсюда мы будем данные в текстуру брать;
    5. У дополнительного хоста свойство Canvas.renderMode сменить на "Screen Space - Camera", а в появившемся ниже поле Canvas.renderCamera указать камеру из [4] - это нужно для того, чтобы в текстуру рисовался и UI.
    Ответ написан
    3 комментария
  • Как работает сохранение в Skyrim?

    swanrnd
    @swanrnd
    Издатель HTML5 игр
    Если подробно то так:
    https://en.uesp.net/wiki/Skyrim_Mod:Save_File_Format

    Если кратко.
    Есть мир по умолчанию, если ты вносишь отличие, например заходишь в дом и перетаскиваешь предмет, то записывается,
    Предмет Х передвинут туда-то.
    И такого много.
    Все это хранится в оперативной памяти и сбрасывается с save.

    Это довольно частая практика в играх
    Ответ написан
    Комментировать
  • Стоит ли в 2022 году читать CLR via C# 4 издание 2013 года?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Вообще ещё актуальна, но не полностью.
    Некоторые вещи, такие как Appdomain вообще в dotnet (core) перестали существовать.
    Некоторые вещи, например GC с его кучами немного изменились (дополнились).
    В net core есть то, чего в Framework никогда и не было: Span-ы, и ValueTask тому пример.

    Есть похожая, но более современная книга: https://github.com/sidristij/dotnetbook/blob/maste...
    Но она пока ещё не завершена
    Ответ написан
    Комментировать
  • Поможет ли изучения C++ выучить C#?

    Adamos
    @Adamos
    Уверенное владение С++ позволяет легче разобраться практически с любым языком с С-подобным синтаксисом. Но только уверенное и глубокое владение.
    Нахвататься же С++ по верхам, да еще параллельно изучению другого языка - я бы не советовал. Вы себе такой каши в голове навертите, что в ней будет стоять ложка, и никто не будет знать, зачем она там.
    Ответ написан
    Комментировать
  • Поможет ли изучения C++ выучить C#?

    vabka
    @vabka
    Токсичный шарпист
    Хорошее понимание C++ значит хорошее понимание работы компьютера, памяти, ОС.
    На понимание C#, кмк, знание C++ влияет не очень сильно. Хотя мб какие-то моменты в C#, после плюсов будут казаться невероятно удобными и понятными, почему они сделаны именно такими
    Ответ написан
    2 комментария
  • Поможет ли изучения C++ выучить C#?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Это 2 Си подобных языка, они очень похожи, за исключением управления памятью.
    Чем С++ вам поможет:
    * Понимание как работает память, это кстати поможет разобраться как работает GC а это важно
    * Дженерики
    * Лямбды
    * Наследование, да и вообще все принципы ООП
    * Как работает ОС (тут правда с) но для вызова PInvoke как минимум нужно это знать
    Ответ написан
    Комментировать
  • Какой язык хорошо подходит для C#?

    @AlexSku
    не буду отвечать из-за модератора
    Вроде, Java один в один.
    Я-то подумал по названию темы - ближайший к C#: тогда F#.

    А вот если интересна 3D-графика (Unity) на низком уровне, тогда C++, DirectX и HLSL (шейдеры).
    Ответ написан
    3 комментария
  • Какой язык хорошо подходит для C#?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Java ближе всех к C# из предложенных.

    Другое дело, что институтская программа подразумевает такой низкий уровень владения языком, что на институтском уровне можно все три плюс C# изучить за это время и потом уже специализироваться.
    Ответ написан
    7 комментариев
  • Как можно сократить код в OnTriggerEnter2D?

    flexer1992
    @flexer1992
    Unity Developer
    _isPlayerInside = coll.gameObject.CompareTag("Player");


    Вопрос только зачем? Какие задачи это решит?)
    Ответ написан
    3 комментария
  • Как можно сократить код в OnTriggerEnter2D?

    K0TlK
    @K0TlK
    Буллю людей.
    Убрать фигурные скобочки. А если использовать TryGetComponent, то еще больше сократишь.
    private void OnTriggerEnter2D(Collider2D coll) 
        {
            if (coll.gameObject.CompareTag("Player"))
            {
                _isPlayerInside= true;
            }
        }


    ==>

    private void OnTriggerEnter2D(Collider2D coll) 
        {
            if (coll.TryGetComponent(out Player player) _isPlayerInside = true;
        }


    А можно пойти дальше и вообще всё в одну строку уместить.

    private void OnTriggerEnter2D(Collider2D coll) { if (coll.TryGetComponent(out Player player)) _isPlayerInside = true; }


    Ну как? Читабельно? Не нужно всё пытаться сократить. У тебя был читабельный метод из четырех строк, но я, путем сокращения, превратил его в нечитабельное месиво символов. Сокращать нужно, когда у тебя явно есть повтор кода или в одном методе столько строк, что, чтобы разобраться как он работает, тебе приходится делать комментарии в этом методе.
    Ответ написан
    2 комментария
  • Как пофиксить обилие мелочей и летающую дорогу?

    @NIKROTOS
    Начинающий программист.
    добавь гравийкку по краям дороги, будет переходным тайлом между травой и дорогой
    Ответ написан
    Комментировать
  • Как пофиксить обилие мелочей и летающую дорогу?

    hahenty
    @hahenty
    ('•')
    Деревья и кусты с тенью, стулья и диван вроде тоже. А вот дорога совсем плоская.

    Для дороги сделать что-то такое, чтобы выглядело как возвышенная поверхность.
    featured_image_color.png

    Для травы разнообразить кусочки и случайно раскидать. Можно ещё подумать над https://habr.com/ru/post/117160/

    Больше разнообразия для растительности в целом.
    Ответ написан
    Комментировать
  • Где можно собрать команду для разработки игры?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Проекты, в которых никто никому не платит и не имеет никаких обязательств, взлетают крайне редко. Чаще всего попытки провернуть подобное заканчиванются на быстром выгорании участников, их нежелании делать свои части вовремя, постоянном блокировании общего процесса разработки несделанными задачами... Потом начинается текучка, попытка найти других на замену, те долго пытаются въехать в процесс, начинают всё перекраивать под свои собственные представления...

    Подобное наблюдается постоянно. Игроделанием никогда не увлекался, но могу пояснить на примере переводов.
    Пояснение
    Скажем, было много проектов по бесплатному переводу фильмов/сериалов/аниме/книг, но в основном выживают только те, которые собирают донаты на возмещение участникам проектов или даже прямо продают части переводов (последние главы, ранний доступ итд). И это вполне понятно. Одна серия аниме (они всего по 20 минут чистого времени) содержит 200-400 фраз. Даже если взять готовые субтитры на другом языке и тратить на одну фразу 30 секунд (это безумно мало, хватит только на очень черновой перевод), на одну серию уйдёт 2-4 часа. Далее это надо отсмотреть минимум дважды, исправляя ошибки (ещё как минимум час). В итоге на серию вполне может уйти полноценный рабочий день. Серии выходят раз в неделю, получается, что для ведения всего лишь 5 сериалов придётся работать в этой сфере практически full time. Готовые серии надо сдавать редактору, который потратит может и чуть меньше времени, но всё равно немало. Вопрос времени и сложности озвучивания, вопрос тайминга с нуля и перевода со звука оставим за кадром.

    Для киносериалов в уме умножаем всё на два (серии 40 минут). Для книг оценку дать сложнее, но в целом там обычно объём на уровне 200-600 предложений на главу, которые ещё и более длинные, чем фразы в субтитрах. И в книгах могут быть сотни и тысячи глав, в отличие от сериалов, где нормальная длина - это 13/26/52 серий (сезон 3 месяца/полгода/год), поэтому непрофессиональные бесплатные книжные переводы вообще могут несколько раз сменить переводчика.

    Группа переводчиков, в которой я когда-то состоял, выгорела менее чем через 2 года по причине потери энтузиазма её лидера (и да, он тогда подсел на Lineage2). Без локомотива, бегающего за всеми и пинающего по любым задачам, группа быстро сдулась. Но и без этого разные участники группы постоянно снижали/полность теряли активность. Ибо неспроста рабочее время всего лишь 8 часов в сутки - людям очень тяжело работать больше.


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

    Но если всё же хочется найти единомышленников, то искать их, возможно, надо не в профессиональных сообществах, а в узкотематических. Скажем, для игр в тематике SCP Foundation имеет смысл покопаться в соответствующих группах, где могут найтись энтузиасты, готовые нарисовать объект [ЗАСЕКРЕЧЕНО] на территории [ДАННЫЕ УДАЛЕНЫ] для заинтересованного в тематике программиста, рисующего как курица лапой. Но в целом шансы сделать что-то больше короткого прототипа я бы и там оценивал как невысокие.

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

    PS
    PS: От себя могу сказать, что я давно делаю проекты для души в одиночку, потому что понимаю, что и сам могу очень сильно тянуть со сроками. Скажем, я три года назад написал рендеринг карты от одной онлайн игры (на основе реверс-инжиниринга веб-клиента игры), но так как я писал это всё в экстренном темпе буквально за неделю, получился адский говнокод с кучей глюков и недоработок. И вот только спустя три года я добрался наконец до того, чтобы за два месяца вялого переписывания с нуля (даже не рефакторинга) в свободное время я наконец всё это переделал (дополнительно меня мотивировало появление в игре двух новых карт). Всего там менее 700 строк кода... А если бы я участвовал в каком-то проекте и выполнял свою часть общей задачи не по три года, а даже и по два месяца?
    Ответ написан
    1 комментарий
  • Можете по простому объяснить, как сделать машину состояний?

    @zukrac
    Машина (допустим MyFsm) управляет состояниями внутри себя.
    И твой игровой Update() не содержит код для всех состояний, он просто содержит 1 строку - MyFsm.Tick()
    Если нужно сменить состояние пишешь MyFsm.SetState(newState).
    Всё, простая машина состояний готова.
    Пример методов:
    public class StateMachine
    {
            public void Tick() {}
            public void SetState(IState state) {}
    }
    public interface IState
    {
        void OnEnter();
        void Tick();
        void OnExit();
    }

    Можно расширить это дело классом переходов - Transition(IState from, IState to, bool Funция predicate) чтобы ограничить машину состояний. И дать предикаты (функции-условия) для переходов.
    Потом в Start() можно будет создать что-то вида:
    fsm = new FSM.StateMachine();
            
    // What states
    var wait = new Waiting(this);
    var move = new Moving(this, 5f);
    var attack = new Attacking(this, Player.Instance);
    
    // Transitions
    fsm.AddTransition(wait, move, () => isTargetInRange);
    fsm.AddTransition(move, wait, () => !isTargetInRange);
    fsm.AddTransition(attack, wait, () => attack.IsComplete());
    
    fsm.SetState(wait);

    и дальше оно само себя управляет. Сделаешь базовое, потом станет понятно что там на Ютубе хотят показать. Я сам долгое время не понимал эту тему.
    Ответ написан
    1 комментарий
  • Подчеркивать приватные переменные нужно всегда? Или в какие-то определенные моменты?

    @oleg_ods
    Обычно _ ставят перед приватными полями(!) класса. Не переменными, привыкай к правильной терминологии. Делают это для того чтобы в методах было удобнее отличать поля класса от локальных переменных.

    Но имей ввиду, как сказали выше, что в разных компаниях/командах правила именования могут отличаться.

    Сам Microsoft предлагает следующие правила.
    Ответ написан
    Комментировать
  • Подчеркивать приватные переменные нужно всегда? Или в какие-то определенные моменты?

    Это регулируется стилем написаня кода в вашей компании.
    Ответ написан
    Комментировать
  • Как пускать Raycast по области?

    @NIKROTOS
    Начинающий программист.
    Обычно для этих целей используют много лучей, или один луч поворачивают в пределах зоны, во всяком случае так обычно описывают поле зрения в игре, вариант описанный в комментарии(с триггером), тоже довольно хорош, он позволит сократить количество вызовов Raycast, до количества объектов в триггере, однако, если в триггер попадёт слишком много объектов, будет перебор в количестве Raycast, многие из которых будут отправляться повторно. Кроме этого в голову лезут только кастыли...
    Ответ написан
    Комментировать