春日部つむぎ no ゲーム作ってみよう!【UE5/UE4】 - VISUAL NOVEL FRAMEWORK【UE5/UE4】

チュートリアル

Hi there! Welcome to the VN Framework tutorial.

こんにちは!VN フレームワーク チュートリアルへようこそ。

This template was originally designed for a very large project.

このテンプレートは、もともと非常に大規模なプロジェクトのために設計されました。

It can handle a wide range of scenes,character types,and branching storylines.

それは、シーン、キャラクタータイプ、および分岐ストーリーの広い範囲を扱うことができます。

It's also designed to work with other gameplay elements.

また、他のゲームプレイ要素で動作するように設計されています。

For instance,this tutorial incorporates some first-person character movement.

例えば、このチュートリアルでは、一人称キャラクターの動きが組み込まれています。

This framework may seem complicated at first,but that's because it's designed to withstand very large projects with numerous characters, scenes,and even costumes.

このフレームワークは最初は複雑に見えるかもしれませんが、それは多数のキャラクター、シーン、さらには衣装を持つ非常に大規模なプロジェクトに耐えるように設計されているためです。

IF you prefer to keep it simple,no one's going to stop you!

あなたがそれをシンプルに保つことを好むなら、誰もあなたを止めるつもりはありません!

You can use as many or as few of the framework features as you see fit.

必要に応じて、フレームワーク機能をいくつでも使用できます。

You can also make choices.

また、選択を行うこともできます。

Try it now!

今すぐお試しください!

Yes

Looks like you chose yes!

あなたはイエスを選んだように見えます!

That's great!

素晴らしい!

I like your sense of spirit.

私はあなたの精神の感覚が好きです。

Now we've diamonded back from both choices.

今、私たちは両方の選択肢から戻ってダイヤモンドを上げてきました。

You might have noticed that I responded to your choice with a "like" or "dislike".

あなたは私が「好き」または「嫌い」であなたの選択に応答していることに気づいたかもしれません。

The VN Framework includes an optional StatLog if you want to associate certain stats with player choices.

VN フレームワークには、特定の統計をプレイヤーの選択に関連付ける場合は、オプションの StatLog が含まれています。

In this case,they're being used to track your points with me!

この場合、彼らは私とあなたのポイントを追跡するために使用されています!

To get a link to the online documentation for this framework,select "Extras" from the Main Menu,and you'll see a link on the "About" page.

このフレームワークのオンライン ドキュメントへのリンクを取得するには、メイン メニューから [追加] を選択すると、[バージョン情報] ページにリンクが表示されます。

This scene is about to end, and then you will have a chance to move around the room.

このシーンは終わりになろうとしています、そして、あなたは部屋の周りを移動する機会を持つことになります。

Use the WASD keys to move around.

WASD キーを使用して移動します。

If you have a gamepad controller,you can use the joysticks.

あなたがゲームパッドコントローラを持っている場合は、ジョイスティックを使用することができます。

Interact with the feature you want to learn next to continue!

次に学習したい機能とやり取りして、続けてください!

■Online Documentation

http://woodsy-studio.com/visual-novel-framework-fo...

VN フレームワーク 300+
このページは、アンリアル エンジン マーケットプレースで利用可能になった UE4 用のビジュアルノベル フレームワークの使用について説明します。
予告編はこちらで見る: https://youtu.be/bGWhDZ4N4kY

これらの手順は、2021 年 3 月 31 日にリリースされた Framework のバージョン 301 以降を対象としています。バージョン 4.25 および UE4 のアップと互換性があります。以前のバージョンを使用している場合は、こちらに移動してください。

UE4フォーラムページ: https://forums.unrealengine.com/unreal-engine/mark...

フレームワークに関する質問がある場合は、お問い合わせページからご連絡ください。

バージョン 301 での変更点:

・テキストがリッチ テキストとして表示されるようになりました。
テキスト内で <b>bold<</>、または<iitalic</>引数を使用して>、太字または斜体にすることができます。
山かっこ<>は現在リッチテキストの目的のために予約されていますのでご注意ください。

・テキスト校正システムでは、テキストライターエフェクト中にテキストボックスの側面で単語が分割されるのを防ぎます。
これは VN Framework に追加する非常に複雑な機能であり、最初にゲームを起動したときに最初に調整するには数秒が必要です。

・引数区切り記号は、フレームワーク全体で正規化され、特定の順序で分類されます。
最初にすべての引数は [_] で区切られ、[*]、次に [~]、次に [^] で区切られます。
その後、[,]。

・フレームワークのバージョン間でスクリプトデータテーブルを移動する場合は、新しい区切り記号で SpecialEvents と SpecialEffects を更新する必要があります。

・選択コードは、循環および入れ子になった選択肢内でのエラーの可能性を減らすために大幅にリファクタリングされています。
・循環の選択肢をマークするには、次に、diamondbackChoice ポイントではなく、開始の選択肢行に_Cycle引数を追加する必要があります。
例:選択肢 3*4_Cycle

・Scene_DTの流れが変わりました。
NextLevel と NextSublevel の列が[持続レベル]と[サブレベル]に変更され、次のシーンではなく現在のシーンのレベルが反映されるようになりました。

・プレイヤーはDパッドの「L」または「アップ」を押して、これまでのシーンでテキストのログを表示できるようになりました。

・シーンは、通常のテキスト ボックスの代わりに連続した縦書きテキストを表示する NVL モードにすることができます。

・ライン中に一時停止する新機能があります。
{w=2} は、テキストを 2 秒間一時停止します。
中かっこは、この目的のために予約されているか、テキスト内の変数を表示するために予約されています。

・「NextLine」スペシャルイベントで複数の行でテキストを継続できます。


目次
このフレームワークの重要な概念
・The Global_BP
・マスター選択ログ
・ゲームプレイモード
・永続データ
・インポート用のスクリプトの準備
文字設定
・スプライトのインポート
・キャラクターレイヤー
・サイドポートレートレイヤー
・コスチュームが上書き
文字の定義
・シーンでのキャラクタの表示
・シーンのセットアップと起動
・シーンの定義
・シーンの起動
・シーン データテーブルを埋める
・シーンブランチ
・シーンの選択肢
 ・ネストされた選択肢
 ・サイクリングの選択肢
 ・統計システム
・CG の表示
・特殊効果
・カメラ
・条件付きシーン
レベル
・Main_Persistentレベルの説明
・レベルのナビゲート

・ギャラリーシステム
・音(音楽、声の演技など)を使用する
・テキスト効果(一時停止、変数)
・リッチテキスト
・ラインキャリブレーション

■The Global_BP


I will often refer to the “Global_BP” in these instructions, and you will see it used often in the VN Framework blueprints.

これらの手順では「Global_BP」をよく参照します。VNフレームワークのブループリントでよく使用されます。

The Global_BP is what I call the global game instance used for this VN_Framework.

Global_BPは、VN_Frameworkに使用されるグローバルゲームインスタンスと呼ばれるものです。

It contains a great deal of customized code for saving, loading,changing levels, switching gameplay modes, and more.

保存、読み込み、レベルの変更、ゲームプレイモードの切り替えなど、カスタマイズされたコードがたくさん含まれています。

If you ever need to create your own reference to the Global_BP in a fresh actor, bring up the node “Get Game Instance.” Drag the Return Value to”Cast to Global_BP.”

新しいアクターでGlobal_BPへの独自の参照を作成する必要がある場合は、ノード「GetGameInstance」を表示します。

Drag the Return Value to”Cast to Global_BP.”

戻り値を「CasttoGlobal_BP」にドラッグします。

Use the return node for the cast to pull variables or run functions through the Global_BP.

キャストのリターンノードを使用して、変数をプルするか、Global_BPを通して関数を実行します。

■マスター選択ログ

MasterChoiceLog は、ゲーム内で行われたすべての選択を自動的に追跡するGlobal_BPに格納される大きな配列です。デフォルトでは、この配列の長さは 200 です。この長さを変更するには、Global_BPを開いて NewGame 関数を展開します。これは、明確なマスターチョイスログが最初に作成される場所です。

シーン内の分岐が正しく機能するためには、MasterChoiceLog の最初のインデックス 0 が常に 0 のままでいることが重要です。それ以外の場合は、1~200の選択肢を追跡できます。その選択項目に割り当てるオプションには、自動的に 1 から 5 の値が割り当てられます。プレイヤーが最初のオプションを選択すると、値 1 はマスターチョイスログの割り当てられたインデックスに保存されます。

ゲームに選択肢をコーディングする場合は、いつでも、マスターチョイスログにストレージのインデックス値を入力する必要があります。私は、各インデックスに割り当てたストーリーの選択肢をリストする別のドキュメントを保持したいと思います。後で、MasterChoiceLog 値を参照して、プレイヤーの決定に基づいてブランチを作成したり、シーンを変更したりできます。

■ゲームプレイモード

この VN Framework は、クリックスルー テキスト以外のゲームプレイ要素を持つプロジェクトに使用できます。シーンが開始したか終了したかによって自動的に変更されるようにモードを設計しました。しかし、私はあなたがあなた自身の目的のためにそれらを変更したい場合に備えて、ここであなたに異なるモードを説明します。

メニューモード

このモードは、画面上でウィジェットが作成されるときに有効になります。これは、WD_Menu_Parentの下に作成したファミリによって自動的にトリガーされます。メニューモードで発生する事柄を次に示します。

・メニューモードと呼ばれるGlobal_BP内の変数?True に設定されます
・プレイヤーコントローラは、(VN_Framework >の設計図で見られる)ウィジェットコントローラと呼ばれるポーンを所有しています。ウィジェットコントローラには、キーボード、マウス、またはゲームパッドでメニューをナビゲートするために使用されるコードが含まれています。
・イベント MenuMode トリガーは、BPI_Modes インターフェイスを持つ任意のアクター

メニューモードが有効な場合に、独自のアクターに何かをさせたい場合は、インタフェースBPI_Modes(VN_Framework >Blueprints >インタフェース)へのアクセス権を与えます。インターフェイスは、[クラス設定]メニューのブループリントに追加できます。BPI_Modesインターフェイスは、開始されたときにイベント MenuMode をトリガーします。

メニュー モードでの動作の詳細を表示するには、Global_BPを開き、イベント SetMenuMode を検索します。

通常/ゲームプレイモード

これは、ビジュアルノベルシーンの外の世界をナビゲートするために使用される独自のカスタムゲームプレイモードと考えることができます。この VN フレームワーク用に作成した例では、通常モードでは FirstPersonCharacter (VN_Framework >ブループリントにあります) を制御し、3D 空間を歩き回ることができます。必要に応じて、これを自分のプレイヤーコントローラーに変更できます。

ノーマルモードでの動作の内訳を次に示します。

・メニューモードと呼ばれるGlobal_BP内の変数?偽に設定されます
・プレイヤー コントローラは、最初の Person 文字を所有しています。
・イベント GameplayMode は、BPI_Modes インターフェイスを持つ任意のアクターに対してトリガーされます。

