WOLF RPGエディター(ウディタ)/初心者・変数【サイトトップへ戻る】
■「変数」って何?
(更新:2025/05/24)


「変数」について解説します。


ショートカット
■「変数」とは?
■変数を使ってみる
■変数の種類
■変数の値を文章で表示する
■変数呼び出し値
■変数の値をリアルタイムで確認する
■古いセーブデータに関して
■補足


  
■「変数」とは?

変数は、数値や文字列を保存する時に使います。

数値の変数 「±20億(-2,000,000,000〜2,000,000,000)」の範囲の数値を保存する事ができます。
※コモンイベントの場合は「2,147,483,648」を超えると、
 「-2,147,483,647」になってしまう仕様があるため、注意が必要です。
「1.5」などの小数の保存はできないため、
例えばパーセントの計算を行う場合は、通常では「現在値÷最大値×100」で計算しますが、
「現在値÷最大値×100」では「50÷100」が「0.5」ではなく「0」になってしまうため、
ウディタでは「現在値×100÷最大値」のように、現在値を100倍にしてから最大値で割るなどして、
小数にならないように計算する必要があります。
文字列の変数 文字列を保存する時に使います。
文字数に制限はありませんが、数十万文字などの大量の文字を保存させると、
文字列を操作する時に処理落ちが発生しやすくなります。



以下は、変数の使用例です。

◆数値や文字列の情報を保存

様々な数値や文字列の情報を保存するのに、変数が使われています。

主人公関連 名前、肩書き、レベル、HP、SP、攻撃力などのパラメータ、
顔グラフィックや歩行グラフィックのファイルアドレスなど。
パーティ関連 パーティにいる主人公の情報や所持品(アイテム、武器、防具、お金)の情報など。
敵キャラ関連 名前、能力値、行動内容、敵グループにどの敵キャラがいるのか、獲得経験値など。
操作関連 キーボードやマウスで押されたキーの情報、マウスポインタの位置情報など。
イベント実行済み 宝箱を開けてアイテムを取得したかどうか、ボスキャラを倒したかどうかなど。
その他 主人公やマップイベントの現在位置や向いている方向などの情報、
ピクチャの表示状態に関する情報、現在演奏中のBGMに関する情報、
表示する文字のサイズ、プレイ時間、ゲーム画面のサイズなど。
◆計算

足し算、引き算、掛け算、割り算などを使って、パーセントの計算やダメージの計算、
主人公とマップイベントとの距離の計算など、様々な計算処理を行う時に変数を使います。
◆条件分岐

変数の値によって、処理内容を変えたい時に「条件分岐」を使います。

例えば…
■条件分岐(数値): 【1】 可変DB[ 7:0:0 ] (薬草:所持個数) が 0 と同じ
-◇分岐: 【1】 [ 可変DB[ 7:0:0 ] (薬草:所持個数) が 0 と同じ ]の場合↓
|■文章:薬草を持って行きなさい。
|■イベントの挿入[名]: ["○アイテム増減"] <コモンEv 0> / 0:薬草 / 1 / 2:あり[単位:〜枚]
|■
◇分岐終了◇
■文章:気を付けて旅を続けなさい。
の場合は、
薬草の所持数が「0」の時には、薬草を受け取って「気を付けて旅を続けなさい。」が表示されますが、
薬草の所持数が「1以上」の時には、薬草はもらえず「気を付けて旅を続けなさい。」だけが表示されます。

このように条件分岐を使うと、現在の変数の値に合わせて、処理内容を変える事ができます。
◆イベントの起動

指定した変数の値になった時に、マップ上にマップイベントを表示したり、
自動的にイベントを起動させたりする時に使います。



理想とするゲーム作品を完成させるためには、変数の使い方をしっかりと覚えた方が良いでしょう。


▲トップへ戻る▲


  
■変数を使ってみる

【イベントコード表示】

■マップイベント

グラフィック:キャラの画像
起動条件:決定キーで実行/変数条件なし

