5回目にして、やっとキャラクターの表示です。ここまできてようやくゲームらしきものが作れるようになりますね。お疲れ様です。
アバターNPC登録が依頼できる時期は、所属する団体により異なりますので、よくわからない人は、所属する団体の部長などにアドバイスを受けてください。
【5-1】アバターNPC登録
・着替え/スタイルチェンジ
・キャラの名前
・登録したいアバターのユーザーID
・NPCコード
以上のような準備をして、ユーザーIDとキャラ名を伝えると、登録完了時にNPCコードを連絡されます。
NPCコードは「APC1000077738_01」のような、先頭がAPCで始まるコードとなっています。アバターが登録を依頼する都度に、末尾の01が、02、03と増えていきます。運用ルール上は、原則一人99体まで登録できることになっています。
このNPCコードをスクリプトにて使用しますので、NPCコードが連絡されたらしっかり管理してください。
【5-2】NPCの表示
NPC登録を済ませて、NPCコードが割り振られたキャラクターは、以下のコマンドで表示させることができます。
コマンド
NPC:NPCコード,表情指定,サイズ指定,ポジション指定,出現方法指定
//NPCを登場させます
//表情指定:表情記号もしくは番号
//サイズ指定:o,s,m,lのいずれか
//ポジション指定:0=自動、1~19 =場所指定、98=画面外(向かって右),99=画面外(向かって左)
//出現方法指定:0=フェードイン,1=左から,2=右から,-2=ロードのみで表示しない,-3=アニメーション無し
※初出時-3=ロードのみで表示しないとなっておりました。優秀なカレッジ生徒の指摘でミスが発覚致しました。お詫びして訂正致します。
記述例
Avatar.scriptMode
NPC:APC1000077738_01,(笑),s,0,2
NPCを表示するためのNPCコマンドですが、引数が多く複雑な印象があると思います。必要な情報を一括で与えて、読込遅延を少なくするために、このようなコマンドになっています。
順番に、詳しく説明していきましょう。
NPCコード
これは、【5-1】で説明したNPCコードをそのまま記述します。
表情指定
登場時の表情を指定します。表情番号で指定する方法も使えますが、キャラフレのユーザーであればチャットの時に行末に付加する表情記号で指定する方法が楽だと思います。表情記号は、半角カッコで括った、(笑)、(爆)、(ニコ)などをそのまま記述できます。
表情番号で指定する場合、(真)=10、(微笑)=11となっています。0や1を指定すると、該当する表情番号がないので、ロードエラーとなり進行しなくなりますのでご注意ください。
サイズ指定
一番小さいサイズがoです。クエストで多く使われている標準的なサイズがsとなります。mがテーブルチャットのサイズ、lが恋人ゲームチャットのサイズになっています。遠くからみているサイズがo、友だちと立ち話するサイズがs、友だちとテーブルで向かい合うサイズがm、恋人同士の距離がlというわけですね。
演出の都合で、必ずしも上記のシチュエーションに当てはまらない使い方をしても問題ありません。
ポジション指定
0の自動のみで記述しても構いませんが、立ち位置を制御することも可能です。ポジション指定は座標ではないので、以下のように理解してください。
1人が中央に立つ場合:1
2人を中央に立たせる場合:向かって左=2、向かって右=3
3人を立たせる場合:向かって左から、2,1,3を指定します。ちょっと狭すぎると思ったら、12,1,13と指定するとバランスがいいと思います。
4人を立たせる場合:同様の考え方で、7,8,9,10を用いるか、4,8,9,5を指定してください。
5人を立たせる場合:同様の考え方で、12,2,1,3,13か7,8,1,9,10、4,2,1,3,5などがいいと思います。
6人の場合:6,7,8,9,10,11か4,2,8,9,3,5あたりで
7人の場合:6,4,2,1,3,5,11
8人の場合:6,4,2,8,9,3,5,11
最大の9人立たせるには:14,15,7,19,1,17,10,18,19でギリギリ使えると思います。
出現方法指定
0を指定するとフェードインします。1を指定すると、向かって左の画面外から登場、2を指定すると向かって右の画面外から登場です。
例外的に-3(マイナス3)という指定があり、これはロード遅延を最短にするためにフェードや移動演出を行いません。ポジション指定を98や99の画面外にしてセットで使うことで、最速で画面外にスタンバイさせることができます。演出の速度をあげるため、キャラをプリロードしたい場合や、キャラを表示せず、顔ウィンドウのみでセリフをしゃべらせる場合などにも使います。
記述例
NPC:APC1000077738_01,(笑),s,99,-3
【5-3】NPCのセリフ
キャラフレのスクリプトでは、画面上に登場するNPCの指定と、セリフをしゃべる時の顔ウィンドウの表示が、セットで制御される仕組みとなっています。
そのため、キャラがセリフをしゃべる状況を記述するには、必ずNPCをロードしておかなければなりません。
ストーリーの中で複数のキャラクターが登場する場合は、当然どのキャラクターがしゃべるのかを指定する必要があります。指定には、NPCコードを使う方法と、キャラ名を使う方法があります。
コマンド
[NPCコード]:[s][,color]
表示したい文章(表情指定)
[キャラ名]:[s][,color]
表示したい文章(表情指定)
//NPCキャラクターの顔ウィンドウと連動してセリフを表示します。
//s=進行待ち秒数(各種設定でメッセージ送りが「コンテンツに従う」もしくは[自動送り]の場合のみ有効)
//color=表示色を#RRGGBB形式で記述。各色は00~ffの16進数
記述例
Avatar.scriptMode
NPC:APC1000077738_01,(笑),s,0,2
[APC1000077738_01]:
今日はちょっと急いでいるので、また今度来ますね
[高橋杏]:
今日はちょっと急いでいるので、また今度来ますね
ここで注意点があります。キャラクターをロードするNPCコマンド直後のセリフには、表情指定を付けないようにしてください。
スクリプトをテンポよく実行するために、キャラクターのロードと移動演出が完了する前に、次のセリフコマンドが実行されるようになっています。そのため、移動演出とセリフによる表情変更が干渉してしまい、キャラが表示されない現象が発生します。
キャラのロードが完了するまで、次のコマンドへ進まないようにロックすることも考えたのですが、様々な通信回線のことを考えると、ロード完了に余分なウエイトを入れなければならず、テンポを著しく悪くするので諦めました。(ブラウザによってロード完了のイベントが適切に発生しないものがあるのも原因の一つです)
なので、スクリプトを記述する際の制約事項として把握しておいて頂きますよう、お願いします。
間違った例
Avatar.scriptMode
NPC:APC1000077738_01,(笑),s,0,2
[高橋杏]:
今日はちょっと急いでいるので、また今度来ますね(ニコ)
//ここでキャラが消える現象が発生する
[高橋杏]:
今日はちょっと急いでいるので、また今度来ますね(爆)
正しい例
Avatar.scriptMode
NPC:APC1000077738_01,(ニコ),s,0,2
[高橋杏]:
今日はちょっと急いでいるので、また今度来ますね
//ロード直後のセリフには表情指定を入れない。(最初のセリフの表情はロード時に指定しておく)
[高橋杏]:
今日はちょっと急いでいるので、また今度来ますね(爆)
NPCコード指定とキャラ名指定の使い分け
私のおすすめは、原則としてキャラ名指定をする方法になります。
理由は、スクリプトをシナリオとして読んだ時に、とても読みやすくなるからです。
ただし、キャラ名指定の場合のデメリットもあります。例えば、キャラ名をあとから変更したくなった場合、置換する箇所がとても多くなります。
NPCコードでスクリプトを書けば、キャラ名変更を生徒会に依頼すれば、スクリプトは書き換えずにキャラ名(セリフ枠に表示されるキャラ名)が変わります。
また、同姓同名のキャラが登場する場合、すこし手間がかかるというデメリットもあります。
同性同名のキャラを、キャラ名指定でスクリプトを書きたい場合は、名前を「高橋杏1」、「高橋杏2」のように指定し、名前とは別のCallNameというデータを、それぞれ「高橋杏」にしてもらうという依頼をします。
そのような準備をした上で、
NPC[APC1000077738_01].setCallNo:1
NPC[APC1000077738_02].setCallNo:1
のようなコマンドを記述することで、セリフ枠がどちらも「高橋杏」となります。
この方法がちょっと複雑だし、依頼事項も増えてたいへんだな…と感じたら、スクリプトをNPCコード指定に統一して記述する方法もありだと思います。
突然setCallNoのようなコマンドが登場して、ちょっとびっくりしましたか?他にも、NPCコマンドがたくさんありますので、次回に主要なものを解説したいと思います。