f4エンジニアブログ

f4samuraiの中の人たちが書いています

「長期運用」に基づく資産の形成

はじめに

みなさんこんにちは。ネイティブエンジニアの宮﨑です。

今回は社内の第2回技術記事コンテストに投稿した記事を紹介します。

技術記事コンテストには毎回テーマがあり、第2回のテーマは「今のプロジェクトで変えたいところ」でした。

私がテーマに掲げたのは「長期運用」に基づく資産の形成です。

どうも資産運用っぽいタイトルになりましたが、プロジェクト運用の話です。

 

バトルスキル開発コストの悩みと中長期的な設計の重要性

さて、今日のゲーム開発において一つ悩んでいることがあります。それは「ゲームキャラクターが持つバトルスキル」の開発コストが下がらないことです。

私は現在、運営タイトルを担当しています。このタイトルには新規開発時から所属していました。

今振り返ると、リリース前の開発期間では分析や設計に十分な時間を割けませんでした。目の前の要望に応えることに注力し、中長期的な展望を見据えることが出来ていなかったのです。

また、リリース当初のスキル実装には多くの「バリエーション」が不要であったため、将来的なニーズを見落としていました。

今必要でない機能の優先度が下がり、「必要になったタイミングで改修する」という判断が下されましたが、いざ運用が始まると「動作保証」が重要になり、既存スキル全てに影響するような大規模な改修は容易にできなくなりました。

具体的には、「開発コスト削減のためのプログラム修正」という売り上げに直接反映されない業務を行いたかったのですが、それをすると「QAによる既存スキル全チェック」という工数が発生することになり、運用が進むほどコスト削減のためのプログラム修正が困難になりました。

「運用が落ち着いたら改修しよう」ではなく、「運用が始まる前に」「先を見据えて」設計しておく必要があったのです。

 

開発コストが下がらない2つの理由:バリエーションの増加と複雑なスキル管理

開発コストが下がらない原因の一つ目は、常に「バリエーション」が増加することです。

スキルの「効果」や「条件」など、毎月新要素を開発しています。新たな機能追加であり、遊びの幅を広げることに工数が発生するのは仕方のないことです。

原因の二つ目は、「効果」と「条件」の組み合わせを1スキルとして実装してしまったことです。2つを組み合わせるために、常に追加で実装が必要になる設計にしてしまったのです。

この原因が曲者で、新たなスキルを開発するには、常にエンジニアがコードを書く必要があります。

毎月新スキルが5個追加される場合、5つのクラス・PRが発生し、これらの開発コストは常に発生します。

 

開発コスト削減のための3つの対策

対策としては以下3つが考えられます。

①マスタ上で柔軟なスキル表現を可能にする
②Unity機能を利用する (ScriptableObject)
③Unityコード内での「バリエーション」開発を容易にする

 

マスタ上で柔軟なスキル表現を可能にする

現在の設計を見直すなら、スキル効果とスキルの発動条件を分けてクラス実装し、マスタにて自由に組み合わせて使えるようにするべきでした。、このようにしておけば、スキルの効果やスキルの条件それぞれが、開発資産として蓄積されます。そして、効果・条件をマスタの設定で組み合わせることで、エンジニア作業無しで新スキルを無数に生み出せることになります。

現状ではエンジニアが最終的な出力に関わることで、毎月のスキル作成数が制限され、工数が増えるという問題が生じます。しかし、これらの資産をプランナーが自由に組み合わせられることで、初めて資産の有効活用ができていると言えるのではないでしょうか。

 

②Unity機能を利用する (ScriptableObject)

プランナーがUnityでバランス調整を行うのであれば、ScriptableObjectでスキルの効果種別、発動条件、効果範囲などを組み合わせる案もあります。しかし、運用が既に始まっているケースでは一部パラメータのみをScriptableObjectで定義すると見通しが悪くなるため、採用を見送りました。

 

③Unityコード内での「バリエーション」開発を容易にする

そのため、今のプロジェクトでは既存の設計やスキル挙動に影響を与えず、エンジニア作業の効率化を目指しました。

既存スキルには手を加えず、新たなスキル構成クラスを利用することで、「効果」と「条件」の組み合わせを容易にしました。

改修効果はアプリ開発に留まり、スキル関連クラスの見通しが若干低下するなどのデメリットもありますが、エンジニアの開発工数削減やエラー率低下に寄与しています。

 

マスタでの定義による効率化と次期プロジェクトへの展望

今回は、現在運用しているプロジェクトの「スキル開発」についてより良い設計・運営方法を検討してみました。

スキル開発における「効果」「条件」をマスタで定義可能にしておけば、エンジニアの作業なくプランナーのみで新たにスキルを生み出せます。

現在のプロジェクトではマスタ変更は難しいですが、次の新規開発ではこの経験を活かして開発を行いたいと思います。

私が所属するf4samuraiについてはこちらをご覧ください▼

speakerdeck.com