JetBrains Rider - Sekarang ke Unreal Engine

Hai Habr!

Pekan lalu, setelah rilis versi 2020.1, peristiwa besar lainnya terjadi untuk semua produk desktop kami - kami membuka akses publik ke versi uji coba Rider for Unreal Engine . Saat ini, ini adalah produk terpisah, versi dari lingkungan pengembangan kami untuk Rider, tetapi dengan dukungan untuk C ++ dan Unreal Engine. Jadi hentikan! Lingkungan pengembangan C ++. Satu lagi?! Mari kita bereskan.

Pengendara untuk mesin yang tidak nyata



Mari kita mulai dengan sedikit cerita. Beberapa tahun yang lalu, kami mengumpulkan semua orang yang membuat alat C ++ di JetBrains untuk membahas betapa sulitnya bagi pengguna untuk menavigasi berbagai penawaran kami. Lagipula, ada CLion, ReSharper C ++, dan dukungan untuk C ++ di AppCode. Setelah beberapa jam berdiskusi, kami sampai pada kesimpulan sebagai berikut:

  • Meskipun alat universal terlihat menarik, dengan perluasan penargetan, peningkatan jumlah alat pihak ketiga terintegrasi, kasus penggunaan yang didukung, menjadi sangat sulit untuk menemukan keseimbangan antara kenyamanan, antarmuka intuitif dan banyak fitur.
  • Dunia pengembangan perangkat lunak telah lama tidak memiliki batasan yang jelas dalam bahasa pengembangan. Banyak proyek multibahasa. Yang lebih penting adalah ruang lingkup perangkat lunak dan teknologi yang digunakan di dalamnya.

Sebagai hasilnya, kami memutuskan untuk menyatukan pengalaman pengguna dalam alat kami untuk C ++, tetapi sepakat bahwa pendekatan untuk membuat alat yang berbeda (meskipun dengan kernel umum atau pada platform umum) untuk berbagai bidang pengembangan perangkat lunak adalah yang tepat. Dalam praktiknya, tampilannya seperti ini:

  • 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- .

Jadi, apa hubungannya Penunggang dengan itu? Apa lingkungan pengembangan lintas platform untuk .NET terkait dengan C ++? Dalam praktiknya, sekitar 30% pengguna Rider adalah studio game dan perusahaan pengembang game. Dapat dimengerti, karena Rider sebagian besar populer justru sebagai lingkungan pengembangan untuk Unity . Ini bukan tahun pertama tim Rider telah menyesuaikan instrumen khusus untuk mesin gim ini. Hasilnya disukai tidak hanya oleh programmer Unity, tetapi juga oleh Unity Technologies sendiri, dengan siapa kami telah lama dan berbuah berinteraksi dalam hal teknologi itu sendiri.

Pergi ke banyak pengguna kami di bidang pengembangan game, kami perhatikan bahwa banyak studio tidak memiliki pemisahan yang jelas - membuat game hanya di Unity atau hanya di Unreal Engine. Hari ini mereka bermain di satu teknologi, dan besok di yang lain, atau satu tim menggunakan Unreal Engine, dan Unity lainnya, atau bahkan mesin kustom sendiri. Jelas bahwa pengembang dan perusahaan pada umumnya benar-benar tidak ingin "melompat" di antara berbagai lingkungan pengembangan. Dan di sini kami memutuskan bahwa jika kami dapat membuat Rider sukses untuk Unity, maka kami dapat melangkah lebih jauh dan membuatnya sukses secara umum untuk dunia pengembangan game. Jadi ide Rider lahir sebagai lingkungan pengembangan universal untuk Game Dev .

Terdiri dari apa Rider untuk Unreal Engine


Perkembangan lebih lanjut dari acara-acara tersebut cukup jelas bagi mereka yang akrab dengan teknologi di mana Rider dibangun. Rider terdiri dari bagian ujung depan yang didasarkan pada platform IntelliJ dan bagian ujung belakang yang didasarkan pada ReSharper. Semua dukungan bahasa berfungsi di back-end. Karena itu, kami hanya menghubungkan dukungan C ++ dan Unreal Engine yang ada di ReSharper C ++ ke Rider menggunakan teknologi yang sama. Dari yang spesifik, saya juga harus mengimplementasikan:

  • Plugin untuk memilih Rider sebagai lingkungan pengembangan di Unreal Editor ( Akses Kode Sumber Rider ) untuk versi engine 4.22-4.24. Mulai dengan versi 4.25, fungsi ini sudah akan termasuk dalam mesin UE itu sendiri.
  • Plugin UnrealLink untuk Rider dan RiderLink untuk Unreal Editor, yang menyediakan integrasi dengan Cetak Biru di Rider dan umumnya bertanggung jawab untuk komunikasi antara Rider dan Unreal Editor.
  • Debugger

Perlu dicatat bahwa sekarang pratinjau Rider for Unreal Engine hanya tersedia di Windows, membuka file .sln dan mengandalkan build oleh kompiler dari Microsoft. Di masa depan, pada saat rilis, kami akan mencoba untuk memperluas ke ketiga platform dan mengimplementasikan dukungan untuk .uproject sebagai model desain utama.