■条件分岐(数値): 【1】 このEvのSelf0 が 0 と同じ 【2】 このEvのSelf0 が 1 と同じ
-◇分岐: 【1】 [ このEvのSelf0 が 0 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 1 + 0
|■文章:こんにちわ!
|■
-◇分岐: 【2】 [ このEvのSelf0 が 1 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 0 + 0
|■文章:元気ですか!
|■
◇分岐終了◇
■

上記のマップイベントは…
変数の値が「0」の時→変数の値を「1」に変更→「こんにちわ!」を表示
変数の値が「1」の時→変数の値を「0」に変更→「元気ですか!」を表示
と言った設定になっており、
話しかける度に「こんにちわ!」と「元気ですか!」が交互に表示されます。



さらにシステム変数[80:現在の[時]]を利用して、現在の時間に合わせて挨拶の内容を変える設定を行う事もできます。

システム変数[80] 設定文章
18〜23 こんばんわ!
11〜17 こんにちわ!
5〜10 おはよう!
0〜4 こんばんわ!

【イベントコード表示】

■マップイベント

グラフィック:キャラの画像
起動条件:決定キーで実行/変数条件なし

■条件分岐(数値): 【1】 このEvのSelf0 が 0 と同じ
         【2】 このEvのSelf0 が 1 と同じ
-◇分岐: 【1】 [ このEvのSelf0 が 0 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 1 + 0
||■条件分岐(数値): 【1】 Sys80:現在の[時] が 18 以上
          【2】 Sys80:現在の[時] が 11 以上
          【3】 Sys80:現在の[時] が 5 以上(上記以外:ON)
|-◇分岐: 【1】 [ Sys80:現在の[時] が 18 以上 ]の場合↓<18〜23時台
||■文章:こんばんわ!
||■
|-◇分岐: 【2】 [ Sys80:現在の[時] が 11 以上 ]の場合↓<11〜16時台
||■文章:こんにちわ!
||■
|-◇分岐: 【3】 [ Sys80:現在の[時] が 5 以上 ]の場合↓<5〜10時台
||■文章:おはよう!
||■
|-◇上記以外<0〜4時台
||■文章:こんばんわ!
||■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ このEvのSelf0 が 1 と同じ ]の場合↓
|■変数操作: このEvのSelf0 = 0 + 0
|■文章:元気ですか!
|■
◇分岐終了◇
■

さらに変数を追加すれば、例えば話しかけた方向によって文章を変えたり、
パーティにいる人数によって文章を変えたりする事ができます。

このように変数に数値や文字列を保存し、
保存された変数の内容に合わせてイベントの処理内容を変えていくのが、ゲーム制作の基本となります。


▲トップへ戻る▲


  
■変数の種類

変数には様々な種類があり、使用用途に合わせて変数を使い分けます。

セルフ変数 マップイベントやコモンイベントに用意されている変数です。
各マップイベントには数値系の変数が10個あり、
各コモンイベントには数値系の変数が95個と文字列系の変数が5個あります。
セルフ変数は主にそのセルフ変数を持つイベントの中で使用します。
他のイベントに数値や文字列の情報を渡す時には、
通常変数(予備変数)、文字列変数、可変DBなどを使って渡します。
マップイベントのセルフ変数は、マップごとに管理されているため、
マップ[0]にあるマップイベント[0]のセルフ変数[0]と、
マップ[1]にあるマップイベント[0]のセルフ変数[0]は異なる変数として処理され、
セーブデータもそれぞれ異なる変数として保存されます。
マップイベントのセルフ変数は、
現在主人公がいるマップにあるマップイベントのセルフ変数しか操作する事ができません。
別のマップにあるマップイベントのセルフ変数を操作する場合は、
そのマップへ場所移動して操作する必要があります。
もしも別のマップにあるマップイベントを出現させるような設定を行いたい時には、
通常変数(予備変数)を使って処理してください。
通常変数
予備変数
ゲーム内にある全てのマップのマップイベントと、
全てのコモンイベントで使用する事ができる万能型の数値系の変数です。
自動実行や並列実行のイベントを起動する時にも使います。
通常変数と予備変数[1〜9]がありますが、
通常変数と予備変数[1〜9]は同じ仕様であり、どちらを使っても機能面では同じです。
ただイベントの設定画面の一覧では、通常変数の方が先に表示されるので、
使用頻度の高いもの(ゲーム全体で何回も使用する)は通常変数を使い、
使用頻度の低いもの(1回のみや一部のマップのみ)は予備変数を使うと良いでしょう。
予備変数は[1〜9]に分かれているため…
予備変数[1]=自動実行や並列実行のイベントを起動する時に使用
予備変数[2]=謎解きイベントで使用

などと使用用途に合わせて使い分ける事ができます。
通常変数や予備変数[1〜9]のデータ数を大量に増やすと、
イベントの設定画面を開くのに時間がかかってしまうため、
通常変数と予備変数[1〜9]のデータ数の合計は「1000」以下にした方が良いでしょう。
文字列変数 ゲーム内にある全てのマップのマップイベントと、
全てのコモンイベントで使用する事ができる万能型の文字列系の変数です。
1つの文字列変数に数十万文字などの大量の文字を設定すると、
文字列を操作する時に処理落ちが発生します。
この処理落ちは、コモンイベントのセルフ変数[5〜9]の文字列系変数や、
可変DBの文字列系変数でも発生します。
データ数を大量に増やすと、文字列変数関連の設定画面を開くのに時間がかかってしまうため、
データ数は「1000」以下にした方が良いでしょう。
システム変数
システム文字列
フォントサイズ、イベント実行中の有無、現在の時間(プレイ時間)、音量設定、
ゲーム画面のサイズの取得など、様々な情報を取得・設定する事ができます。
正しく使用しないとゲームが正常に動かなくなる事もあります。
システムDB マップの設定、BGMの設定、文字色の設定、ウィンドウ画像のアドレス設定など、
ウディタの実行に必要な設定を行うためのデータベースです。
システムDBに最初からあるタイプ、データ、項目を削除すると、
エラーが発生する可能性があります。
そのため、使わないタイプ、データ、項目があったとしても、
削除せずにそのままにしておいた方が良いしょう。
ゲーム制作者がオリジナルの新しいタイプを設定したい時には、
このシステムDBではなく、ユーザーDBや可変DBに設定してください。
ユーザーDB 読み取り専用のデータベースです。
技能やアイテムの設定、敵キャラの能力値や敵グループの設定など、
ゲーム開始時からエンディングまでの間に内容が変わらないものを設定します。
ユーザーDBの値を変えてもセーブデータには保存されず、
ロード時には初期状態のユーザーDBに戻ります。
最初からある項目の名前を変更すると、エラーが発生する事があります。
これはユーザーDBの情報を呼び出す際に、項目の名前で呼び出している事が原因です。
そのため、最初から設定されている項目の名前は変更しないでください。
なお、可変DBの方でも最初から設定されている項目の名前を変更すると
エラーが発生する可能性があるため、最初からある項目の名前は変更しないでください。
可変DB 書き込み可能なデータベースです。
主人公のレベルやHP、攻撃力などの能力値、装備の状態、習得している技能、
パーティにいる主人公のIDやパーティの人数、所持金や所持アイテムの数量など、
ゲーム開始時からエンディングまでの間に内容が変わるものを設定します。
セーブデータには、全ての可変DBの情報が保存されます。
可変DBを編集して更新したあとにセーブデータをロードした場合は、
編集した最新の可変DBは反映されず、セーブした時の古い可変DBでゲームが再開します。
最新版が反映されない理由は、例えば主人公の初期レベルを「1」にしてゲームを開始し、
レベルアップでレベル「2」になったあとにセーブした場合、
ロード時に最新の可変DBのデータを適用してしまうとレベル「1」に戻ってしまうため、
セーブデータをロードしても、最新版の可変DBが適用されない仕様になっています。
もしも古いセーブデータをロードした時に、
最新の可変DBのデータが適用されるようにしたい場合は、
ロード後に可変DBの情報を変更するイベントが実行されるように設定する必要があります。

各変数に関しては、以下のページに詳しい説明があります。
【セルフ変数の詳しい説明を見る】
【通常変数・予備変数の詳しい説明を見る】
【文字列変数の詳しい説明を見る】
【システム変数・システム文字列の詳しい説明を見る】
【システムDB・ユーザーDB・可変DBの詳しい説明を見る】


▲トップへ戻る▲


  
■変数の値を文章で表示する

変数の値を表示する時に使う特殊文字を使用する事で、
文章ウィンドウやデバッグウィンドウ、ピクチャの表示などで変数の値を表示する事ができます。



例えば、現在の時刻を表示する場合は、
システム変数[80:現在の[時]]、[81:現在の[分]]、[82:現在の[秒]]を利用して以下のように設定します。

【イベントコード表示】

■文章:現在は「\sys[80]時\sys[81]分\sys[82]秒」だよ。

▼イベント実行時が「20時34分8秒」だった時




変数の中に変数を設定する…
\cdb[0:\v[0]:0]
と言った設定も可能です。

例えば、パーティの先頭にいるキャラ名を表示する場合は、
可変DBの情報を表示する特殊文字「\cdb[A:B:C]」を二重に設定して表示します。

【イベントコード表示】

■文章:\cdb[0:\cdb[6:0:1]:0]さん、こんにちわ!



▼補足

\cdb[6:0:1]は可変DB[6:パーティー情報]にあるパーティの1人目の主人公の番号を呼び出す設定です。

\cdb[0:X:0]は可変DB[0:主人公ステータス]の主人公の名前を呼び出す設定であり、
真ん中の「X」と表示した部分には、呼び出す主人公の番号を設定します。

そのため、\cdb[0:\cdb[6:0:1]:0]の設定を行うと…
\cdb[主人公ステータス:パーティの先頭の主人公の番号:キャラ名]
と言った感じの設定になり、パーティの先頭にいる主人公の名前が表示されます。

パーティの先頭が「ウルファール」の場合 パーティの先頭が「夕一」の場合



以下は変数の情報を表示する時の特殊文字の一覧です。
なお、表の左側で「変数番号」や「タイプ」などと書かれた部分は、半角数字で設定してください。

特殊文字 説明
\self[変数番号] 表示設定を実行したマップイベントのセルフ変数を表示します。
マップイベントから呼び出したコモンイベントの中で実行すると、
呼び出し元のセルフ変数が表示されます。
マップイベントから呼び出していないコモンイベントの中で実行した場合は…
1000000−設定した変数番号=表示される数値
の値が表示されます。
▼デバッグ文にセルフ変数[5]を表示する場合
■デバッグ文:\self[5]
\cself[変数番号] 表示設定を実行したコモンイベントのセルフ変数を表示します。
マップイベントで実行すると数値変数の場合は「0」。
文字列変数の場合は「<<ERROR>>」が表示されます。
▼デバッグ文にセルフ変数[12]を表示する場合
■デバッグ文:\cself[12]
\v[変数番号] システムDB[14:通常変数名]の値を表示します。
▼デバッグ文に通常変数[4]を表示する場合
■デバッグ文:\v[4]
\v予備番号[変数番号] システムDB[15:予備変数1]〜[23:予備変数9]の値を表示します。
▼デバッグ文に予備変数3の[8]を表示する場合
■デバッグ文:\v3[8]
\s[変数番号] システムDB[4:文字列変数名]の文字列を表示します。
▼デバッグ文に文字列変数[9]を表示する場合
■デバッグ文:\s[9]
\sys[変数番号] システムDB[6:システム変数名]の値を表示します。
▼デバッグ文にシステム変数[0]を表示する場合
■デバッグ文:\sys[0]
\sysS[変数番号] システムDB[5:システム文字列]の文字列を表示します。
最後に設定する「S」は大文字にしてください。
「\syss[変数番号]」の設定では表示されません。
▼デバッグ文にシステム変数[10]を表示する場合
■デバッグ文:\sysS[10]
\sdb[タイプ:データ:項目] システムDBの情報を表示します。
▼デバッグ文にシステムDB[1:BGMリスト]のデータ[2]の
 項目[0:ファイル名]を表示する場合

■デバッグ文:\sdb[1:2:0]
\udb[タイプ:データ:項目] ユーザーDBの情報を表示します。
▼デバッグ文にユーザーDB[2:アイテム]のデータ[0]の
 項目[19:販売価格 [0=売れない]]を表示する場合

■デバッグ文:\udb[2:0:19]
\cdb[タイプ:データ:項目] 可変DBの情報を表示します。
▼デバッグ文に可変DB[6:パーティー情報]のデータ[0]の
 項目[1:メンバー1]を表示する場合

■デバッグ文:\cdb[6:0:1]


▲トップへ戻る▲


  
■変数呼び出し値

数値タイプの変数の値が百万以上になると、変数呼び出し値になります。

この変数呼び出し値を使うと、数値で設定する所を変数の値で設定できるようになります。

例えば「回数付きループ」のループ回数を「2000002」と設定すると、通常変数[2]の値がループ回数になります。



【イベントコード表示】

■回数付きループ [ V2[ループ回数] ]回
|■
◇ループここまで◇◇



「変数呼び出し値」の説明は、別ページに記載しています。
【変数呼び出し値の説明を見る】


▲トップへ戻る▲


  
■変数の値をリアルタイムで確認する

現在の変数の値をリアルタイムで確認する場合は、デバッグウィンドウかピクチャを使います。

■デバッグウィンドウで変数の値を確認

デバッグウィンドウを使用すると、現在の変数の値をリアルタイムで確認する事ができます。

【デバッグウィンドウの説明ページを開く】

▼上のタブ(赤枠の部分)をクリックすると表示切り替えができます




またデバッグ文で変数の値を表示して確認する方法もあります。

【イベントコード表示】

■デバッグ文:通常変数[1]:\v[1]\n可変[0:12:6]:\cdb[0:12:6]

▼表示例


デバッグ文の場合は、デバッグ文を設定する手間が発生しますが、
デバッグウィンドウの表示切替の操作が無くても、
複数の変数の値を同時に調べる事ができると言った利点があります。



複数の変数の値を同時に表示する場合は、何の変数の値なのかが分かるようにした方が良いでしょう。

変数の値だけを表示する場合 変数の内容が分かるようにした場合
■デバッグ文:\cself[10]
■デバッグ文:\sys[71] \sys[72]
■デバッグ文:\v[1]
■デバッグ文:<c10>\cself[10]
■デバッグ文:x\sys[71] y\sys[72]
■デバッグ文:<v1>:\v[1]
■ピクチャで変数の値を確認

ピクチャで表示する場合は、以下のように設定します。

【イベントコード表示】

■コモンイベント

起動条件:並列実行(常時)

■ピクチャ表示:5000 [左上]文字列[\f[16]\E<c10>\cs] X:2 Y:2 / 0(0)フレーム /
       パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■

▼ピクチャの設定画面


▼表示イメージ


▲トップへ戻る▲


  
■古いセーブデータに関して

通常変数(予備変数)、文字列変数、システム変数、可変DB、セルフ変数などの情報は、セーブデータに保存されます。

そのため、セーブした後に変数の使用用途を変えてしまうと、
ロード時にイベントが正常に動かなかったり、場合によってはエラーが発生する事もあります。



例えば、ウディタのサンプルゲームのユーザーDB[2:アイテム]には…
0:薬草
1:癒しの水
2:魔力の水
とアイテムが並んでいます。

仮に「薬草=5個」「癒しの水=2」「魔力の水=1」を持っている状態でセーブし…
0:癒しの水
1:魔力の水
2:薬草
と並び替えてロードすると、「癒しの水=5個」「魔力の水=2」「薬草=1」になります。



他にもマップイベントの設定にて…
マップイベント[0]=(未使用)
マップイベント[1]=扉イベント(セリフ変数[0]=「1」の時に扉開く)
マップイベント[2]=スイッチイベント(押すとマップイベント[1]のセルフ変数[0]を「1」にする)
と言ったイベントがある状態で扉イベントを移動する際に「切り取り&貼り付け」で移動した場合…
マップイベント[0]=扉イベント(セリフ変数[0]=「1」の時に扉開く)
マップイベント[1]=(未使用)
マップイベント[2]=スイッチイベント(押すとマップイベント[1]のセルフ変数[0]を「1」にする)
と言った感じに扉イベントのイベントIDが変わってしまい、
スイッチイベントを実行しても扉イベントのセルフ変数を操作する事ができないため、
扉を開ける事ができないバグが発生します。



可変DBもセーブデータに保存されるため、例えば主人公の限界レベルを「30」にしてセーブし、
あとで限界レベルを「50」に変更しても、古いセーブデータでは限界レベルが「30」のままになります。



上記の問題は、古いセーブデータを使用する事で発生します。

作品の制作中は、頻繁に設定内容が変わるため、上記のような問題が発生するのは仕方が無い事ですが、
作品を公開した後に行うバージョンアップで上記の問題が発生すると、
古いセーブデータが使えなくなる可能性があります。

作品を公開した後のバージョンアップでは、上記のような問題を考慮しつつ、
古いセーブデータでも使えるようにバージョンアップの作業を行う必要があります。


▲トップへ戻る▲


  
■補足

通常変数や予備変数、コモンイベントのセルフ変数は、使用用途ごとに10番単位でグループ化して使った方が良いでしょう。

▼設定例


使用用途ごとに未使用の変数を挟む事により、以下のように変数を選択する時の表示が見やすくなり、作業効率が上がります。




▲トップへ戻る▲



◎関連ページ

◆「変数」って何?
┣◆「セルフ変数」って何?
┣◆「通常変数」「予備変数」って何?
┣◆「文字列変数」って何?
┣◆「システム変数」「システム文字列」って何?
┃┣◆システム変数[0〜34]の説明
┃┣◆システム変数[35〜76]の説明
┃┣◆システム変数[77〜120]の説明
┃┣◆システム変数[121〜163]の説明
┃┣◆システム文字列[0〜49]の説明
┃┗◆システム文字列[50〜82]の説明
┣◆「変数呼び出し値」「X番の変数呼出」って何?
┃┗◆【使用例】「変数呼び出し値」「X番の変数呼出」
┣◆「乱数」って何?
┃┗◆乱数で一度出力した値を二重に出力させない
┗◆変数の番号や文字列を別のものに置き換える

◆「システムDB」「ユーザーDB」「可変DB」の説明
┣◆「タイプの設定」の画面説明
┣◆「システムDB」の各タイプの説明
┣◆「ユーザーDB」の各タイプの説明
┃┗◆「装備時・専有箇所」の選択肢を増やす
┗◆「可変DB」の各タイプの説明

YADOT-WOLFトップ  気紛れな空間へ戻る  メール