私にとって、JetBrains の Rider は、Unity 開発に最適な IDE として長い間確立されてきました。最近の Rider 2023.1 リリースでは、開発者の作業を容易にする多くの新機能が追加されました。 JetBrains は再び期待を裏切らず、目標を高く設定し続けています。
新しいバージョンでは、USB ケーブルを介して Android デバイスで実行されているゲームをデバッグできます。一般に、接続されたプレーヤーの一時的な実行構成を自動的に作成し、後続のセッションを最適化し、さまざまなプラットフォームで簡単に保存してチームと共有できるようにすることで、デバッグを簡素化します。一部のユーザーにとって重要な機能は、IDE 内でのローカライズされたドキュメントのサポートです。
また、ついに UI Toolkit をさらに深く掘り下げて探索する時が来ました。
Rider は、UI Toolkit に基づく Unity エディター用の UI 拡張機能の 3 つのテンプレートを追加しました。
Rider 2023.1 には、[SerializeReference] 属性を持つフィールドの識別、Unity アニメーションでの C# の使用の検出 (残念ながら見逃していた)、および [Header] 属性のフォーマットの改善が含まれています。
一般に、C# を操作するために多くの拡張機能が追加されています。最後になりましたが、最も素晴らしい点は、JetBrains による待望の DOTS サポートです。
さて、これが何であるか、そしてRiderを最新バージョンにアップグレードする価値があるかどうかを簡単に確認しましょう.この IDE をまだ使用していない場合は、この記事も役に立ちます。
Unity エディターではゲームがまったく問題なく動作する場合がありますが、デバイスではスムーズに動作しません。 Rider では、USB 経由でデバイス上で直接コードをデバッグできます。なるほど、感動的です。
この機能を動作させるには、開発ビルドとスクリプトのデバッグ オプションを有効にしてビルドをコンパイルする必要があることに注意してください。
デバイス自体も適切にセットアップする必要があることを思い出してください。まず、デバイスで開発者モードを有効にする必要があります。
「ビルド番号」項目を見つけるもう 1 つの簡単な方法は、設定で検索することです。
次に、表示された「開発者向けオプション」で「USBデバッグ」を有効にします。
あと数ステップしかありません。デバイスでゲームを起動し、Rider のメイン メニューで [実行]、[Unity プロセスにアタッチ...] の順にクリックします。開いたウィンドウで、アプリケーションがインストールされている Android デバイスを選択します。
すべての準備が整いました!ブレークポイントを設定し、デバイスから直接ゲームをデバッグしてください!この強力なデバッグ ツールを活用して、ゲーム開発プロセスを強化することを躊躇しないでください。
初めてデバッグを開始するとすぐに、Rider は Android プレーヤーの一時的な実行構成を自動的に作成します。将来の使用のために実行構成を保存する場合は、保存してチームと共有できます。
もちろん、私たちは皆、古くて良いと同時にひどく柔軟性のない IMGUI に慣れています。ただし、Unity チームは、ゲームの UI を作成するエクスペリエンスを向上させるために、新しい UI Toolkit パッケージに長い間取り組んできました。 Unity 2022.2 以降では、エディターで UI を作成するときに新しいアプローチを使用することをお勧めします。
UI Toolkit は別の深いトピックです。新しいアプローチは、UI を作成するためのより便利で、ある程度より一般的なアプローチを提供するとだけ言っておきます。 HTML と CSS の経験があれば、簡単に適応できます。しかし、UI Toolkit の習得を遅らせないように他の人にもアドバイスします。
Unity 2022.2 以前のプロジェクトの場合、Rider はデフォルトで新しいテンプレートを使用できるようになりました。そのうちの 1 つを試してみましょう。このために、まず、ゲーム内のアイテムを記述する単純な ScriptableObject を作成します。
[CreateAssetMenu(fileName = "GameItem", menuName = "Game Item", order = 0)] public class GameItem : ScriptableObject { public string itemName; public int weight; public int price; }
この ScriptableObject 用のカスタム エディターを作成しましょう。これを行うには、Rider の Editor フォルダーを右クリックし、[追加] を選択して [Unity スクリプト] を選択します。
開いたウィンドウで、[カスタム エディター] を選択します。エディタに GameItemEditor という名前を付けましょう。
CustomEditor 属性で、作成されたエディターが GameItem クラス用であることを示します。
using UnityEditor; using UnityEngine.UIElements; [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public override VisualElement CreateInspectorGUI() { return base.CreateInspectorGUI(); } }
[ウィンドウ] -> [UI ツールキット] -> [UI ビルダー] を開きます。ビューポートで、現在の UI ドキュメントを保存し、GameItem.uxml という名前を付けます。ライブラリ ウィンドウから、GameItem クラス フィールドに対応する 3 つのフィールドを追加し、適切な名前を付けます。
UI Toolkit を使用すると、明らかな利点がいくつかあります。 UXML ドキュメントは、UI Builder を使用してすぐに利用できるほか、IGMUI と同様にプログラミングによってグラフィカルに編集することができます。現在、UI 表示スタイルは基本的に CSS と同様に USS で設定し、プロジェクトで再利用できます。ああ、これが欠けていたなんて。自動取り消しのサポートも存在します。
もう 1 つの重要な事実は、自動データ バインディングです。 Binding Path フィールドで GameItem クラス フィールドの名前を示しましょう。
ビューポート ウィンドウの [ファイル] -> [名前を付けて保存] メニューでドキュメントを保存することを忘れないでください。 Ctrl-S / Cmd-S を保存するためのホットキーは、ここでは役に立ちません。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> <ui:TextField picking-mode="Ignore" label="Name" name="Name" binding-path="itemName" /> <ui:IntegerField label="Weight" value="0" name="Weight" binding-path="weight" readonly="false" /> <ui:IntegerField label="Price" value="0" name="Price" binding-path="price" focusable="true" /> </ui:UXML>
それでは、UXML ドキュメントから直接インスペクターを形成するように、GameItemEditor の作成を終了しましょう。
[CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public VisualTreeAsset treeAsset; public override VisualElement CreateInspectorGUI() { var inspector = new VisualElement(); treeAsset.CloneTree(inspector); return inspector; } }
Project ウィンドウで GameItemEditor スクリプトを選択し、作成した UI ドキュメント GameItem.uxml を Tree Asset フィールドにドラッグして指定します。
GameItem クラスのカスタム エディターが完成しました。 UI ドキュメントを少し試して、その変更がインスペクターの表示にどのように影響するかを確認できます。
さて、新しい Rider 2023.1 のリリースは、UI Toolkit の研究を掘り下げて、その使用のすべての利点を得る良い理由です。
Unity の Data-Oriented Technology Stack、または単に DOTS は、Unity チームによって長年にわたって開発されてきたプロジェクトです。更新なしでほぼ 1 年が経過した後、DOTS パッケージは実験的な状態からプレリリースに移行し、バージョン 1.0.0 を受け取りました。この記事の執筆時点では、1.0.0-pre.65 です。そして2023年のリリースが約束されています。
長い開発期間と、リリースを待つことをすでにあきらめていた DOTS について疑問を抱いている人もいましたが、新しいスタックは依然としてその機能とパフォーマンスに驚かされます。
データ指向設計、または一般的に言えばエンティティ コンポーネント システム (ECS) は、ゲーム プログラミング アーキテクチャに対してまったく異なるアプローチを提供します。おなじみのオブジェクト指向プログラミング パターンとは異なり、ここでの焦点はデータの分離とその処理にあります。このようなアーキテクチャでは、同様のデータは通常、メモリ内で互いに近くに配置されており、特にマルチスレッド モードで実行できる場合、システムは信じられないほどの速度でデータを処理できます。
C# から直接便利に使用できるようにネイティブ メモリ管理メカニズムが追加され、DOTS に対して膨大な量の作業が行われました。
DOTS 1.0.0 のリリースにより、アプリケーション開発への多くのアプローチが変更されました。私の意見では、それらはより便利で直感的になりました。
優れたドキュメントはまだ不足していますが、信じられないほど生産的な DOTS の世界に飛び込み、ECS とマルチスレッド データ処理のために脳を再配線するには十分です。
以前、 Unity DOTS 1.0 を使用した Gravity Simulation を使用した重力シミュレーションに関する記事をリリースしました。必要に応じて、このスタックを学習するための他の多くの教材も見つけることができます。 Rider の新機能をテストするために、以前のバージョンの DOTS で作成された古い Wave Propagation プロジェクトを開きました。
私が常に悩まされていたのは、コードの記述の詳細が原因で、Rider または Visual Studio によって発行された多くの警告でした。これで、コードはきれいで快適に見えます。
ついに!これをどれだけ待っていたか! Rider は DOTS を公式にサポートしており、これにより Unity 開発のナンバーワン IDE となったことは間違いありません。今、Rider は何が正しくて何が正しくないかを真に理解しています。
たとえば、このコードでは、
public partial struct TransformingSystem : ISystem { [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
Rider は、シングルトン Field に正しくアクセスするために、OnCreate() がメソッド state.RequireForUpdate<Field>() を通じて期待値を設定する必要があることを提案しました。
public partial struct TransformingSystem : ISystem { public void OnCreate(ref SystemState state) { state.RequireForUpdate<Field>(); } [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }
MonoBehaviors のベイカーを作成するためのテンプレートが登場し、新しいコンポーネントを作成するか、既存のコンポーネントにフィールドを追加するように提案されます。
もちろん、まだすべてが完璧というわけではありません。ベイカー コードを生成するときに、古いテンプレートが使用されます。このコードを取得しました。
public class FieldAuthoring : MonoBehaviour { public GameObject CellPrefab; public Field Field; public Impulse Impulse; public class FieldAuthoringBaker : Baker<FieldAuthoring> { public override void Bake(FieldAuthoring authoring) { AddComponent(new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab), Field = authoring.Field, Impulse = authoring.Impulse }); } } } public struct FieldComponentData : IComponentData { public Entity CellPrefab; public Field Field; public Impulse Impulse; }
ここでは、すでに時代遅れのメソッド GetEntity() および AddComponent() が使用されています。代わりに、コンポーネントの追加はこの方法で行う必要があります。
public override void Bake(FieldAuthoring authoring) { var entity = GetEntity(TransformUsageFlags.Dynamic); AddComponent(entity, new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab, TransformUsageFlags.Dynamic), Field = authoring.Field, Impulse = authoring.Impulse }); }
もちろん、テンプレートは自分で変更できます。しかし、JetBrains からの修正が届くまでにそれほど時間はかからないと思います。コンポーネントのベイカーを使用して認可 MonoBehaviour を作成する可能性もあります。彼らのブログでは、DOTS を使用する場合の新しい機能について詳しく説明している記事を既に見つけることができるので、ここで同じことを説明しても意味がありません。
Rider 2023.1 リリースは、Unity 開発者に豊富な新機能と改善をもたらし、Unity 開発に最適な IDE としての地位を固めています。 Android デバイス向けの強化されたデバッグ、UI Toolkit の新しいテンプレート、待望の DOTS サポート、Unity レジストリ パッケージのオンライン ドキュメントやローカライズされた API ドキュメントへのクイック アクセスなどの追加機能により、JetBrains はゲーム開発ツールの水準を引き上げ続けています。これらの機能は、開発プロセスを簡素化するだけでなく、開発者がより優れた効率的なゲームを作成できるようにします。
さらに、Rider 2023.1 は、コード内のシリアル化されたフィールドのより正確な検出、Unity アニメーションでの C# の使用箇所を見つけるためのサポートの改善、[Header] 属性を別の行に配置するための書式設定エンジンへの要望の多かった更新など、他のいくつかの更新を提供します。これらの機能強化は、より合理化された効率的な開発エクスペリエンスに貢献します。
経験豊富なUnity開発者でも初心者でも、Rider 2023.1 リリースは検討する価値があります。新しい機能は幅広いニーズに対応し、開発プロセスの合理化に役立ちます。これまで Rider を使用したことがない場合、このリリースはその強力な機能を直接体験する絶好の機会を提供します。すでに Rider を使用している方は、最新バージョンにアップグレードすることで、ゲーム開発のワークフローが確実に強化されます。
Rider 2023.1 で Unity 開発の最新の進歩を取り入れ、ゲーム プロジェクトを新たな高みへと導きます。開発経験を向上させ、より魅力的で高性能なゲームを作成するチャンスをお見逃しなく。