JetBrains Rider - الآن لمحرك غير واقعي

مرحباً هبر!

في الأسبوع الماضي ، بعد إصدارات الإصدار 2020.1 ، حدث حدث رئيسي آخر لجميع منتجات سطح المكتب لدينا - فتحنا الوصول العام إلى الإصدار التجريبي من Rider for Unreal Engine . في الوقت الحالي ، هذا منتج منفصل ، وهو إصدار من بيئة التطوير الخاصة بنا لـ Rider ، ولكن مع دعم C ++ و Unreal Engine. لذا توقف! بيئة تطوير C ++. مرة اخرى؟! دعونا فرزها بالترتيب.

متسابق لمحرك غير واقعي



لنبدأ بقصة صغيرة. قبل بضع سنوات ، جمعنا كل من يصنع أدوات C ++ في JetBrains لمناقشة مدى صعوبة المستخدمين في تصفح مجموعة متنوعة من عروضنا. بعد كل شيء ، هناك CLion و ReSharper C ++ ودعم C ++ في AppCode. بعد عدة ساعات من المناقشة ، توصلنا إلى الاستنتاجات التالية:

  • على الرغم من أن الأداة العالمية تبدو جذابة ، مع التوسع في الاستهداف ، وزيادة عدد أدوات الطرف الثالث المتكاملة ، وحالات الاستخدام المدعومة ، يصبح من الصعب جدًا إيجاد توازن بين الراحة ، والواجهة البديهية والكثير من الميزات.
  • لم يعد لعالم تطوير البرمجيات حدود واضحة في لغات التطوير. العديد من المشاريع متعددة اللغات. والأهم من ذلك هو نطاق البرامج والتقنيات المستخدمة فيه.

ونتيجة لذلك ، قررنا توحيد تجربة المستخدم في أدواتنا الخاصة بـ C ++ ، ولكننا اتفقنا على أن النهج لصنع أدوات مختلفة (وإن كان ذلك باستخدام نواة مشتركة أو على منصة مشتركة) للمناطق المختلفة لتطوير البرامج هو الصحيح. في الممارسة العملية ، يبدو مثل هذا:

  • CLion — C C++. , , , AI, , . , , ( CMake, Gradle Native, compilation database, Bazel, Makefiles) . , , CLion msbuild, , .
  • ReSharper C++ — , Windows, , Visual Studio. C++ C#. Visual Studio, ReSharper, C++.
  • AppCode — , iOS/macOS. C/C++ mac- .

إذن ، ما علاقة الراكب بها؟ ما هي بيئة التطوير عبر الأنظمة الأساسية لـ .NET المتعلقة بـ C ++؟ من الناحية العملية ، حوالي 30 ٪ من مستخدمي Rider هم استوديوهات الألعاب وشركات تطوير الألعاب. إنه أمر مفهوم ، لأن رايدر يتمتع بشعبية كبيرة على وجه التحديد كبيئة تطوير للوحدة . ليست هذه هي السنة الأولى التي يقوم فيها فريق Rider بتخصيص أداة خاصة لمحرك اللعبة هذا. والنتيجة لا يحبها مبرمجو Unity فحسب ، بل أيضًا من قبل Unity Technologies أنفسهم ، الذين تفاعلنا معهم طويلاً ومثمرًا من حيث التكنولوجيا نفسها.

بالانتقال إلى العديد من مستخدمينا في مجال تطوير الألعاب ، لاحظنا أن العديد من الاستوديوهات ليس لديها فصل واضح - جعل الألعاب فقط على Unity أو فقط على Unreal Engine. اليوم يلعبون على تقنية واحدة ، وغدًا على أخرى ، أو يستخدم فريق واحد محرك Unreal ، والوحدة الأخرى ، أو حتى محركه المخصص. من الواضح أن المطورين والشركات بشكل عام لا يحبون "القفز" بين بيئات التطوير المختلفة. وهنا قررنا أنه إذا تمكنا من جعل Rider ناجحًا من أجل Unity ، فيمكننا المضي قدمًا وجعله ناجحًا بشكل عام لعالم تطوير اللعبة. لذلك ولدت فكرة رايدر كبيئة تطوير عالمية لـ Game Dev .

ما يتكون رايدر لمحرك غير واقعي


