よくある質問 コマンド・スクリプトについて

Last-modified: 2023-07-28 (金) 14:14:07

質問項目の追加要望は、「Wiki編集」 >「編集要望」にてお願いします。





エラーがでます・・・コマンドが機能しません・・・

  • まずは対象となる「背景音」「効果音」「絵」「栞」「変数」などの記述ミスがないか確かめてみましょう。
    1文字抜けていたり、スペースが抜けていたり、それにより同じ個体名になっていなかったり、などの凡ミスに気がつけるとよいです。

    ▼Light.vnエディターの左メニューボタンにて素材を指定すると、パス・素材名がきっちりと指定されますのでご活用ください。

    左メニューボタン


プログラミングはまったく知りません。スクリプト記述があっているのかも分かりません。

  • Light.vnではミスをしていたら動作しなかったりエラーがでたりします。
    逆に狙い通りの動きが出来ている場合は、納得できなくても正解だということになります。
    初めのうちはスクリプト記述が長くなったり順番が気になったりなど、これでいいのか?と思われるかもしれませんが使い続けていれば慣れていきますので大丈夫です。
    出来てるならOK!」とゆるい感じで製作していくことをお薦めします。


テキストボックスの文字が表示されません。

  • 指定しているフォントファイルが「Fonts」フォルダに入っているか確認しましょう。
  • フォントのファイル名を正確に記述できているかを確認しましょう。
  • 文字色が背景や文字窓スキンと同じ色になっている場合も一応は考えましょう。
  • 指定した文字サイズが小さすぎて目視できていない場合もあります。フォントサイズを極端に大きくして確かめてみましょう。
  • テキストを文字窓上に表示するためには、すでにコマンド「文字窓」で設定してある文字窓を、コマンド「使用文字窓」で指定する必要があります。この処理をしているかを確認しましょう。

    テキストボックス

    ※デフォルトのテキストボックス
    Light.vnサンプル及びLight.vnテンプレートではデフォルトとして「Scripts」>「system」>「textbox.txt」を指定しています。
    textbox.txt」内の25行目あたり「栞 default」以下を確認してみましょう。


サンプルなどを見るとコマンドの前に「~」が付いている場合とない場合があります。なにか違いがあるのでしょうか?

  • コマンド前の「~」はその文章が【コマンドである】と定義するものです。
    エディターでは、シナリオは青文字に、コマンドはなどで色づけされます。

    ~あり

    シナリオの後にコマンドを記述した場合、コマンドに「~」をつけないと青文字のままシナリオとして表示されることになります。

    ~なし

    「シナリオ」と「コマンド」とを区別するものだと覚えておいてください。
    ミス防止のためにコマンドの前には必ず「~」をつけたり、テキスト容量を減らすために区別するときだけ「~」をつけたりと、制作者によって様々なようです。


サンプルなどを見るとコマンドの前に「.」が付いている場合とない場合があります。なにか違いがあるのでしょうか?

  • コマンド前の「.」はそのコマンドの実行終了までスクリプトの読み込みを待機させるというものです。
    効果時間を指定しているコマンドにだけ有効となります。

    .あり

    上記の場合、800ミリ秒かけてlogo画像を表示させた後、2000ミリ秒待機し、800ミリ秒かけてlogo画像を消していく流れになります。
    スクリプトは上から読み込まれていくため、効果コマンドを並べた場合、同時に効果をスタートさせるのか、ひとつずつ効果を適用していくのか、それを指定する必要があります。
    想定通りの動きが出来なかった場合、コマンド前の「.」の有無で動きを確認してみてください。


文字・ボタン文字・「台詞情報登録」などにおいて改行をしたいのですが可能でしょうか?


ボタン文字を装飾したいのですが、色や太字などが反映されません。

  • ver7.6.0 にて「ボタン文字」の仕様変更がありました。
    「文字色」などの装飾コマンドの対象名を「ボタン文字対象名」+「_text」としてみてください。

    ボタン文字装飾


文字窓待機絵が表示されません。

  • 文字窓待機絵は既定のものではないので、コマンド「文字窓待機絵」を使い、自分で設定する必要があります
    Light.vnサンプル及びLight.vnテンプレートでは「Scripts」>「system」>「textbox.txt」内で指定しています。

    文字窓待機絵


