「MOD開発者向け」公式情報

MOD

この記事はCOによるMOD開発者向けの記事全文をDeeplに訳してもらった結果の記載のみしています。画像の位置も同じにしてあります。

 開発日記:コード改造

 こんにちは、私はセルゲイです。おそらくMacSergeyとしてご存知でしょう。Cities.Skylinesの人気MODの作者です: 交差点マーキングツール、ノードコントローラーリニューアル、ネットワークマルチツールなど。2年前にColossal Orderに雇われて、今はCities: Skylines IIのMOD開発に取り組んでいます: 現在はCities: Skylines IIのModding機能に取り組んでいます。今日の開発日記は、コード改造に対する私たちのアプローチを皆さんにお伝えするために書いています。

 コード改造の改善

 コード改造は『Cities: Skylines』の大きな部分でした: Cities:Skylines』ではコード改造が大きな役割を果たしたが、『Cities:Skylines II』でも同じように、そしてさらに改造の可能性を広げたいと考えている: Cities: Skylines II」にも同じ、そしてそれ以上の改造の可能性をもたらしたい。私たちは、ゲームを改造できることは非常にクールなことであり、それによって多くのチャンスがもたらされると信じています。Cities:Skylinesをプレイするために、さまざまなプレイヤーがどのようにMODを使用しているかを見てみると、まったく異なることがわかります: Cities:Skylines』のプレイスタイルはまったく異なり、まるで別のゲームをプレイしているかのようです。現実世界を細部まで再現するのが好きなプレイヤーもいれば、交通や産業を管理するのが好きなプレイヤーもいる。 交通や産業の生産チェーンを管理するのが好きなプレイヤーもいる。ただ楽しく、100個の竜巻で街を襲いたいプレイヤーもいる。

完璧な機能のセット」に対する考え方は人それぞれです。ベースとなるゲーム機能には、コミュニティから寄せられた多くの提案を盛り込みましたが、正直なところ、すべてのプレイヤーの希望を実現することは不可能です。そこでMODの出番です。たとえその機能を必要としているのが世界であなた一人であったとしても、誰もが好きなように何かを実装したり、ゲームを変更したりすることができる。

私もそうだった。Cities: 2019年にインターネットで、あるプレイヤーがゲーム内で自分の故郷の都市を再現したという投稿を見て、このゲームをやってみたくなったんだ。プレイを始めて、基本的なゲームでできることは気に入ったのですが、あるとき、”あれもこれもできたらクールだろうな “と思うようになりました。そのとき、ゲームを改造できることに気づいたんだけど、残念なことに、僕がやりたいことをやってくれる改造は見つからなかったから、自分で書くことにしたんだ。自分のMODが人気になるとは思わなかったし、誰かが同じ機能を必要としているとも思わなかった。

Cities.Skylinesが発売されてほとんど経つのに、とてもクールだと思う: Cities:Skylinesが発売されて9年近く経つのに、いまだに新しいMODが作られているのを目にするのはとてもクールだと思う。その中には、コミュニティから見て必要不可欠なMODになったものもある。誰かが自分用に作って他の人と共有しようと決めるまで、そのMODが必要だと気づかなかったからだ!

 都市にMODをもたらす スカイラインズII

Cities: Cities:Skylines』では、MODのサポートが非常に限られていた。ゲーム側で簡単に改造できないような状態になることもしばしばで、何日もかけて実装しなければならないこともあった。他のModderも同じような制限を受け、互いに衝突するような独自の実装をすることもあった。

Cities: Cities: Skylines IIでは、MODを簡略化するためのサポートをできる限り提供し、機能とは無関係にほとんどすべてのMODで必要とされる汎用的なものを独自に実装する必要がないようにしたいと考えています。また、どのバージョンの外部ツールをインストールする必要があるのか、あるいはIDEでMODプロジェクトをセットアップし、MODをコンパイルするために必要なゲームの依存関係を追加する方法を見つけ出すのに何日も費やす必要がないように、QOLの改善も実装しました。

私たちの目標を達成するための最初のステップは、MODツールチェインの作成とそのデプロイでした。ボタンを1つ押すだけで、MOD作成に必要な依存関係やUnityエンジン、Burstコンパイラ、ECSなどの外部ツールをすべてインストールしてくれます。依存関係が更新されたり、要件が変更された場合は、ゲームを起動するとすぐにModdingツールチェーンがそれを通知し、あなたの開発セットアップが常に最新の状態になるようにアップデートを提供します。