通常モードで使用するプレーヤーコントローラを変更する場合は、Global_BPを開いて PlayerClass の変数を見つけます。カスタム コントローラに合わせて変更します。ただし、完全なコントローラスイッチは本質的にフレームワークでサポートされていないので、他のいくつかの場所でVN Frameworkのコードを変更し続ける場合にのみこれを行うことをお勧めします。VN フレームワークで FirstPersonCharacter への他の参照を検索し、独自の文字に置き換える必要があります。FirstPersonCharacter ブループリントには、vN フレームワークで動作するように設計されたコード (TouchClickActor_BP ファミリのアクターとの対話やオプション メニューの開くなど) も含まれています。

通常モードが有効な場合に独自のアクターに反応させたい場合は、インターフェイス BPI_Modes (VN_Framework >ブループリント>インターフェイス) へのアクセス権を付与します。インターフェイスは、[クラス設定]メニューのブループリントに追加できます。BPI_Modesインターフェイスは、起動時にイベント GameplayMode をトリガーします。

通常モードでの動作の詳細を表示するには、Global_BPを開き、イベント SetNormalMode を検索します。

■シーンモード

名前が示すように、シーンの再生中にこのモードがトリガーされます。簡単な内訳を次に示します。

シーンプレイングと呼ばれるGlobal_BPの変数?True に設定されます
プレイヤーコントローラはウィジェットコントローラを所有しています
BPI_SceneTriggers インタフェースを持つアクターのイベント SceneStart トリガー
ノーマル モードでの動作の詳細を表示するには、Global_BPを開いてイベント SceneMode を検索します。

■インポート用のスクリプトの準備

必要に応じて、ST_ScriptLines構造体を使用して新しいデータテーブルを作成することで、すべてのスクリプトを直接 UE4 で作成できます。しかし、現実的には、ほとんどのライターは、独自のワープロソフトウェアでスクリプトを書き、後でスクリプトをアップロードすることを好みます。インポート用の外部スクリプトを準備する手順をいくつか示します。

OptionA: 私が作成したPythonスクリプトを使用して、ダイアログ.txtファイルを互換性のある.csvファイルに自動的に再フォーマットします。あなたはここでそれをダウンロードすることができます:https://github.com/jgibbons25/spreadsheetAuto、ここでそれを使用する方法のビデオです:


https://youtu.be/pLj52E6qWEE


OptionB: 何らかの理由で私のオートメーションスクリプトを使用したくない場合は、スクリプトを手動で変換するためのステップバイステップのプロセス https://youtu.be/bN6s24dwb2Y

オプションC:以下の指示に従ってください。

今後の例では、次の形式でスクリプトを記述すると仮定します。

CHARACTER1:ここでいくつかの対話です!
CHARACTER2:ここに機知に富んだカムバックがあります!

また、UE4 への最後のインポートステップに進む前に、スクリプトを個々のシーンに分割することをお勧めします。これにより、VN Framework 内で各シーンを個別にトリガーできます。

変換時間が近づくと、次の手順に従ってスクリプトを準備します。

[CHARACTER1: ] のすべてのインスタンスを検索し、[;文字 1;何もない;;]。セミコロンは、スプレッドシート内の空白になる列を表します。[CHARACTER1: ] を検索すると、意図的に空白を含め、検索処理によって削除されます。置換する場合は、VN Framework プロジェクトの列挙文字リストに一致する文字名のバージョンを使用する必要があります。
ナレーターを含む、スクリプトで話すすべての文字に対して手順 1 を繰り返します。
各改行を検索し (一部のテキスト エディターでは [$] 記号を使用して改行を検索します)、次に [;;;\ で置き換える]n].
ドキュメントを.txtファイルとして保存する
保存したファイルを参照し、接尾辞を.txtから.csvに変更します。
選択したスプレッドシートソフトウェアで.csvファイルを開きます
以下に示すように、列のタイトルを設定します:
スピーカー式サウンドテキスト特殊イベント特殊効果 CharHorizontal CharScale 1 最初の列ヘッダーが意図的に空白のままであることに注意してください。これは自動的に UE4 の行名に使用される列です
最左の列 (ヘッダーなし) を上から下に番号付けします (上記の 1 から始まります)。この列は UE4 によって行名として解釈され、空白にすることはできません。整数は必要ありませんが、便利な追跡に推奨されます。行名に関係なく、スクリプトは上から下に読み込まれます。
準備ができたら、ドキュメントを.csvとして再度保存します。最後のフィールド区切り文字としてコンマ (,) を使用することが重要です。
最後に、.csvファイルを閉じます。UE4 に直接ドラッグするか、プロジェクトのコンテンツ ブラウザから[インポート]ボタンを押します。選択すると、UE4 は構造を選択するように求めます。[ST_ScriptLines] を選択します。そして、ボイラ、あなたはあなたのスクリプトをインポートしました!
キャラクターの作成
ゲームに新しいキャラクターを追加する準備ができたら、テンプレートのキャラクターを定義するために必要な手順がいくつかあります。

以下の個々の手順に従うか、このチュートリアルビデオに従ってください。

VN フレームワーク 300+
このページは、アンリアル エンジン マーケットプレースで利用可能になった UE4 用のビジュアルノベル フレームワークの使用について説明します。予告編はこちらで見る: https://youtu.be/bGWhDZ4N4kY

これらの手順は、2021 年 3 月 31 日にリリースされた Framework のバージョン 301 以降を対象としています。バージョン 4.25 および UE4 のアップと互換性があります。以前のバージョンを使用している場合は、こちらに移動してください。


UE4フォーラムページ: https://forums.unrealengine.com/unreal-engine/mark...

フレームワークに関する質問がある場合は、お問い合わせページからご連絡ください。

バージョン 301 での変更点:

テキストがリッチ テキストとして表示されるようになりました。テキスト内で <b>bold<</>、または<iitalic</>引数を使用して>、太字または斜体にすることができます。山かっこ<>は現在リッチテキストの目的のために予約されていますのでご注意ください
テキスト校正システムでは、テキストライターエフェクト中にテキストボックスの側面で単語が分割されるのを防ぎます。これは VN Framework に追加する非常に複雑な機能であり、最初にゲームを起動したときに最初に調整するには数秒が必要です。
引数区切り記号は、フレームワーク全体で正規化され、特定の順序で分類されます。最初にすべての引数は [_] で区切られ、[*]、次に [~]、次に [^] で区切られます。その後、[,]。
フレームワークのバージョン間でスクリプトデータテーブルを移動する場合は、新しい区切り記号で SpecialEvents と SpecialEffects を更新する必要があります。
選択コードは、循環および入れ子になった選択肢内でのエラーの可能性を減らすために大幅にリファクタリングされています。
循環の選択肢をマークするには、次に、diamondbackChoice ポイントではなく、開始の選択肢行に_Cycle引数を追加する必要があります。例:選択肢
3*4_Cycle
Scene_DTの流れが変わりました。NextLevel と NextSublevel の列が[持続レベル]と[サブレベル]に変更され、次のシーンではなく現在のシーンのレベルが反映されるようになりました。
プレイヤーはDパッドの「L」または「アップ」を押して、これまでのシーンでテキストのログを表示できるようになりました
シーンは、通常のテキスト ボックスの代わりに連続した縦書きテキストを表示する NVL モードにすることができます。
ライン中に一時停止する新機能があります。{w=2} は、テキストを 2 秒間一時停止します。中かっこは、この目的のために予約されているか、テキスト内の変数を表示するために予約されています。
「NextLine」スペシャルイベントで複数の行でテキストを継続できます。
目次
このフレームワークの重要な概念
The Global_BP
マスター選択ログ
ゲームプレイモード
永続データ
インポート用のスクリプトの準備
文字設定
スプライトのインポート
キャラクターレイヤー
サイドポートレートレイヤー
コスチュームが上書き
文字の定義
シーンでのキャラクタの表示
シーンのセットアップと起動
シーンの定義
シーンの起動
シーン データテーブルを埋める
シーンブランチ
シーンの選択肢
ネストされた選択肢
サイクリングの選択肢
統計システム
CG の表示
特殊効果
カメラ
条件付きシーン
レベル
Main_Persistentレベルの説明
レベルのナビゲート

ギャラリーシステム
音(音楽、声の演技など)を使用する
テキスト効果(一時停止、変数)
リッチテキスト
ラインキャリブレーション
The Global_BP
私は、これらの手順の「Global_BP」を頻繁に参照しますが、VN Framework の設計図でよく使用されます。Global_BPは、このVN_Frameworkに使用されるグローバルゲームインスタンスと呼ばれるものです。保存、読み込み、レベルの変更、ゲームプレイモードの切り替えなど、カスタマイズされたコードがたくさん含まれています。

新しいアクターでGlobal_BPへの独自の参照を作成する必要がある場合は、ノード"ゲームインスタンスの取得" を表示します。戻り値を「キャスト」にドラッグしてGlobal_BPします。キャストの戻りノードを使用して、変数をプルするか、Global_BPを通して関数を実行します。

マスター選択ログ
MasterChoiceLog は、ゲーム内で行われたすべての選択を自動的に追跡するGlobal_BPに格納される大きな配列です。デフォルトでは、この配列の長さは 200 です。この長さを変更するには、Global_BPを開いて NewGame 関数を展開します。これは、明確なマスターチョイスログが最初に作成される場所です。

シーン内の分岐が正しく機能するためには、MasterChoiceLog の最初のインデックス 0 が常に 0 のままでいることが重要です。それ以外の場合は、1~200の選択肢を追跡できます。その選択項目に割り当てるオプションには、自動的に 1 から 5 の値が割り当てられます。プレイヤーが最初のオプションを選択すると、値 1 はマスターチョイスログの割り当てられたインデックスに保存されます。

ゲームに選択肢をコーディングする場合は、いつでも、マスターチョイスログにストレージのインデックス値を入力する必要があります。私は、各インデックスに割り当てたストーリーの選択肢をリストする別のドキュメントを保持したいと思います。後で、MasterChoiceLog 値を参照して、プレイヤーの決定に基づいてブランチを作成したり、シーンを変更したりできます。

ゲームプレイモード
この VN Framework は、クリックスルー テキスト以外のゲームプレイ要素を持つプロジェクトに使用できます。シーンが開始したか終了したかによって自動的に変更されるようにモードを設計しました。しかし、私はあなたがあなた自身の目的のためにそれらを変更したい場合に備えて、ここであなたに異なるモードを説明します。

メニューモード
このモードは、画面上でウィジェットが作成されるときに有効になります。これは、WD_Menu_Parentの下に作成したファミリによって自動的にトリガーされます。メニューモードで発生する事柄を次に示します。

メニューモードと呼ばれるGlobal_BP内の変数?True に設定されます
プレイヤーコントローラは、(VN_Framework >の設計図で見られる)ウィジェットコントローラと呼ばれるポーンを所有しています。ウィジェットコントローラには、キーボード、マウス、またはゲームパッドでメニューをナビゲートするために使用されるコードが含まれています。
イベント MenuMode トリガーは、BPI_Modes インターフェイスを持つ任意のアクター
メニューモードが有効な場合に、独自のアクターに何かをさせたい場合は、インタフェースBPI_Modes(VN_Framework >Blueprints >インタフェース)へのアクセス権を与えます。インターフェイスは、[クラス設定]メニューのブループリントに追加できます。BPI_Modesインターフェイスは、開始されたときにイベント MenuMode をトリガーします。

メニュー モードでの動作の詳細を表示するには、Global_BPを開き、イベント SetMenuMode を検索します。