文字窓の斜め左上に、キャラクター名を出すのはどのようにすれば良いのでしょうか。

  • 【】を使用しましょう。【キャラクターの名前】で出せます。
    ~【任意の名前】
    半角「~」が重要なポイントです。
    半角「~」はコマンドなどをシナリオテキストと区別するための記述方法です。

    【キャラクターの名前】

  • この【】での名前表示は「Scripts」>「system」>「macros.txt」内にマクロで設定しています。
    よってシナリオスクリプト内の最初の方で「macros.txt」を読み込ませておく必要があります。
    スクリプト system/macros.txt //マクロ設定(キャラ名設定含む)
    忘れずに記述しておきましょう。

    マクロ設定

  • そして、このマクロは「Scripts」>「system」>「textbox.txt」内の「栞 name _name」以下を読み込んでいます。

    栞 name _name


シナリオで「地の文」部分の時に、キャラクター名がでてしまいます。

  • キャラクター名だけを消して【】だけにしてみましょう。

    地の文


「クリック」や「Enter」を押しても、文章が進まなくなってしまいました。

  • Light.vnでは進行続行の操作として、キートリガーである「キーダウン」コマンドで「続行」を指定しています。

    キートリガー

    キーダウンによる続行の設定の記述忘れがないか確認してみてください。
    ロード後に「進行不能」になる場合も、セーブしたスクリプト内に記述し忘れている場合があります。
    「進行不能」の原因はほぼこれにあたります。とりあえず記述して確かめてみると良いでしょう。

  • キーダウンによる続行は「Scripts」>「system」>「textbox.txt」内の「栞 txt_setToggles」以下でも設定されています。
    デフォルトでは「macros.txt」内のマクロ「~コマンドマクロ 文字窓下段 "スクリプト system/textbox.txt default"」によりキーダウン設定も読み込まれています。

    栞 txt_setToggles


上下(左右)に配置した画像の移動を同時に行いたい場合、何のコマンドを使用すればよいでしょうか?

  • 効果時間があるコマンドの先頭に「.」 をつけると直列処理(そのコマンドが終わったら次のコマンドを読み込む)になります。
    逆に「.」をつけない場合は並列処理になります。
    そのため2つ同時に動かしたい場合などは先頭の「.」を消せば良いのです。
    • 参照項目:「コマンド」とは > コマンドの種類
      効果コマンド(演出コマンド)
      個体コマンドによって設定された個体を指定して、なんらかの効果の適用、またはなんらかの視覚的な操作を行います。
      効果コマンドの多くはコマンド名の末尾に「2」を付与すると、コマンド適用前の状態を基準とする相対的な変化になります。
      さらに、効果時間の設定項目を持つ効果コマンドは、コマンド名の先頭に「.」を付与すると、コマンドの適用終了までスクリプトの以降行の読込みを一時待機します。

      ▼移動コマンドによる例

      直列処理
      並列処理


コマンドで対象を複数指定することはできますか?

  • 一部の効果コマンドにおいては可能です。「,」を使って区切っていきます。
    ただし、その後に半角スペースを入れる必要があります。

    複数指定


「ダイアログスクリプト登録」は一度宣言すれば大丈夫でしょうか?

  • 大丈夫です。次に宣言するまで適用されます。
    変更したい場合は、変更を適用開始させたいスクリプト内で宣言しましょう。

    ダイアログスクリプト登録


「アニメ登録」はどこで宣言すればいいのでしょうか?

  • アニメを適用させた「絵」コマンドより上に記述しておきましょう。
    別のスクリプト.txtにまとめてアニメコマンドを記述し、冒頭で読み込ませておくのも良いと思います。

    アニメ登録


「アニメ登録」は宣言しているのですが、アニメが適用されません。

  • 原因はさまざまです。いったん以下を確かめてみましょう。
  1. 素材がフォルダに入っていない。
    「Images」フォルダに画像素材が入っていないか、パスを間違えている場合があります。

  2. 名前を指定していない。
    「絵」コマンドなどで表示する際に「登録済みアニメ名」の前に個体名の「名前」を指定しているか確認してみましょう。

  3. アニメは適用されているけど目視できていない。
    分かりやすいアニメ画像に変えて様子をみてみましょう。
    ループしない設定(0)になっていて、すぐにアニメが終わってしまっている可能性もあります。


