Cities: Skylines2(シティーズスカイライン2)

Cities: Skylines 2の公式情報「DEVELOPMENT DIARY: CODE MODDING」を雑翻訳して読んでみた(MODについて)

Cities: Skylines II(シティーズスカイライン2)の情報

Cities: Skylines 2の公式情報「DEVELOPMENT DIARY: CODE MODDING」(MODについて)をさらっと翻訳して読み解いていきたいと思います。


Development Diary: Code Modding – Colossal Order Ltd


Modding Development Diary #3: Code Modding
Hello, I am Sergey, you probably know me as MacSergey. I am the author of a few popular mods for Cities: Skylines like I...

(どちらも同じ内容)

DEVELOPMENT DIARY: CODE MODDING

こんにちは、私はSergeyです。おそらくMacSergeyとして知っているでしょう。
私はCities: SkylinesのIntersection Marking Tool、Node Controller Renewal、Network Multitoolなど、いくつかの人気のあるModの作者です。
2年前にColossal Orderに雇われ、現在はCities: Skylines IIのModding機能に取り組んでいます。
今日の開発日記では、コードModdingに対する私たちのアプローチを共有したいと思います。

あ! あのMODの作者さん雇われてたのか!と。全部使ってるMODですからねぇ。なるほど。なるほど

コードModdingの改善

コードModdingはCities: Skylinesの大きな部分を占めていましたが、Cities: Skylines IIでは同じかさらに多くのModdingの可能性を提供したいと考えています。
私たちは、ゲームをModdingできることは非常にクールなことであり、多くの機会をもたらすと信じています。
Cities: SkylinesをプレイするためにさまざまなプレイヤーがModを使用する方法を見てみると、完全に異なるプレイスタイルを見ることができます。
まるで彼らが異なるゲームをプレイしているかのようです。
一部のプレイヤーは、小さなディテールまで現実世界を再現したいと考えています。
一部のプレイヤーは、交通と産業生産チェーンを管理したいと考えています。
一部のプレイヤーは単に楽しみたいと思っており、街を100の竜巻で襲いたいと思っています。

すべての人にとっての「完璧な機能セット」は異なります。
ベースゲームの機能には、コミュニティからの多くの人気のある提案が含まれていますが、正直なところ、すべてのプレイヤーのすべての願いを実現することは不可能です。
ここでModが登場します。誰もが自分の好きなように何かを実装したり、ゲームを変更したりすることができます。
たとえあなたがその機能を必要としている世界で唯一の人であってもです。

私の場合もそうでした。
私は2019年にCities: Skylinesについて知りました。
インターネットであるプレイヤーがゲームで自分の故郷を再現したという投稿を見て、ゲームを試してみたいと思いました。
プレイを始めてベースゲームが私に許可してくれることが気に入りましたが、ある時点で「これやあれができたらいいのに」と考え始めました。
そしてゲームをModdingできることに気づきましたが、残念ながら私が望んでいたことを実現するModは見つかりませんでした。
そこで自分で作成することにしました。
私のModが人気になるとは思ってもいませんでしたし、他にも同じ機能が必要な人がいるとは思ってもいませんでしたが、結果として私のModは非常に人気になりました。

Cities: Skylinesがリリースされてから9年近く経ちますが、今でも新しいModが作成されているのを見るのはとてもクールだと思います。
これらの中には、コミュニティの目には欠かせないModになったものもあります。
誰かが自分のために作成して他の人と共有することを決めるまで、人々がそれを必要としていることに気づいていなかったからです!

Modクリエイターさん達がいることで私たちは自分で楽しみたいゲームを作る事が出来るってのが分かりますねぇ。
それを許可してくれているColossalOrderも太っ腹ですけど。
プレイヤー事に遊びたいゲームが違うのにそれが出来る所が凄いです

Cities: Skylines IIへのMod導入

Cities: SkylinesはModdingを非常に限定的にしかサポートしていませんでした。
しばしばゲームが何かを簡単に変更することを許さないポイントに達し、実装するのに何日もかかることがありました。
他のMod制作者も同じ制限に達し、それぞれの実装を行うことがありましたが、これらが互いに衝突することもありました。

