ゲームプログラムのありふれたコツ

ゲームデータについて(9)ジェネリックの利用

これまで紹介したサンプルプログラムは固定データ・可変データを1種類ずつしか持っていませんが、大抵のゲームでは多数用意することになると思います。 今のままでは各クラス間で重複するコードが多く、データの種類が追加される度にこれらを全て書く必要が…

ゲームデータについて(8)テキストデータの差し替え処理のつづき

前記事のサンプルコードについて簡単に解説し、使用例も紹介します。 差し替えタイプとタグの定義 // 差し替えタイプ. private enum REPLACE_TYPE { NUMBER = 0, // 数値. STRING, // 文字列. MONSTER, // モンスター名. NUM }; // 差し替えタグ. private st…

ゲームデータについて(7)テキストデータの差し替え処理

本記事ではこちらの記事で軽く触れた、テキストデータの一部をゲームの状況に応じて特定の文字列に差し替える処理の実装について説明します。 文字列の差し替え処理の実装 テキストデータにタグを埋め込んで、タグの種類に応じた文字列を差し替える処理を実…

ゲームデータについて(6)テキストデータのつづき

前記事からの続きです。 ラベルのコンバータを作成 textData.xlsmのB列に記載されたラベル定義をソースコードとして出力するコンバータを作成します。 他のコンバータと同様にUnity Editor上に作りたいところですが、出力されるファイルはプロジェクトの一部…

ゲームデータについて(5)テキストデータ

本記事ではテキストデータについて説明します。 システムメッセージデータとモンスターの名前データを作成するケースを例にとります。 テキストデータの外部ファイル化 テキストデータも固定データと同様に外部ファイル化します。 Assets/EditorにTextDataと…

ゲームデータについて(4)可変データ

本記事では可変データの初期化・セーブロード処理について説明をします。 可変データクラスの実装 味方キャラクターのデータを作るケースを例とします。 Assets/GameData/にVariableDataというディレクトリを作成し、Assets/GameData/VariableData/にCharact…

ゲームデータについて(3)固定データのつづき

前記事の続きです。 本記事では作りかけのコンバータの修正とゲームデータ管理クラスの作成をしてきます。 コンバータの修正 前記事で作成したAssets/Editor/FixedDataConverter.csを開いて以下のように修正します。 using UnityEngine; using UnityEngine.A…

ゲームデータについて(2)固定データ

本記事(と次記事)ではゲームデータの一種である固定データについて、編集・コンバート・ロードする方法をUnity(C#)のサンプルコードを交えて簡単に説明します。 固定データの外部ファイル化 固定データを外部ファイル化し、必要な時(例えばタイトル画面から…

ゲームデータについて(1)概要

ゲームが参照するデータの実装について 例えばあなたがRPGを作りたいとして、手始めに敵モンスターのデータを実装したいとします。 最もシンプルな実装方法として思い浮かぶのは、以下のようにソースに直接定義してしまう方法でしょうか。 public struct Mon…

キャラクターの命令実行処理について(2)

複数のステート間の移行 前記事ではユニットに与えられた命令を処理するために、複数のステートを適宜切り替える必要があることを説明しました。 この一連のステート間の移行をどう管理すべきでしょうか? キュー(FIFO)で管理する 命令を入力したときに必要…

キャラクターの命令実行処理について(1)

キャラクターに与えられた命令を実行させるには ゲーム内のキャラクターに何らかの行動をさせるために必要な処理はゲームジャンルによって大きく異なります。 アクションゲームであればプレイヤーの入力に応じた動作を即時反映させるだけなのでシンプルです…

#includeについて(2)

#includeディレクティブはヘッダファイル以外にも利用することができます。 そのケースを2つほど紹介します。 .cppファイルを#includeする プロジェクト規模が大きくなり.cppファイルの数が膨大になると、リンクに非常に時間がかかったりメモリ不足を起こし…

#includeについて(1)

今回はC/C++の話です。 経験の浅いプログラマがたまにやってしまうのがヘッダファイル上でヘッダファイルを無配慮に#includeしてしまうことです。 これは恐らく#includeディレクティブへの理解が「コンパイルを通すためのおまじない」くらいで止まってしまっ…

サブルーチン化について(3)

プログラムがコンパイルされると関数は機械語の命令コードに変換されます。 それらは実行時にメモリ上の命令コード領域とよばれる領域に格納され、関数を実行する際は命令コードを読み取るためにそこを移動(ジャンプ)していくことになります。 命令コードは…

サブルーチン化について(2)

関数が呼ばれる際には関数の実行に必要なデータがスタックメモリ上に確保されます。 主に以下のようなものです。 関数の戻り先アドレス 関数の引き数 関数の返り値 関数内で定義された自動変数 これらは関数が呼ばれるたびにスタックメモリ上に確保され、関…

サブルーチン化について(1)

その昔若い同僚プログラマが冗長な関数を書いていたので、「この関数のこの部分をサブルーチン化すると読みやすくなるよ」と教えたことがあります。 その時返ってきたのが「ここでしか使わないような関数を作っていいんですか?」というものでした。 確かに…

ゲームプログラムのありふれたコツ

近年は誰でも簡単にゲームが制作できるようになりました。 ネットにはシンプルなゲームを作るための手順が一から十まで丁寧に記載されていて、それに従うだけでゲームを動作させるところまでたどり着けることができます。 いい時代になったと思いますが、そ…