バックログがリセットされてしまいます。

  • 該当箇所周辺に「バックログリセット」を記述していないか、確認してみてください。


バックログ画面で表示されている「-----」はどこで設定されてますか?

  • 「Scripts」>「system」>「textbox.txt」内の「栞 name _name」以下に記述されています。

    バックログ画面
    栞 name _name


選択肢が出現したところでセーブした場合、セーブデータをロードすると選択肢を選べずに片方へ進行してしまいます。

  • 選択肢スクリプト待機部分に「待機 ボタン選択」を使用していると思いますが、挙動不審な場合は「待機 続行禁止」に変えるのをお薦めします。


テキストを改行したら、改行幅が変わってしまいます。

  • テキストボックス内での自動改行の位置と「.」で故意に改行させる位置が等しくなった場合、改行幅が広くなる症状が出るようです。
    プレビューで確認しながら「.」の位置を打ち込みましょう

    自動改行の位置


行数が変な挙動をしています。

  • ディスコードやツイッターなどでの改行方法「Shift + Enter」をすると空白行になってしまうようです。
    こうなってしまった場合、デリートで戻すことが出来ます。

    空白行


ゲーム内の演出として、パソコンのログインユーザー名を取得したいです。

  • これをやってしまうとプログラムがウイルスとして認識される可能性が高いです。
    最初にユーザー側から直接そういった情報を入力していただく方がいいかもしれません。


ロード後などに「絵」で指定している「背景」や「キャラクター」のレイヤー位置(重なり方)がおかしくなります。

  • レイヤー階層を同じにしていると、後に読み込んだ画像のほうが上に重なりますが、まれに順番が変わったり消えたりするときがあります。
    画像の重なりがある場合は、きっちりと違うレイヤー階層(数値)にしておきましょう。


フラグのために設置した「変数 flag = 1」がタイトルに戻った時やゲーム再起動時にもリセットされません。

  • もしタイトル画面に戻った時にリセットしたいのであれば、タイトル画面を表示するスクリプト内冒頭に「変数 flag = 0」と記述してみてください。


全フラグ回収、全テキスト既読済みのセーブデータというものは作れるのでしょうか?

  • 変数処理を集約したスクリプト.txtを作ると良いかと思われます。
    • 例:変数用スクリプト

      文字スキップ方式 0

      全域変数 end_a = 1

      全域変数 end_b = 1

      全域変数 end_c = 1

      全域変数 end_d = 1

      全域変数 end_true = 2

      全域変数保存

      ジャンプ title.txt

  • 制作ゲーム内で使用している変数を、このようなスクリプトで「スタートスクリプト」として読み込ませることで、全フラグ回収済みからスタートすることができます。
    もしくは直接「title.txt」の冒頭に記述しておくのも良いでしょう。使用しないときはコメントアウトしておけば楽チンです。
    ただし「配布」するときに残さないように注意が必要です。


「正規表現」とは何者ですか?

  • 簡単に言うと「文字列をまとめられる表現」です。
    「特定の文字や単語を含まないものすべて」や「数字を持つ文字列すべて」などの条件を表すことができます。
  • なんのことだかまったく分からなければ、ひとつだけ「.*」を覚えておきましょう。
    これを知っているだけでも、スクリプト記述がとても楽になります。

    • 例:共通文字列がある個体名を持つ、複数の個体をアウトさせたい時。

      Ascenario」という共通個体名を持ってる「背景」「絵」「ボタン」があるとします。

      共通個体名

      すべてを「アウト」させたい場合、それぞれの個体名を記述することになります。
      もっと沢山ある場合、すべてを記述するのは面倒です!

      すべてを「アウト」

      そこで正規表現である「.*」を使えば、簡略化することができます。
      共通文字列である「Ascenario」はすべて先頭なので、後ろに「.*」を記述します。
      意味は、先頭が「Ascenario」となっているすべての文字列・単語、となります。

      Ascenario.*

      最初から文字列・単語に共通文字を使っておくことで、コマンドでの指定が楽になるというわけです。
      例の「Ascenario」の場合「Asc.*」や「A.*」でも可能となります。
      あまり短くしてしまうと、余計なものまで巻き込んでしまう恐れがありますのでご注意ください。