التطوير الإضافي للأحداث واضح تمامًا لأولئك الذين هم على دراية بالتكنولوجيا التي تم بناء رايدر عليها. يتكون Rider من جزء أمامي يعتمد على منصة IntelliJ وجزء خلفي يعتمد على ReSharper. يعمل كل دعم اللغة في النهاية الخلفية. لذلك ، قمنا للتو بتوصيل دعم C ++ و Unreal Engine الحالي في ReSharper C ++ إلى Rider باستخدام نفس التكنولوجيا. بالإضافة إلى ذلك ، كان عليّ تنفيذ ما يلي:

  • مكوّن إضافي لاختيار Rider كبيئة تطوير في Unreal Editor ( Rider Source Code Access ) لإصدارات المحرك 4.22-4.24. بدءًا من الإصدار 4.25 ، سيتم تضمين هذه الوظيفة بالفعل في محرك UE نفسه.
  • مكونات UnrealLink الإضافية لـ Rider و RiderLink لـ Unreal Editor ، والتي توفر التكامل مع المخططات في Rider وهي مسؤولة بشكل عام عن الاتصال بين Rider و Unreal Editor.
  • المصحح

تجدر الإشارة إلى أن معاينة Rider for Unreal Engine متاحة الآن فقط على Windows ، وتفتح ملفات .sln وتعتمد على الإنشاء من قبل المترجم من Microsoft. في المستقبل ، بحلول وقت الإصدار ، سنحاول التوسع في جميع المنصات الثلاثة وتنفيذ دعم .uproject كنموذج التصميم الرئيسي.

مصحح أخطاء LLDB


يحدث جزء كبير من تطوير الألعاب الآن على نظام Windows الأساسي وكجزء من سلسلة أدوات Microsoft. إذا نظرنا إلى أدوات التصحيح الموجودة للتعليمات البرمجية المترجمة باستخدام برنامج التحويل البرمجي Microsoft Visual C ++ ، فسنرى:

  1. تستخدم Microsoft أدوات التصحيح استنادًا إلى vsdebugeng.dll في أدواتها الخاصة . لا يسمح الترخيص باستخدام هذه الأدوات في بيئات التطوير التابعة لجهات خارجية.
  2. CDB WinDbg dbgeng.dll. MS . (.pdb), , , .
  3. كانت هناك أيضًا تطورات في مجتمع LLVM لدعم تصحيح أخطاء سلسلة أدوات Visual Studio باستخدام LLDB. استخدمناها ، وكتب سنة ونصف فقط النسخة الأولى من مصحح عاملة بشكل عام. يتضمن دعمًا أوليًا ولا يزال خامًا لتنسيق NatVis (مثل الطابعات الجميلة الخاصة بـ MS). في الوقت نفسه ، يجد Rider for Unreal Engine الآن NatVis في المشروع على Unreal Engine ويحملها إلى المصحح. نحن نستخدم الآن مصحح الأخطاء نفسه في CLion لسلسلة أدوات Visual Studio (يتم تمكينه افتراضيًا في هذه الحالة بدءًا من الإصدار 2020.1).

المصحح الجديد لا يزال رطبًا ، بالطبع ، لا يزال لديه مشاكل كبيرة وتباطؤ. لكننا نأمل أن نضعها في الاعتبار لإطلاق سراحها.

دعم C ++


أكرر - جميع وظائف دعم اللغة من ReSharper C ++ متاحة الآن في Rider for Unreal Engine Preview. ويشمل:

  • حوالي 170 فحصًا مختلفًا للرموز وأكثر من 50 إصلاحًا سريعًا.
  • عوامل إعادة التشكيل التي تأخذ في الاعتبار جميع الاستخدامات السياقية للرمز (إعادة التسمية ، تغيير توقيع الطريقة ، إزالة الطريقة ، إضافة حقل / متغير / كتابة ، استبدال (مضمنة) متغير أو مطبوع ، وغيرها).
  • توليد الكود (طرق الحروف / المستوطنين ، المنشئين ، عوامل المقارنة ، قوالب توثيق الكود).
  • إجراءات للمساعدة في كتابة التعليمات البرمجية والتنقل والتنسيق ودعم أنماط التسمية وفرز #includeالتوجيهات.