Cities: Skylines IIでは、ほぼすべてのModが機能に関係なく必要とする一般的なものの実装を自分で行う必要がないように、Moddingを簡素化するためのできるだけ多くのサポートを提供したいと考えています。
また外部ツールのどのバージョンをインストールする必要があるかを何日もかけて調べたり、IDEでModプロジェクトを設定したり、Modをコンパイルするために必要なゲーム依存関係を追加したりする必要がないように、いくつかの品質向上を実装しました。

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

開発環境までしっかり考えてくれているって事ですね。
そんなところにまで拘りがあるとは思ってもいませんでした。
いや…CSのMODの相性問題とか競合問題とかその辺は大変でしたからねぇ
そういうのが減りそうだってのは大きいですね

Cities_CSII-0698

UIでは、ゲームをModdingするために必要なツールのインストール進行状況を追跡します。

次に、新しい.Netテンプレート機構を使用するModプロジェクトテンプレートを作成し、Visual StudioまたはRiderで新しいプロジェクトを作成する際のプロジェクトリストに表示されるようにしました。
必要な依存関係、パス、およびポストビルドアクションが設定されているため、「ビルド」ボタンを押すだけで、Modがコンパイルされ、ポストプロセスが行われ、正しいフォルダに配置されるため、ゲームを起動してそこにあることを確認できます。
Cities_CSII-0699
Visual StudioのModプロジェクトテンプレートは、新しいプロジェクトダイアログを作成します。

Modが完成したら、Visual StudioやRiderの標準のIDEの「公開」オプションを使用して、Paradox Modsに直接公開することができます。
プロジェクトテンプレートには空の公開設定ファイルが含まれており、これを記入した後、プロジェクトをクリックして「公開」オプションを選択します。
すると、ModがParadox Modsに公開され、他のプレイヤーが購読して使用できるようになります。
Cities_CSII-0700
Riderの公開オプション

MODの最適化

ゲームは、マルチスレッディングと低レベルの最適化を活用し、一部の計算の速度を30~40倍まで向上させることができるUnityエンジンの新しいテクノロジー、例えばエンティティコンポーネントシステムやバーストコンパイルを使用しています。
しかしこれらのテクノロジーはそれらの利点を得るために追加の知識を必要とし、そうでなければそれらを全く使用しない場合よりもパフォーマンスが悪化する可能性があります。
Cities: Skylinesで慣れ親しんだModdingのアプローチでは、Cities: Skylines IIで達成できる最良の結果を得ることはできません。

Harmonyのようなツールを使用することは、Cities: SkylinesのModdingでは一般的ですが、現在はやや制限されています。
Harmonyは管理されたコードのみをパッチすることができますが、ゲームコードの一部はバーストコンパイル後に最適化目的で非管理されたコードになります。
Harmonyはそのようなコードをパッチすることはできませんが、これは問題ではありません。
なぜならすべてのゲームエンティティとコンポーネントに関する情報はModのシステムからアクセス可能であり、既存のゲームコードを変更することなく変更または追加することができるからです。

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

最適化は必須ではありません。
なぜならあるコードはそのような最適化から利益を得ないからです。
したがって、実際にはあなたのコードが何をするかによります。
多くの場合、Unity APIはポストプロセッシング段階でコードの一部を実際の実装に置き換えるソースコード生成を使用するため、使用するべきです。
生成されたModプロジェクトテンプレートとMod Post Processorで作成したセットアップを使用せずに、そのようなAPIコールを使用するコードがある場合、コードは動作せず、「NotImplemented」例外がスローされます。

MODの互換性

Cities: SkylinesをModdingしたことがある方なら、ゲームのアップデートがModの機能にどのように影響を与えるかをご存知でしょう。
これはCities: Skylines IIで改善しようとしていることの一つです。
Modが変更するゲームコードが変更される可能性があるため、完全に問題を防ぐことはできませんが、ゲームがアップデートされたときにModが壊れる可能性を減らすように努力しています。

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

Cities: Skylines IIでは、Modがゲームと同じ方法で機能を導入する場合、この問題ははるかに少なくなるはずです。
完全に新しい機能を作成するために、ゲームコードのさまざまな場所を見つけてすべてを変更し、Modの機能を含める必要はありませんし、そのうちの一つが将来のゲームアップデートのいずれかで変更されることを心配する必要もありません。
必要なことは、自分自身のシステムを作成し、それを更新ループに登録することだけです。
その瞬間から、ゲームはそれをベースゲームシステムと同じように扱います。
もう一つの例はゲーム設定です。私たちは、特別な属性でマークされたModのプロパティを取り、それらをゲーム設定に埋め込むシンプルだが柔軟な自動システムを作成しました。
再び、一つのメソッドを呼び出して設定を登録し、Modの設定ページをどのように構築するかを心配する必要はありません。

