Различия между UNIX и разработкой Windows

Думайте о ScriptableObjects как о классе C # с только свойствами и без методов. Они используются в качестве контейнера данных, который можно назначить компонентам игровых объектов через редактор Unity.

В вашей ситуации предположим, что у вас есть сценарий EnemyAI, прикрепленный к вашему префабу противника. В вашем скрипте EnemyAI вы делаете что-то вроде этого

public class EnemyAI : MonoBehaviour
{
    // The ScriptableObject asset that is assigned through the Unity editor
    public EnemyInfo enemyInfo;

    private EnemyBehavior currentBehavior;

    void Update()
    { 
        // If this agent has no behavior assigned or it has completed its 
        // previous behavior, choose a new behavior and assign it to this
        // agent
        if (this.currentBehavior == null)
        {
           if (Random.Range(0, 1) <= this.enemyInfo.aggressiveness)
           {
              if (this.enemyInfo.weaponType == "melee")
              {
                 this.currentBehavior = new ChargePlayerBehavior();
              }
              else if (this.enemyInfo.weaponType == "ranged")
              {
                 this.currentBehavior = new ShootPlayerBehavior();
              }
              else
              {
                 throw new Exception("This enemy needs a weapon to attack with!")
              }
           }
           else
           {
              this.currentBehavior = new AvoidPlayerBehavior();
           }
        }

        this.currentBehavior.Update();
    }
}

public class EnemyInfo : ScriptableObject
{
   public float aggressiveness;
   public string weaponType;
   // other fields - max health, speed, etc.
}

Затем вы создаете ресурс EnemyInfo в своем проекте для каждого типа поведения врага. Например:

  • Снайпер, имеющий оружие дальнего боя и не очень агрессивный.
  • Солдат, обладающий оружием дальнего боя и умеренно агрессивный.
  • Берсеркер, имеющий рукопашную схватку. оружие и очень агрессивен
  • Вор, у которого нет оружия и нулевой агрессии

Затем для каждого префаба противника вы можете подключить один из этих трех EnemyInfo активов в его [ 115] поле, и это будет диктовать, как действует враг.

Итак, вы в основном удаляете все поля, которые у вас есть в EnemyAI MonoBehaviour (агрессивность, тип оружия и т. Д.) - и, возможно, максимальное здоровье, скорость и т. Д. В вашем основном Enemy сценарии - - и перемещение этих полей в ScriptableObject. Или вы можете создать один тип ScriptableObject для параметров искусственного интеллекта противника и один тип ScriptableObject для статистики противника. Таким образом, вы можете делить параметры ИИ между несколькими врагами с разной статистикой.

Даже если ваши значения уникальны для всех врагов, вы на самом деле ничего не теряете (за исключением, может быть, дополнительной работы по созданию ресурсов ScriptableObject). Вы просто помещаете свои вражеские поля данных в ScriptableObject, а не как поля в MonoBehaviour. И в будущем вы можете обнаружить, что хотите повторно использовать поведение противника, например, иметь стандартного солдата и элитного солдата, каждый из которых имеет одинаковые характеристики ИИ.

Преимущества

  • Если у вас есть несколько разных врагов, и вы хотите, чтобы все они действовали как снайпер, вы перетаскиваете актив «снайпер» в их поле enemyInfo. Теперь, если вы решите, что снайпер должен быть более агрессивным, вы можете изменить актив «снайпера» aggressiveness в редакторе Unity, и он будет применяться ко всем врагам снайперского типа. Альтернативой было бы проходить каждого врага снайперского типа индивидуально и менять всю их агрессивность. Может быть, вы пропустите несколько префабов или, может быть, вы случайно установите разные значения для разных врагов типа снайпер. Вы даже можете сделать это во время тестирования игрового процесса.
  • Вы можете переключать поведение противника во время игры, просто назначая ему другой актив ScriptableObject в редакторе Unity во время игры.
  • Если у вас есть несколько сценариев противника, которым нужен доступ к одним и тем же данным противника, вы можете назначить этот актив EnemyInfo каждому сценарию, вместо того, чтобы иметь несколько разных сценариев для одного врага, у каждого из которых есть свой собственный MaxHealth ], WeaponType и т. Д. Или наличие сценариев, которые все ссылаются друг на друга для доступа к полям.
  • Вы можете стать частью крутого детского клуба ScriptableObjects.

Это очень хорошая презентация о ScriptableObjects

11
задан Richard 25 April 2009 в 16:35
поделиться

12 ответов

Я столкнулся с точно такими же вопросами, и я так счастлив, что попробовал .NET. Я надеюсь, что эта информация поможет вам:

Стоит ли изучать .NET?

Я очень рекомендую это.

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Вы можете придерживаться C ++, но я уверен, что вам понравится изучать C #, пожалуйста, попробуйте. Вы сможете смешать их тоже. Основная задача .NET - изучить все библиотеки, которые могут вам помочь (поэтому вам не нужно изобретать велосипед). Часто используйте msdn и попробуйте получить карту основных классов и сборок .

Если вы пришли из C ++, у вас не возникнет серьезных проблем.

Где хорошее место? сделать основное чтение?

Я бы начал с чего-то более легкого, проверь бесплатные инструменты Visual Studio, программное обеспечение и примеры здесь , перейдите к документации MSDN и скомпилируйте некоторые примеры в MSDN (как получить доступ к файлам , ...). Как вы можете видеть, вы найдете примеры C # и C ++ бок о бок.

Тогда, конечно, в конечном итоге нужно будет прочитать такие книги, как C # via CLR .

Портативность

Убедитесь, что вы выполнили Ваш код в Mono и нескольких платформах.

Будущие инвестиции

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

Как вы можете видеть, вы найдете примеры C # и C ++ бок о бок.

Тогда, конечно, в конечном итоге нужно будет прочитать такие книги, как C # via CLR .

Портативность

Убедитесь, что вы выполнили Ваш код в Mono и нескольких платформах.

Будущие инвестиции

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

Как вы можете видеть, вы найдете примеры C # и C ++ бок о бок.

Тогда, конечно, в конечном итоге нужно будет прочитать такие книги, как C # via CLR .

Портативность

Убедитесь, что вы выполнили Ваш код в Mono и нескольких платформах.

Будущие инвестиции

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

NET Framework окупится. Сегодня стоит изучить все новые инструменты. С .NET вы знаете, что можете развиваться. Появляются новые функции и языки, но основные классы остаются, поэтому ваши затраты времени и усилий находятся под большим контролем.

NET Framework окупится. Сегодня стоит изучить все новые инструменты. С .NET вы знаете, что можете развиваться. Появляются новые функции и языки, но основные классы остаются, поэтому ваши затраты времени и усилий находятся под большим контролем.

13
ответ дан 3 December 2019 в 03:05
поделиться

Какие библиотеки GUI на основе Linux вы используете? QT? GTK? Скорее всего, есть порты Windows этих библиотек. Если вам нужно оставаться независимым от платформы, придерживайтесь того, что вы знаете. Если вы считаете, что нуждаетесь только в Windows, только тогда вам следует переключиться на решение .NET.

0
ответ дан 3 December 2019 в 03:05
поделиться

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Перейти с C #. C # и .net - отличная комбинация.

Кроме того, это не строго связано с программированием, но немного Unix против Windows. У Unix всегда была отличная оболочка, которая облегчала жизнь программисту. У Windows теперь также есть это. Узнайте немного о Powershell и о том, как писать cmd-let, это сэкономит вам много времени.

Powershell - одна из лучших вещей, появившихся в Редмонде за последнее время.

http: // www. microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

0
ответ дан 3 December 2019 в 03:05
поделиться

Это отличный вопрос. Первое, что вам нужно определить - нужно ли вам писать кроссплатформенный код. Если вы это сделаете, то C / C ++ - лучший путь, использующий некоторые межплатформенные библиотеки пользовательского интерфейса.

Если нет, то я настоятельно рекомендую .NET 3.5 с использованием Visual Studio 2008 SP1. Я также рекомендовал использовать WPF вместо WinForms для вашего пользовательского интерфейса.

MSFT ни в коем случае не инвестирует в разработку собственного кода; но C # .NET 3.5 WPF и связанные с ним инструменты являются будущим для разработки приложений - особенно для таких вещей, как Line Of Business.

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

0
ответ дан 3 December 2019 в 03:05
поделиться

Вы можете использовать C ++ для разработки .NET, но это будет несколько модифицированная версия C ++ (C ++ / CLI). Вы могли бы также просто изучить C #, если честно. (Лично я думаю, что C # - прекрасный язык, но мы идем.)

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

Все это все еще проще (IMO), чем изучение нативного API Win32.

Для обязательного чтения я бы порекомендовал «C # 3.0 в двух словах» и «CLR через C #». (Ссылки приходят, когда я не накрываю стол к обеду ...)

1
ответ дан 3 December 2019 в 03:05
поделиться

Должен ли я изучать .NET?

Да.

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Технически нет, вам не нужно изучать C # для .NET.

, если я начну писать для VC ++, я могу привязаться к Windows.