إنشاء عمل

دعم لهجات HLSL ، C # ، اقتلاع / uplugin


هذا العام ، بدأنا العمل على دعم اللغة لكتابة تظليل HLSL في ReSharper C ++ ، ودخلت فورًا في المعاينة المبكرة لـ Rider لمحرك Unreal. يشمل الدعم إبراز بناء الجملة ، تلميحات الأدوات مع الوثائق ، تلميحات أدوات لأسماء المعلمات وأنواعها ، إجراءات التنقل ، الإكمال التلقائي ، دعم مسارات الملفات الافتراضية ، وحتى إعادة البناء.

نظرًا لأن Rider for Unreal Engine يعتمد على بيئة التطوير لـ .NET ، فإن دعم اللغة يعمل في ملفات Build.cs و Target.cs.

وأخيرًا ، عندما يتعلق الأمر بدعم اللهجات اللغوية ، يفهم Rider for Unreal Engine لهجات ملفات .uproject / .uplugin ، مما يوفر خيارات للإكمال التلقائي وأدوات التوثيق.

لهجة شاذة

تكامل المخططات


ملفات المخططات هي بيانات ثنائية يتم تحريرها عادة في محرر مرئي داخل محرر Unreal. الكائنات الموجودة في هذه الملفات موروثة من الفئات في C ++ ، وهي تعيد تعريف الخصائص من الجزء C ++ من اللعبة. وهنا Rider for Unreal Engine هي بيئة التطوير الفريدة التي تقرأ جميع ملفات Blueprints الضرورية وتعرض هذه الروابط في محرر كود C ++:

فئات BP المشتقة

إذا قمت بتغيير ، على سبيل المثال ، قيمة الخاصية في محرر Unreal Engine وحفظ الأصل ، فإن القيمة هنا سيتم أيضًا تحديثه تلقائيًا في Rider (لدينا مراقبون معلقون لتغيير ملفات الأصول):

خصائص BP

بدون حفظ الملفات ، نأمل أن يعمل هذا قريبًا أيضًا (يتم التحضير لهذا الآن في المكون الإضافي UnrealLink).

لا تتضمن مكالمة Find usages الاستخدامات في كود C ++ فحسب ، بل تشمل أيضًا ملفات المخططات. يؤدي النقر المزدوج على هذه الاستخدامات إلى فتح محرر Unreal.

فهم آلية انعكاس UE4


يتم تنفيذ الانعكاس في Unreal Engine باستخدام وحدات ماكرو خاصة (UCLASS ، UFUNCTION ، UPROPERTY ، وما إلى ذلك). يعرف Rider أن معلمات وحدات الماكرو هذه ليست نصًا فقط. يمكن لمحلل لغة C ++ في ReSharper C ++ و Rider حقًا "فهم" معنى وحدات الماكرو هذه حتى بدون تشغيل أداة بناء رأس غير واقعي (أي قبل إنشاء محتويات ملفات .generated.h ).

بالمناسبة ، عند التحدث عن ملفات .generated.h ، يعلم كل من ReSharper C ++ و Rider أن توجيهات #include المضافة المضافة تلقائيًا يجب إدراجها بدقة قبل توصيل ملفات .generated.h . وتأخذ أيضًا في الاعتبار هذه الملفات التي تم إنشاؤها في إعادة تسمية إعادة البيع.

بالعودة إلى آلية الانعكاس ، تجدر الإشارة إلى أن محددات الانعكاس ليست مجرد نص في ReSharper C ++ و Rider. هناك تلميحات إكمال تلقائي وتوثيق لهم:

وثيقة تأمل

كما تتوفر تلميحات وثائق لوحدات الماكرو الانعكاسية نفسها.

ويفحص محلل الكود استخدام وحدات الماكرو الانعكاسية ويشير إلى الأخطاء المرتبطة بذلك. على سبيل المثال:

  • يجب أن تكون فئات UCLASS موروثة علنًا من UObject أو أي من الفئات المنحدرة منها. علاوة على ذلك ، يجب أن يكون هذا الوالد واحدًا بالضبط.
  • يجب استخدام محددات UCLASS للفئات ، USTRUCT للهياكل.
  • لا يمكن التصريح عن فئات UE4 داخل الفئات الأخرى.
  • يمكن جمع الأشياء المخزنة في الحقول غير المميزة UPROPERTY في أي وقت بواسطة جامع القمامة.

