はじまりました。『なぜなにスクリプト』このコーナーでは、ちょっと敷居が高いなー、と思われがちなSLのスクリプトをわかりやすく、かつ華麗にアグレッシブに解説しようと思います。
講師のLitmusです。よろしくお願いします。
Litmusさん。やはり、スクリプトというと難しいなぁ、というイメージがあるんですけど。
そうですね。確かにそう感じている人は多いと思います。でも、理解してしまえばスクリプトというのは、とても素直なものだし、さまざまな可能性が隠されていることに気づくはずです。
その辺りを詳しく説明願います。
スクリプトはあるきっかけにより何らかのアクションを起こすという書き方をします。このきっかけというのは、オブジェクトがタッチされた時とか、何かにぶつかったときとかです。アクションは「Hello」としゃべらせたり、ランドマークをGiveしたりとかができます。特殊効果と呼ばれるパーティクルを出すのもアクションの1つです。
なるほど。風が吹けば桶屋が儲かる。みたいなものですか?
少し違うと思いますが、まぁ、そんな感じだと思ってください。
では、具体的にスクリプトの説明をして欲しいんですが。
Loveさんは、なにかしてみたいこととかありますか?
そうですねー。ちょっと難しいかもしれませんが、オブジェクトを出したら「Hello, Avatar!」としゃべって、タッチすると「Touched.」って言わせることなんて可能でしょうかね?
ものすごく進行を楽にしようとしてますね? それは、デフォルトのスクリプトです。
ええーっ!? そんなこととはまるで知りませんでした。
まぁ、いいでしょ。では、そのスクリプトを例にとって説明をしましょう。オブジェクトのコンテンツを開いて、その中からnew scriptを選びましょう。そうすると、下記のようなものが書かれていて、緑の文字で"Hello Avatar!"としゃべります。
|
default
touch_start(integer total_number) |
難解な文字列ですね、英語だし。お腹が頭痛を起こしそうです。
一つずつ説明しますね。全体を見渡しますと、default{ }という大きなかっこに全体が囲まれています。その中にstate_entry(){ } という囲いとtouch_start(){ }という囲いがあります。これらのかっこは、始まり"{" と 終わり"}"とできちんと対応しています。算数の(1+2)×3 = 9 というイメージに似ています。
なるほど。default{ }の中がスクリプトの内容と言うことですね?
そうです。とりあえず、default{ } という囲いは全体を囲むものなんだと覚えましょう。
形式のようなものですね。わかりました。では{ }の中の内容の方をお願いします。
次にstate_entry() と touch_start() というのがきっかけを表しています。
touch_start() というのがタッチされたときのアクションを書く部分です。丸かっこ()の中の「integer total_number」というのは今は置いておきましょう。
まずきっかけを書くわけですか。それによりスクリプトが起動すると言うわけですね。きっかけには、さまざまなものがありますよね?
はい。それに関してはlslWikiで検索して調べることができます。
なるほど。スクリプトを書きたいと思ったときには欠かせないサイトですね。
state_entry() というのはスクリプト自身が始めて動くときの部分です。実は一番最初にあるこのstate_entry()は意外と分かりにくかったりします。Saveボタンを押してスクリプトが動き出すときや、Resetボタンにより、スクリプトがリセットされた時、スクリプトの左下にあるRunningボタンのチェックが入って動き出すときなどがあります。なので、とりあえずは、一番最初に実行されると言うことで覚えましょう。
まずは、state_entry()から、と覚えておけばいいですね。
そして、それぞれアクションとして、llSay(数字、"文字列") があります。このll (エルエル)ではじまるキーワードはLinden Labから用意されているもので、丸かっこ()の中は決められた形で記述します。このキーワード、大文字小文字を正しく書かないと有効(赤色)になりません。llSayの場合だと、初めに数字、コンマ区切りの後に"文字列" という形になります。
この場合はSayですけど、他にも色々なものがありますよね?
ええ。さまざまなアクションが用意されています。それも先ほどのlslWikiに載っています。
ではllSayのあとの内容について教えていただけますか?
はい。一番目の数字はチャネルを表します。「/1 start」みたいに言えって言われるアイテムとかありますよね。この"1"がチャネルです。チャネル"0"というのは、みんなが普段チャットをしているチャネルです。なのでこのチャネルに対してllSayすると、みんなに聞こえます。
手前味噌ですが、私のカフェの乾杯システムでも「/1 cheers」という発言で起動するスクリプトが使われてますね。チャンネル"0"は、普段、私たちが会話をしているチャンネルと覚えておけばいいですね。
そうです。二番目の数字は文字列を入れます。文字列の最初と終わりは"(ダブルクオート)で囲む決まりです。ごらんのとおり" "の中のHello, Avatar! という文字列がしゃべった言葉になっています。
なるほど、ではこの部分を変更するだけでも、色々な文章をしゃべらせることができるというわけですね。
そうなりますね。llSay(.....)の最後に;セミコロンがありますが、これはここで一行終了という意味です。こういう決まりなんだと思ってください。
その行の締めくくりには;をつけるんですね。
最後に、スクリプトをSaveしようとしたら、下のほうに(10, 4) : ERROR : Syntax errorなどと出ることがあります。これは10行目の4文字目が違ってるという警告なのですが、この部分の前後もしくは1つ前の行の最後の部分(9行目の最後)などをチェックしましょう。"とか;とかが漏れてたりします。
もし、そのスクリプトに不具合がある場合は、そのエラーの箇所を指摘してくれると言うわけですね。もう一度、そこを確認すれば、なにがどう間違ったのかわかりやすいですね。
正しく記述されていれば、Saveのあとに、Compile successful, saving... とでて、しばらく待った後にSave complete.と出ます。こうなったときにはじめてスクリプトが実行されるようになります。
これで、オブジェクトを出した(またはスクリプトを起動させたりした)時に「Hello, Avatar!」としゃべって、タッチしたら「Touched.」としゃべるスクリプトができたわけですか。なるほど、理解してみると思っていたよりも簡単ですね。
これはデフォルトのスクリプトなので、とてもシンプルに書かれています。しかし、この基本を覚えなければ複雑なスクリプトも書けないわけで、意味を理解して知っておくことはとても大切ですね。
わかりました。ありがとうございます。では、次回ですが『オブジェクトの上にテキストを表示させる方法(ポロリもあるよ)』をお送りします。
ポロリはないですよ。
マグスル second life セカンドライフの遊び方マガジン
magsl 2007/02/28