Debugger berbasis LLDB


Bagian penting dari pengembangan game terjadi sekarang di platform Windows dan sebagai bagian dari rantai alat Microsoft. Jika kita melihat alat debugging apa yang ada untuk kode yang dikompilasi menggunakan kompiler Microsoft Visual C ++, kita akan melihat:

  1. Microsoft menggunakan alat debugging berdasarkan vsdebugeng.dll dalam alat sendiri . Lisensi tidak mengizinkan penggunaan alat-alat ini di lingkungan pengembangan pihak ketiga.
  2. CDB WinDbg dbgeng.dll. MS . (.pdb), , , .
  3. Ada juga perkembangan di komunitas LLVM untuk dukungan debugging untuk Visual Studio toolchain menggunakan LLDB. Kami menggunakannya, dan hanya satu setengah tahun menulis versi pertama dari debugger yang umumnya berfungsi. Ini termasuk dukungan awal dan masih baku untuk format NatVis (seperti printer cantik khusus MS). Pada saat yang sama, Rider for Unreal Engine sekarang menemukan NatVis dalam proyek di Unreal Engine dan memuatnya ke debugger. Kami sekarang menggunakan debugger yang sama di CLion untuk toolchain Visual Studio (diaktifkan secara default dalam hal ini mulai dari versi 2020.1).

Debugger baru masih lembab, tentu saja, masih memiliki masalah dan perlambatan yang signifikan. Tapi kami berharap untuk mengingatkan untuk dirilis.

Dukungan C ++


Saya ulangi - semua fungsi dukungan bahasa dari ReSharper C ++ sekarang tersedia di Rider for Unreal Engine Preview. Itu termasuk:

  • Sekitar 170 inspeksi kode berbeda dan lebih dari 50 perbaikan cepat.
  • Refactor yang memperhitungkan semua penggunaan simbol secara kontekstual (penggantian nama, mengubah tanda tangan metode, penghapusan metode, menambahkan bidang / variabel / typedef, mengganti (sebaris) variabel atau typedef, dan lain-lain).
  • Pembuatan kode (metode getter / setter, konstruktor, operator perbandingan, templat dokumentasi kode).
  • Tindakan untuk membantu menulis kode, navigasi, pemformatan, dan dukungan untuk gaya penamaan, pengurutan #includearahan.

Hasilkan tindakan

Mendukung dialek HLSL, C #, uproject / uplugin


Tahun ini, kami mulai bekerja pada dukungan bahasa untuk menulis shader HLSL di ReSharper C ++ , dan segera masuk ke pratinjau awal Rider for Unreal Engine. Dukungan mencakup penyorotan sintaksis, tooltips dengan dokumentasi, tooltips untuk nama dan tipe parameter, tindakan navigasi, pelengkapan otomatis, dukungan untuk jalur file virtual, dan bahkan refactoring.

Karena Rider for Unreal Engine didasarkan pada lingkungan pengembangan untuk .NET, dukungan bahasa berfungsi di file Build.cs dan Target.cs.

Dan akhirnya, dalam hal mendukung dialek bahasa, Rider for Unreal Engine memahami dialek file .uproject / .uplugin, yang menyediakan opsi untuk pelengkapan otomatis dan alat dokumentasi.

dialek uproject

Integrasi Cetak Biru


File cetak biru adalah data biner yang biasanya diedit dalam editor visual di dalam Unreal Editor. Objek dalam file ini diwarisi dari kelas di C ++, mereka mendefinisikan kembali properti dari bagian C ++ dari permainan. Dan di sini Rider for Unreal Engine adalah lingkungan pengembangan unik yang membacakan semua file Cetak Biru yang diperlukan dan menunjukkan tautan ini dalam editor kode C ++:

Kelas turunan BP

Jika Anda mengubah, misalnya, nilai properti di editor Unreal Engine dan menyimpan aset, maka nilainya di sini itu juga akan secara otomatis diperbarui di Rider (kami memiliki pengamat digantung untuk mengubah file aset):

Properti BP

Tanpa menyimpan file, kami berharap ini akan segera bekerja juga (persiapan untuk ini sekarang sedang dilakukan di plugin UnrealLink).

Panggilan Temukan penggunaan tidak hanya menggunakan kode C ++, tetapi juga file Blueprints. Mengklik dua kali pada penggunaan tersebut membuka Unreal Editor.

Memahami mekanisme refleksi UE4


Refleksi dalam Mesin Unreal diimplementasikan menggunakan makro khusus (UCLASS, UFUNCTION, UPROPERTY, dll.). Rider tahu bahwa parameter makro seperti itu bukan hanya teks. Parser C ++ di ReSharper C ++ dan Rider benar-benar dapat β€œmemahami” arti makro ini tanpa meluncurkan alat Bangun Header Unreal (yaitu, sebelum konten file .generated.h sebenarnya dihasilkan ).