通常/ゲームプレイモード
これは、ビジュアルノベルシーンの外の世界をナビゲートするために使用される独自のカスタムゲームプレイモードと考えることができます。この VN フレームワーク用に作成した例では、通常モードでは FirstPersonCharacter (VN_Framework >ブループリントにあります) を制御し、3D 空間を歩き回ることができます。必要に応じて、これを自分のプレイヤーコントローラーに変更できます。

ノーマルモードでの動作の内訳を次に示します。

メニューモードと呼ばれるGlobal_BP内の変数?偽に設定されます
プレイヤー コントローラは、最初の Person 文字を所有しています。
イベント GameplayMode は、BPI_Modes インターフェイスを持つ任意のアクターに対してトリガーされます。
通常モードで使用するプレーヤーコントローラを変更する場合は、Global_BPを開いて PlayerClass の変数を見つけます。カスタム コントローラに合わせて変更します。ただし、完全なコントローラスイッチは本質的にフレームワークでサポートされていないので、他のいくつかの場所でVN Frameworkのコードを変更し続ける場合にのみこれを行うことをお勧めします。VN フレームワークで FirstPersonCharacter への他の参照を検索し、独自の文字に置き換える必要があります。FirstPersonCharacter ブループリントには、vN フレームワークで動作するように設計されたコード (TouchClickActor_BP ファミリのアクターとの対話やオプション メニューの開くなど) も含まれています。

通常モードが有効な場合に独自のアクターに反応させたい場合は、インターフェイス BPI_Modes (VN_Framework >ブループリント>インターフェイス) へのアクセス権を付与します。インターフェイスは、[クラス設定]メニューのブループリントに追加できます。BPI_Modesインターフェイスは、起動時にイベント GameplayMode をトリガーします。

通常モードでの動作の詳細を表示するには、Global_BPを開き、イベント SetNormalMode を検索します。

シーンモード
名前が示すように、シーンの再生中にこのモードがトリガーされます。簡単な内訳を次に示します。

シーンプレイングと呼ばれるGlobal_BPの変数?True に設定されます
プレイヤーコントローラはウィジェットコントローラを所有しています
BPI_SceneTriggers インタフェースを持つアクターのイベント SceneStart トリガー
ノーマル モードでの動作の詳細を表示するには、Global_BPを開いてイベント SceneMode を検索します。

インポート用のスクリプトの準備
必要に応じて、ST_ScriptLines構造体を使用して新しいデータテーブルを作成することで、すべてのスクリプトを直接 UE4 で作成できます。しかし、現実的には、ほとんどのライターは、独自のワープロソフトウェアでスクリプトを書き、後でスクリプトをアップロードすることを好みます。インポート用の外部スクリプトを準備する手順をいくつか示します。

OptionA: 私が作成したPythonスクリプトを使用して、ダイアログ.txtファイルを互換性のある.csvファイルに自動的に再フォーマットします。あなたはここでそれをダウンロードすることができます:https://github.com/jgibbons25/spreadsheetAuto、ここでそれを使用する方法のビデオです:


OptionB: 何らかの理由で私のオートメーションスクリプトを使用したくない場合は、スクリプトを手動で変換するためのステップバイステップのプロセス https://youtu.be/bN6s24dwb2Y

オプションC:以下の指示に従ってください。

今後の例では、次の形式でスクリプトを記述すると仮定します。

CHARACTER1:ここでいくつかの対話です!
CHARACTER2:ここに機知に富んだカムバックがあります!

また、UE4 への最後のインポートステップに進む前に、スクリプトを個々のシーンに分割することをお勧めします。これにより、VN Framework 内で各シーンを個別にトリガーできます。

変換時間が近づくと、次の手順に従ってスクリプトを準備します。

[CHARACTER1: ] のすべてのインスタンスを検索し、[;文字 1;何もない;;]。セミコロンは、スプレッドシート内の空白になる列を表します。[CHARACTER1: ] を検索すると、意図的に空白を含め、検索処理によって削除されます。置換する場合は、VN Framework プロジェクトの列挙文字リストに一致する文字名のバージョンを使用する必要があります。
ナレーターを含む、スクリプトで話すすべての文字に対して手順 1 を繰り返します。
各改行を検索し (一部のテキスト エディターでは [$] 記号を使用して改行を検索します)、次に [;;;\ で置き換える]n].
ドキュメントを.txtファイルとして保存する
保存したファイルを参照し、接尾辞を.txtから.csvに変更します。
選択したスプレッドシートソフトウェアで.csvファイルを開きます
以下に示すように、列のタイトルを設定します:
スピーカー式サウンドテキスト特殊イベント特殊効果 CharHorizontal CharScale 1 最初の列ヘッダーが意図的に空白のままであることに注意してください。これは自動的に UE4 の行名に使用される列です
最左の列 (ヘッダーなし) を上から下に番号付けします (上記の 1 から始まります)。この列は UE4 によって行名として解釈され、空白にすることはできません。整数は必要ありませんが、便利な追跡に推奨されます。行名に関係なく、スクリプトは上から下に読み込まれます。
準備ができたら、ドキュメントを.csvとして再度保存します。最後のフィールド区切り文字としてコンマ (,) を使用することが重要です。
最後に、.csvファイルを閉じます。UE4 に直接ドラッグするか、プロジェクトのコンテンツ ブラウザから[インポート]ボタンを押します。選択すると、UE4 は構造を選択するように求めます。[ST_ScriptLines] を選択します。そして、ボイラ、あなたはあなたのスクリプトをインポートしました!
キャラクターの作成
ゲームに新しいキャラクターを追加する準備ができたら、テンプレートのキャラクターを定義するために必要な手順がいくつかあります。

以下の個々の手順に従うか、このチュートリアルビデオに従ってください。


この 2 番目のチュートリアルでは、スプライトをトリミングする方法、ウィジェットのパディング情報を設定する方法、およびテクスチャ メモリを節約するためにスプライト シートを作成する方法について説明します。

キャラクタスプライトをインポートする
このVNフレームワークは、ゲームの効率と多様性のために多数のスプライト層を処理するように設定されています。ただし、レイヤーが多いキャラクタを作成したくない場合は、それも問題ありません。各キャラクターに対して、必要な数のレイヤーを使用できます。

参考までに、私が「フレームワークチュートリアル」で Jessica で使用したスプライトを見ることができます。VN_Framework >アートアセット>キャラクター>ジェシカに行き、彼女のすべてのスプライトを見てください。

キャラクタ レイヤーの設定を開始する前に、使用可能な [式] の最初のリストを確認してください。列挙型>式VN_Framework >で確認できます。これは、必要に応じて使用または編集できる基本リストです。選択する式の数を減らす場合は、右端の 「x」 を選択して行を削除します。新しい式を追加する場合は、右上の [新規] ボタンを押して、新しい式名を入力します。

次のレイヤーを選択する場合は、各文字式に使用できます。

ボディ スプライト – これはスプライトのベースボディです。あなたは、完全な層システムを使用している場合は、このボディは、衣服や頭を含めるべきではありません。
服 - キャラクターの服は、この層に行きます.キャラクターがゲーム全体で衣装を変更した場合、このレイヤーはフレームワーク内の変数を使用して別のスプライトに切り替えることができます。
Head – このレイヤーは、通常、髪のない、キャラクターの頭のためのものです。システムを意図したとおりに使用するには、異なる式に異なるヘッド スプライトを使用します。
ヘアフロント – これは、キャラクタのヘアのメイン レイヤーです。ほとんどのキャラクターにとって、これは髪を表示するために必要な唯一のレイヤーです。ただし、キャラクターの髪が長い場合は、衣服や体の後ろを流れる後ろ髪用の別のレイヤーを作成する必要があります。その場合は、次のレイヤーを使用できます。
ヘアバック – この層は、髪の後ろの層の体と服の後ろに行きます.
ワイルドカード – 他のレイヤーがニーズに対応できない場合に、このレイヤーを使用する場合があります。たとえば、このレイヤーを使用して、キャラクターにネックレスやメガネを追加できます。このレイヤーを使用する場合は、必要に応じて ParentActor で Z オーダーを調整し、WD_Dia必要があります。
BlinkFB – このレイヤーでは、キャラクターの目が点滅するアニメーションフリップブックを作成できます。画面上にある限り、ランダムな間隔で自動的に点滅し続けます。
MouthFB – キャラクターの口の動きのためのフリップブックを作成することもできます。VN フレームワークは、キャラクタが話している間、このレイヤーを使用するように設定されています。ライン上にオーディオクリップがある場合、オーディオクリップの間は口が動き続けます。ゲーム内の口のアニメーションはランダムなフレームを使用して移動することに注意してください。実際には、フォワードループでフリップブックを再生するわけではありません。フリップブックからフレームをプルし、ランダムに再生します。
スプライトを作成するには、コンテンツ ブラウザで[インポート]を押すか、ファイルエクスプローラからファイルをドラッグして、テクスチャ(おそらく.pngファイル)をインポートします。次に、テクスチャを右クリックし、[スプライト アクション]を選択>スプライトを抽出します。代わりに[スプライトを作成]を使用することもできますが、スプライトシートを作成するのに便利な各テクスチャの周りの透明度が自動的に切り取られますので、Extractを好みます。

スプライトの設定
デフォルトでは、ParentActor (各キャラクタの表示に使用される基本ブループリント アクター) は、スプライトのマテリアルを TranslucentUnlitSpriteMaterial に設定します。これを変更する場合は、ParentActor のビューポートで調整したり、特定のキャラクタ用にカスタムの子アクターを作成したりできます。

最良の結果を得るには、スプライト レイヤーの新しいテクスチャを読み込むたびに、テクスチャ(スプライトではなくテクスチャ)に入ります。ダブルクリックして詳細を開き、MipGenSettings を NoMipMaps に変更します。そうしないと、スプライト レイヤーがゲームに最初に表示されるときにぼやけて見えます。

キャラクターレイヤーの定義
スプライト レイヤーをプロジェクトにインポートしたので、フレームワークにそれらの処理を指示する必要があります。これを行うには、キャラクタ スプライト情報を含むデータテーブルを作成する必要があります。

ポーズデータテーブル
VN Framework に表示する内容を伝えるために、主に 2 つのデータテーブルを作成します。1つ目は「Pose」データテーブルと呼ばれるもので、各キャラクタポーズの情報が含まれています。必要な場合は、Pose1(デフォルト)を使用するだけで、他のどれも使用できません。

[VN_Framework >] に移動します。キャラクタ用の新しいフォルダを作成します。フォルダを開きます。
空の領域を右クリックし、[その他の>データテーブル] を選択します。構造を選択するように求めるプロンプトが表示されます。[ST_PoseData] を選択します。最適な組織化のために、DT_CharName_Poses_0のような名前を付けます。最後の「0」は、このデータテーブルがデフォルトのコスチューム、値0に使用されることを思い出させます。後で他のコスチューム用に新しいポーズデータテーブルを作成することもできます。
新しいデータテーブルを開きます。
新しい行を作成します。これを行うには、[行エディター] ウィンドウを見つけて、プラス記号 + を選択します。
ここでは行名は重要ではありません (デフォルトでは、UE4 の場合は NewRow という名前が付けられます)。個人的には、私はこれを数字に変更するのが好きですが、それは完全にあなた次第です。
[ポーズ] 列で、[VN_Framework > ポーズ] の一覧から選択します。ポーズが 1 つだけの場合は、デフォルトの Pose1 の行を作成するだけです。ポーズを増やしたい場合は、ポーズごとに行を追加します。
各行に対して、使用する各ポーズの適切な列にスプライトをドロップします。
そのポーズを使用する各エクスプレッションごとに、VN フレームワークは最初に PoseDT からスプライトを取り込み、次に ExpressionDT で塗りつぶされたレイヤーでスプライトを上書きします。この方法を使用すると、式を作成するときに多くの情報を繰り返す必要はありません。