Это магазин Windows, верно? Кому интересно, переносимы ли программы Windows, Если ваша единственная цель - Windows ?

Где мне лучше всего почитать?

Stackoverflow.

Что еще вы можете рассказать мне о переходе с Linux на программирование Windows?

Купите Windows-машину и Visual Studio. Не пытайтесь полу-Unix это. Потратьте время и силы на изучение Microsoft Way. Также как есть Путь Unix, есть Путь MS. Оба относятся к своим системам.

Удачи и веселья!

2
ответ дан 3 December 2019 в 03:05
поделиться

Если вы заинтересованы в переносимости своего кода, вы должны одновременно создать версию для Linux и для Windows. Если вы попытаетесь написать код для Windows, думая только о переносимости, вы обязательно получите специфичные для Windows элементы вашего кода.

Если вы собираетесь использовать Windows, вы можете также изучить C #. C # на самом деле довольно круто; в нем больше возможностей Lisp, чем в C ++. Изучение это прямо вперед. Ваш лучший учебный ресурс - Google, хотя, если вы изучаете книги, купите любую книгу на C #.

1
ответ дан 3 December 2019 в 03:05
поделиться

The answer depends on the type of program you would like to implement.

If you would like to implement some system utility then the answer is pretty much the same as on *nx world: you will have to programm in C for best results and to know Win API very well.

For other things, C# is probably the way to go today. Its the best language, IMO, from the existing dotNet languages.

Learning Windows API is definitelly good thing to do, but I suggest using some of the scripting languages for that for faster experimenting (Lua with Alien library, Python , AutoIt etc..). The good thing about it is that you probably know some of them, coming from *nx community.

Since you are worried about portability I suggest you using C# with special care about OS specific things like path separator, file name case sensitivity etc.. you can find some nice articles about it on MonoDeveloper site. Java is also good way to go - I am not an expert but from what I know its trading some language sophistication and speed and native feel (looking from C# perspective) for better portability.

Latest MonoDevelop makes you even load Visual Studio projects, although I never personaly did that.

3
ответ дан 3 December 2019 в 03:05
поделиться

Все зависит. Если вы решите использовать C ++ и разрабатываете приложение с графическим интерфейсом, вы можете выбрать один из нескольких каркасов с графическим интерфейсом ( wxWidgets , GTK ), большинство из которых также являются переносимыми для платформы. Если вы просто специально ориентируетесь на Windows, наличие библиотек .NET в качестве зависимостей не является проблемой, и вы не против времени, затрачиваемого на изучение нового (но все еще знакомого) языка, тогда C # может быть лучше в вашем случай.

1
ответ дан 3 December 2019 в 03:05
поделиться

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

Вы, вероятно, хотите изучать .NET (эй, вам все равно придется изучать новый фреймворк), а C # - нет. будет трудно учиться, если вы хорошо разбираетесь в C ++. Похоже, что в настоящее время это стандартная среда разработки, возможно, по веским причинам.

Если вы беспокоитесь о переносимости, напишите бэкэнд на C ++ и изолируйте системные компоненты. Если вы собираетесь продавать программное обеспечение Windows для предприятий, оно должно выглядеть как программное обеспечение Windows. Это должно вести себя так, как они ожидают. Не ставьте под угрозу пользовательский интерфейс для какого-либо преимущества в кроссплатформенности; вместо этого отделите пользовательский интерфейс логически. Вы всегда можете переписать его позже для других платформ.

Аналогично, продолжайте и используйте Visual Studio. Это хорошая среда, хотя я иногда скучаю по gcc, gdb и make, но, скорее всего, вы будете лучше понимать, что пишете программу для Windows. Если вы используете Cygwin и gcc, вы, скорее всего, не будете думать, как программист Windows, что означает, что это не будет похоже на программу Windows, а это означает, что у ваших потенциальных клиентов будут проблемы с этим, что означает меньше денег и больше шансов на запоздалое движение, чтобы захватить рынок.

Я обнаружил, что переход к программированию Windows не был трудным. Просто знайте, что вы изучаете что-то новое, и что некоторые вещи являются стандартными в Windows, а не в Unix. Если вы не боитесь изучать новые вещи, у вас все будет хорошо.

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

Вам понадобится достаточно привлекательный пользовательский интерфейс, который может легко использоваться людьми, которые не заботятся о компьютерах как таковых. Это растяжка для многих из нас. Если вы не думаете, что в iPhone есть что-то особенное, вам крайне необходима другая точка зрения. Читайте о пользовательских интерфейсах, найдите кого-то другого с некоторым художественным смыслом и некоторой идеей юзабилити, что угодно.

