« 20.背景画像の表示 | Main | 22.講座1~21まとめ »

December 28, 2006

21.キャラ(立ち絵)の表示

背景画像に対してキャラの立ち絵を重ね合わせる事が出来ます。
アルファチャンネル(透明度)つきのPNG画像を使用できる為、かまいたちの夜のように、
半透明なシルエット画像を背景画面に重ねる事が可能です。
しかしながら、ユウキノベルでのキャラ表示は仕様上の不備が幾つかあります。
ですから、出来る限り背景画像命令のみで製作した方が仕上がりが良くなります。
キャラ表示における仕様上の不備というのは以下のとおりです。

1.キャラ表示の位置をピクセル単位で指定できない
2.複数キャラの同時表示が不可能(同様に、キャラを複数パーツで構成する事も不可能)
3.背景の場合と違い、フェード効果や時間をスクリプト中で指定できない。(プロパティ指定のみ)
4.表示の際に必ずウェイトが発生するので、口パクアニメをしながら台詞を表示するのは無理
5.キャラを表示する際の優先順位が独特で、制作上管理しにくい

上記の仕様を考察するに、スーパーファミコン版かまいたちの夜であれば、ユウキノベルでも同じようなキャラ表示が出来るという事がわかります。
出来ないのはアニメ的なキャラ表示や、衣装やポーズを合成してキャラ表示するとか、目パチや口パクアニメなど、いわゆる「ビジュアルノベル」的な仕事が出来ないという話です。

このようなユウキノベルならではの欠点を克服するためには、かえってキャラ絵込みの背景画像を用意してしまった方が話が早かったりします。
背景画像であれば、フェード効果や時間をスクリプト内で調整できるからです。
もちろんこの手法は手間もかかり、作品規模が大きければ容量を無駄にします。
ですから、どちらを取るかはバランスの問題になります。
作品規模や場面の状況に応じて使い分ける事が必要になります。

** キャラ表示の実際 **

.CharSet 命令を使用します。
パラメータとして、セット名(キャラ名)、画像ファイル名、表示位置(縦)、表示位置(横)を指定します。
これらはコマンド入力を用いれば簡単に入力できます。

セット名はキャラの名前をそのまま使用すると良いでしょう。
画像ファイルはこの講座ではPNG形式を使用します。
背景はJPG、キャラはPNGという事で使い分ける訳です。
PNGではアルファチャンネルという透明度を画像データに持たせる事が出来ます。
例えば透明度50%でシルエットを作れば、かまいたち風キャラデータになる訳です。
また、一般のキャラ絵においても、キャラの輪郭線をぼかすように、なだらかな値で透明度を指定すると、
背景と重ねた時に自然な仕上がりになります。
(輪郭線の外側において、僅かに背景が透けて見えるという感じになります)
PNG画像において、いかに透明色を扱うかというのは、使用するグラフィックツールによって異なります。
簡易的なグラフィックツールであれば、PNG内の透明色を扱えない場合もあるでしょう。
その点注意が必要ですが、グラフィックツールの選び方や使い方は割愛します。
縦横の表示位置指定は「中央」と上下左右の「画面末端」を基準にするという簡単なものです。
ですから、キャラ位置を正確に決めたい場合、縦または横の画像サイズを画面サイズ(640×480)と同じにする必要があります。

** キャラ表示の際の優先順位について **

キャラ表示命令では、必ずセット名を指定することになっています。
セット名とは通常、キャラの名前をそのまま使えば良いのですが、
機能的な面から言い直すと、グラフィックツールのレイヤー名に相当します。

例えば

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER

というように指定すれば、画面の真中で主人公が立ち、その後笑顔になるという訳です。
この場合、一枚のレイヤー内でキャラデータが切り替わるというイメージです。

次に、

.CharSet "主人公" "主人公普通.png" MIDDLE RIGHT
.CharSet "脇役A" "脇役A普通.png" MIDDLE LEFT

という場合を考えてみます。

セット名 主人公 と 脇役A はそれぞれ別のレイヤーです。
この例では主人公は右側に立ち、脇役Aは左側に立ちます。
それぞれ別のレイヤーなのですから、キャラを移動させたり、表情を変えても他のキャラに干渉しません。

では以下のようなスクリプトではどのような動作をするでしょう。

.CharSet "主人公" "主人公普通.png" MIDDLE RIGHT
.CharSet "脇役A" "脇役A普通.png" MIDDLE LEFT
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE RIGHT

先ず、主人公が画面右端に表示され、脇役Aは左端に表示されます。
その後、脇役Aは中央、右側に表示されます。(移動するような感じです)
最終的に主人公と脇役Aは画面右側で重なって表示される訳です。
この時、どちらが上でどちらが下になるのかが問題です。

結論を言えば、セット名を定義した順番で上下関係が決まります。
スクリプトの実行順で、セット名が早く出てきた方が背景画面に近い、下側になります。
最後に出てきた方が上側になります。

この事の理解は非常に重要です。
例えば、キャラ絵を背景画面の上にたたせます。
その上に、キャラとして「窓の部分を透明化した家」を表示すれば、キャラが家の中から窓越しに外を見ているという情景を作ることが出来ます。