式データテーブル
VN_Framework >で、キャラクターに合ったフォルダに移動します (または新しいフォルダを作成します)。
空の領域を右クリックし、[その他の>データテーブル] を選択します。構造を選択するように求めるプロンプトが表示されます。ST_PoseLayersを選択します。最適な組織を作成するには、DT_CharName_Cost0のような名前を付けます。最後の「Cost0」は、このデータテーブルがベースの衣装、値0に使用されることを思い出させます。他のコスチューム用に、後で新しい式データテーブルを作成することもできます。
新しいデータテーブルを開きます。
新しい行を作成します。これを行うには、[行エディター] ウィンドウを見つけて、プラス記号 + を選択します。
ここでは行名は重要ではありません (デフォルトでは、UE4 の場合は NewRow という名前が付けられます)。個人的には、私はこれを数字に変更するのが好きですが、それは完全にあなた次第です。
新しい行をクリックし、[行の値] ウィンドウを展開します。ここでは、行の各列を編集できます。
Pose – これは、キャラクタがその表現に使用するポーズです。VN フレームワークは、最初に PoseDT のスプライトを使用し、その式の式 DT にリストするスプライトで上書きします。ポーズを使用していない場合は、必要に応じて、ExpressionDT ですべてのスプライトを定義できます。
式 – ここで定義する最初の式を選択します。式ごとに新しい行を作成します。私はキャラクターのデフォルトの状態であるNormal式から始めるのが好きです。
残りの列については、必要に応じて、キャラクタにインポートしたレイヤーをドロップします。レイヤーを使用しない場合は、空白のままにします (なし)。たとえば、レイヤーシステムをまったく使用していない場合は、BodySprite 列に完全な文字スプライトを入力し、残りを空白のままにします。
式の列挙型リスト内のすべての式に対して一意の行を作成します。すべての式に新しいスプライトがない場合でも、その式が呼び出された場合にフレームワークが使用するレイヤーを定義する必要があります。
サイドポートレートレイヤーの作成
VN Framework のバージョン 1.2 以降では、サイドポートレートを表示するために別々のスプライトを作成する必要はありません。VN フレームワークは、PoseDT および ExpressionDT で指定したデータを使用して、サイド ウィジェットにキャラクタを表示します。

コスチュームが上書き
場合によっては、キャラクターに衣装を変更させたいことがあります!このような状況では、他のコスチュームのレイヤー情報を保持する追加のデータテーブルを作成できます。

コスチュームを上書きするには:

この手順を繰り返して、交換するコスチューム レイヤーを使用して、新しい PoseDT とオプションの ExpressionDT を作成します。あなただけの元の衣装を上書きしたいレイヤーを埋める必要があります。変更されないスプライトは空白のままでいることができます
キャラクタのレイヤー DT フォルダ (VN_Framework > CharData > Jessica_DTsなど) を開きます。
新しい PoseDT を作成し (以前のように、構造体ST_PoseDataを使用します)、サフィックスを変更して新しいコスチュームを表すようにDT_CharName_Poses_1
特定の式が PoseDT にリストされているスプライトとは異なるスプライトを使用する場合にのみ、新しい ExpressionDT を作成する必要があります。新しい ExpressionDT を作成し (以前のように、構造体ST_PoseLayersを使用する)、サフィックスを変更して新しいコスチュームを表すような接尾辞を変更DT_CharName_Cost1
キャラクタ データテーブル用に作成したフォルダに移動します。空の領域を右クリックし、[その他の>データテーブル] を選択します。構造を選択するように求めるプロンプトが表示されます。ST_LayerOverwritesを選択します。
新しいデータテーブルにDT_CharName_CostOW(OWは上書きの略)などの名前を付けます。フレームワークの例は、CharData > Jessica_DTs > VN_Framework >DT_Jess_CostOW
データテーブルに 4 つの新しい行を作成します。次の行名を指定します。
コスチューム(ここは衣装の表現DTが行く場所です)
髪(これは髪の表現DTが行く場所です)
ポーズコスチューム(コスチュームのPoseDTが行く場所です)
PoseHair (この場合、ヘアの PoseDT が行く)

これらの行名は、親アクターが上書きを実行するときに名前で検索するため重要です。

各コスチュームを表す整数値を選択します。デフォルトでは、5 つの値を保持する構造が含まれているので、それに応じて 5 つの列が表示されます: Value1、Value2 など。デフォルトの衣装はすでに0なので、次の衣装の変更は1でなければなりません。[値 1] で、レイヤーの上書きを保持するために作成したデータテーブル (DT_CharName_Cost1など) をドロップします。
これで、キャラクターの衣装が変わると上書きされるレイヤーのリストが作成されました。キャラクターのコスチューム変数とその変更方法の詳細については、「文字を定義し、RowName 列と呼ばれる箇条書き」を参照してください。

必要に応じて、コスチューム、ヘア、サイドコスチューム、サイドヘアの各レイヤーについて、上記の手順を繰り返すことができます。●髪と衣装のレイヤーは別々に適用されるので、髪を変えずに衣装を変えることもできます。

文字の定義
これで、キャラクターのスプライトとレイヤーデータテーブルを設定したので、このすべての情報を 1 つの文字定義にまとめる必要があります。

