NarraLeaf

Gallery

ゲームの鑑賞画面(CG、回想、音楽、ボイス)の内容とプレイヤーの解除記録を読み取る、Gallery プラグインのノード

Gallery プラグインは、ゲームの鑑賞画面のためのものです。CG ギャラリー、シーン回想、音楽鑑賞、ボイス鑑賞を扱います。鑑賞画面に載せるものを Studio のギャラリーエディターで一覧にしておくと、このページのノードがその一覧とプレイヤーが解除した内容を合わせて、List ウィジェットがそのまま描ける行として返します。このプラグインは出荷時に無効です。組み込みプラグインを参照してください。

Skeleton(スケルトン)テンプレートから作成したプロジェクトの鑑賞画面は、これらのノードで組み立てられています。列ごとに Get Gallery が 1 つ、進捗の行に Get Gallery Progress、CG ビューアーに Get Gallery Variants と Get Gallery Variant At を使っています。

カタログ

  • エントリー(entry)。 鑑賞画面の 1 項目です。1 枚の CG、1 つの回想、1 枚のアルバム、1 組のボイスのいずれかです。どのエントリーにも種類があり、cg、scene、music、voice のいずれかで、Studio では CG、Recollection(回想)、Music(音楽)、Voice(ボイス)と表示されます。種類はエントリーが属する列を決めます。ノードのカードとピンはエントリーを artwork と呼びます。カードの Artwork フィールドと artworkId ピンがそれです。
  • バリアント(variant)。 エントリーの 1 メンバーです。CG の差分、回想の画像、アルバムの曲、ボイスの組の 1 行がこれにあたります。プレイヤーが解除するのはバリアントです。エントリーは、いずれかのバリアントが解除された時点で解除済みとみなされます。
  • カバー。 エントリーを代表するバリアントです。星を付けたもの、なければ最初のものです。
  • グループ。 すべての種類にまたがる任意の分類で、タブバーに使います。エントリーはグループに 1 つ属するか、どれにも属しません。
  • ロック中の見た目。 エントリーがロックされている間、その行は元の画像の代わりにプレースホルダー画像を、名前の代わりにロック中のタイトルを持ち、説明、音声、ボイス、シーンのフィールドは空になります。プレースホルダーはエントリー自身のもの、なければカタログの既定のものです。ロック中のタイトルは変更するまで ??? で、空にすると本当の名前が表示されます。
  • 非表示のエントリー。 非表示に設定したエントリーは、プレイヤーが解除するまで Get Gallery の行にも進捗の合計にも含まれません。そのため、秘密のエントリーが空の枠として見えることはありません。

プラグインを有効にすると、アクティビティバーに Gallery(ギャラリー)ツールが現れ、エントリーを一覧表示します。エントリーを選ぶか、ツールのヘッダーにある展開ボタンを押すと、ギャラリーエディターがタブとして開きます。

エディターは種類ごとに列を持ちます。追加ボタンは列によって変わります。Import CGs(CG を読み込む)は選んだ画像 1 枚ごとにエントリーを 1 つ作り、Import Tracks(トラックを読み込む)は選んだ曲で 1 枚のアルバムを作り、Add Recollection(回想を追加)と Add Voice Lines(ボイスの行を追加)は空のエントリーを作ります。そのシーンや行はインスペクターで選びます。グループは列の下に並ぶチップで、New group(新規グループ)で追加します。インスペクターでは、エントリーの名前、説明、グループ、バリアント、Shown as a locked slot(ロックされた枠として表示)か Hidden until unlocked(解除まで非表示)か、そしてエントリー自身のロック中のプレースホルダーを編集します。ヘッダーの How locked entries look in game(ゲーム内でのロック中の見た目)ボタンで、カタログの Default placeholder(既定のプレースホルダー)と Locked title(ロック中のタイトル)を設定します。

カタログはプロジェクトとともに保存され、ゲームに同梱されます。