UIはゲームの改造に必要なツールのインストール進捗を追跡します。

次に、Visual Studio や Rider で新しいプロジェクトを作成するときにプロジェクトのリストで利用できるように、新しい .Net テンプレート機構を使用する mod プロジェクトテンプレートを作成しました。必要な依存関係、パス、およびビルド後のアクションがすべて設定されているので、「ビルド」ボタンを押せば、MODがコンパイルされ、後処理され、正しいフォルダに配置され、ゲームを起動してそこにあることを確認できます。

Visual StudioのMODプロジェクトテンプレートは新しいプロジェクトダイアログを作成します。

MODが完成したら、Visual StudioまたはRiderからParadox Modsに公開することができます。プロジェクトテンプレートに空のパブリッシュ設定ファイルがあるので、それを埋めてから、プロジェクトをクリックして「パブリッシュ」オプションを選択してください。そうすると、あなたのMODはParadox Modsで公開され、他のプレイヤーがサブスクライブして使用できるようになります。

Riderのパブリッシュオプション

 MODの最適化

このゲームでは、Entity Component SystemやBurstコンパイルのようなUnityエンジンの新技術を使用して、マルチスレッドや低レベル最適化の恩恵を受け、一部の計算速度を30~40倍まで向上させることができます。しかし、これらの技術には、その利点を達成するための追加知識が必要であり、そうでない場合は、それらを完全に使用しない場合よりもパフォーマンスが悪化する可能性があります。Cities.Skylines』から人々が慣れ親しんでいる改造へのアプローチは、『Cities: Cities:Skylines』で慣れ親しんだ改造のやり方では、『Cities:Skylines』で達成できる最高の結果を得ることはできないだろう: Cities: Skylines IIでは、最高の結果を得ることはできない。

Cities:Skylines』の改造で一般的なHarmonyのようなツールを使っても、『Cities:Skylines II』で最高の結果を得ることはできない: Cities:Skylinesの改造で一般的なHarmonyのようなツールを使うことはまだ可能だが、現在は少し制限されている。Harmonyはマネージドコードにのみパッチを当てることができますが、ゲームコードの一部はBurstコンパイル後に最適化のためにアンマネージドになります。Harmonyはそのようなコードにパッチを当てることはできませんが、すべてのゲームエンティティとコンポーネントに関するすべての情報はMODのシステムからアクセス可能であり、既存のゲームコードに変更を加えることなく変更または追加できるため、問題にはなりません。

MODを最適化するために、私たちはMODポストプロセッサーも提供しています。これは、バーストコンパイルとゲーム内で使用される低レベルの最適化を行い、MODがゲームと同じエンジンの可能性を使用できるようにするものです。このツールの目標は、何が間違っているのかを理解するのに多くの時間を費やさないように、正しいアプローチを使用するように指示し、最も一般的な間違いを減らすことです。また、チームがすべての最適化を行った後のゲームと同じパフォーマンスと最適化を達成することもできます。

コードによっては最適化の恩恵を受けられないものもあるため、最適化は必須ではありません。多くの場合、Unity APIはソースコード生成を使用し、後処理段階でコードの一部を実際の実装に置き換えるため、使用する必要があります。あなたのコードがそのようなAPIコールを使用し、生成されたMODプロジェクトテンプレートとMODポストプロセッサで私たちがあなたのために作成したセットアップを使用しない場合、あなたのコードは動作せず、”NotImplemented “例外がスローされます。

 MOD互換性

もしあなたがCities: Cities:Skylines』をプレイしたことがある人なら、ゲームのアップデートがMODの機能にどのような影響を与えるかをご存知だろう: Cities: Skylines IIでは、この点を改善したいと考えています。MODが修正するゲームコードが変更される可能性があるため、MODの問題を完全に防ぐことはできませんが、ゲームがアップデートされたときにMODが壊れる可能性を低くしようとしています。

MODに詳しい方であれば、なぜMODが壊れるのかご存知だと思いますが、そうでない方のために簡単に説明します: MODがゲームコードを修正するとき、彼らはいくつかの「シグネチャ」(クラス名、メソッドパラメータ、フィールドなど)を使ってコードの特定の部分を探します。アップデートやバグ修正が行われると、ベースとなるゲームコードが変更され、MODが探していた「シグネチャ」が存在しなくなったり、MODが修正するコードの場所がアップデート後に少し異なる動作をするようになったりします。何千ものMODのひとつひとつがコードのどの部分を変更しているのか、私たちは知ることができませんし、それでも問題を修正したりゲームに新機能を追加したりするために変更する必要がありました。MODを壊さない唯一の方法は、ゲームのアップデートを一切しないことで、もちろんそれは必要だった。Cities.Skylines』の最後の数本の拡張版のひとつに携わったとき、楽しかった瞬間のひとつがあった: Cities:Skylines』の最後の拡張版のひとつに携わったとき、リリース後に自分のMODのひとつが壊れていることに気づいた。