دعم استدعاء الإجراء عن بُعد (RPC) لإجراءات التنقل وإنشاء التعليمات البرمجية


إذا أخذنا في الاعتبار الاستدعاءات إلى الإجراءات البعيدة من وجهة نظر محلل C ++ العادي ، فستلاحظ بسرعة أن المحلل لا يدرك أن العديد من الوظائف ذات الأسماء المختلفة (على سبيل المثال ، اللاحقات _Validateو _Implementation) يمكن أن تتوافق مع تعريف الوظيفة . في ReSharper C ++ / Rider ، قمنا بتدريب المحلل اللغوي لتحديد RPC عبر المحددات Client، Serverوفي NetMulticastإعدادات الماكرو UFUNCTION. وبذلك:

  • يوفر التنقل جميع الخيارات اللازمة لتنفيذ الوظيفة.
  • يمكن أن ينشئ إنشاء التعليمات البرمجية وظائف ذات لاحقة _Validateو / _Implementationأو تلك المفقودة فقط:
    جيل RPC
  • ستعمل إعادة تسمية الرمز وإعادة تسميته وتغيير التوقيع على تحديث جميع الوظائف الضرورية وبالتالي الحفاظ على التعليمات البرمجية في الحالة الصحيحة.

معرفة قواعد التسمية Unreal Engine 4


يدرك كل من ReSharper C ++ و Rider قواعد التسمية الرسمية في رمز Unreal Engine. يتم استخدام هذه القواعد من قبل بيئة التطوير في جميع الإجراءات للعمل مع التعليمات البرمجية ، مثل توليد getters والمساكنين أو إعادة بناء متغير (إدخال متغير). والأهم من ذلك ، هناك التحقق من رمز عمليات التفتيش غير المتسقة لتسمية UE4 والإصلاح السريع المطابق الذي سيؤدي إلى إعادة تسمية إعادة التسمية وإعادة تسمية جميع استخدامات الاسم التي لا تتوافق مع القواعد.

أداء المحرر


لقد قمنا بدعم تطوير Unreal Engine في ReSharper C ++ لبعض الوقت ، وبالطبع ، نرى أن أداء المحرر هو الشكوى الرئيسية. نظرًا لهندسته المعمارية ، فإن Rider خالٍ من العديد من مشاكل الأداء الموجودة في ReSharper (يرجع ذلك جزئيًا إلى قيود الاستوديو على عمليات 32 بت ، والتي يعمل فيها ReSharper ، ولكن ليس فقط).

بالإضافة إلى ذلك ، نقوم بضبط IDE على وجه التحديد لتحسين الأداء على محرك Unreal. نقوم أولاً بفهرسة رمز لعبة المستخدم ، بما في ذلك على الفور جميع الإجراءات الذكية للمحرر على رمز المستخدم. وتحدث فهرسة كود المحرك بعد ذلك في الخلفية. هناك العديد من الخيارات الإضافية لإدارة الفهرسة:

خيارات الأداء

ونتيجة لذلك ، فإن أولئك الذين بدأوا بالفعل في استخدام Rider لمحرك Unreal Engine يستجيبون بشكل إيجابي للغاية لأداء المحرر! ونحن على يقين من أنه يمكننا القيام بعمل أفضل.

عرض فيديو ومرة ​​أخرى حول كيفية الوصول


يمكن رؤية هذه الميزات والعديد من الميزات الأخرى بشكل عملي في فيديو تجريبي (باللغة الإنجليزية) من محامينا المطور:


ولتجربة هذه الميزات بنفسك ، ما عليك سوى ملء نموذج بسيط وتلقي رسالة منا تحتوي على رابط لإنشاء ترخيص مجاني وتنشيطه لمعاينة مبكرة. اذهب ، املأ ، حاول ، اكتب مراجعات! لملاحظاتك ، كالمعتاد ، هناك تعليقات هنا ، متتبع ( ReSharper C ++ و Rider ) وبريد الدعم الخاص بنا ( rider-cpp-support@jetbrains.com ).

شكرا للانتباه!

رايدر
الدافع لتطوير الفريق

All Articles