はじめに
Second Life(SL)は、Linden Labs社が制作した大人気の多人数同時参加型オンラインゲーム(MMOG)です。Second Lifeはゲームをはるかに超えるものだと考える人も大勢います。Second Lifeをよく知らない人は、映画『マトリックス』を思い出してください。『マトリックス』では、人々がシミュレーションの世界の中で生活し、仕事をしていました。Second Lifeもこれとそっくりで、アバターと呼ばれるコンピュータプレーヤーがSecond Lifeの3Dの世界の中で生活します。
Second Lifeに明確な目的はありません。この世界で起きることはすべて、プレーヤーの自由な発想に任されています。しかも、Second Lifeは無料でプレーすることができます。登録する必要はありますが、土地を所有するのでなければ有料会員になる必要はありません。
ただし『マトリックス』と違い、現在のコンピュータ技術は現実の世界を丸ごとシミュレートできるほど進歩していません。そのため、Second Lifeには2つの大きな短所があります。第一に、プレーヤーはコンピュータの画面を通してSecond Lifeの世界を目にします。最先端の3Dグラフィックスが使われているとはいえ、シミュレーションはどことなく漫画チックに見えます。それでも、Second Life内ではかなり水準の高いビジュアル表現が随所に見られます。
第二に、Second Lifeのシミュレーションは物理的に完全なシミュレーションではありません。重要な要素、例えば重力などは存在しますが、車のような複雑なものは完全にシミュレートできないことがあります。車の内燃機関や電気部品のすべての側面をシミュレートするのはかなり難しいことだからです。最新のコンピュータであっても、このような処理にはパワーが足りません。とはいえ、これから見ていくように、Second Lifeの世界には車やその他多くの種類の乗り物が存在します。
Second Lifeにアクセスするには、無料のクライアントを使用します。クライアントはWindows、Macintosh、UNIXなど、各種のOSに対応しています。さらに、Linden Labs社はつい先日、クライアントをオープンソースとして公開しました。これにより、サードパーティの開発者がSecond Lifeクライアントのさまざまな追加機能を作成し、機能を拡張できるようになっています。
Linden Scripting Languageについて
Second Lifeには、単純な物理エンジンの機能の限界をフォローするために、Linden Scripting Language(以下LSL)というスクリプト型のプログラミング言語が用意されています。車のすべての側面をシミュレートする代わりに、車の動き方を指示するスクリプトをプログラマが作成します。このスクリプトでは、音を鳴らすことも、車の進路を変えることも、衝突を検出することもできます。例えば車のスクリプトを作成する場合、現実味を加えるために、運転中でなければ進路を変更できないようにすることもできます。
本稿ではLSLの概要を紹介します。ここで説明する内容を十分に活用するには、Second Lifeにおける「制作」(building)の基礎知識があることが望ましいものの、それは本稿のコードを理解する上で必須ではありません。制作とは、3Dプリミティブ(基本形状)をSecond Lifeの世界に配置する作業です。Second Lifeで目にするものはすべて、制作者によって作成されています。
本稿では、読者が既にSecond Lifeの制作工程にある程度精通しているという前提で話を進めます。Second Lifeで簡単なオブジェクトを制作するのはそれほど難しいことではありませんが、物を制作するにはSecond Lifeの世界のやり方を学ぶ必要があります。試しに制作してみるには、Second Lifeウィンドウの下にある[Build]ボタンをクリックします。
LSLの基礎
LSLは、一見するとCによく似ています。しかし、プログラミングはCよりもずっと簡単です。ポインタはなく、strcmp
などの関数を使わずに直接文字列を比較できます。LSLはオブジェクト指向ではありません。独自のオブジェクトを作成することはできず、3D関連のオブジェクトもわずかしか用意されていません。LSLは状態ベースです。すべてのLSLスクリプトには特定の状態があり、状態を遷移させて関数を実行します。この概念は、多くのプログラミング言語とかなり異なるものです。状態マシンは多くの言語で作成できますが、LSLでは状態マシンの概念がもともと言語に組み込まれています。
LSLスクリプトは、Second Lifeの3Dプリミティブの中に配置されます。オブジェクトはプリミティブの集合です。例えば、Second Lifeの車は1つのオブジェクトです。しかし、車オブジェクトは、それぞれが独自のスクリプトを含む多くのプリミティブで構成されます。また、プリミティブは相互に、あるいは人間のプレーヤーと通信することができます。高度なプログラミングを使うと、プリミティブはSLの外部にあるWebページとも通信できるようになります。
LSLはイベントドリブンでもあります。Second Lifeのほとんどのオブジェクトは、イベントをきっかけに状態を遷移しながら機能します。Second Lifeには、さまざまな種類のイベントが用意されています。その多くはユーザーがオブジェクトに触れたり座ったりしたときに発生するユーザーベースのイベントですが、ユーザーの操作が不要なタイマーイベントもサポートされています。
これ以降は、Second Lifeでエレベータを動かす方法について説明します。
簡単なエレベータの制作
例として、本稿ではSecond Lifeの高層ビルを上下に移動するエレベータを作成する方法を示します。図1は、このエレベータを設置する高層ビルです。
このエレベータが実際に動作する様子は、Second LifeのX座標51、Y座標79の位置にある「Gyeonu」リージョンで確認できます。Second Lifeでは、「SLURL」と呼ばれる特殊なURLが使われます。SLクライアントが既にインストールされていれば、エレベータの場所に直接移動することができます。SLURLリンクがうまく機能しない場合は、SLクライアントの[Map]ボタンをクリックして「Gyeonu」を検索し、座標フィールドに「95」、「23」、「44」という座標を入力します(※編集部注:現在、該当する座標に高層ビルのオブジェクトは設置されていないようです)。
このリンクをたどると、エレベータがあるエリアの上空マップを示すWebサイトが開きます。Second Lifeがインストールされている場合は、[Teleport Now]をクリックしてその場所にテレポートすることができます。エレベータを使うと、屋上を含めて、高層ビルのすべての階に移動できます。エレベータを利用するには、単にエレベータに「座る」(sit)という動作を行います。これは組み込みの動作の1つで、ゲーム内のオブジェクトを右クリックするとポップアップメニューに表示されます。エレベータのポップアップメニューでは、行き先の階を選択することができます。また、高層ビルの各階にある緑色のボタンを使うと、エレベータをその階に呼ぶことができます。