プロジェクトに 2 つ目の言語があれば、各エントリーの名前と説明、各バリアントの名前、各グループの名前、ロック中のタイトルが、翻訳テーブルの Interface text(画面のテキスト)にプラグイン名でまとめて 1 行ずつ並びます。ノードはそれらをプレイヤーの言語で返し、その行が翻訳されるまでは書いたとおりに返します。ロック中の見た目は、書いたとおりの名前と同じく、翻訳した名前にも適用されます。

解除

バリアントを解除するものは種類によって異なります。何も選択していないとき、エディターのインスペクターも列ごとに同じことを示します。

種類解除するもの
CGUnlock Gallery または Unlock Whole Gallery だけです。
Recollectionプレイヤーがエントリーのシーンに到達したとき。エントリーのすべてのバリアントが一度に解除されます。
Musicストーリーがその曲を再生したとき。/bgm 行や /sound 行、またはシーンの開始時に流れるそのシーン自身の BGM です。Page が Play Sound で再生するクリップは数えないため、音楽鑑賞画面自身のプレイヤーでは曲を解除できません。
Voiceプレイヤーが、そのバリアントの元になったストーリーの行を読み終えたとき。

解除記録はプレイヤーの持続データに、永続変数と並んで保存され、どのセーブファイルにも入りません。新しいゲームを始めてもリセットされず、セーブをロードしても変わりません。Lock Whole Gallery で消去されます。Studio では、Reset player data(プレイヤーデータをリセット)が Dev Mode または Preview の解除記録を、それぞれのセーブとともに消去します。

解除記録が保持するのはバリアントの id で、id はエディターが割り当てます。まだバリアントのないエントリーは、エントリー自身の id で記録されます。バリアントの名前を変えたり並べ替えたりしても解除状態は保たれます。バリアントを削除して同じ画像を追加し直すと、新しいバリアントになり、ロックされた状態から始まります。

まだバリアントのないエントリーは、全体として解除・ロックされます。回想のシーンへの到達、Unlock Gallery、Lock Gallery、Unlock Whole Gallery のいずれもそのエントリーに作用します。回想は作成時に画像を持ちませんが、画像がなくてもシーンに到達すれば解除され、後から加えた画像もそのプレイヤーにとっては解除済みになります。

規約

  • どのノードにも exec ピンがあります。 Pure なものはなく、Blueprint Value ではどれも提供されません。イベントグラフから実行し、返された値を List や変数に渡してください。Get Gallery Groups 以外はすべて Latent です。
  • 接続したピンがカードより優先されます。 artworkId、variantId、groupId に空でない文字列が来ると、カードの Artwork、Variant、Group を上書きします。作成時にはカードで名前から選び、ピンには行が持つ id を渡します。プレイヤーがクリックした行がビューアーを動かすのはこの仕組みです。
  • 行はすでにロック状態を反映しています。 ロック状態は各行の中で適用済みなので、項目テンプレートは受け取ったものをそのまま描けばよく、ロック中のエントリーの画像を誤って見せることはありません。
  • 行は List に渡します。 entries を Set List Content に接続し、List の Edit content(内容を編集)で Struct(構造体)を Gallery entry(ギャラリーの項目)、Gallery variant(ギャラリーのバリアント)、Gallery group(ギャラリーのグループ)のいずれかにします(リストを参照)。項目テンプレートのウィジェットはフィールドを名前で選べるようになり、ブループリントでは Get Field でフィールドを読みます。これらの構造体は Gallery プラグインが有効なときに使えます。
  • エントリーが見つからないとノードは失敗します。 カードでエントリーを選んでおらず artworkId にも何もないと、ノードは Pick a gallery artwork で失敗します。カタログにない id では Gallery artwork not found: <id> で失敗します。
  • 実行される場所。 エディターのキャンバスでは、ノードは編集中のカタログを読み、何も解除されていない状態として扱い、解除やロックは何も変えません。Dev Mode、Preview、ビルドしたゲームでは、ゲームに同梱されたカタログを読みます。
  • カタログのないゲーム。 ゲームがギャラリーのカタログを持たない場合(プロジェクトがカタログを一度も保存していない場合)、プラグインは No gallery catalog was published with this game. を一度だけ記録します。Get Gallery と Get Gallery Groups は空の配列を返し、Get Gallery Progress はすべて 0 を返し、エントリーを指定するノードはすべて失敗します。

