スクリプト

« 「セカンドライフ」上でバーチャル新卒採用オフィスを開設(mixiプレスリリース) | メイン | 昨年のモデルがL$1に! »

magslmagsl 2007/02/28

なぜなにスクリプト 第一回 「スクリプト紹介」

Love01 はじまりました。『なぜなにスクリプト』このコーナーでは、ちょっと敷居が高いなー、と思われがちなSLのスクリプトをわかりやすく、かつ華麗にアグレッシブに解説しようと思います。


 講師のLitmusです。よろしくお願いします。


Love01 Litmusさん。やはり、スクリプトというと難しいなぁ、というイメージがあるんですけど。


 そうですね。確かにそう感じている人は多いと思います。でも、理解してしまえばスクリプトというのは、とても素直なものだし、さまざまな可能性が隠されていることに気づくはずです。


Love01 その辺りを詳しく説明願います。


 スクリプトはあるきっかけにより何らかのアクションを起こすという書き方をします。このきっかけというのは、オブジェクトがタッチされた時とか、何かにぶつかったときとかです。アクションは「Hello」としゃべらせたり、ランドマークをGiveしたりとかができます。特殊効果と呼ばれるパーティクルを出すのもアクションの1つです。


Love01 なるほど。風が吹けば桶屋が儲かる。みたいなものですか?


 少し違うと思いますが、まぁ、そんな感じだと思ってください。


Love01 では、具体的にスクリプトの説明をして欲しいんですが。


 Loveさんは、なにかしてみたいこととかありますか?


Love01 そうですねー。ちょっと難しいかもしれませんが、オブジェクトを出したら「Hello, Avatar!」としゃべって、タッチすると「Touched.」って言わせることなんて可能でしょうかね?


 ものすごく進行を楽にしようとしてますね? それは、デフォルトのスクリプトです。


Love01 ええーっ!? そんなこととはまるで知りませんでした。


 まぁ、いいでしょ。では、そのスクリプトを例にとって説明をしましょう。オブジェクトのコンテンツを開いて、その中からnew scriptを選びましょう。そうすると、下記のようなものが書かれていて、緑の文字で"Hello Avatar!"としゃべります。


 default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}

touch_start(integer total_number)
{
llSay(0, "Touched.");
}
}


Love01 難解な文字列ですね、英語だし。お腹が頭痛を起こしそうです。


 一つずつ説明しますね。全体を見渡しますと、default{ }という大きなかっこに全体が囲まれています。その中にstate_entry(){ } という囲いとtouch_start(){ }という囲いがあります。これらのかっこは、始まり"{" と 終わり"}"とできちんと対応しています。算数の(1+2)×3 = 9 というイメージに似ています。


Love01 なるほど。default{ }の中がスクリプトの内容と言うことですね?


 そうです。とりあえず、default{ } という囲いは全体を囲むものなんだと覚えましょう。


Love01 形式のようなものですね。わかりました。では{ }の中の内容の方をお願いします。


 次にstate_entry() と touch_start() というのがきっかけを表しています。
touch_start() というのがタッチされたときのアクションを書く部分です。丸かっこ()の中の「integer total_number」というのは今は置いておきましょう。


Love01 まずきっかけを書くわけですか。それによりスクリプトが起動すると言うわけですね。きっかけには、さまざまなものがありますよね?


 はい。それに関してはlslWikiで検索して調べることができます。


Love01 なるほど。スクリプトを書きたいと思ったときには欠かせないサイトですね。


 state_entry() というのはスクリプト自身が始めて動くときの部分です。実は一番最初にあるこのstate_entry()は意外と分かりにくかったりします。Saveボタンを押してスクリプトが動き出すときや、Resetボタンにより、スクリプトがリセットされた時、スクリプトの左下にあるRunningボタンのチェックが入って動き出すときなどがあります。なので、とりあえずは、一番最初に実行されると言うことで覚えましょう。


