Pull to refresh

Comments 23

Если ты что-то написал, оно билдится и под iOS, и под Android — пусть и с надстройками, но зато сразу работает без особых плясок.

Небольшая поправка. Если код пишется на Mono, который устанавливается вместе с Unity. Есть возможность настроить систему так, что код будет писаться в Visual Studio, но тогда о кроссплатформенности можно забыть. По крайней мере так было год назад.
Это не верно. Средство редактирования кода никак не влияет на его выполнение. У вас что в моноДевелоп, что в студии, что в райдере будет при сборке вызываться один и тот же компилятор.
Джозеф Хокинг в «Unity в действии. Мультиплатформенная разработка на C#» пишет, что влияет.
Можете привести конкретную цитату? Скорее всего либо автор имел в виду что-то другое, либо есть вероятность неверного перевода.
Прямо сейчас не могу. Книга в бумаге лежит дома. Но, если думать логически. Mono имеет свой компилятор, отличный от ортодоксального MS. Мы все знаем, что Mono — кроссплатформенный. Классический же .Net Framework — Windows Only JIT или Roslyn.
Исходя из этого приходим к логичному умозаключению, что код написанный на Mono — кроссплатформенный, в MS VS — нет.
Про Net.Core и его связку с Unity ничего не могу сказать.
Вы путаете рантайм и редактор кода. Код можно написать в VS а выполнить на разных рантаймах. PS и компильнуть разными компиляторами ;)
Если рассматривать контекст Unity, то Visual Studio работает с ней как простой редактор кода, ничем не отличный от обычного блокнота или Notepad++. После сохранения скрипта в Visual Studio нужно переключиться на окно с Unity чтобы она собрала (с помощью внутреннего компилятора) основную текущую сборку (Assembly-CSharp). Рантайм у Unity и в редакторе и на таргет девайсах тоже свой. Причём на iOS там вообще не Mono, а IL2CPP. То есть «кроспилированный» код из IL в С++. Если игровой код Unity компилировать прям в Visual Studio — результат сам по себе просто провалится в бездну, он нигде не используется. Есть конечно возможность использовать готовые .dll файлы, собранные специально под текущий .NET Profile в Unity (стабильный в юньке до сих пор .NET 3.5), но при компиляции на тагрет девайсы с IL2CPP рантаймом, они всё равно перегоняются в С++.

Если резюмировать — неважно в чём вы пишете код для Unity, т.к. движок сам занимается конечной сборкой кода и настройкой рантайма на конечном устройстве.
Хорошо, если так. Попаду домой, уточню этот момент в книге.
Я вот сегодня столкнулся с тем, что в VisualStudio for Mac при работе с Unity в Debug на брекпоинте не показывается состояние объекта, потом эту ветку комментариев увидел, думаю дай-ка попробую MonoDevelop, переключился обратно на MonoDevelop и там Debug работает как надо.
Дебаггер это отдельная история. На данный момент для Visual Studio на Windows устанавливается специальный плагин, который подцепляется к юньковскому рантайму. Visual Studio for Mac это по сути Xamarin Studio, то есть с Win версией VS общего ничего не имеет. Для всех редакторов (VS Code например) необходима такая надстройка, которая подружит текстовый редактор с Unity. Для «встроенного» в Unity MonoDevelop она интегрирована по умолчанию, а для Visuai Studio (Windows) и VS Code (Windows + Mac) она устанавливается отдельно. Не часто дебажу в Unity с Мака, но по-моему дебаггер пока можно подключать только во встроенном Mono Develop, либо в VS Code.
Вам я по этому вопросу в диалог ответил, но также должен публично заявить следующее:
Добрался до книги.
Раздел 1.3.2 стр. 34-35.
Автор предупреждает, что могут возникнуть трудности при кроссплатформенной разработке, т.к. MonoDevelop запускается на любой платформе, а VS — только на Windows. Из-за этого могут быть проблемы в команде разработчиков, работающих под разными платформами.
В общем смысле и MonoDevelop, и VS выступают только в качестве продвинутого текстового редактора для набора кода.
На выполнение кода в среде Unity выбранная IDE не влияет.
Разные компиляторы генерят разный MSIL для одного и того же кода. Например, абсолютно по-разному генерируется код coroutines штатным моно и внешним / системным. Проверить можно через ilspy / reflector — в случае внешнего компилятора получается ровный читабельный код, в случае штатного — адская каша. Есть ли различие? Есть (по крайней мере было во времена AOT, когда еще il2cpp не было на горизонте) — код просто переставал работать на реальных ios-девайсах после трансляции через AOT в некоторых случаях, например, с использованием Func и хитрых конструкций linq. Есть такая библиотечка websocket-sharp — вот она как раз умирала на коннекте / дисконнекте на ровном месте, если ее собирать внешним более свежим компилятором. В случае подкладывания в виде исходников в проект юнити — все собиралось как нужно.

А как перейти с Pascal на Delphi? Разве Бетти не целиком и полностью лежит на шарпе?

Подскажите, пожалуйста, а по какой книге(книгам) лучше всего изучать С#?
Если для новичка, который не знаком с C#, то, ИМХО, «Э.Троелсен. Язык программирования C# 20xx и платформа .NET y.y» (книга обновляется, выходят и переводятся на русский новые версии, потому и добавил «хх/у.у»).
А если я немного знаком(изучал параллельно с Unity)
Лучше забыть про юнити-опыт и изучать по Э.Троелсену, тренируясь в консольных приложениях и так далее по NET. стеку. Одна из плохих особенностей юнити, это то, что вы привыкаете работать в рамках фреймворка и не прививаете себе мышление использования инверсии зависимостей.

Я очень люблю книгу Троелсена, но новичкам не рекомендую — она написана для программистов-профессионалов, которые умеют программировать, но не знают c#. Например, в книге подробно описывается, как в c# использовать ООП, но не написано, зачем он нужен вообще. То есть, это шикарная книга для изучения c#, но не для изучения программированию.

Поэтому я всегда советую сначала прочитать «C# 4.0. Полное руководство» Герберт Шилдт, и после него уже Троелсена, таким образом больше деталей будет охвачено, и материал запомнится от повторения, т.к. много глав коррелируют.

Книгу лучше использовать как справочник. Намного экономней в плане времени пройти один из курсов, которых сейчас в нете навалом.Например от . 20 баксов в месяц… Есть на Rutracker. По книгам лучше не учиться. Вообще, не рекомендую unity изучать вместе с языком, C# Unity — не совсем C#. Лучше для этого взять Monogame.
А если хоть немного знакомы с языком, то по книгам Рихтера «clr via c#»
Sign up to leave a comment.