narraleaf.gallery.getEntries · Latent

カタログのエントリーを、エディターでの順序のまま、種類とグループで絞り込んだ行として返します。プレイヤーがまだ解除していない非表示のエントリーは含まれません。

ピン方向型備考
inin · exec—
groupIdin · datastring省略可能です。接続されている場合はカードの Group より優先されます。
onlyUnlockedin · databoolean省略可能です。カード上にリテラル値を入力できます。true ではロック中のエントリーをすべて除きます。
nextout · exec—
entriesout · dataarray<struct:narraleaf.gallery.entry>Gallery entry list(ギャラリーの項目のリスト)。フィールドは下記のとおりです。
countout · dataintegerentries の行数です。
unlockedCountout · dataintegerentries のうち解除済みの行数です。

カード上のフィールド

フィールド内容
KindCG、Recollection、Music、Voice のいずれか。空(All kinds(すべての種類))ではすべての種類を読みます。
Groupカタログのグループの 1 つ。空(All groups(すべてのグループ))ではすべてのグループを読みます。

エントリーフィールド

フィールド内容
indexentries の中での位置。絞り込みの後に数えます。
idエントリーの id。artworkId ピンに渡します。
nameエントリーの名前。ロック中はロック中のタイトル。
descriptionロック中は空。
kind"cg"、"scene"、"music"、"voice" のいずれか。
groupId、groupNameどのグループにも属さないエントリーでは空。
unlocked、lockedいずれかのバリアントが解除済みかどうか(まだバリアントのないエントリーではエントリー自身が解除済みかどうか)と、その反転。Not を使わずにロック中の見た目を束縛できます。
variantCount、unlockedCountエントリーのバリアント数と、そのうち解除済みの数。
image、assetId描く画像を、ImageAsset と素のアセット id で。解除済みなら、プレイヤーがカバーを持っていればカバー、なければプレイヤーが持つ最初のバリアント。ロック中はロック中のプレースホルダー。画像がなければ null と ""。
thumbnail、thumbnailAssetId同じ画像。ギャラリーエディターは別のサムネイルを設定しません。
coverVariantId解除済みのとき image の元になっているバリアント。ビューアーはこれから開けます。ロック中はカバー。
audioAssetIdmusic:表示している曲のクリップ。Play Sound に渡します。ロック中は空。
durationSec長さが分かっていれば秒数、分からなければ 0。プロジェクトのボイスのテイクから選んだ行は長さを持ち、読み込んだ曲は持ちません。
voiceUnitIdvoice:表示している行の voice id。Play Voice に渡します。ロック中は空。
lineTextvoice:表示している行の、選んだ時点でのテキスト。字幕に使います。ロック中は空。
storyId、sceneId、startBlockIdscene:Start Game が再生を始める場所。ロック中は空。ギャラリーエディターはストーリーとシーンしか設定しないため、startBlockId は空です。

narraleaf.gallery.getVariants · Latent

1 つのエントリーのバリアントを、エディターでの順序のまま行として返します。CG ビューアーの差分の帯、アルバムの曲目、ボイスの組の各行に使います。エントリーが非表示かどうかはここでは関係しません。