Cities: Cities:SkylinesII』では、MODがゲームと同じように機能を導入するため、このような問題はずっと少なくなるはずだ。完全な新機能を作るために、ゲームコードのいろいろな場所を探して、そのすべてにMODの機能を追加するように修正する必要はないし、将来のゲームアップデートでベースとなるゲームの場所が変更されることを心配する必要もない。必要なのは、独自のシステムを作成し、それを更新ループに登録することだけです。その瞬間から、ゲームはベースゲームのシステムと同じようにそれを扱うようになります。もう一つの例はゲーム設定です。あなたのMODから特別な属性でマークされたプロパティを取得し、ゲーム設定に記入するシンプルで柔軟な自動システムを作りました。この場合も、1つのメソッドを呼び出すだけで設定を登録することができ、MODの設定ページの作り方について悩む必要はありません。

ゲーム設定システムにより、MODへの設定追加がより簡単になりました。

我々はまた、ゲームがMODとその依存関係を処理する方法を改善しました。あるMODが別のMODに統合され、3つ目のMODからデータを取得し、4つ目のMODの何かを変更する場合、複雑になる可能性があります。これはCities: Cities:Skylines』では、このようなMODとゲームの複雑な関係を管理するのに苦労しました。Cities:Skylines』では、あるMODがゲームを壊してしまうという事態に直面したことだろう: Cities:Skylines』では、あるMODが別のMODを壊してしまうという状況に直面したことでしょう。Cities: Cities: Skylines IIでは、そのような複雑な関係のほとんどをキャッチし、MOD間の依存関係の衝突を解決しようとしています。さらに、MODのロード順序のようなものは存在しません。Cities. Skylines IIではその心配はありません: Cities: Skylines IIではその心配はありません。

 モデラーの視点

Colossal Orderで働く前はプログラマーでしたが、今までゲームスタジオで働いたことはありませんでした。モデリング・コミュニティ出身なので、ゲーム開発者の視点から見ると、それほど重要でないように見えることがあることに気づきました。開発中は、特別なエンジンツールを使い、ソースコード全体にアクセスできますが、改造者の視点から見ると、そのようなことはありません。開発者ツールを使えば数クリックで何かが作れるのに、それがなければ何時間も、あるいは何日もかかるというような大きな違いが生じることもあります。私がColossal Orderで働き始めてから、「ああ、本当にエンジンエディターではこんなに簡単にできるのに、私や他のモデダーはそれで苦労しているんだ」と思ったことが何度もありました。なぜゲーム内で改善されなかったのか説明がつきます。” 私はMODの経験があるので、こうした違いに気づき、それを強調することで、MODを作るのが格段に簡単で速くなるような改善を実装することができます。

私たちは私の改造経験だけに頼っているわけではありません: Cities:Skylinesの人気MODの作者が多数参加しています。彼らには『Cities: Skylines II』の早期アクセス権が与えられています: 彼らはCities: Skylines IIとModdingツールチェーンへの早期アクセス権を与えられ、ゲームとModdingの可能性を探求し始めました。この間、彼らは簡単なModをいくつか作りました。そのうちのいくつかは、私たちがまだModのサポートに取り組んでいる間に、すでに試されたかもしれません。私たちは、改造APIに何を望むか、あるいはゲームコードのどの部分にもっと簡単にアクセスしたいかについて、彼らのフィードバックに耳を傾けています。私たちは、彼らが自分たちのアイデアを実現できるようにし、ゲームをさまざまな興味深い方向に持っていけるようにしたいと考えています。

他のModderにとって有用な機能に取り組むことは、私にとって非常に刺激的であり、早期アクセス権を持つModderたちが、私がゲームに実装したツールを使って、Cities: スカイラインズII コード改造のサポートがゲームに追加された後、より広いコミュニティがどんなものを考え出すか楽しみでなりません。

MOD
RAHAをフォローする
Cities Skylines2 攻略情報局

コメント

タイトルとURLをコピーしました