更新後のMODが使えなくなる自体ってのは少なくなるようです。
それは本当に助かりますね…バージョンアップされたらしばらくプレイできないってのが通例でしたから。
どこまで?ってのはありますが大きな期待の1つです
Cities_CSII-0701

ゲーム設定システムにより、Modに設定を追加することがはるかに簡単になります。

私たちはまた、ゲームがModとその依存関係を処理する方法を改善しました。
あるModが別のModに統合され、第三のModからデータを取得し、第四のModで何かを変更する場合、これは複雑になることがあります。
これはCities: Skylinesでの問題でした。ゲームは、Modとゲームの間のそのような複雑な関係を管理するのに苦労しました。
Cities: Skylinesで、あるModが別のModを壊す可能性がある状況に直面したことがあるかもしれません。
なぜなら、それらは同じ依存関係の異なるバージョンを使用していたからです。
Cities: Skylines IIは、そのような複雑な関係のほとんどを捕捉し、Mod間の依存関係の衝突を解決しようとします。
さらにあるModが機能するために別のModよりも先にロードされなければならないというような、Modのローディング順序というものはありません。
Cities: Skylines IIでは、それについて心配する必要はありません。

MODのローディング順は考え無くて良くなるのか。
そういう部分でしっかり改善されているのは助かりますね。
使う側としても

Mod制作者の視点

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

私たちは私のMod制作の経験にのみ依存しているわけではありません。
なぜなら、Cities: Skylinesの人気Modの多くの作者を含むMod制作のベータ版があるからです。
彼らはCities: Skylines IIとMod制作ツールチェーンへの早期アクセスを与えられたので、ゲームとそのMod制作の可能性を探り始めることができました。
その間、彼らはいくつかのシンプルなModを作成しました。
そのうちのいくつかは、私たちがまだMod制作のサポートに取り組んでいる間に、すでに試しているかもしれません。
私たちは、彼らがMod制作APIで見たいものや、ゲームコードのどの部分にアクセスしやすくしたいかについてのフィードバックを聞いています。
私たちは彼らが自分たちのアイデアを実現し、ゲームをさまざまな興味深い方向に進めることができるようにしたいと考えています。

他のMod制作者にとって役立つ機能に取り組むことは、私にとって非常に刺激的でした。
そして、早期アクセスを持つMod制作者が、私がゲームに実装したツールを使用して、Cities: Skylines IIのために彼らの素晴らしい新しいModを作成する様子を見ることができて、すでに誇りに思っています。
私たちがゲームにコードMod制作のサポートを追加すると、より広いコミュニティが何を生み出すかを見るのが待ちきれません。
そして、私たちは受け取ったフィードバックに基づいてそれを改善し続けます。

コードModツールは、ビーチプロパティアセットパックと一緒に3月25日にリリースされます!

感想

と、言うことでMODを作ってた人が開発側に回り色々なお話をしてくれていました。
MOD利用してきた者としても頷ける内容が結構あったので楽しかったです。
MODがかなり作りやすくなっているってのは分かりました。
だからといって作りはしませんけども。

MODが出回るとどんな変化が訪れるのか。
そこも楽しみですね!

前回記事


Cities: Skylines 2の公式情報「Modding Development Diary #1: Guest entry - Paradox Mods in Cities: Skylines II」を雑翻訳して読んでみた
Cities: Skylines II(シティーズスカイライン2)の情報Cities: Skylines 2の公式情報「Modding Development Diary #1: Guest entry - Paradox Mods in ...


Cities: Skylines 2の公式情報「DEVELOPMENT DIARY: MAP EDITOR」を雑翻訳して読んでみた
Cities: Skylines II(シティーズスカイライン2)の情報Cities: Skylines 2の公式情報「DEVELOPMENT DIARY: MAP EDITOR」をさらっと翻訳して読み解いていきたいと思います。 DEVEL...


※画像はクリックでオリジナルサイズ
※このページでは、Paradox,Colossal Orderが権利を所有する画像を利用(引用)しております。当該画像の転載・配布は禁止いたします。

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