[列挙VN_Framework >に移動し、[文字の列挙] リストを開きます。この列挙型リストには、ゲーム内のすべての文字の名前が含まれます。ウィンドウの右上にある「新規」ボタンを見つけます。新しいエントリに、新しい文字の名前を入力して保存します。
CharData VN_Framework >に移動し、CharacterDT ファイルを開きます。これは、ゲーム内のすべての文字とそれに対応するデータのマスターリストです。
[行名] 列: この列の一意の整数を使用して、文字に関連付けます。**この数字は、キャラクターの衣装システムを使用する場合に重要です;**そうでなければ、それは本当に重要ではありません。キャラクターの衣装システムを利用する予定の場合は、以下の注意事項を検討してください。
この列の数字は、Global_BPでキャラクターの現在の衣装を検索するために使用できます。この変数にアクセスするには、VN_Framework >ブループリントに移動し、Global_BPファイルを開きます。[変数] の下の [コスチューム] セクションを展開します。コスチュームアレイとヘアアレイという変数が表示されます。ゲームのキャラクターのコスチュームデータを保持するために使用される配列です。最初のインデックス 0 は、主人公のジェシカを表します。デフォルトでは 0 に設定され、これは彼女のベースコスチュームです。これを変更するには、この変数を 1 に変更します。その場合、シーンは、衣装 1 の Jessica で使用するレイヤー上書きデータテーブルを探します。
私はあなたのメインキャラクターを0に設定し、その重要性(すなわち衣装を変更する可能性)に基づいてキャラクターに番号を付けることを引き続きお勧めします。たとえば、ゲーム内に数行のみのマイナーキャラクターを作成する場合は、20 のように高い数字を付けます。実際に衣装を変更する可能性のあるキャラクターの下のインデックスを予約します。
文字列: 最近更新した列挙型リストから、ここで文字名を選択します。
CharActor: ほとんどの場合、これを使用する必要はありませんし、なしまたは親アクターのままにすることができます。キャラクタのコスチューム レイヤーを定義している限り、シーン テンプレートは ParentActor を使用して表示します。例外は、特定の文字のカスタムブループリントを作成する場合です。これを行うには、次の手順を実行します。
[設計図VN_Framework >] に移動します。親アクターの設計図を見つけます。
ParentActor を右クリックし、上部にある 「子ブループリントクラスの作成」を選択して、名前を付けます。たとえば、Sam という名前の文字がある場合は、新しい青写真に「SamActor」という名前を付けます。
SamActor を開いて、そのキャラクタのカスタム イベントまたは変数を作成します。
準備ができたら、CharacterDT ファイルに戻り、Sam の CharActor を SamActor に設定します。
ExpressionDT: DT_CharName_Cost0など、ここで式レイヤーを定義するために作成した式データテーブルにドロップします。この空白を残した場合、シーンは 3D 空間でキャラクタをスポーンしません。代わりに横の縦向きの画像を探します。
PoseDT: キャラクタのポーズ用にポーズデータテーブルを作成した場合は、ここに配置します。これは、Expression DT で必要な情報を減らす場合に役立ち、ウィジェットにスプライトを表示するためのパディング情報を含めることもできます。しかし、代わりに式DTまたはSideImageに依存したい場合は、空白のままにすることができます
サイドイメージ:これは、文字を表示するために使用する最も簡単な方法です。3D 空間でキャラクタを作成したり、アニメーション化されたレイヤを表示したりするのではなく、横の縦向きに静的なイメージを使用します。フル ボディスプライト、レイヤ、アニメーションを持たない非常にマイナーなキャラクターに対して、これを使用することもできます。PoseDT が既に定義されている場合は、この空のままにするか、静的レイヤーを使用しようとします。それ以外の場合は、サイドポートレートとして使用する文字の静的な正方形のイメージをここに配置します。
LayerOverwriteList: このキャラクターのコスチュームの変更に対する上書きのリストを作成した場合は、ここでそのデータテーブルを削除できます(この例では、DT_CharName_CostOWと呼んでいます)。それ以外の場合は、空のままにします。
アクセントカラー: 異なる文字が話すときに UI 要素の色を変更する場合は、この方法が便利です。その場合は、ここでアクセント カラーを設定できます。
クローズアップバーツアジャスト: VN フレームワーク内のクローズアップ カメラに使用される変数です。通常、この値は空白のままにします。非常に高い文字や短い文字がある場合は、この番号でクローズアップカメラの位置を調整する必要があります。
カスタムスケール: VN フレームワークは、ゲーム内の文字を表示するために大きなスプライトを使用します。そのため、すべての文字が他の文字に対して正確に正しい比率で表示することが難しい場合があります。キャラクターが少し大きいか小さく見える必要がある場合は、ここでスケールを調整します。**1.00からの任意のバリエーションとして非常に小さなインクリメントを使用**は、文字サイズに強い影響を与えます!
自動ウィジェット?: これは、文字がクローズアップ上のウィジェットとして表示されるかどうかを決定します。これを True に設定すると、Closeup 特殊効果を使用するたびに、キャラクタがウィジェットとして表示されます (これは、後処理を適用せずにキャラクタの画像をわからなくしたい場合に便利です)。これを False にしておくと、このスイッチは自動的には行われません。しかし、必要に応じて、ウィジェットとしてキャラクターを表示するために「ウィジェットズーム」のような特殊効果コマンドを使用することができます。
サイドウィジェットパディング: (フレームワークのバージョン 1.3 で) 各文字の横の肖像画の配置を調整するためにここに X と Y の値を入力します。
文字の表示
キャラクターを実際に設定したので、シーンでキャラクターを表示する準備ができました。

シーンでキャラクターを表示する方法はいくつかあります。

親アクターのスポーン
文字がスピーカーである行に CharX 値を入力します。オプションで、CharY と CharScale に値を入力して、垂直方向の位置とスケールを制御することもできます。デフォルトの文字目盛は 1 ですが、1.2、1.5 などの分数を使用して拡大できます。キャラクタがまだスポーンされていない場合、これらの値は、一緒に、キャラクターDTで定義されているようにアクターを生成します
側面の縦横を表示する
CharacterDT で文字に静的なサイドポートレートを定義した場合、キャラクタが話し、ParentActor が生成されない場合、この文字は自動的に表示されます。側面ポートレート レイヤー システムを定義した場合、それらは定義されたレイヤーとサイドに表示されます。
キャラクタの横向きの縦向き表示が必要で、すでに ParentActor として作成されている場合は、[特殊効果] 列に "サイド" という単語を追加するだけです。これは何があっても彼らのサイドポートレートを表示します。
SceneTemplate_BPのしくみを理解するために、既定の動作方法について少し説明します。キャラクタスピーキングを使用して線を作成すると、SceneTemplate_BPはまず、そのキャラクタが親アクター (または ParentActor の子) としてゲーム内でスポーンされたかどうかを確認します。文字がまだスポーンされていない場合、SceneTemplate_BPは CharHorizontal 列内の数値を検索します。0 以外の数値 (10 など) が表示されると、その横の値で文字がスポーンされます。数値が 0 の場合は、ダイアログ ウィジェットにはそのキャラクタの横の縦横を表示しようとします。まず、CharacterDT リストでその文字の静的な縦長を定義したかどうかを確認します。静的なポートレートが見つかった場合は、そのポートレートが表示されます。それでない場合は、最後にサイドポートレートレイヤーデータテーブルを探します。最後に、これらの物が見つからない場合は、テキストと文字が表示されません。

シーンの定義
ゲーム内のすべてのシーンはデータテーブルです。シーンをデータテーブルとしてインポートする方法の詳細については、「スクリプトをインポートするための準備」を参照してください。

データテーブルとして再生できるシーンができたら、VN_Framework >シーンにあるDT_MainScenesデータテーブルを開きます。各行に必要事項を記入します。

[行名] — データテーブルに各行の一意の識別子を指定します。このコラムで、シーンのニックネームを作成します。この例では、ゲームの最初のシーンである「イントロ」を使用します。
データテーブル — ここでは、コンテンツ ブラウザからシーンに使用する実際のデータテーブルを入力します。
NextScene — 現在のシーンの直後に別のシーンを再生しますか?「はい」の場合は、シーンの「行名」(ニックネーム)を入力すると、現在のシーンが終了した後に再生されます。それ以外の場合は、空白のままにして、現在のシーンが終了した後にゲームが VN モードを終了します。
PersistentLevel — このシーンを特定の持続レベルで実行する場合は、ここに入力します。それ以外の場合、レベルは変更されません。
NextSublevel - このシーンを特定のサブレベルで実行する場合は、ここに入力します。それ以外の場合、サブレベルは変更されません。
CameraOverride — カメラを制御する他の多くの場所があるので、この列を使用する必要があることはほとんどありません。たとえば、各シーンの [特殊効果] 列で使用するカメラを定義できます。ただし、シーンを起動してデフォルトを上書きするために、シーンを起動するために使用するカメラを本当に制御する必要がある場合は、ここで適切なカメラタグを入力できます。
BlurAmount — VN フレームワークには、シーン中に背景をぼかすコードが含まれています。デフォルトでは、シーンのぼかし量を 1 に設定することで、この設定が有効になります。ブラーを 0 に設定して取り出したり、2 に設定してブラーを大きくしたりすることができます。
カスタムコード — ほとんどの場合、これを False のままにします。 しかし、大規模なプロジェクトを開発し続けると、シーンのコードがDT_MainScenesデータテーブルに収まるよりも複雑なインスタンスが見つかる場合があります。その場合は、カスタムコードを確認できますか?を True にします。TouchClickActor_BP子の CustomSceneCode 関数にアクセスして、ここでカスタム コードを作成します。
NVL – この値を True に設定すると、シーンが NVL モードで表示され、テキストは画面全体に縦に積み重ねられます。
シーンの起動
シーンはさまざまな方法で起動できます。以下のドキュメントを読むか、この完全なビデオチュートリアルを見て、プロセスの動作を確認してください:

あなたの最初のシーンを起動します
ゲームの最初のシーンを起動するには、青写真>ウィジェット> WD_Main_Menuで見つかったメインメニュー VN_Framework >ウィジェットを開きます。スタートゲームという名前のイベントを見つけます。いくつかのコマンドは後で、Global_BPで呼び出された強制開始シーンという関数が表示されます DT_MainScenes。メインメニューから最初のシーンが起動します。

DT_MainScenesデータテーブルから、NextScene フィールドに適切なニックネームを入力して、複数のシーンを一緒に文字列化できます。各シーンでレベルとサブレベルを変更することもできます。

注:ゲーム内の何かをクリックして起動しないシーンは、InvisibleSceneStarter_BP(タッチClick_BPs VN_Framework_Blueprints >で見られる)と呼ばれるアクターによって起動されます。


ゲーム内シーンを起動する
3D オブジェクトやキャラクターとやり取りする場合など、ゲーム内からシーンを起動する必要がある場合があります。これを行うには、次の手順に従います。

タッチ Click_BPsにある TouchClickActor_BP VN_Framework_Blueprints >検索します。
TouchClickActor_BPを右クリックし、[子ブループリント クラスの作成] を選択します。
希望どおりに名前を付けて(たとえば、あなたのTouchClick)、ゲームに配置します。
[関数] パネルで[オーバーライド]をクリックし、[ローカルシーンの選択]機能を選択します。
これで、子アクターのカスタム コードを作成して、特定のシーンを起動できるようになりました。リターンノードに目的のシーンニックネームを入力します。
場合によっては、何かをクリックする以外のシーンを起動する場合があります。これらの場合.

シーンをトリガーするオブジェクトから、Global_BPへの参照を作成し、イベント「強制的に開始シーン」を起動する必要があります。「現在のシーン」の文字列フィールドにシーンのニックネームを入力します。
条件付きシーン
ストーリーが進むにつれて、特定のシーンを特定の条件下でのみ起動する必要があります。たとえば、プレイヤーは既に別のイベントを終了したか、以前に特定の選択を行いましたか?次の図に示すように、[ローカル シーンの選択] 機能にコードを追加することで、起動するシーンを制御する条件を追加できます。

重要な注意* :PickLocalScene 関数は、再生するシーンのニックネームを把握するためにのみ使用する必要があります。シーンの起動時にカスタム コードを追加する場合は、タッチClick_BPアクターで使用できる CustomSceneCode 関数でカスタムコードを実行し、カスタムコードを設定しますか?DT_MainScenesリストで true にブール値を指定します。


シーンデータテーブルの充填
シーンは、Excel や OpenOfficeCalc などのスプレッドシートで作成し、.csv ファイルとしてエクスポートする必要があります。ダイアログは通常テキスト列に表示されますが、他の列もすべて重要です。

行番号
最初の列は行の名前を保持し、UE4 でデータテーブルを編成するために使用されます。最初の行 (ヘッダー行の下) は 1 から始まり、それに応じて増分する必要があります。ここで OpenOffice を使用してコードを使用すると便利です: 名前ボックスを SUM に変更し、コード =ROW( )-1.このボックスを列の下までコピーしてフィールドを自動化します。この方法では、後で行を並べ替えたり移動したりすることが容易になります。

注*:実際には、数値が正確であるか、または数字である必要はありません(例えば、4b、4cなどを入力することができます)。これは主に組織の目的で行われます。UE4 は、[行番号] 列に何を入力しても上から下に順に表示されます。


話者
ここでは、この行で話す文字の名前を入力する必要があります。この列は、VN_Framework >列挙型の文字列挙リストからの値のみを受け入れます。この行に話す文字以外のコードが含まれている場合は [なし] のままにし、文字を使用せずにテキストを表示する場合はナレーターをそのまま使用できます。

表現
ここでは、文字の式を入力できます。これは、列挙リストとして UE4 に入力されるため、特定の値のみを受け入れます。式を変更しない場合は、空白のままにするか、「Nothing」と入力します。また、発言者の名前を Speaker として入力し、[テキスト] フィールドを空白にした場合でも、行を使用して、話していない場合でも文字の式を変更できます。


ご想像のとおり、サウンドクリップが行く場所です!ここでのすべてのサウンド ファイルは、サウンド キューである必要があります。デフォルトでは、サウンドクリップはSceneTemplate_BPによって音声演技クリップとして解釈されます。ただし、必要に応じて、特殊効果列の対応するコードで、さまざまなサウンドをここに配置できます。

サウンドクリップの代わりに環境サウンドエフェクトを再生するには、[特殊効果]列に「サウンド」と入力します。これにより、音がスプライトの口の動きに接続されるのを防ぎ、次の行が始まると音が止まることはありません。

また、ここでシーンの音楽や雰囲気を変更することができます。「特殊効果」列に「ChangeMusic」と入力すると、サウンドキューが「サウンド」列に表示されている任意のサウンドキューに変更されます。同様に「アンビエンスを変える」は、雰囲気を変えるでしょう。

テキスト
これは、文字が話している間に画面上に表示されるテキストを入力する場所です。他のコードに行を使用している場合は空白のままにしておき、ゲームはその行の表示をスキップします。

いくつかのケースでは、この列は、特別なイベント列と連戦で使用される非話すコードを取ることができます。

テキスト効果
テキスト内の一時停止または待機:

w=time を中かっこの中に入れることで、インライン一時停止を実現できます。例:

テキスト: 1 秒待ちます。{w=2}さて、準備ができています。
この例では、テキストは "sec.. " の間に 2 秒間一時停止します。そして「大丈夫」
テキスト内の変数:

また、独自の変数を中かっこに挿入することもできます。組み込みの例は、カスタムプレーヤー名です。Global_BPには、デフォルトで"ジャスミン"に設定された PlayerName という変数があります。したがって、テキストに {player} を含めると、"ジャスミン" としてレンダリングされます。プレーヤーのカスタマイズを追加する場合は、プレーヤーがこの変数を変更できるように、必要に応じて独自のコードを設定する必要があります。

独自のカスタム変数を追加するには、VN_Framework >の設計図にあるSceneTemplate_BPを開きます。「変数」という関数を見つけます。ここでは、{中かっこ} の変数に独自のコードを追加して、選択したとおりに表示する領域を表示します。

リッチテキスト
VN フレームワークはリッチ テキストをサポートするようになりました。次の例に示すように、山かっこの引数で囲んで太字または斜体の単語を作成できます。

<bボルト></>
<イ>イタリック</>
エスケープ文字
このようなテキストに山かっこを表示する必要がある場合は、<>のように、各山かっこを通常のテキストのように扱う前にアスタリスクを付けることができます。そのため、シーンデータテーブルのテキスト列には、実際には「」を <>表示するために「*<*>」と入力します。

カスタムリッチテキスト
独自の効果をカスタマイズするには、VN_Framework >構造にある RichTextDT データテーブルを編集できます。ただし、新しい効果の各行名には、アンダースコア "_" の間に小、中、大、およびエクストララージのテキストのバージョンが必要です。したがって、新しい効果が「黄色」と呼ばれた場合は、「Small_yellow」、「Medium_yellow」、「Large_yellow」、「ExtraLarge_yellow」を行う必要があります。

ラインキャリブレーション
このビジュアルノベルフレームワークには、タイプライター効果で徐々に表示しながら、単語が別の行にジャンプするのを防ぐために設計された複雑なシステムが含まれています。このシステムの複雑さとテキストのキャリブレーションにかかる時間が原因で、この機能はデフォルトでオフになっています。

キャリブレーションを行うには、各文字を画面上に短時間表示し、フレームワークは文字のサイズを測定する必要があります。この機能がオンの場合、ゲームが初めてプレイされたとき、およびユーザーがテキストサイズやウィンドウサイズを変更したときに、キャリブレーションを実行する必要があります。

この機能を使用する場合は、VN_Framework >ブループリントにあるGlobal_BPのブループリントを開きます。その後、変数テキスト>を見つけますか?をクリックし、True に設定します。

スペシャルイベント
SpecialEvent 列は、主にシーン内の分岐や選択を制御するために使用されます。上から下に移動するのではなく、スクリプト内の別の行にジャンプする必要がある場合に使用する列と考えてください。

このコラムの使用方法の詳細については、次のセクションを参照してください。

条件に基づいてシーン内を分岐する方法
シーンに選択肢を追加する方法
その他の特別イベント:

EndScene – スクリプトのどこにいても、シーンを強制的に終了させる
SetCL*6*1 – このコードを使用して、シーンのフロー内でマスターチョイスログ値を設定します。通常、これはシーンの最後に使用され、プレイヤーがシーンを目撃したことを記録します。
SetNS*イントロ – 次のシーンを「イントロ」などの第2引数に設定します。
次の行*自動:次の行は、次の行に続いてテキストボックスにテキストを残すことができます。*auto 引数を追加して、次の行にシームレスに移動させることができます。
特殊効果
ここでは、シーンの進行に応じて発生する特殊効果を入力できます。複数の値を _ 区切り記号で区切っている場合は、1 つの特殊効果ボックスに複数の値を配置できます。たとえば、Wideview_Shake_Pause-2 は、同じ行に対して 3 つの特殊効果をすべて処理します。

以下に、一般的な特殊効果コマンドを使用できます。私はまた、次のカテゴリの効果のための別の説明を作成しました:

カメラの変更
CG の表示
その他の特殊効果:

達成*[達成ID] – これは、すでにあなたのゲームでSteam SDKを利用するために必要なすべての手順に従っている場合は、その行でスチームアチーブメントを取得する必要があります。プラス記号の後に Steam アチーブメントの名前 ID を入力します。例えば:
達成*シュンロラン
AssignView – カメラをキャラクタのカメラリストに追加する場合に使用します。これにより、そのカメラに切り取るときにキャラクターが見える状態が維持されます
黒 – すぐに画面を黒にします。「フェードイン」を使用するまでそこに残ります
ブーム – 爆発がちょうどオフになったかのように、カメラが短時間かつ劇的に揺れる原因
ChangeMusic - 特殊効果でこれを入れて、バックグラウンドミュージックを変更するためにサウンド欄に音楽ファイルを置きます。サウンドの列を空白にすると、音楽は何も消えません。
ChangeAmbience - これを特殊効果に入れて、アンビエンスファイルを「サウンド」列に入れて背景の雰囲気を変えます。サウンド列を空白のままにすると、雰囲気は消えてしまいます。
Char*[フロント/バック] – シーン内の他のすべてのキャラクタに対して、前面または背面にキャラクターを強制的に配置します。たとえば、文字*フロント
costume[X] – スピーカーフィールドで指定された文字と一緒に使用すると、そのキャラクターのコスチュームをXで示す値に設定します。この数字は、キャラクターの上書きリスト内のそのコスチュームの値です。例えば、コスチューム2
遅延*[時刻]*[FX/Snd/Exp/All]:最初と2番目の引数で示されるように、効果を遅延させます。FX は、特殊効果列、Snd サウンド列、および Exp がキャラクタの表現で、他に何が表示されているかを遅らせます。例えば、Delay*2*Exp は、行の開始から 2 秒後に文字変更式を作成します。3 番目の引数として「すべて」と入力して、3 を遅らせる。
破棄 – これは、名前がスピーカー列にリストされているキャラクターアクターを破壊します。これは、あるカメラアングルから別のミッドシーンにキャラクターを移動させる場合に便利です。あなたは、新しいカメラの角度にそれらを移動する前にそれらを破壊する必要があります
フェード[イン/アウト]*カラー*時間:最初の引数は、画面全体をフェードインまたはフェードアウトします。2 番目の 2 つは、フェードアウト*ホワイト*3(3 秒で白にフェード)のように、フェードの色とティムを指定するオプションです。
FadeIn – 黒い画面が消えてしまいます。この間、テキストは正常に再開します
フェードアウト – 画面を黒にフェードします。
対話と同じ行に置くと、行が始まるとすぐにフェードが始まりますが、画面が完全に黒になるまでプレイヤーは続行できません
スキップ可能な行に配置すると(ダイアログなし)、前のテキストは黒色にフェードしながら画面に残ります。フェードが終了するとスクリプトは続行されます
FadeInSprite – (廃止された – デフォルトでは文字がフェードインするので必要ありません) キャラクターがサイドからスライドするのではなく、特定の場所からフェードインしたい場合は、シーン内で最初にスポーンするときにこれを使用します
FadeOutSprite – キャラクターをフェードアウトさせるために使用します。フェードが完了すると、彼らの俳優は破壊されます。
Hair[X] – Speaker フィールドで指定された文字と一緒に使用すると、その文字のヘアは X で示される値に設定されます。この数字は、キャラクタの上書きリスト内のそのヘアの値です。たとえば、ヘア2
即時 – 文字のスポーンの行に使用され、これは、フェードやスライドなしで、瞬時に文字が表示されます
OutLeft – キャラクターを左にスライドさせてからアクターを破壊する
OutRight – キャラクターを右にスライドさせてから、そのアクターを破壊する
Pause*2 : 最後に表示された時間だけシーン全体を一時停止します。この場合、2秒。行にテキストがない場合、ダイアログウィジェットは一時停止中にフェードアウトし、それ以外の場合は何も変わりません。デフォルトでは、プレイヤーがクリックすると、これらの一時停止はスキップされます。しかし、もう1つの引数-Hardを追加して、Pause*2*Hardのような一時停止をスキップできないようにすることができます。
PersX – X を、その永続変数に関連付けられたインデックスに置き換えます。永続的変数を true としてマークします
PlayerMove – 現在のカメラの位置にプレーヤーの俳優を輸送するためにこれを使用します.これは、プレイヤーのアクターの位置に対する効果や、シーンが終わったときのスムーズなトランジションに役立ちます。
PushBack – これは、シーン内の他のオブジェクトの後ろに表示されるようにする場合に、キャラクタが初めてシーンに入る同じ行で使用できます。彼らはまだ同じサイズで、さらに後ろに現れます。デフォルトのスペース乗数は 3.3 です。プッシュバック量を変更する場合は、プッシュバック*[新しい乗数]を使用できます。例: プッシュバック*2.3
RedFlash – 画面がすばやく赤く点滅します
ランブル - 地球の揺れのような約5秒間続くゆっくりと長いカメラの揺れ
シェイク - 任意のノイズなしでカメラを振ります
サイド – この単語が文字を話す行で使用されている場合、この文字は、既に親アクターとしてゲームでスポーンされている場合でも、そのキャラクターの横の縦向きが表示されます
サウンド - サウンド列を介して大気のサウンドエフェクトを再生するためにこれを使用し、違いは、次の行が始まったときに切断されないことです
Speaker*[ニックネーム] – このエフェクトを使用すると、キャラクタが話している間にダイアログウィジェットに表示される名前を一時的に変更できます(そのシーンの終わりまで有効です)。たとえば、キャラクターが本当にジョージという名前で、プレイヤーがまだ名前を知らない場合は、Speaker*??? ジョージの最初の行に。その後、彼が話すたびに、彼の名前は???.名前をデフォルトに戻したい場合は、その名前の話し上げの 1 つに Speaker-X と入力します。
ホワイトフラッシュ – 画面がすばやく白く点滅します
ウィジェット*ズーム - ズームインウィジェット表示にその行の文字を回すためにこれを使用します。これが正しく動作するためには、ウィジェットで動作するように、Padding を使用して PoseDT を設定していることを確認してください。この効果は、使用する 2 番目の単語に応じていくつかのバリエーションがあります。
ウィジェット*ベース - ウィジェットスケール1.0でウィジェットキャラクタを作成します
ウィジェット*ズーム - ウィジェットスケール1.2でウィジェットキャラクタを作成します
ウィジェット*Zoom2 - ウィジェットスケール1.4でウィジェットキャラクタを作成します
ウィジェット*停止 - ウィジェットを破棄し、キャラクターの親アクターの表示に戻ります
カメラに固有の追加の SFX については、「カメラ」セクションを参照してください。

シャアX
ここで入力した値は、シーン内でキャラクタが水平方向に配置される位置を決定します。0 に近い値は、画面の中央付近に配置されます(0 を入力すると何も起こりません)。正の値を指定すると右に移動し、負の値を指定すると左に移動します。これらの値はシーン全体で構成されるため、45 を入力した後、別の行に 45 を入力すると、キャラクタは所定の位置に留まります。90を超える数字は、文字を画面外に移動し始めます。

シーンにまだ入力していないキャラクタに値を入力すると、そのキャラクタがスポーンされて入力されます。それ以外の場合は、移動しようとします。

シーンの先頭に複数の文字を作成する場合は、空白のテキスト フィールドを含む行を使用して、テキストの表示が開始される前に、それらを生成します。

シャアY
CharY 列は、画面上のキャラクタの垂直配置を制御します。"0.0" の値は、既定の配置を使用します。負の値を指定すると、文字が上に移動します。正の値を指定すると、下に移動します。

シャアスケール
ここでは、表示されている文字のスケールを入力できます。これは、キャラクターが最初にスポーンしたときにのみ有効になります。アクターを破棄してリスポーンしない限り、スケールを再び変更することはできません。推奨値は 0.5 ~ 2.0 です。1 はもちろんデフォルトのスケールです。以下の値をクリックするとスプライトが縮小され、上の値が拡大表示されます。

CharHorizontal 値を持つ文字を最初に生成するときには、CharScale 列に常に値が割り当てられている必要があります。

カメラの変更
シーン内のカメラの変更を開始する前に、VNframework 内でカメラが自動的に動作する方法について少し理解しておく必要があります。

カメラはタグを使用してScene_Template_BPで追跡されます。デフォルトでは、シーンを起動すると、プレイヤーの視点から再生されます。このデフォルトのカメラでは、タグ"PlayerCam"を使用します。

キャラクターをゲームにスポーンするたびに、彼らは自分に割り当てられたカメラタグの独自のリスト(ParentActorに保持)を作成します。たとえば、PlayerCam でジェシカをスポーンすると、ジェシカカメラタグの最初のインデックスは "PlayerCam" になります。次に、別のカメラ(Camera2 としましょう)に切り替えて、David という異なるキャラクターを生み出したとしましょう。デビッドのカメラリストは「カメラ2」から始まります。次にジェシカが話すとき、theScene_Template_BPは自動的に彼女のカメラリストの先頭にカメラにカットされます。そのため、各行に SpecialEffects コマンドを使用せずに、2 つのキャラクタ間を自動的にジャンプするシーンを作成できます。

また、カメラにカットすると、そのカメラに割り当てられていない文字が非表示になることにも注意してください。これは、プレイヤーが3D空間で意図しない角度でスポーンされたキャラクターのスプライトを見るのを防ぐために行われ、非常に奇妙に見える可能性があります!

2 台のカメラ間を切り取るとき、MainCamera アクターのコードは 2 台のカメラの回転を比較し、小さなスライド効果を計算してカットを柔らかくします。

同じシーン内で新しい角度でキャラクタをスポーンする場合は、最初に「破棄」SpecialEffect コマンドを使用して前のアクターを破棄する必要があります。

カメラの配置
「設計図VN_Framework >>カメラ」に移動して、VN フレームワークで動作するように設計されたカメラ アクターを検索します。MainCamera アクターは、他のすべてのカメラの親です。デフォルトでは、タグは付け付けありません。

シーンで使用するために MainCamera をマップにドラッグする場合は、エディタの [詳細] ウィンドウを使用して、必ずアクター タグを設定してください。独自のカメラタグを作成することもできますが、"Cam" という単語がタグ内のどこか (JessicaCam など) であることを確認してください。これにより、シーンで文字列を使用するときに、Scene_Template_BPはカメラ コマンドとして解釈できます。

便利な理由から、子供用カメラ(Camera1、Camera2 など)を使用して、自分でタグを作成する必要はありません。Camera2 には、子カメラごとに「Camera2」タグが割り当てられています。

追加カメラコマンド
カメラの動作について基本的な理解ができたので、映画のシーンを作成するために使用できる追加のコマンドをいくつか紹介します。

[クローズアップ] – この行のスピーキングキャラクタのクローズアップビューに新しいカメラが作成されます。カメラは、引き出すために「ワイドビュー」が使用されるまで、次の行のためにクローズアップビューを使用し続けます。このカメラは、キャラクターが破壊されるたびに破壊されます。
ワイドビュー – クローズアップから切り替え、キャラクターの元のビューを戻します。
ハンドヘルド - 継続的なハンドヘルドカメラ効果を開始
ストップハンドヘルド – ハンドヘルド効果を停止
CLeft – カメラが左にわずかにシフトします
CRight – カメラがわずかに右にシフトします
CUp – カメラがわずかに上にシフトします
CZoom – カメラがわずかにズームインします。これは、まったく新しいカメラビューを作成する「クローズアップ」とは異なっています。これは一時的なズームです
CRand – 数秒ごとにランダムな新しい位置にカメラをジャンプさせます。緊張感、ドラマチック、不快なシーンに適しています
CReg – カメラを正常な位置に戻します
SS – 遅いスライド。これをカメラの引数に追加して、1台のカメラから次のカメラへの滑らかでゆっくりと滑空するようにします。
NT – 移行なし。カメラの引数にこれを追加して、カメラがトランジションなしでスライドすることを確認します - ちょうどストレートカット
ST– 手動でカメラブレンドの時間を設定するためにこれを使用します。それを使用するためには、行の残りの部分がスキップ可能であることを意味する「テキスト」フィールドにブレンド時間を入力する必要があります。最初の行の後の 2 番目の数値は、次のテキスト行の前の遅延です。次のような項目を入力します。
5_6 ...カメラブレンドには5秒かかり、次のラインが起動するまで6秒間待ちたいということです。カメラのブレンド中もスクリプトを実行し続ける場合は、5_0 と入力します。
永続的なデータ
永続データは、ゲームのすべてのプレイスルーの永続変数を追跡するため、通常の保存データとは異なる方法で機能します。永続データで変数のロックが解除されると、プレイヤーがゲームを開始してもロックが解除されたままになります。

ブループリントVN_Framework >保存>保存>PersistentDataを開いて、永続データの保存に使用されるアクターを表示できます。Global_BPは、ゲームの最初の起動時に 100 のブール値エントリを持つ空の PersistentLog を作成します (Global_BP Event Init で検索して編集できます)。

通常、永続データは、プレイヤーがロックを解除した CD やプレイしたルートを追跡するために使用されます。たとえば、プレイヤーがゲームを破ったときに、永続的な値のロックを解除することがあります。シーン内で、PersX を [特殊効果] 列に追加して True に設定できます(選択したインデックスに置き換えます)。

VN フレームワークが追跡する永続データの種類:

PersistentLog = さまざまな永続変数を追跡するために使用されるブール値の配列。シーンで PersX を使用して値を作成すると、PersistentLog に保存されます。また、ギャラリーの CG に番号を付けると、これらは永続ログの対応するインデックスでロック解除されます。
SceneLog (バージョン 1.4+) = プレイヤーが閲覧したシーンのニックネームの配列。VN Framework はこれを自動的に追跡し、シーンが表示されているかどうかに応じてスキップを有効または無効にします
MCLPersistent (バージョン 1.4+) = プレイヤーの選択を追跡するアレイ。選択の数は、毎回インデックスに追加されます。したがって、1つのプレイスルーで2を選択し、次のプレイスルーで1を選択した場合、値は「21」に等しくなります。
PersistentLog を使用して、必要な変数を追跡できますが、インデックス値を混ぜないように、インデックス値のリストをきちんと保持してください。

CGとギャラリーシステム
このVNフレームワークには、ゲーム内のギャラリーとCGシステムのテンプレートが含まれています。ギャラリーシステムに関連付けられているアセットを表示するには、ギャラリー VN_Framework >移動します。

CG の定義
GalleryListDT を開いて、ゲーム内のすべての CG の包括的なリストを表示および編集します。各列とそれが何を表すのかを書き留めます。

RowName – 最初の列は常に行名であり、その行に固有の整数値である必要があります。この番号は、PersistentLog ファイル内のその CG のインデックスに対応するため、重要です。プレイヤーがゲーム内でその CG を見ると、この PersistentLog 値は true に設定されます。その後、プレイヤーはギャラリーでCGを見ることができます。
Texture2D – この列で、その CG が呼び出されたときに表示する 2D テクスチャをドロップします(スプライトを指定する場合は必要ありません)。
スプライト – (バージョン 1.4 とアップ) この列の CG のスプライトをドロップします。スプライトが指定されている場合、これは Texture2D よりも優先されます。
ニックネーム – CG に好きなニックネームを付けます。表示するシーンデータテーブルでこのニックネームを使用します。
カテゴリ – これは、ギャラリーでの CG の表示方法にのみ影響します。ギャラリー > GalleryCategory を編集して、この列挙リストからカテゴリVN_Framework >追加または削除できます。ギャラリーは、自動的に適切なカテゴリにCDを分割してブラウジングを容易にします。
シーンの間にそれを表示する
シーン中に CG を表示するには、GalleryListDT で指定したニックネームを参照する必要があります。シーンデータテーブルのテキストフィールドにニックネームを入力し、SpecialEffect 列に「CGstart」と入力します。

例:
テキスト特殊効果
ユジック1 CGstart

必要に応じて、引数を追加して、CG をトランジションまたはズームで表示できます。

遷移:

あなたのCG1*シェイク - CGは、シェイク効果で表示されます
あなたのCG1*フェード - CGがフェードインします
さらに 3 つの引数を追加して、スケール、X ピボット、Y ピボットをその順序で設定できます。例えば:
YourCG1*fade*1.4*0.6*0.4 –> CGのスケールを1.4に、ピボットxを0.6に設定し、フェードインしながらピボットyを0.4に設定します。
CG が画面に表示されたら、「特殊効果」列のコマンドを使用して、CG を制御し続けることができます。

CGcut – CGのピボットポイントとスケールを変更するには、この[特殊効果]列でこれを使用します。この切り取りを制御する 4 つの引数をテキスト フィールドに入力します。例えば:
1.4*0.6*0.4*2.2
引数[0]、1.4 = スケール。引数[1]、0.6 = X ピボット。引数[2]、0.4 = Y ピボット。引数[3]、2.2 = タイムラインの長さ (空白のままにすることができます)
CGend – CGフェードアウトを作るためにこれを使用します
サウンドの使用
プロジェクトにサウンドファイルを読み込む場合は、そのファイルをサウンドキューに変換します(右クリックして[キューを作成]を選択します)。サウンドキューを作成したら、クラスを与えます。VNフレームワークは、VN_Framework/オーディオミックスクラスから選択するいくつかのサウンドクラスが付属しています。

ミュージッククラス(リバーブの影響を受けません)
SFXクラス(リバーブの影響を受ける)
VAClass (リバーブの影響を受ける)
VA_NarrationClass(リバーブの影響を受けません)
適切なクラスを割り当てると、オプションメニューで設定した音量レベルに、サウンドが適切に影響されます。

VAサウンドキューの場合は、(サウンド列に)ボイシングしているラインにドロップするだけで、VN_Frameworkはそれをどうするか知っています。音楽や雰囲気を変更するには、これらのサウンド キューを特殊効果を持つ独自のラインに配置します。

ブランチと選択肢
シーンブランチ

シーン内にブランチを作成するには、チェックするマスターChoiceLogインデックスと値を知る必要があります(マスターチョイスログは、ゲーム内のすべての選択を記憶する大きな配列です)。準備ができたら、[条件] という単語を [イベントのイベント] 列に追加します。次に、その行のテキスト フィールドにコード行を配置します。

条件コード例:
7_1_YourBranch1_YourBranch2

上記の行は、シーンテンプレートによって解釈されます:マスターチョイスログインデックス7 EQUALS値1、その後、あなたのブランチ1にジャンプし、ELSEはYourBranch2にジャンプします。

最後の引数である YourBranch2 は省略可能であることに注意してください。その空白を残した場合 (7_1_YourBranch1したばかりで)、条件が誤っている場合、スクリプトは次の行に進みます。

変数 "YourBranch1" と "YourBranch2" は、対象となる行の SpecialEvent 値と一致する限り、必要に応じて任意の文字列です。同じシーン内のすべてのブランチに固有のタグを作成してください。

例:
テキストスペシャルイベント
マスターチョイスログ7は1に等しいです!あなたのブランチ1

この行を YourBranch1 で再生する場合は、そのタグを YourBranch1 スペシャル イベント列に入力してください。

分岐から戻る準備ができたら、DiamondBranch1 などのダイヤモンド ポイントの新しいタグを作成します (ただし、一意である限り、任意の文字列を使用できます)。次に、ジャンプポイントの新しい条件ラインを作成します。チェックする値として 0_0 を使用し、常に True を返します。これを適切に使用するために、MasterChoice ログ インデックス 0 が常に 0 のままであることを確認します (つまり、選択時にそのインデックスを使用しないでください)。

例:
テキスト特殊イベント
0_0_DiamondBranch1条件

ストーリーが複雑になるにつれて、複数の条件を連結する必要が生じる場合があります。これを行うにはいくつかの方法があります。「Condition」で始まる分岐タグを作成する場合は、この行にジャンプして、テキストフィールドで条件を確認できます。また、スクリプトが適切なジャンプポイントを見つけるまで、最後の引数を空白のままにして、1 行から次の行に移動し続けます。

例:
テキスト特殊イベント
6_1_Branch1_Condition2条件
6_2_Branch2_Branch3条件2

選択肢の追加
シーンに選択肢を追加するには、まず[スペシャルイベント]列にコードを入力します。

例:
テキスト特別なEventUh
ああ、私は犬と猫の間で選択する必要があります!チョイス1*5

テキスト行は通常どおり画面に表示されます。一方、選択が開始されます。「Choice」という単語の後の数字は、その選択のローカルおよびグローバルシーケンスを追跡します。例の最初の値である「1」は、その特定のシーンで最初に使用される選択肢であることを意味します。これにより、シーン テンプレートは、1 つのシーンで複数の選択肢を追跡し、迷子になることなく、その選択を追跡できます。

この例では、区切り文字 (* ) または "5" の後の 2 番目の数値は、その選択に関連付けるマスター選択ログインデックスに対応します。プレイヤーがここで選択した後、その値はマスターチョイスログインデックス5に永久に保存されます。

選択の直後に、表示する選択肢を次の数行に入力する必要があります。[特別なイベント] 列で、A から始まるアルファベット順にマークします。

例:
テキスト特別イベント
犬の選択を
選択する猫の選択Bを選択する

これで、ChoiceA に犬を割り当て、猫を ChoiceB に割り当てようになりました。

条件付き選択
特定の条件下でのみ選択肢を表示したい場合は、その特殊効果列にコードを追加できます。

例:
条件*90*1 — これは、マスターチョイスログ90 = 1 == 真の場合にのみ選択が表示されます。false のときに表示されるようにするには、末尾に *F を追加します (条件*90*1*F)。

選択肢の枝
プレイヤーに選択肢を表示した後、シーンは選択内容に応じて ChoiceAStart または ChoiceBStart (追加の値は ChoiceCStart など) とマークされた行にジャンプします。

例:
テキストスペシャルイベント
私は犬を選んだように見えます!チョイスAStart
私は猫と一緒に行くと思います!
いずれにせよ、私は食べ物を拾います。ダイヤモンドバックチョイス1

最後に、特殊イベント列の文字列"DiamondbackChoice1"を使用して、シーン番号に一致する整数を使用して、すべての選択肢から戻ります(たとえば、これがChoice2の場合は、DiamondbackChoice2を使用します)。

ネストされた選択肢
場合によっては、選択肢の中で選択肢が生じることもあります。この場合は、2 番目の選択肢に最後に_Nestをマークします。

例:
テキストスペシャルイベント
私は先に犬を選んだが、今私はその食べ物を選択する必要があります!選択肢2*6_Nest

ここで基礎となるコードのアイデアを与えるために、「Nest」タグは、シーンテンプレートBPに、上記の選択のブランチを見つけるときにこの選択をスキップするように指示します。Nestの選択が正しく機能するためには、独自のDiamondbackChoiceポイントを持っている必要があります。ひし形ポイントの [テキスト] フィールドを空白のままにしても、シーン テンプレート BP は正しく移動するためには、ダイヤモンド ポイントを見つけなければならない。

サイクリングの選択肢
探偵ゲームなど、場合によっては、プレイヤーが同じ選択に戻って複数のオプションを探索する場合があります。私はこれをサイクリングの選択と呼びます。

サイクリングの選択肢には、いくつかのコマンドが使用されます。

「_Cycle」を Choice 行に追加します (以前のバージョンでは、この引数を DiamondbackChoice 行に追加しました。これは、Choice1*6_Cycleなどの最初の選択肢行で請求されるようになりました。これにより、すべてのオプションが使い果たされるまで、元の選択ポイントに戻り続けるようにシーン テンプレートに指示します。このコマンドは、すべてのサイクリングの選択肢に必要です。
プレイヤーの選択肢を一覧表示する場合は、スペシャルイベント列に「ChoiceExit」というラベルの付いた選択肢を追加します。この選択は、プレイヤーが少なくとも 1 つの選択を行った後にのみ表示され、これ以上選択を行いたくない場合は、サイクリング ループをスキップできます。選択出口は省略可能です。 含まれていない場合、プレイヤーは続行する前に、すべての選択を行う必要があります。
デフォルトでは、サイクリングの選択肢のオプションは、プレイヤーが異なっていることを認識するように、わずかに異なる色を持っています。これらの色は、設計図>ウィジェット> WD_Choicesで変更できます。変数 AltButtonColor を見つけて、必要に応じて変更します。
続行する前に特定の選択を行いたい場合は、ForceQ コマンドを使用できます。これは、シーン テンプレート BP によって追跡されるブール値です。「サイクリング」の選択肢に入る前に 1 に設定し、プレイヤーが必要な選択を行ったときに 0 に戻す必要があります。「スペシャルイベント」列で次のコマンドを使用します。

ForceQ*1 – サイクルロックを有効にするには、サイクリングの質問の前にこれを使用します。これは、一連のサイクリングの質問の中に入ると、ForceQ がオフになるまでサイクルを終了できないことを意味します。
ForceQ*0 – 必要な質問でこれを使用して、プレイヤーがサイクリングの質問を終了できるようにします
また、スペシャルイベントキャンセルサイクルを使用して、選択ブランチ内でサイクル終了を行うこともできます。これにより、選択ブランチが終了した後、通常は選択が終了します。

統計システム

現在、statLog と呼ばれるGlobal_BP内の整数の配列があります。この配列を使用して、ゲーム内の統計を追跡できます。たとえば、StatLog の各インデックスは特定の文字を表し、ゲームで行われた選択は、その文字に関連付けられたポイントを加算または減算できます。

この例では、StatLog のインデックス 0 を通じて Jessica の統計を追跡することを選択しました。だから私は彼女とポイントを加算または減算する選択肢が必要な場合は、関連する選択肢のSpecialEffect列に引数を追加することができます。引数は、Stat*[StatLog インデックス][+]または - 加算または減算する][加算または減算するポイントの量]を読む必要があります。したがって、上記の例では、Jessica でポイントを失う選択肢を選択したい場合は、その選択の横にある [SpecialEffect] 列に Stat*0-1 と入力します。現在、最小ポイント量は 0 にクランプされています。

左上隅に表示されるテキスト メッセージを変更するには、> WD_Diaの青写真>VN_Framework >開き、関数 BuildStatMessage を開きます。ここでは、特定の名前またはメッセージを各インデックスに関連付けることができます。

Stat メッセージがプレーヤーに表示されないようにするには、青写真>ウィジェット> WD_Choices VN_Framework >開きます。イベントのプロセス統計を見つけます。最後に、StatChange という関数があります。"ShowMessage?" のブール値をアンフックして、常に False になるようにします。

統計に基づく分岐シーン
また、統計に基づいてシーンのブランチを作成することもできます。統計条件はマスター選択ログ条件と同様に機能しますが、テキストフィールドの先頭に余分な引数が含まれます。テキストに処理するには、特殊イベント列に「条件」という単語を含める必要があります。

テキスト |スペシャルイベント
統計*1*less_8_ChoiceBStart |条件

上の例では、StatLog のインデックス 1 の文字の統計値が 8 未満の場合、シーンは SpecialEvent 列に "ChoiceBStart" の行にジャンプします。

レベル
Main_Persistentレベルの説明
VN_Frameworkでは、プライマリ レベルとして Main_Persistent と呼ばれるマップが使用されます。Main_Persistent自体は実際には空のレベルですが、複数のサブレベルを含めることができます。

Main_Persistent以外のレベルを使用する場合は、有効なオプションです。他のマップで VN フレームワークを引き続き使用するには、同じゲーム モードとゲーム インスタンス (Global_BP) を使用していることを確認するだけです。

しかし、まったく新しいレベルを作る前に、独自のマップをサブレベルとして追加することを検討してください。これらは、UE4 エディタのウィンドウ >レベルに移動し、マップをサブレベル リストにドラッグすることで、Main_Persistent レベルに追加できます。

独自のサブレベルをMain_Persistentレベルに追加することは、VN フレームワークを利用する最も簡単な方法です。

レベルのナビゲート
実際には、VNフレームワーク内のレベルとサブレベルを変更することは非常に簡単です。ここでは、いくつかの異なる方法を使用できます。

DT_MainScenesデータテーブルを編集します。これはVN_Framework >シーンで見つけることができます。ここでシーンを定義する場合は常に、PersistentLevel とサブレベルのオプションの列があります。シーンに使用するマップの名前をここに入力します。空のままにすると、プレイヤーが既に存在する場所でシーンが発生します。
「スペシャルイベント」コマンドを使用します。シーン中に、適切なコマンドを入力して、次に発生するシーンを変更できます。
SetNS*イントロ – 次のシーンを「イントロ」などの第2引数に設定します。
シーンが終了した後にプレイヤーを別のレベルまたはサブレベルに移動するが、その後にシーンがない場合は、設定できます。
レベルを変更するためだけにシーン行を作成しますが、データテーブル列は空のままにします。以下のサンプル「戻るチュートリアル」を参照してください。

別のシーンを再生せずにそのマップに戻す場合は、次のシーンを ReturnToTutorial として配置できます。

リッチテキスト
VN フレームワークはリッチ テキストをサポートするようになりました。次の例に示すように、山かっこの引数で囲んで太字または斜体の単語を作成できます。

<bボルト></>
<イ>イタリック</>
エスケープ文字
このようなテキストに山かっこを表示する必要がある場合は、<>のように、各山かっこを通常のテキストのように扱う前にアスタリスクを付けることができます。そのため、シーンデータテーブルのテキスト列には、実際には「」を <>表示するために「*<*>」と入力します。

カスタムリッチテキスト
独自の効果をカスタマイズするには、VN_Framework >構造にある RichTextDT データテーブルを編集できます。ただし、新しい効果の各行名には、アンダースコア "_" の間に小、中、大、およびエクストララージのテキストのバージョンが必要です。したがって、新しい効果が「黄色」と呼ばれた場合は、「Small_yellow」、「Medium_yellow」、「Large_yellow」、「ExtraLarge_yellow」を行う必要があります。

ラインキャリブレーション
このビジュアルノベルフレームワークには、タイプライター効果で徐々に表示しながら、単語が別の行にジャンプするのを防ぐために設計された複雑なシステムが含まれています。このシステムの複雑さとテキストのキャリブレーションにかかる時間が原因で、この機能はデフォルトでオフになっています。

キャリブレーションを行うには、各文字を画面上に短時間表示し、フレームワークは文字のサイズを測定する必要があります。この機能がオンの場合、ゲームが初めてプレイされたとき、およびユーザーがテキストサイズやウィンドウサイズを変更したときに、キャリブレーションを実行する必要があります。

この機能を使用する場合は、VN_Framework >ブループリントにあるGlobal_BPのブループリントを開きます。その後、変数テキスト>を見つけますか?をクリックし、True に設定します。