ピン方向型備考
inin · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
onlyUnlockedin · databoolean省略可能です。カード上にリテラル値を入力できます。true ではロック中のバリアントをすべて除きます。
nextout · exec—
entriesout · dataarray<struct:narraleaf.gallery.variant>Gallery variant list(ギャラリーのバリアントのリスト)。フィールドは下記のとおりです。
countout · dataintegerentries の行数です。
unlockedCountout · dataintegerentries のうち解除済みの行数です。

カード上のフィールド

フィールド内容
Artworkエントリー。名前で選びます。

バリアントフィールド

フィールド内容
indexentries の中での位置。絞り込みの後に数えます。
idバリアントの id。variantId ピンに渡します。
artworkIdバリアントが属するエントリー。
nameバリアントの名前。ロック中はロック中のタイトル。
unlocked、lockedこのバリアントが解除済みかどうかと、その反転。
image、assetId解除済みならバリアントの画像、ロック中ならロック中のプレースホルダー。なければ null と ""。
thumbnail、thumbnailAssetId同じ画像。
isCoverこのバリアントがエントリーのカバーかどうか。
audioAssetId曲のクリップ。ロック中は空。
durationSec長さが分かっていれば秒数、分からなければ 0。
voiceUnitId行の voice id。Play Voice に渡します。ロック中は空。
lineText選んだ時点での行のテキスト。字幕に使います。ロック中は空。

narraleaf.gallery.getGroups

カタログのグループをエディターでの順序で返します。タブバーに使います。行の id は Get Gallery または Get Gallery Progress の groupId ピンに戻します。

ピン方向型備考
inin · exec—
nextout · exec—
groupsout · dataarray<struct:narraleaf.gallery.group>Gallery group list(ギャラリーのグループのリスト)。フィールドは index、id、name です。
countout · datainteger

narraleaf.gallery.getStats · Latent

画面のヘッダーに使う達成度の数字を返します。種類とグループによる絞り込みは Get Gallery と同じです。非表示のエントリーは解除されてはじめて数えられるため、秘密のエントリーが合計に現れることはありません。

ピン方向型備考
inin · exec—
groupIdin · datastring省略可能です。接続されている場合はカードの Group より優先されます。
nextout · exec—
totalout · datainteger数えたエントリーの数です。
unlockedout · datainteger解除済みのバリアントを 1 つ以上持つエントリーの数です。
percentout · dataintegertotal に対する unlocked の割合を、0 から 100 の整数に丸めたものです。total が 0 のときは 0 です。
variantTotalout · datainteger数えたエントリーのバリアント数です。
variantUnlockedout · dataintegerそのうち解除済みの数です。

カード上のフィールド

フィールド内容
KindGet Gallery と同じ。空(All kinds(すべての種類))ではすべての種類を数えます。
GroupGet Gallery と同じ。空(All groups(すべてのグループ))ではすべてのグループを数えます。

narraleaf.gallery.add · Latent

エントリーのバリアントを 1 つ解除します。バリアントを指定しないときは、そのすべてのバリアントを解除します。

ピン方向型備考
inin · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
variantIdin · datastring省略可能です。接続されている場合はカードの Variant より優先されます。
nextout · exec—

カード上のフィールド

フィールド内容
Artworkエントリー。名前で選びます。
Variantそのエントリーのバリアントの 1 つ。空(All variants(すべてのバリアント))ではすべてを解除します。

そのエントリーのバリアントではない id を渡しても、何も変わりません。

narraleaf.gallery.remove · Latent

エントリーのバリアントを 1 つ再びロックします。バリアントを指定しないときは、そのすべてのバリアントをロックします。ピンとフィールドは Unlock Gallery と同じです。

ピン方向型備考
inin · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
variantIdin · datastring省略可能です。接続されている場合はカードの Variant より優先されます。
nextout · exec—

カード上のフィールド

フィールド内容
Artworkエントリー。名前で選びます。
Variantそのエントリーのバリアントの 1 つ。空(All variants(すべてのバリアント))ではすべてをロックします。

narraleaf.gallery.unlockAll · Latent

