質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.81%

ゲームで利用するデータの構造について

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 7,364

taroko

score 52

Unityでゲームを作ろうと思っています。
最初は簡単なアクションゲーム等作るのが良いのだとは思いますが
最終的にデータベースを利用するくらいのものを作ろうと思っているため
データベースから作ろうと思っています。

Unityが全然関係ないのかもしれませんが、
このデータをどのように作成するのが良いのか分かりません。
RPGを作成する場合だと、データベースを使うことが多いように思いますが
よく分からないのです。

1.システムデータベース
(変動しない、決まったもの)
2.可変データベース
(ステータスやレベル、その他イベントでの会話文など)
3.ユーザーデータベース
(ユーザーごとのデータ)

もしかしたら、可変データベースとユーザーデータベースは同じものかもしれません。
このデータベースをそれぞれ作り、参照して完成するのだと思いますが
作ろうと思うと大量のデータベース(?)が必要になるために
サンプルが無いか探していました。
以下が出てきたので、参考にします。

キャラ場所表

イベント キャラ 場所 状況 台詞 好感度
1 キャラA 公園 デート 「やっと来たんだ~」 10%
2 キャラB 公園 偶然 「お、増田くんじゃん♪」 50%
3 キャラC 遊園地 デート 「おっそーい!」 5%

アイテム表(好感度100%とかの記載は、数式等を入れる予定です)

ID アイテム 場所 状況 効果 プラス マイナス
1 ほれ薬 自宅 特になし 好感度100% 選択キャラの好感度100% 他キャラの好感度0%
2 正露丸 自宅 腹痛 下痢がおさまる トイレの待機時間が5分減る 食欲5ダウン

データベースは上記のような作り方で良いのでしょうか?
それとも、1つのデータベースに追加していくのが普通なのでしょうか?
サンプル等ありましたら教えて下さい。よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

極端な話、データベースは「何でもいい」です。
以下、雑多な所感です。


オンラインの場合はMySQL等のサーバーサイドのデータベースシステムを使うと思うので、そちらの学習をしてください。
(小規模であれば1台のデータベースに各種テーブルを持つ形でいいと思います)


オフラインの場合は、

  • サンプルのような形(ファイル形式はお好みで)
  • CSVにひたすら羅列
  • スクリプトから初期値として全部記入する
  • クラス作ってList作ってインスペクタで設定
  • ScriptableObjectを使用

などなど、お好きな方法でどうぞ。
↓ScriptableObjectやExcelを使う例
【Unity】ScriptableObjectを使用した、コンポーネント・シーン間でのデータ共有について - テラシュールブログ
【Unity】Excel Importer Maker、xlsxに対応 - テラシュールブログ


どちらの場合も暗号化・チート防止策は併せて考慮しておくといいと思います。

ゲーム内容によっては、ソシャゲのように「ソフトの更新はしないままイベントを増やしたい(変更したい)」ようなケースも考えられます。
その場合、データベース(にあたるシステム)をAssetBundleでどう管理するか?も考えておくとよいと思います。

また、ユーザー毎のデータはセーブシステムと関連する為、セーブの方法をどうするか検討した上で作ると後の手戻りが無くなります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/08 11:37

    回答ありがとうございます!
    オフラインとして考えていますが、最終的にはオンラインで
    最新シナリオをロードして…等も考えております。
    あぁ、いろんなテーブル(表)が集まって1つのデータベースになるんですね!
    そこからよく分かってませんでした。そうですね!

    >暗号化・チート防止策
    そうですね!調べるしか方法は分からないですが
    何か対応取らないと良くないですものね。

    >・ソフトの更新はしないままイベントを増やしたい
    >データベース(にあたるシステム)をAssetBundleでどう管理するか?も考えておくとよいと思います。
    AssetBundle聞いたことあります!聞いたことがあるってだけのレベルで申し訳ないです…
    ちゃんと調べて勉強します!

    >ユーザー毎のデータはセーブシステムと関連する為、
    >セーブの方法をどうするか検討した上で作ると後の手戻りが無くなります
    データベースを利用する場合
    ユーザー用のテーブルを作り、保存するっていうのはあまり良くないのでしょうか?
    やはり利便性というか、そういう話…ですかね

    色々調べることができましたので、もう少し調べてみます!
    ありがとうございました!

    キャンセル

  • 2018/03/08 13:16

    > セーブシステム
    データベース(テーブル)使用でも問題無いと思いますが、利便性とチート対策と関連します。
    例えば「コンフィグ(音量とか、変更されても問題無いもの)」だったらデータベース等ではなくPlayerPrefsを使っても特に問題は無いでしょうし、ハイスコアなど「ランキングとして共有する」ことが前提ならサーバーサイドに処理を任せてしまうという手もあります(それはそれでログイン情報をどう保存・維持するか検討が必要ですが)。

    今回の件に限らず、Unityは1つの「やりたいこと」に対し実装方法が複数あるケースが多いので
    常に「他のやり方はあるかな?」と気にするようにすると良いかもしれません。

    キャンセル

+3

最初は簡単なアクションゲーム等作るのが良いのだとは思いますが

いきなりデータベースからではなく簡単なものを作って「作る」という感覚が身に付いてからの方が良いです。

データベースを利用する際もいきなり大きなものからではなく、
例えば単純にアイテムを管理するだけのもの、とかユーザーを管理するだけのもの、とか用途を限定して作るところから入った方が良いです。

いずれも、最初から大きなものに取り組むと、自身のスキルとのギャップが大きすぎて確実に・しかも早い段階でショートします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/05 13:09

    ありがとうございます!
    >最初から大きなものに取り組むと、自身のスキルとのギャップが大きすぎて確実に・しかも早い段階でショートします。
    確かに。思い当たる節がありすぎて頭が痛いです。

    段階を踏んで、1個ずつ作るべきってことですね!確かにそうです。
    1段階ずつどのように組んでいくか考えて見ます^^

    キャンセル

+2

直接の回答ではありませんが、失敗に学ぶこともスキルアップへの王道のひとつ。
ゲーム開発に着手する前に読んでおきたい資料集 開発者必読!ソーシャルゲーム開発の参考になるスライド10選

ちなみに、ここのサイトはさくら求人が多いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/05 15:30

    使えそうな人材を登録させて、さくらではない案件が入ったら紹介するためでしょう。
    効率はかなり悪そうですが。

    キャンセル

  • 2018/03/06 09:29

    そのサイトは、このteratailと関連した企業ですね。

    キャンセル

  • 2018/03/06 09:33

    関連企業とは知りませんでした。少しはさくらが減ると良いですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問