2016-05-02 6 views
1

У меня есть много сценариев Unity, написанных для 3D-игры, которые были бы полезны в 2D-игре, и я действительно не хочу изобретать колесо, чтобы добавить их в эту игру. Итак, мой вопрос: могу ли я использовать свои текущие сценарии для 3D-игр (с Vector3s и вызовы Physics.Raycast(), Physics.Gravity и т. Д.) В 2D-игре (где у всех GameObject есть 2D-компоненты, такие как Collider2D и Rigidbody2D, и там будут другие сценарии с использованием вызовов Physics2D .Raycast(), Physics2D .Gravity и т. д.)? Я предполагаю, что I может сделать это, но это будет глупо неэффективно, поэтому я мог бы также повторно реализовать с 2D-классами. Но подумал, что сначала спрошу.3D-классы в 2D-игре Unity

Благодарим за помощь!

+1

без проблем. Наслаждаться. это не «глупо неэффективно»; 99% игр едва приближаются к пределам производительности. на практике вы обнаружите, что легко (и весело!) просто модифицировать классы «2D» в большинстве случаев. – Fattie

+0

@Joe Blow. Спасибо за ур ответ! Модификация всего на 2d классов - это то, чего я на самом деле пытаюсь избежать. У меня есть множество сценариев, уже написанных для 3D-игры, и я не хочу тратить время на их копирование, просто чтобы изменить каждый Vector3 на Vector2 и т. Д. Более того, эти 3D-скрипты все еще находятся в разработке, поэтому для создания 2-й копии потребуется сделать каждое изменение дважды. Вы просто рекомендуете мне изменить все мои 3d-сценарии для 2d, или я действительно должен сделать это, чтобы заставить их работать в 2D-игре? – Rabadash8820

ответ

3

Как и комментарий от Джо, вы можете. Не будет проблем, так как функции Unity 2D будут принимать vector2D и когда Vector3D будет передан в них, ось z будет отброшена.

Мое предложение заключается в использовании-же скрипт для 3D и 2D, как это делает все проще работать. Например, когда вы делаете большие изменения логической игры в своем 3D-сценарии, вам нужно сделать то же самое в 2D-скрипте. Также большая боль, когда вы хотите устранить неполадки в ваших 2D или 3D-кодах. Здесь следует использовать C# Preprocessor Directives.

#if USE2D 
//Put your 2D specific API code 
#else 
//Put your 3D specific API code 
#endif 

Теперь, чтобы проверить 2D код, просто положить #define USE2D в верхней части вашего кода. Это может быть полезно, если вы хотите устранить неполадки в коде 3D и 2D. Вы просто комментария#define USE2D протестировать 3D кода и раскомментируйте его для тестирования 2D кода.

+0

Вау, @ Программист, отличная идея! Я никогда бы не подумал использовать условную компиляцию. Знаете ли вы, что для этой цели Unity имеет встроенные #defines? – Rabadash8820

+2

@ Rabadash8820 Unity имеет много препроцессоров, но у них нет ни одного для 2D/3D. Вы можете добавить это самостоятельно и включить его, когда хотите построить для 2D/3D. Обратите внимание, что вы даже можете использовать '[Условное (« USE2D »)]' вместо '#if USE2D', и это чище. Дополнительные сведения об этом см. На странице https://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx. Для получения дополнительной информации о Unity, созданной в препроцессорах, см. Http://docs.unity3d.com/Manual/PlatformDependentCompilation.html. Вы даже можете определить его из редактора. Просто посетите ссылку. – Programmer

+1

Удивительные ссылки, большое вам спасибо за это элегантное решение. Я отметил, что ур ответил как правильный! – Rabadash8820

 Смежные вопросы

  • Нет связанных вопросов^_^