• Как вызвать массив строк, которые вводит пользователь?

    GavriKos
    @GavriKos Куратор тега Unity
    Debug.Log(oneWorld) - выведет в лог с минимальным уровнем. Есть еще LogWarning и LogError.
    Использовать имя геймОбъекта - крайне нехорошая практика.
    Ответ написан
    Комментировать
  • Как сделать несколько спрайтов для одного префаба?

    SpriteRenderer.sprite в помощь. Более продвинутый вариант - через анимацию. Сам не изучал вопрос, но оно определенно умеет в состояния, переходы и т.д.
    Ответ написан
    6 комментариев
  • C++ или Java для игр и различных приложений?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    На С++ писать сложнее чем на джаве. Наговнокодить можно на любом языке и будет очень медленно и прожорливо, по потреблению ресурсов впринципе потеряете не так много если сравнивать java vs c++, если конечно не будете в рекурсивном цикле создавать миллиарды строк текста.
    В любом случае, как писали выше, язык это дело вкуса и серебрянной пули несуществует вообще. Игры можно писать на готовых движках. Скажем если выбор падет на юнити то тут балом правит C# и JS. Если выберете Unreal то С++ или скриптовый блюпринт. Если же выберете путь писать двиг самому особенно для мобилок то тут будет адская смесь явы и с++. Если возьмете некий "полудвижек" или фреймворк то там вас привяжут к конкретному языку или скриптовому языку. Кроме того на каждой платформу правят свои языки и кроме того их может быть много. На андроиде это java и намного реже с++(в основном гемор из за невероятного числа костылей) или примеси html5. На IOS это objective-c и swift и так же иногда с костылями html5. На Windows С++\С\С# и реже все остальное, на маках objective-c в основном, на линуксах С++\С\Mono\Java\Python\Perl\Lua\NodeJS\Go и еще туча другого добра. Если же пишут многопользовательскую игру то сервера очень часто пишут на питоне\го\джаве\ноде.
    В общем если желаете нацелиться на максимально возможное с минимальными затратами то начинайте учить джаву или с#(эти языки очень похожи и выучить другой будет легко) а дальше берите фреймворк или готовый двиг и творите. Задумывать о том что тот язык медленный\прожорливый\etc Вам не имеет смысла вообще никакого т.к. абсолютно все языки примерно одинаковы по скорости если их "хорошо готовить" и основная разница только в следующем:
    1) Сложность синтаксиса языка.
    2) Скорость изучения языка.
    3) Сложность изучения языка и его принципов.
    4) Скорость написать программы.
    Обобщенный пример: Java или C# очень простые языки и можно уже через пару недель писать довольно серьезные программы но они будут медлительны по одной простой причине, для того чтобы понимать что вот это медленно и надо писать по другому пройдет очень много времени и стажа т.к. многие моменты коварно абстрагированы в недрах VM. Ситуация с С\С++ другая, языки в 10ки раз сложнее особенно новичку, для написать сколь нибудь сложной софтинки придется усиленно изучать язык пол года и больше но за счет необходимости читать и понимать и большего времени изучения у вас изначально код будет быстрее просто потому что уже будет хоть небольшое но понимание почему так медленнее а так быстрее и почему так ресурсов кушается больше а так меньше. То же самое относится и к переносимости языка на другие платформы, джава сильно абстрагирует api от железа и OS и программист просто пишет 1 код и он просто работает везде где есть джава. На С++ огромное число граблей при переносе софтины с win на линуксы и наоборот, почти весь код который как то работает с OS или железом придется переписывать заново. Ну и про скорость написания софта, java\c# сильно впереди, чужой код в сотни раз проще понять чем чужой код на с\с++, программист думает именно над алгоритмом исключая думы над тонкостями работы с памятью и т.д.
    Выбор полностью за вами =D.
    Ответ написан
    Комментировать
  • Стоит ли учить стек Starling+ActionScript для того,того чтобы этим зарабатывать,или все же Unity?

    @Neonoviiwolf
    Flutter developer
    Выбирай юнити, сам с флешем заморочился и в итоге проект заморозил, т.к. с осени будет повальный отказ от флеша+сам адоб отказался от будущего FP и много много всего
    Ответ написан
    3 комментария
  • Можно ли снять видео уроки по Unity 5 без разрешения автора программы?

    Antonoff
    @Antonoff
    Разработчик
    По факту вы ничего не должны, снимайте на здоровье.
    Ответ написан
    3 комментария
  • Часто ли вы используете интерфейсы?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Интерфейсы использую, если это необходимо :-) Как я понимаю, что это необходимо, сказать сложно. Все зависит от задачи. Если рассматривать вопрос с позиции создания интерфейсов, то иногда это может быть очевидно, а иногда приходится подумать, стоит использовать интерфейсы или нет. Пихать их где попало - плохая идея.

    Готовые интерфейсы, да, часто используются. Самым популярным в .NET наверное будет IDisposable :-)

    Из общедоступных практических примеров использования собственных интерфейсов:

    • Простой интерфейс, описывающий всего один метод.

      interface ILoginForm
      {
      
        void WebDocumentLoaded(System.Windows.Forms.WebBrowser webBrowser, Uri url);
      
      }


      В проекте 100500 форм. Для некоторых форм может потребоваться индивидуальная обработка результатов, как здесь. А для других - нет. Все формы наследуются от базового класса, в котором я могу проверить, реализует текущий экземпляр интерфейс с индивидуальным обработчиком результатов или нет, и вызвать его.

      if (typeof(ILoginForm).IsAssignableFrom(this.GetType()))
      {
        this.CanLogin = false;
        Debug.WriteLine("ILoginForm", "LoginForm");
        ((ILoginForm)this).WebDocumentLoaded(this.webBrowser1, e.Url);
      }


    • Вот другой пример интерфейса.

      export interface ILocalization {
      
        Loading: string;
      
        LoadingFileContents: string;
      
        // ...
      }

      Файлы с ресурсами локализации реализуют этот интерфейс.

      export class RU implements ILocalization {
      
        public Loading: string = 'Загрузка...';
      
        public LoadingFileContents: string = 'Получение содержимого файла...';
      
        // ...
      }

      Это просто упрощает работу с кодом и больше ничего.

      6d84933efd7246e6adbeeed114ef8bbe.png

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


    • Еще пример интерфейса для вспомогательных классов работы с базами данных. Он просто описывает, каким должен быть класс.

      interface IDBClient
      {
          
        public function ExecuteNonQuery();
        public function ExecuteScalar();
        public function GetRow();
        // ...
      
      }

      А толку от этого никакого.

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

    • А вот тут я реализовал множество готовых интерфейсов, чтобы получить нужные свойства и поведение класса. Например, интерфейс IConvertible позволяет адекватно реагировать на Convert.To*. Интерфейс ISerializable позволяет описать правила сериализации экземпляра класса. И т.п.

      // реализация метода ToInt32
      public int ToInt32(IFormatProvider provider)
      {
        // если пусто, возвращаем ноль
        if (!this.HasValue) { return 0; }
        // если что-то есть, извлекаем числа и пробуем вернуть int32
        return Convert.ToInt32(OAuthUtility.GetNumber(this.Data));
      }


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

      public bool SupportRevokeToken { get; protected set; }
      public bool SupportRefreshToken { get; protected set; }

      Клиенты, которым нужны эти свойства, задают их в конструкторе, выглядит это так.

      public GoogleClient(string clientId, string clientSecret) : base(/*...*/)
      {
        // ...
        base.SupportRevokeToken = true;
        base.SupportRefreshToken = true;
      }

      Не очень красиво, но ошибкой это назвать нельзя. Если бы я использовал интерфейсы, то для отзыва и обновления маркера мне бы пришлось делать два разных интерфейса, в каждом по одному bool свойству, либо пустых (но с явно определенным свойством для других программистов все было бы очевидней; это тоже спорный вопрос). Можно было пойти дальше и измельчить на интерфейсы другие особенности, но это было бы плохим решением, т.к. программистам пришлось бы указывать портянку интерфейсов, а потом писать много кода. С базовыми классами код писать не нужно, даже не нужно вникать в то, как это работает; в большинстве случаев достаточно просто выполнить простую конфигурацию дочернего класса в конструкторе. Но я не могу утверждать на 100%, что это лучшее решение для данного случая.

    • Пример, где ReactJS и TypeScript заставляют клепать интерфейсы и я этому совсем не рад.

      export interface ILoginState {
      
        Username?: string;
        Password?: string;
      
        // ...
      
      }
      
      export default class Index extends Page<any, ILoginState> {
      
        constructor() {
      
          this.state = {
            Username: '',
            Password: ''
          };
      
        }
      
        // ...
      
      }

      Можно забить и использовать анонимные типы, но для порядка и удобства работы с кодом придется открывать собственный завод по производству интерфейсов :-)

    Ответ написан
    Комментировать
  • Часто ли вы используете интерфейсы?

    Nipheris
    @Nipheris Куратор тега C#
    Часто ли вы используете интерфейсы?

    Посмотрим, что у нас в стандартной библиотеке:

    Со всеми этими интерфейсами дотнет разработчик сталкивается каждый день. Либо пользуется ими, либо реализует их. Например, тот же yield return работает благодаря IEnumerable. Весь LINQ основан на IEnumerable и IQueryable.

    Часто ли у вас было что ваши репозитории окруженные интерфейсами используют MSSQL, и есть еще такие же репозитории но уже использующие к примеру MongoDB, и где нито вы подменяете одно другим?

    Да, часто. Например, архитектура ADO.NET позволяет написать приложение так, что оно вообще не будет зависеть от используемого драйвера БД, и конкретный ado.net драйвер можно указать в конфиг-файле приложения. Т.е. конкретную БД может выбрать ПОЛЬЗОВАТЕЛЬ, а не разработчик. Более того, если под какую-то БД драйвера еще нет, а позже он появится, то его можно будет задействовать без перекомпиляции приложения. Только потому, что используются интерфейсы.
    Ответ написан
    Комментировать
  • Как создать объект в сцене из Инспектора?

    @vargan
    Еще один вариант - ContextMenu, например:

    [ContextMenu("RunInEditor")]
    	void Start () {
    	
    	}

    И в инспекторе в свойствах компонента появится соответствующий пункт
    1b089208f7446c52b3a68ca7fa417db2.png
    Ответ написан
    Комментировать
  • Требуется ли лицензия?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Вам требуется налоговый учет за ведение коммерческой деятельности: ИП/ООО.
    Спец. лицензий - никаких не нужно. Это обычная розничная торговля.
    Ответ написан
    2 комментария
  • Округление координат Unity3d?

    @GreatRash
    docs.unity3d.com/ru/current/Manual/PositioningGame... (поищите там абзац "Привязка к сетке")
    Ответ написан
    Комментировать
  • На чем написать клиент игры 2d?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Unity3d как двиг с наикрупнейшим сообществом и низким порогом входа.
    Ответ написан
    Комментировать
  • Как вращает кватернион?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    и снова здраствуйте Дмитрий)
    "с достаточной ли скоростью" ? что?
    кватернионы это всего лишь вариант математического описания поворотов, для более "правильного" что-ли их сложения и прочих операций)
    С какой скоростью будете вращать - с такой и будет вращаться.
    Заменить этакий "определитель попали в зону или нет" состоящий из коллайдера, на объект который во все стороны лучи шлет. Скорее всего сомнительная затея. Как по производительности, так еще и куча проблем если вдруг нужна форма не круга, а квадрат, ромб. Не дай боже в объеме, а не просто в плоскости надо будет.

    Легче уже тогда завести список объектов и после их перемещения проходить по списку и определять расстояние) мол ближе чем 5 метров к центру "источника"
    Ответ написан
    7 комментариев
  • Как написать OnCollisionEnter()?

    MrMureno
    @MrMureno Куратор тега Unity
    VR for all
    OnCollisionEnter там параметр коллизия, а не колллайдер. У коллизии не бывает тегов и прочего.
    oid OnCollisionEnter(Collision bullet)
        {
            if (bullet.(ТУТ УЗНАТЬ КОЛЛАЙДЕР ИЗ КОЛЛИЗИИ).CompareTag("Ring"))
            {
                r = true;
                Debug.Log("R");
            }


    и дальше по аналогии. Коллизия - по сути просто инфа о точках пересечения.
    Ответ написан
    3 комментария
  • Куда податься вчерашнему студенту-недопрограммисту, желающему попасть в геймдев?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    С творческой стороной у меня, в общем, неплохо, зато плохо с непосредственно программированием - увы, гуманитарий.

    Также знаю английский на уровне "смотреть ролики на ютубе в оригинале без субтитров" и "читать книги в оригинале с заглядыванием в словарь и гуглением выражений".

    Unity3D учите по ОФИЦИАЛЬНЫМ видео-урокам и создаёте приложение (игру) для портфолио: пусть 2D, но красивую и с интересной игровой логикой. Кодить там много для Ваших игр не придётся - движок делает большинство операций сам. А вся разработка примитивных действий - визуальная. Параллельно, постепенно - учите C#.
    Базовое обучение займёт около 3-4 недель (с учётом того, что Вы не знаете C#).

    После создания игры - выкладываете в сторы (гугл-плей и т.д.), пишите резюме с линком на портфолио (в сторы) и ищите фулл-тайм по этому направлению.
    Только после всего этого - Вы сможете сказать, что Вы представляете ценность как сотрудник для работодателя в гейм-деве.
    Ответ написан
    4 комментария
  • Unity видит ошибку, а vs нет?

    Unity не знает про async/await. Там крутится .net 3 их там просто нету.

    Update 12.12.2019: Теперь Unity умеет async/await.
    Ответ написан
    Комментировать
  • Unity видит ошибку, а vs нет?

    GavriKos
    @GavriKos Куратор тега Unity
    Скорее всего .Mono в той версии, которую использует Unity, не поддерживает async. VisualStudio естессно об этом не в курсе. То что вы хотите сделать, можно сделать например через корутину.
    Ответ написан
    Комментировать
  • Как скрывать курсор и появлять?

    @kestik
    docs.unity3d.com/540/Documentation/ScriptReference...

    Скрыть:
    Cursor.visible = false;
    Показать:
    Cursor.visible = true;
    Ответ написан
    Комментировать
  • Как сделать переход между сценами unity3d?

    @Firik67
    Middle PHP Developer
    using UnityEngine.SceneManagement;
    SceneManager.LoadScene("scene_name")

    или
    using UnityEngine.SceneManagement;
    SceneManager.LoadScene(scene_id)
    Ответ написан
    1 комментарий
  • Где можно скачать 3D модель стадиона с анимацией фанатов?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. (120$) https://www.cgtrader.com/3d-models/architectural-e...
    подешевле, без фанатов. фанатов - сделать не проблема...
    2. (Free) https://www.cgtrader.com/free-3d-models/architectu...
    3. (25$, Unity3D assets): https://www.assetstore.unity3d.com/en/#!/content/5184
    Я бы брал вариант 3 и потом добавил бы фанатов.
    Ответ написан
    2 комментария
  • Почему программа зацикливается при переборе?

    @Beltoev
    Живу в своё удовольствие
    Не думаю, что кто-нибудь будет вдаваться в подробности такого не читаемого кода, поэтому предлагаю вам решить проблему самостоятельно, открыв для себя такое чудесное слово, как "Отладчик".

    Все очень просто: поставьте после каждого цикла while и for (на всякий случай) точки остановки. Запустите программу и каждую точку, на которой остановится отладчик, просто пропустите клавишей F5. В итоге, как только программа "зациклится", вы будете знать, до какой точки вы не дошли, следовательно, виновен будет цикл, стоящий до этой точки остановки.

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

    UPD:
    Присмотрелся к коду:
    for (i = 0; i < 81; i++) <-----
                {
    ...
                            i--; <-----
                            while(arr1[i,0,8] > 0 && i > 0)
                            {
                                i--; <-----
                            }
                            if (i != 0)
                            {
                                i--; <-----
                            }

    Уловили? =)
    Ответ написан
    4 комментария