** キャラの消し方 **

キャラを消すためには
.CharDelete "セット名" 命令を使用します。
画面上に複数のキャラが表示されている場合は、
.CharClear 命令を使用します。

この時に注意すべき点は、上記の命令を使用すると、そのセット名はメモリ上完全に破棄されるという事です。

例えば

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A笑い.png" MIDDLE CENTER

上記スクリプトでは、脇役Aはずっと主人公の上に重なった状態で表示されます。
ところが、

.CharSet "主人公" "主人公普通.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A普通.png" MIDDLE CENTER
.CharDelete "主人公"
.CharSet "主人公" "主人公笑い.png" MIDDLE CENTER
.CharSet "脇役A" "脇役A笑い.png" MIDDLE CENTER

このように、3行目で主人公のセットを破棄してしまうと、その時点でメモリ上残っているのは脇役Aのセットのみです。
4行目で新規に”主人公”のセットが最定義されるので、今度は主人公が脇役Aの上に重なる事になります。

つまり、.CharDeleteや.CharClearを使用すると、その都度キャラの優先順位が変動するという事です。

表示の優先順位を管理するというのは以外に面倒なので、キャラの重ねあわせを頻繁に使う場合は、
.CharDeleteや.CharClearを使用しない方が賢明です。
キャラのセットを破棄しなければ、同じ優先順位が保たれるからです。

では、.CharDeleteや.CharClearを使わずに、どのようにしてキャラを消せるでしょうか。
答えは単純で、透明キャラを表示すれば良いのです。
具体的には1ピクセルで構成された透明度100%のPNGデータを表示します。

** レイヤー管理的なキャラ表示 **

サウンドノベル製作ツールは、ユウキノベル以外にも多く存在します。
その中で、有名なツールの殆どがフォトショップ的な画面管理を行っています。
つまり、一番奥に背景があり、その上にレイヤーが何枚も重なるイメージです。
このような機能をユウキノベル上で再現するためには、あらかじめ透明キャラで複数のキャラセットを用意してしまえば良いのです。

講座7にて構造化プログラムの説明をしましたが、
アイテムに「初期処理」を用意するという最大の理由はここにあります。

例えばアイテム「初期処理」にて、以下のような記述をします。

.CharSet "scr1" "png\透明.png" MIDDLE CENTER
.CharSet "scr2" "png\透明.png" MIDDLE CENTER
.CharSet "scr3" "png\back01.png" MIDDLE CENTER
.CharSet "scr4" "png\透明.png" MIDDLE CENTER
.CharSet "scr5" "png\枠01.png" MIDDLE CENTER
.CharSet "scr6" "png\透明.png" MIDDLE CENTER

これは「フィンジアスの少女」にて実際に使われているスクリプトです。

セット名はキャラ名ではなく、レイヤー名(番号)になっています。
SCR5にて、画面全体を覆うフレームを表示しています。
SCR3はフレーム枠の下に表示されている画像で、半透明な「汚れ」みたいなデータです。
この画像は背景画像を暗くし、文字を読みやすくするという目的を持っています。
通常のキャラ表示は1、2、4、6を使用します。
演劇のように、物語の場面状況によって立ち位置が変わります。

このように、最初にキャラセットを定義してしまえば、
グラフィックツールでレイヤーを使用する時と同じ感覚でキャラを表示する事が出来ます。
注意すべき点は.CharDeleteや.CharClearを絶対に使わない事です。
キャラを消したいときは透明なPNGデータを表示してキャラを消します。

この手法の問題点はメモリを食うことです。
けれども今の時代、PCはメモリを贅沢に積んで当たり前になってしまいました。
現代標準的に使用されているPCであれば、640×480の画像を数枚重ねたところで、PCが固まる事は無いはずです。

棚橋プロジェクト作品では、画面全体を汚したり、好感度メーターを表示したり、枠をつけたり等、
そのような画面パーツの一切をキャラの表示機能に頼っています。

ユウキノベルのキャラ表示は他のツールに比べて仕様上の不備があると書きましたが、
機能を理解した上で使いこなせば武器になりますので、ユウキノベルに慣れた人は是非色々挑戦してみて下さい。

|

« 20.背景画像の表示 | Main | 22.講座1~21まとめ »

Comments

Grab your free clash of clans cheat right here in the free giveaway page and you are off to enjoy the adventerous journey that the game has to offer.

Posted by: clash of clans hack online | May 07, 2015 at 01:38 PM

This would immediately mention your photographic camera or the symbol for it.

Posted by: boom beach hack tool for android/ios | October 03, 2015 at 02:11 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/66451/13233948

Listed below are links to weblogs that reference 21.キャラ(立ち絵)の表示:

» ボビーブラウンコンシーラー [ボビーブラウンコンシーラー]
ボビーブラウンコンシーラー [Read More]

Tracked on June 06, 2007 at 01:33 PM

« 20.背景画像の表示 | Main | 22.講座1~21まとめ »