Love01 まずは、state_entry()から、と覚えておけばいいですね。


 そして、それぞれアクションとして、llSay(数字、"文字列") があります。このll (エルエル)ではじまるキーワードはLinden Labから用意されているもので、丸かっこ()の中は決められた形で記述します。このキーワード、大文字小文字を正しく書かないと有効(赤色)になりません。llSayの場合だと、初めに数字、コンマ区切りの後に"文字列" という形になります。


Love01 この場合はSayですけど、他にも色々なものがありますよね?


 ええ。さまざまなアクションが用意されています。それも先ほどのlslWikiに載っています。


Love01 ではllSayのあとの内容について教えていただけますか?


 はい。一番目の数字はチャネルを表します。「/1 start」みたいに言えって言われるアイテムとかありますよね。この"1"がチャネルです。チャネル"0"というのは、みんなが普段チャットをしているチャネルです。なのでこのチャネルに対してllSayすると、みんなに聞こえます。


Love01 手前味噌ですが、私のカフェの乾杯システムでも「/1 cheers」という発言で起動するスクリプトが使われてますね。チャンネル"0"は、普段、私たちが会話をしているチャンネルと覚えておけばいいですね。


 そうです。二番目の数字は文字列を入れます。文字列の最初と終わりは"(ダブルクオート)で囲む決まりです。ごらんのとおり" "の中のHello, Avatar! という文字列がしゃべった言葉になっています。


Love01 なるほど、ではこの部分を変更するだけでも、色々な文章をしゃべらせることができるというわけですね。


 そうなりますね。llSay(.....)の最後に;セミコロンがありますが、これはここで一行終了という意味です。こういう決まりなんだと思ってください。


Love01 その行の締めくくりには;をつけるんですね。


 最後に、スクリプトをSaveしようとしたら、下のほうに(10, 4) : ERROR : Syntax errorなどと出ることがあります。これは10行目の4文字目が違ってるという警告なのですが、この部分の前後もしくは1つ前の行の最後の部分(9行目の最後)などをチェックしましょう。"とか;とかが漏れてたりします。


Love01 もし、そのスクリプトに不具合がある場合は、そのエラーの箇所を指摘してくれると言うわけですね。もう一度、そこを確認すれば、なにがどう間違ったのかわかりやすいですね。


 正しく記述されていれば、Saveのあとに、Compile successful, saving... とでて、しばらく待った後にSave complete.と出ます。こうなったときにはじめてスクリプトが実行されるようになります。


Love01 これで、オブジェクトを出した(またはスクリプトを起動させたりした)時に「Hello, Avatar!」としゃべって、タッチしたら「Touched.」としゃべるスクリプトができたわけですか。なるほど、理解してみると思っていたよりも簡単ですね。


 これはデフォルトのスクリプトなので、とてもシンプルに書かれています。しかし、この基本を覚えなければ複雑なスクリプトも書けないわけで、意味を理解して知っておくことはとても大切ですね。


Love01 わかりました。ありがとうございます。では、次回ですが『オブジェクトの上にテキストを表示させる方法(ポロリもあるよ)』をお送りします。


 ポロリはないですよ。

トラックバック

このエントリーのトラックバックURL:

ご注意:
・トラックバックは確認後、承認されたものが反映されます。
・マグスルの判断によりトラックバックを削除する場合があります。
・トラックバックによってリンクされているWebページは第三者が作成したものです。内容や安全性についてマグスルでは一切保証できませんのでご注意下さい。

MagSL.net でスクリプト入門が開始!
送信元: Second Life in 河口湖
 リンデンスクリプト(以下LSL)は誰もが迷うところではないでしょうか?LSLが... [詳しくはこちら]

コメントを投稿

※ブログオーナーが承認したコメントのみ表示されます。


MagSL EXchange serviceセカンドライフ用パソコンならドスパラ!売れるショップ講座