すべてのエントリーのすべてのバリアントを、非表示のエントリーも含めて解除します。クリア後のご褒美に使えるほか、鑑賞画面を作りながら埋まった状態を手早く確認するのにも使えます。

ピン方向型備考
inin · exec—
nextout · exec—

narraleaf.gallery.clear · Latent

解除記録を消去し、すべてのエントリーを再びロックします。解除記録はどのセーブファイルにも入っていないため、セーブをロードしても解除状態は戻りません。

ピン方向型備考
inin · exec—
nextout · exec—

narraleaf.gallery.isUnlocked · Latent

バリアントを指定したときは、そのバリアントが解除済みかどうかを返します。指定しないときは、エントリーのいずれかのバリアントが解除済みかどうか(まだバリアントのないエントリーではエントリー自身が解除済みかどうか)を返します。グリッドのセルが知りたいのはこちらです。

ピン方向型備考
inin · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
variantIdin · datastring省略可能です。接続されている場合はカードの Variant より優先されます。
nextout · exec—
unlockedout · databoolean

カード上のフィールド

フィールド内容
Artworkエントリー。名前で選びます。
Variantそのエントリーのバリアントの 1 つ。空(Any variant(いずれかのバリアント))ではエントリー全体について問います。

narraleaf.gallery.getVariant · Latent

位置を指定してバリアントを 1 つ取り出します。ビューアーで前後の差分に切り替えるのに使います。位置はエディターでの順序ですべてのバリアントを数え、ロック中のものも含みます。

ピン方向型備考
inin · exec—
nextout · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
indexin · datainteger位置で、0 から数えます。カード上にリテラル値を入力できます。
imageout · dataImageAsset|null解除済みならバリアントの画像です。ロック中は null で、このノードはプレースホルダーを返しません。
unlockedout · databoolean
nameout · datastringバリアントの名前です。ロック中はロック中のタイトルです。
variantIdout · datastring

カード上のフィールド

フィールド内容
Artworkエントリー。名前で選びます。

エントリーの範囲外の位置では、null、false、空文字列を返します。

非表示のノード

古いノードが 4 つあり、カタログを 1 項目ずつ読み取ります。これらは上の配列を返すノードに取って代わられ、パレットからは非表示ですが、このノードを持つグラフでは引き続き実行されます。

narraleaf.gallery.getVariantCount

Get Gallery Variants の count に取って代わられています。エントリーのすべてのバリアントを、ロック中のものも含めて数えます。

ピン方向型備考
inin · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
nextout · exec—
countout · datainteger

narraleaf.gallery.getCover · Latent

Get Gallery の行の image と name フィールドに取って代わられています。読み取るのはエントリーのカバーだけで、カバーのバリアント自体が解除されるまで image は null、unlocked は false です。name もそれまではロック中のタイトルです。

ピン方向型備考
inin · exec—
nextout · exec—
artworkIdin · datastring省略可能です。接続されている場合はカードの Artwork より優先されます。
imageout · dataImageAsset|null
unlockedout · databoolean
nameout · datastring

narraleaf.gallery.getArtworkCount

Get Gallery の count に取って代わられています。カタログのすべてのエントリーを、種類を問わず、非表示のものも含めて数えます。

ピン方向型備考
inin · exec—
nextout · exec—
countout · datainteger

narraleaf.gallery.getArtworkAt · Latent

Get Gallery に取って代わられています。カタログ全体から位置を指定してエントリーを 1 つ取り出します。非表示のエントリーも含み、ロック中は名前がロック中のタイトルになります。カタログの範囲外の位置では、空文字列、false、0 を返します。

ピン方向型備考
inin · exec—
indexin · datainteger位置で、0 から数えます。カード上にリテラル値を入力できます。
nextout · exec—
artworkIdout · datastring
nameout · datastring
unlockedout · databoolean
variantCountout · datainteger

このページの目次