Ngomong-ngomong, berbicara tentang file .generated.h , ReSharper C ++ dan Rider tahu bahwa secara otomatis ditambahkan arahan #include yang hilang harus dimasukkan secara ketat sebelum menghubungkan file .generated.h . Dan juga memperhitungkan file-file yang dihasilkan ini dalam mengubah nama refactoring.

Kembali ke mekanisme refleksi, ada baiknya mengatakan bahwa specifier refleksi bukan hanya teks dalam ReSharper C ++ dan Rider. Ada petunjuk pengisian otomatis dan dokumentasi untuk mereka:

Dokumen refleksi

Petunjuk dokumentasi juga tersedia untuk makro refleksi sendiri.

Dan penganalisa kode memeriksa penggunaan macro refleksi dan menunjukkan kesalahan yang terkait dengan ini. Contohnya:

  • Kelas UCLASS harus diwarisi secara publik dari UObject atau salah satu kelas turunannya. Terlebih lagi, orang tua seperti itu harus persis satu.
  • Penentu UCLASS harus digunakan untuk kelas, USTRUCT untuk struktur.
  • Kelas UE4 tidak dapat dideklarasikan di dalam kelas lain.
  • Objek yang disimpan dalam bidang yang tidak ditandai UPROPERTY dapat dikumpulkan kapan saja oleh pemulung.

Dukungan Panggilan Prosedur Jarak Jauh (RPC) untuk tindakan navigasi dan pembuatan kode


Jika kami menganggap panggilan prosedur jarak jauh dari sudut pandang parser C ++ biasa, maka cukup cepat Anda akan melihat ketidaktahuan parser bahwa beberapa fungsi dengan nama yang berbeda (misalnya, sufiks _Validatedan _Implementation) dapat sesuai dengan deklarasi fungsi . Di ReSharper C ++ / Rider, kami telah melatih pengurai untuk mengidentifikasi RPC melalui penentu Client, Serverdan NetMulticastdalam pengaturan makro UFUNCTION. Dengan demikian:

  • Navigasi menawarkan semua opsi yang diperlukan untuk mengimplementasikan fungsi.
  • Pembuatan kode dapat membuat fungsi dengan sufiks _Validatedan _Implementationatau hanya yang tidak ada:
    Generasi Rpc
  • Refactorings kode Rename and Change Signature akan memperbarui semua fungsi yang diperlukan dan dengan demikian menjaga kode Anda dalam keadaan yang benar.

Pengetahuan tentang Mesin Penamaan Unreal 4 Aturan


ReSharper C ++ dan Rider mengetahui aturan penamaan resmi dalam kode Unreal Engine. Aturan-aturan ini digunakan oleh lingkungan pengembangan dalam semua tindakan untuk bekerja dengan kode, seperti menghasilkan getter dan setter atau refactoring suatu variabel (Introduce Variable). Dan yang paling penting, ada pemeriksaan kode inspeksi penamaan UE4 yang tidak konsisten dan perbaikan cepat yang sesuai yang akan menyebabkan Ubah nama refactoring dan ganti nama semua penggunaan nama yang tidak mematuhi aturan.

Kinerja Editor


Kami telah melakukan dukungan pengembangan untuk Unreal Engine di ReSharper C ++ untuk beberapa waktu dan, tentu saja, kami melihat bahwa kinerja editor adalah keluhan utama. Karena arsitekturnya, Rider bebas dari banyak masalah kinerja yang ada di ReSharper (sebagian disebabkan oleh keterbatasan studio pada proses 32-bit, di mana ReSharper bekerja, tetapi tidak hanya).

Selain itu, kami secara khusus menyetel IDE untuk meningkatkan kinerja di Unreal Engine. Kami pertama-tama mengindeks kode game pengguna, secara instan menyertakan semua tindakan cerdas editor pada kode pengguna. Dan pengindeksan kode mesin itu sendiri terjadi setelah itu di latar belakang. Ada beberapa opsi tambahan untuk mengelola pengindeksan:

Opsi kinerja

Akibatnya, mereka yang sudah mulai menggunakan Rider for Unreal Engine merespons dengan sangat positif tentang kinerja editor! Dan kami yakin kami bisa melakukan yang lebih baik lagi.

Demo video dan sekali lagi tentang cara mengakses


Fitur-fitur ini dan banyak lainnya dapat dilihat beraksi dalam video demo (dalam bahasa Inggris) dari pengacara pengembang kami:


Dan untuk mencoba fitur-fitur ini sendiri, cukup isi formulir sederhana dan terima surat dari kami dengan tautan ke pembuatan dan aktivasi lisensi gratis untuk pratinjau awal. Pergi, isi , coba, tulis ulasan! Untuk tanggapan Anda, seperti biasa, ada komentar di sini, pelacak ( ReSharper C ++ dan Rider ) dan surat dukungan kami ( rider-cpp-support@jetbrains.com ).

Terimakasih atas perhatiannya!

Rider
Drive to Develop Team

All Articles