#内容
前回のデータ構造を拡張して、複雑なガチャ設定ができるようにしてみます
- ガチャの引き方の設定追加
- 複数の確率を保持する仕組みの追加
##1. ガチャの引き方の設定追加
gacha_lotteryを拡張して、設定可能なガチャ条件を増やしてみます
- 属性の絞り込み(item_type)
- 通常抽選のレアリティ以上絞り込み(rarity)
- おまけの抽選回数指定(omake_times)
gacha_lottery
id | item_type | times | rarity | omake_times | omake_rarity | cost |
---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 0 | 0 | 10 |
2 | 0 | 10 | 0 | 1 | 3 | 100 |
3 | 2 | 2 | 0 | 0 | 0 | 30 |
4 | 0 | 10 | 2 | 2 | 3 | 200 |
5 | 2 | 10 | 0 | 1 | 3 | 100 |
各項目の設定条件を以下のように追加、変更します。
(これらの設定に対応するためにプログラムの改修が必要になります)
- item_type:0の場合は全て対象
- rariy:0の場合は全て対象
- omake_times:0の場合は、おまけなし
- omake_rarity:0の場合は全て対象(おまけの有無は、omake_times)
##2. 複数の確率を保持する仕組みの追加
ガチャアイテム確率情報は、ID毎の確率(重み)を管理しています。
あるIDについて確率(重み)は一つしか設定できません。
「このガチャの場合は、確率(重み)を変更したい」
ということに対応できるように、ガチャアイテム確率情報にグルーピングを行うための**グループ(gacha_group)**を持たせます。
gacha_items
id | gacha_group | weight | item_id |
---|---|---|---|
1 | A | 1 | 5101 |
2 | A | 9 | 4201 |
3 | A | 9 | 4301 |
4 | A | 9 | 4301 |
5 | A | 20 | 3201 |
6 | A | 20 | 3301 |
7 | A | 20 | 3401 |
8 | A | 40 | 2201 |
9 | A | 40 | 2301 |
10 | A | 40 | 2401 |
11 | B | 15 | 4201 |
12 | B | 30 | 3201 |
13 | B | 55 | 2201 |
####gacha_lotteryの修正
gacha_itemsと紐付けるためのgacha_groupを追加します
gacha_lottery
id | gacha_group | item_type | times | rarity | omake_times | omake_rarity | cost |
---|---|---|---|---|---|---|---|
1 | A | 0 | 1 | 0 | 0 | 0 | 10 |
2 | A | 0 | 10 | 0 | 1 | 3 | 100 |
3 | B | 0 | 2 | 0 | 0 | 0 | 30 |
4 | A | 0 | 10 | 2 | 2 | 3 | 200 |
5 | A | 2 | 10 | 0 | 1 | 3 | 100 |
##考察
###・データ構造と出来ること
id | gacha_group | weight | item_id |
---|---|---|---|
11 | B | 15 | 4201 |
12 | B | 30 | 3201 |
13 | B | 55 | 2201 |
id | gacha_group | item_type | times | rarity | omake_times | omake_rarity | cost |
---|---|---|---|---|---|---|---|
3 | B | 0 | 2 | 0 | 0 | 0 | 30 |
グループがBのガチャを抜き出してみました。
このガチャは、「属性がFighterのみ引けるガチャ」になります。
属性が**Fighter(item_type=2)**のみということであれば、**属性(item_type)**の絞り込みで可能ですが、確率の設定も変更したいので、敢えて別グループを作成しました。
拡張により、このガチャの仕組みにて出来ることをまとめると以下のようになります
- ガチャ対象アイテムをグループ(母集団)として複数設定
- ガチャ実行時に属性の絞り込み(item_type)
- ガチャ実行時に通常抽選のレアリティ以上絞り込み(rarity)
- ガチャ実行時に通常抽選の回数指定(times)
- ガチャ実行時におまけのレアリティ以上絞り込み(omake_rarity)
- ガチャ実行時におまけの抽選回数指定(omake_times)
###・開発の現場において
通常はガチャの企画と、運用の設定されるのはプランナーさん(非エンジニア)です。企画に応じて、データ設計とプログラム開発をエンジニアが行うことになります。
そのため、エンジニアとして開発をする際に抑えておきたいことは、以下の2点になります
- ガチャとしての基本的データ構成
- 機能の拡張性
また、運用データの設定のしやすさも求められることです。
複雑すぎてエンジニアでなければデータの設定ができないというのは、自分の首を絞めることになりかねないので気をつけておきたいことです。