2
ответ дан 3 December 2019 в 03:05
поделиться

Стоит ли изучать .Net?

Зависит от того, считаете ли вы, что это выгодно для той ниши, на которую вы смотрите. Например, если ваша ниша представляет собой настольное приложение, вероятно, это хорошая идея для начала, потому что, IMHO, гораздо проще разработать WinForms, WPF GUI, чем версию C ++,

Нужно ли изучать C #, чтобы использовать .Net, или я могу придерживаться C ++?

C # не является обязательным требованием, а использование C ++ / CLI позволяет вам использовать .Net, все еще используя C ++. Тем не менее, я склонен не использовать C ++ / CLI только для компонентов, которые сильно сосредоточены на взаимодействии между управляемым и нативным кодом. Это особенно хорошо в таком развитии. Если вы переключитесь на другие основные приложения, я думаю, вы обнаружите, что C # или VB.Net подойдет вам лучше. Большинство онлайн-примеров ориентированы на эти языки. В частности, значительная часть инструментария в значительной степени ориентирована на эти языки (для начала разработчики WinForms и WPF).

Обеспокоенный написанием непереносимого кода и привязкой к VC ++

Я уверен, что это мнение будет немного непопулярным. Но вы уже упоминали, что ниша, на которую вы ориентируетесь, специфична для Windows. Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

В частности, значительная часть инструментария в значительной степени ориентирована на эти языки (для начала разработчики WinForms и WPF).

Обеспокоенный написанием непереносимого кода и привязкой к VC ++

Я уверен, что это мнение будет немного непопулярным. Но вы уже упоминали, что ниша, на которую вы ориентируетесь, специфична для Windows. Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

В частности, значительная часть инструментария в значительной степени ориентирована на эти языки (для начала разработчики WinForms и WPF).

Обеспокоенный написанием непереносимого кода и привязкой к VC ++

Я уверен, что это мнение будет немного непопулярным. Но вы уже упоминали, что ниша, на которую вы ориентируетесь, специфична для Windows. Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

Обеспокоенный написанием непереносимого кода и привязкой к VC ++

Я уверен, что это мнение будет немного непопулярным. Но вы уже упоминали, что ниша, на которую вы ориентируетесь, специфична для Windows. Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

Обеспокоенный написанием непереносимого кода и привязкой к VC ++

Я уверен, что это мнение будет немного непопулярным. Но вы уже упоминали, что ниша, на которую вы ориентируетесь, специфична для Windows. Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

Какой смысл писать переносимый код, если вы будете запускать его только в Windows? Это не предвзятое отношение к Windows, я бы привел точно такой же аргумент, если бы платформы поменялись местами.

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

5
ответ дан 3 December 2019 в 03:05
поделиться

Многие люди, кажется, игнорируют исходный вопрос «Различия между разработкой UNIX и Windows», поэтому я немного расскажу об этом.


Что касается того, должен ли я изучать C #:

Я думаю, вам нужно научиться язык вроде C # [1] в какой-то момент. Вопрос не в том, стоит ли выучить это, а в том, когда вы это выучите.


Относительно языков, альтернативных C #:

Java - это еще один язык, очень похожий на C #. Java. IMO является отцом C # и IMO. Я предпочитаю Java.

Я предлагаю вам метафору, чтобы объяснить мое пристрастие к Java. У Java был сын C #, который видел все успехи своего отца. Сын стал ревновать и попытался сделать то же самое, что и его отец.

В этом случае, MS - сын-выскочка, пытающийся отодвинуть на задний план старшего отца. Однако в выскочке C # отсутствует пара ключевых моментов IMO:

[1 - сноска] Когда я говорю «такой язык, как C #», я имею в виду тот факт, что существуют другие языки с похожими функциями. В частности, такие функции, как: сборка мусора, 100% объектно-ориентированная с самого начала (против взлома C ++ в объектно ориентированном стиле), встроенная документация типа xml (подумайте о javadoc) и гибкость, позволяющая делать много разных вещей.


Что касается того, следует ли мне учиться. NET:

Я сделал лишь небольшое / промежуточное количество C #, но из этого небольшого количества я заметил, что .NET в значительной степени требуется, когда вы делаете что-нибудь на C #. (Я понимаю, что C # очень кровосмешение с .NET и его трудно отделить.) Насколько я понимаю, я могу ошибаться ... большинство / все стандартные основные библиотеки C # - это C #, и поэтому вам необходимо иметь .NET. если вы пишете на C #.


Вернуться к исходному вопросу "

1
ответ дан 3 December 2019 в 03:05
поделиться