● プロローグ
最近、うちの奥さんが家庭内モバイルのためにApple Storeから自分用の新PowerBook G3 333MHzを購入いたしました。注文して1週間で「出荷した」との連絡が入り、10日間で品物が届きました。ショップでの品不足がウソのような速さです。日本でも、新Pwer Macintosh G3に対するBTO(Build to Order:希望の製品構成で製品を製造・出荷する)が始まり、Appleの商品販売に対する比重がどんどんApple Storeに傾いているような気がします。まあ、地方のユーザのように近くにMacintoshを取り扱うショップが無い場合には、Apple Storeは大変便利なシステムです。できれば、iMacやPowerBook G3のメモリ増設、英語版(非JIS)キーボードの装着、周辺機器やソフトウェアの販売なども、Apple Storeのサービスに追加していって欲しいものです。
にしても、今回の新PowerBook G3は素晴らしいですね。メモリは自分で増設しましたが、これが実に簡単です。慎重にやっても10分程度で終わります。薄いし、軽いし、バッテーリ寿命は長いし(旧マシン比)加えて、うちのMac達の中では最速ではありませんか!実際に使ってみると「デスクトップみたいなじゃま物は必要ないんとチャウカ?」という疑念に襲われます(ゴメンネB&W)。そうそう、昔ながらの「ちゃぶ台」(巨人の星参照)を使っている感覚です。じゃまな時はしまっておく。必要な時に取り出して、その時の気分で使う部屋と場所を選ぶ。これって日本文化にスゴク調和しているような気がするんですが、どんなもんでしょうか?
実は、前回お話したWWDCでの楽しみのひとつに「世界中のデベロッパーがどんなPowerBookを所有しているのか?」を確認することがあります。昨年までは、Duoや500シリーズ、1400や3400シリーズなどなど、様々な世代のマシンが混在していました。しかし、今回は見事にPowerBook G3一色。さすがに、スペック飛躍の効果が大きかったのでしょう、一気に旧機種からの買い換えが進んだようです。セッションの席で、大きな男達が大きなスクリーンをガバッと開いてキボードを打つ姿は圧巻であります。たま〜に、VAIOなどのサブノートを使っている人もいましたが、その姿が妙に貧弱に見えて、意味もなく「G3の勝ち!」と赤旗を上げてしまいそうな私でありました(笑)。さて、WWDC'99に集った旧PowerBook G3のユーザは、今回の新機種の魅力に打ち勝つことができたでしょうか?
●変数とは何ぞや?
前回は「ディスクトップペットを作ろう!-前編」という題目で、音声認識やドラッグ&ドロップによるユーザとマスコットとのコミュニケーションについてお話しました。今回はその後編で、ペットマスコット作成に不可欠な「変数」「予定」「実行条件」の利用法と、リアクションについてお話します。
前回、よりペットらしいペットマスコットを作成するのには、変数の上手な活用がポイントだとお話しました。ペットマスコットを作成していると、ペットの「状態」によって、その行動やユーザに対する反応を変える必要が出てきます。この場合のペットの状態とは何を意味するのでしょうか?簡単な例として、まず生理的な欲求があります。食欲とか睡眠ですね。お腹が減ったペットは怒りっぽくなるでしょうし、眠たくなったペットは動かなくなるかもしれません。ペットの賢さや芸の上手さといった経験値も状態の一種です。また、マスコットのモニターの表示位置や動いている時間(年齢に当たります)などの物理的な要因もこれに当てはまります。
マスコット++には、こうしたペットの状態の保管場所として「変数」が用意されています。上記のような書き方をすると、変数には非常に高度な「何か」を保存できると誤解されそうですが、実際に保存できるのは「数値」と「文字列」の2種類だけです。マスコット++で変数を作成するには、変数フォルダをオープンし新規ボタンをクリックします。(図1)セルの空白部分には、アニメセルとは異なり、画像ではなくテキストを入力します。ここに数値を入力すれば、その変数は数値専用として扱われます。例えば、変数に「満腹」というタイトルを付けて50(初期値)という数値を入力します。(図2)この値が、お腹の減り具合を表しているとします。その後マスコットを起動し、プログラムなどでこの変数の値を変化させると、そのマスコットの空腹状態が変わるわけです。変数の値が100を越えれば満腹、ゼロに近づけばお腹が減って死にそうダ!と言った具合です。
変数には数値以外のテキスト(半角で63文字、全角で31文字以内)を入力しておくこともできます。(図3)ただし、こうした文字列変数に対してはプログラムで足し算、引き算などの演算を施すことはできません。変数セル内のテキスト内容は、ドラッグ&ドロップで別のセルへ移動することができます(数値も同様)。テキストエディタで入力したテキストを、ドラッグして変数フォルダにドロップすることも可能です。またreturnで区切られたテキストを「コマンドキー」を押しながら変数フォルダへドロップすると、区切られた分だけの変数セルが自動生成されます。(図4)表計算ソフトなどで大量の数値を入力しておき、いっぺんに変数フォルダに登録するのには便利な機能です。試してみてください
●変数を使ってみよう!
それではさっそく変数の使い方を練習してみることにします。例題として、ユーザのマウスクリックでその表示位置が変わるマスコットを用います。まずはいくつかセルを描き、マウスクリックに反応するグループを作ります。(図5)次にグループを選択し、プログラム設定ウォンドウをオープンします。マスコットの表示位置を強制的に移動させるのには、プログラムのマスコットメニューから「表示位置移動」を選びます。(図6)対象マスコットに自分自身を選んだ後、移動させたい場所の座標値(例題ではX=200、Y=100)をその横のカラムに入力します。これで、マウスクリックをするとモニターの(200,100)座標へ移動するマスコットの出来上がりです。
次に、このマスコトの移動座標値を「変数」から取ってくるように改良してみます。まず、変数フォルダーに2つの変数を作り「X座標」「Y座標」と名付けます。そこに移動させたいモニターの座標値(200と100)を入力してください。(図7)続いて先ほど設定したプログラムを再度表示し、カラム内の数値を「#1」「#2」へと入力し直します。(図8)さっそくマスコットの動作確認を行ってみましょう。マスコットがマウスクリックにより前例とまったく同じ位置へ移動すれば大成功です。ちゃんと変数内の数値がプログラムに渡されて実行されている証拠です。
プログラムのパラメータや実行条件のカラムに、先んじて定義しておいた変数の数値や文字列を代入したい場合があります。もうお気づきだと思いますが、マスコット++では、こうした用途のために変数の内部を表すための特殊文字列が定義されています。特殊文字列は文字列の先頭に「#」を付けます。「#」に続いて数値を記述すると、その番号の変数の中身を用いることになります。例えばアクションのスピーチのカラムに「#1」と記述すれば、「#1」と喋る代わりに、1番目の変数のテキスト内容を喋ってくれるわけです。ただしこの方法では変数の順番を後から変えると、対象となる内容も変わってしまいますので注意してください。
(例)
#1 1番目の変数の中身を代入します。
#2-#5 2番目から5番目のどれかの変数の中身を代入します。
上記の例のうち「#2-#5」という表記に関しては、後述するリアクションの章でお話しいたします。また「#」と同様に「&」に続い文字列を記述する場合には、タイトルがその文字列と一致する変数の中身が参照されます。例えばアクションのスピーチのカラムに「&Hello」と記述すれば、「Hello」と喋る代わりに、タイトルが「Hello」である変数を探して、そのテキスト内容を喋ってくれるわけです。(図9)変数名のサーチは半角文字、全角文字を区別しますので、タイトルに英数字を用いる場合には注意してください。(プログラムのパラメータには数値以外の文字を受け付けない種類もあります)
(例)
&Hello 名称に「Hello」と付けられた変数の中身を利用します。
●ランダム値を発生する
次は変数やプログラムのパラメータに「ランダム値」を代入する方法です。「ランダム値の発生」とは、指定した範囲内で任意の数値を自動生成する機能です。例えば、1から6の間の数値をランダムに発生させれば、サイコロをシミュレーションすることができます。ゲームやペットマスコトを作る場合にランダム値の応用は、作品の幅を広げるために必要不可欠なのです。マスコット++では、プログラムでのパラメータや変数に特殊文字を利用してランダム値をそのまま代入することができます。プログラムのカラムなどに「%」に続いて数値を記述してください。これにより、その数値自身を代入する代わりに、その数値の範囲内のランダム値を代入することができます。
(例)
%50 0から50までのランダム値を発生します。
%100-%500 100から500までのランダム値を発生します。
%-100-%100 -100から100までのランダム値を発生します。
先ほど示した表示位置を変更するプログラムのパラメータを「%100-%200」「%50 %100」に変更してみてください。(図10)こうすると、マウスクリックをした時、第1パラメータ(X)には0から200の間の任意の値が、第2パラメータ(Y)には0から100の間の任意の値がランダムに代入されます。つまり、マスコットはモニター上の(100,50)から(200,100)の矩形エリアの「どこか」に移動することになります。
この方法では、ランダムに発生させれた数値は直接プログラムのパラメータに代入されています。発生させたランダム値を一度変数に保存する場合には、プログラムの変数メニューから「代入する」を選び、それぞれの変数名を設定して、カラムに「%100-%200」「%50-%100」と記載します。(図11)これにより、発生したランダム値は一度変数に保存され、その後にプログラムのパラメータに渡ります。まずはこうした表記を利用できるすべての文字入力カラムの一覧を上げておきましょう。(表-1)最後のカッコ内は利用できる特殊文字を示しています。「%」の記載がない物はランダム発生は利用できません。また「実行条件」の日付、時刻、経過時間のカラムには上記表現は利用できませんので注意してください。
続いて、ユーザがマウスクリックした位置がモニターの指定エリア内だったら、マスコットの位置を変更するという例題を考えてみます。こうした「〜の時だけに」とか「〜の場合だけ」といった制限付きの処理には必ず「実行条件」を利用します。実行条件については、以前「衝突イベント」の時に解説いたしました。まずは1秒毎にプログラムを実行する予定セルを作り、プログラムの変数メニューから「X値代入」と「Y値代入」を登録します。このセルによりマスコットの表示位置を「X座標」と「Y座標」の2つの変数に代入します。(図12)続いてマウスクリックに反応するグループを選択し、実行条件設定ウィンドウをオープンします。変数メニューで「X座標」と「Y座標」の2つの比較カラムを登録して、マウスクリックを受け付ける範囲を決定します。4つの数値と「あいだ」で指定した実行条件は(500,300)(1000,800)の矩形エリアを表しています。また、2つめの条件セルの演算子が「AND」であることに注目してください。(図13)これにより、このマスコットは(500,300)(1000,800)の矩形エリア内でマウスクリックされた時のみ、表示位置を変更するようになります。つまりマウスクリックを受け付ける場所に制限を設けたことになります。
●腹ペコのマスコット
さて、今度はペットの欲求や気分をどうやってコントロールするのを考えてみます。
ここでは、ペットマスコットの食欲をコントロールしてみましょう。先ほど言及したように、最初に「満腹」変数を作成し、初期値として「100」を代入しておきます。これを通常の状態(お腹は減っていない)とします。(図14)次に予定フォルダーをオープンしてこの「満腹」変数を定期的に減らすセルを登録します。予定セルの条件は「定期的」とし呼び出される時間は1秒毎とします。同時にこのセルには満腹変数から1を引くプログラムも追加しておきます。(図15)満腹変数を徐々に減らすことは、時間が経つにつれてペットマスコットのお腹が減っていく状態をシミュレーションしていることになります。
次はペットマスコットの表示です。まず空腹の状態に合わせたいくつかグループを用意します。区分けしたグループセルは、満腹変数が減っていくにしたがって機嫌が悪くなり、最後には「へろへろ」になるように描いておくのがベストでしょう。それぞれのグループには「表示条件」を設定します。条件として参照するのは満腹変数です。変数の範囲を区切り(例えば80から100とかゼロ以下とか...)それを各グループに割り当てます。グループを選び実行条件で変数メニューから「満腹」を選びます。条件として「あいだ」を選択したら2つのカラムに「80」「100」などと入力してください。(図16)これにより、そのグループは満腹変数の値が80から100の「あいだ」の時だけ表示されるようになります。お腹が減った最悪の条件(満腹変数がゼロ以下)では、強制的にマスコットをQuitさせてしまうのも面白いかもしれません。
しかしこれではペットが消えていくのを黙って見ているだけで可愛そうです。そこで、ペットにご飯を与えて、満腹変数を上げる処理を追加しなくてはいけません。これには、前回ご紹介した「まりもん1号」君と「ケーキ」アイコンの仕組みを利用してみます。SimpleTextなどのテキストエディタで、「ご飯」と記述したテキストファイルを作成します。(ご飯の最後にreturnは入れないでください)保存したファイルには、Finderの情報ダイアログで好みのアイコンをペーストしておいてください。(今回はiMacのご飯ですのでCD-ROMにしてみました)マスコットのセルの方には「ご飯」というコマンドに反応するセルを用意し、「TEXTドロップに反応する」オプションをチェックしておきます。(図17)そして仕上げは、このセルに満腹変数をいくらか増加するプログラムを追加することです。(図18)この処理の追加により、ドラッグ&ドロップでCD-ROMを食べたiMacは徐々に元気を回復することができるようになります。ここまでできたら、今度は「食べ過ぎ」や「好き嫌い」を制御するプログラムも追加してみると面白いかもしれません。
●楽しいリアクション
変数やプログラムのパラメータと同様に、飼い主のアクションに対するペットのリアクションにも「ランダム性」を利用することができます。例えば、マスコット++では、すべてのイベントに対して複数のグループを割り当てることができます。つまり、マウスクリックにより表示されるグループが5つあってもよいわけです。ユーザがマウスクリックをした場合にどのグループが表示されるかは、マスコット自身がランダムに決めます。ただし、この方法では5つの違ったグループを作っておく必要があります。それでは、ひとつのグループで複数のアクションをランダムに切り替えるようなことは可能なのでしょうか?
「サウンド」や「吹き出し」に関してはちょっと難しいのですが、スピーチではこうしたことが簡単にできます。まず変数を5つ用意し、それぞれに喋らせたいテキストを入力しておきます。スピーチを実行するグループを選択して、アクション設定ウィンドウでスピーチを選びます。「スピーチを実行する」をチェックしてボイス(声)を選んだら、喋らせたい内容を入力する代わりに「#1-#5」と記載してください。(図19)先ほど説明したように、この表記の意味は「1番目から5番目のどれかの変数の中身を代入する」となります。ユーザからのアクションでこのグループが何を喋るのかは、5つの変数の中身からランダムに選択されます。つまり、ユーザがマウスクリックをするまでは、何を喋るのかは分からないということです。
またランダム性とはあまり関係ないのですが「吹き出し」のちょっと変わった利用方法を紹介しておきます。吹き出しには「置き去りにする」というオプションがあります。(図20)このオプションをチェックすると、表示された吹き出しは消されることなくずっとMacのデスクトップ上に残ります。これは、ペットの「うんち」を実現するのにはもってこいの機能なのです(笑)満腹変数が一定量を超えると「うんち」を置き去りにするグループを作っておけばバッチリですね。ただし、このままだと時間が経つにつれてMacのデスクトップが「うんち」だらけになります。これを掃除するのには、プログラムのマスコットメニューから「吹き出し消去」を利用します。どんな状況で「うんち」を片づけさせるのか?ちょっとしたゲーム性を盛り込んでも面白いかもしれません。変数やプログラムを駆使してペットにどんなリアクションをさせてやるか?これこそ作者のアイデアとセンスの腕の見せ所ではないでしょうか。
●ペットの状態を保存する
もうお気づきかもしれませんが、設定した変数はアプリ化したマスコットの起動時に必ず初期値に戻ってしまいます。ということは、せっかく保存したペットの状態もアプリを起動する度にクリアされてしまうわけです。これではペットマスコットとして失格です。そこで、マスコット++には、起動マスコットを終了しても変数をそのまま保存しておくオプションがあります。アプリ作成時に表示されるダイアログの「アプリ終了時に変数を保存する」オプションをチェックしてください。(図21)これにより、再起動した時にも変更された変数はそのままの状態で復帰します。つまり、ペットマスコットの年齢やお腹の減り具合もそのまま継続されるわけです。逆にこのオプションを用いると、マスコットは2度と最初の状態に戻れません。たとえば、1度空腹で死んでしまい表示ができなくなったマスコットは、2度と起動することはないのです。オリジナルマスコットを複製して別の場所に保存しておけばOKですが、それを忘れると相当焦りますので注意しましょう!
前回にお話した「時間が経つにつれて世代交代するマスコット」を最後の例として上げておきます。このマスコットは20秒経つとマスコットの世代を切り替え、どの時点でQuitしても、次回の起動時には適切な世代と表示位置で復帰します。各世代のマスコットはそれぞれ別々のフォルダに登録されています。変数としては「タイマー」「世代」「X座標」「Y座標」が登録されています。(図22)タイマーは予定セルにより増加します。また「世代交代」と名付けられた世代の切り替えタイミングを監視している予定セルがあります。これはタイマーの値を参照していて、適切な時間が来ると世代交代を実行します。世代が交代したら、それを記憶するために「世代」変数に世代数を代入します。「X座標」「Y座標」変数にはマスコトをQuitした時点の表示位置が保存されます。この処理は、各マスコットが終了イベント時に行います。(図23)マスコットを再度起動した時、前回と同じ位置から表示させるのは「起動時」と名付けられた予定セルの仕事になります。(図24)
さて最後は読者のみなさんからのマスコットを紹介するコーナーです。今回ご紹介するのはマスコット・ジェダイマスター(笑)野村一也さん作「デスクトップドライバーNY99」マスコットです。(図25)Macのデスクトップ上を矢印キーによる運転でドライブできる楽しいマスコットです。左右矢印キーが車のハンドルの役割をしています。上矢印キーはアクセル、下矢印キーはブレーキに割り当てられています。今回は野村さんのご厚意によりドキュメントもCD-ROMに添付されています。残念ながらペットではないのですが、変数や実行条件の利用方法を勉強するのには素晴らしい教材です。ちょっと難解ですがマスターの素晴らしいテクニックを参考にしてみてください。(図26)
●エピローグ
前回お話したWWDC'99では、Apple社のキャンパスでBeerパーティがありました。その時、ある社員の個室のブラインドが半開きのままで部屋の中が見えていました。どんな環境で仕事をしているのかな?と興味津々で中をのぞいてみると、なんと壁のホワイトボードに「iMac II」なるマシンのスペックがそれとなく書かれているではありませんか!
128Mbyte、G4、600-800MHz、24GHD、ATI Rage 256 Pro. etc...
「おおっ、大スクープだ!」とは思いませんでしたが(笑)、面白いので日本のアップルの社員達にも教えたら「こりゃぁジョークですね!」と笑っておりました。(顔はひきつっていなかった)さすがはAppleの社員!なかなな粋なことをやってくれます。(もし本当ならもっと粋なのだが)この原稿を書いている時点では、まだコンシューマポータブル(iBook)は発表されていません。相変わらず噂だけは色々と飛び交っております。こうした噂で一喜一憂できるのも、マックユーザならではの「娯楽」かもしれませんね?他のメーカのマシンではこうはいきませんもの...。
さて、何度もお話していますが、マスコットに完成はありません。最初から大作は狙わず、少しずつ育てて(改良して)じっくり楽しみましょう。毎日起動せずにはいられない愛しいペットが出来上がったら、ぜひ私にも紹介してくださいませ。次回は「マスコットでゲームにチャレンジ!-前編」という題目で、マスコットの全能力を駆使した大作ゲーム(本当かぁ?)の開発に突入したいと考えております。お楽しみに!
copyright 2001 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp