はじめに
前回はスクリプトの構成について説明しました。
「状態(ステート)」
「きっかけ(イベント)」
「反応」
の3つで構成されているという点は基礎中の基礎ですので踏まえておいて下さい。
「状態(ステート)」
「きっかけ(イベント)」
「反応」
の3つで構成されているという点は基礎中の基礎ですので踏まえておいて下さい。
今回は実際にSLの中でスクリプトを動かしてみたいと思います。
だらだらと説明ばかりでは飽きるでしょうし(^^;
だらだらと説明ばかりでは飽きるでしょうし(^^;
スクリプトの作成
SLにログインし、実際に作ってみましょう。
スクリプトの作り方は、厳密には2つの方法があります。
スクリプトの作り方は、厳密には2つの方法があります。
primのコンテンツ内に作る方法と、アバターのインベントリ内に作る方法の二種類ですが、たいていの場合はprimのコンテンツ内に作成します。
何故ならスクリプトはprimのコンテンツ内に置かないと作動しないためです。
汎用的なスクリプトを作る場合などは、アバターのインベントリにスクリプトを作ったりもしますが、最初のうちはそういうこともあまりないでしょう。
何故ならスクリプトはprimのコンテンツ内に置かないと作動しないためです。
汎用的なスクリプトを作る場合などは、アバターのインベントリにスクリプトを作ったりもしますが、最初のうちはそういうこともあまりないでしょう。
適当にprimを作って下さい。
primの作り方がわからないという方は、「SL prim 初めて 作成」でGoogle検索して下さい(^^;
SecondLife Wiki JPのアイボリータワー翻訳プロジェクトなどがとても参考になると思います。
primの作り方がわからないという方は、「SL prim 初めて 作成」でGoogle検索して下さい(^^;
SecondLife Wiki JPのアイボリータワー翻訳プロジェクトなどがとても参考になると思います。
primを作ったら、editウインドウの下側に並んでいるタブの一番右、「コンテンツ」のタブをクリックします(editウインドウの下半分が表示されてない人は「more」ボタンで表示されます)。
「コンテンツ」タブには、primの中に入っているものの一覧が表示されています。
最初は「contents」というフォルダがあるのみで、空っぽになっているはずです。
「コンテンツ」タブには、primの中に入っているものの一覧が表示されています。
最初は「contents」というフォルダがあるのみで、空っぽになっているはずです。
この画面で「New Script」のボタンを押すと、新しいスクリプトが作成されます。
「New Script」という名称でコンテンツの中に表示されますので、今度は作られたスクリプトをダブルクリックします。
「New Script」という名称でコンテンツの中に表示されますので、今度は作られたスクリプトをダブルクリックします。
するとスクリプト編集用のウインドウが開き、なにやらコードが書かれているのが見れます。
以下のようなコードが表示されるところまで実際に試してみて下さい。
以下のようなコードが表示されるところまで実際に試してみて下さい。
default { state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { llSay(0, "Touched."); } }
ハロー・アバター・スクリプト
作成されたスクリプトは、ハロー・アバター・スクリプトと呼ばれる初期スクリプトです。
前回のスクリプト構造についての話を思い出して、このスクリプトの構造を読み取って見ましょう。
前回のスクリプト構造についての話を思い出して、このスクリプトの構造を読み取って見ましょう。
default ・・・状態(ステート) { state_entry() ・・・きっかけ(イベント) { llSay(0, "Hello, Avatar!"); ・・・反応 } touch_start(integer total_number) ・・・きっかけ(イベント) { llSay(0, "Touched."); ・・・反応 } }
読み取れたでしょうか。
「状態(ステート)」、「きっかけ(イベント)」、「反応」。
どこの部分が何に当たるのかをまずつかんで下さい。
それがわかると次には、
「defaultってのが状態なのはわかったけど、一体何のことやら?」
という疑問がわいてくるかと思います。
「状態(ステート)」、「きっかけ(イベント)」、「反応」。
どこの部分が何に当たるのかをまずつかんで下さい。
それがわかると次には、
「defaultってのが状態なのはわかったけど、一体何のことやら?」
という疑問がわいてくるかと思います。
それぞれの英語の構文の意味について、簡単に説明しましょう。
- 状態(ステート)
このスクリプトには状態(ステート)が一つしかありません。
defaultステートです。
このステートは特別なステートで、いわゆる「初期状態」です。
スクリプトは複数のステートを持つことができますが、このdefaultステートを無くすことはできません。
またdefaultステートは、スクリプトが開始されるときの最初のステートです。
defaultステートです。
このステートは特別なステートで、いわゆる「初期状態」です。
スクリプトは複数のステートを持つことができますが、このdefaultステートを無くすことはできません。
またdefaultステートは、スクリプトが開始されるときの最初のステートです。
- きっかけ(イベント)
きっかけ(イベント)は二つあります。
state_entry?()というのと、touch_start?(integer total_number)です。
この二つは最も基本的なイベントです。
state_entry?()は、ステートにエントリーしたとき、つまり「この状態になったとき」に実行されます。
touch_start?()は、タッチをスタートしたとき、つまり「タッチしたとき」に実行されます。
state_entry?()というのと、touch_start?(integer total_number)です。
この二つは最も基本的なイベントです。
state_entry?()は、ステートにエントリーしたとき、つまり「この状態になったとき」に実行されます。
touch_start?()は、タッチをスタートしたとき、つまり「タッチしたとき」に実行されます。
- 反応
それぞれのイベントに対して反応が書かれています。
このスクリプトではどちらも、llSay(0, "ほげほげ")という反応になっています。
llSay()は、「言う」すなわち"ほげほげ"の部分に書かれた内容をオブジェクトが発言する命令です。
このスクリプトではどちらも、llSay(0, "ほげほげ")という反応になっています。
llSay()は、「言う」すなわち"ほげほげ"の部分に書かれた内容をオブジェクトが発言する命令です。
さて、ここまでわかると、このスクリプトの動きがわかるはずです。
ステート、イベント、そして反応を踏まえながら考えてみましょう。
ステート、イベント、そして反応を踏まえながら考えてみましょう。
まずステートについては一つしかないので悩むことは何もありません。
このスクリプトは初期状態から変化することがなく、初期状態のまま完結しています。
このスクリプトは初期状態から変化することがなく、初期状態のまま完結しています。
イベントは2つ。
「この状態になったとき」と「タッチしたとき」です。
「この状態になったとき」と「タッチしたとき」です。
「この状態になったとき」の「この状態」とは何かと言うと、当然defaultステートのことです。
つまりこのイベントは、「defaultステートになったとき」のことです。
このスクリプトは初期状態のdefaultステートしかありませんから、このイベントが発生するのは「一番最初にスクリプトが動いた時」だけです。
そのときにどんな反応をするのか。
llSay(0, "Hello, Avatar!");と書いてあります。
この命令を正確に説明すると、
「チャットチャンネル0番で"Hello, Avatar!"と発言する」
ということになります。
チャットチャンネルについてはとりあえず省略しますが、0番チャンネルでの発言というのは通常チャットと同じ発言になるということだけ知っておいて下さい。
つまりこのイベントは、「defaultステートになったとき」のことです。
このスクリプトは初期状態のdefaultステートしかありませんから、このイベントが発生するのは「一番最初にスクリプトが動いた時」だけです。
そのときにどんな反応をするのか。
llSay(0, "Hello, Avatar!");と書いてあります。
この命令を正確に説明すると、
「チャットチャンネル0番で"Hello, Avatar!"と発言する」
ということになります。
チャットチャンネルについてはとりあえず省略しますが、0番チャンネルでの発言というのは通常チャットと同じ発言になるということだけ知っておいて下さい。
イベントと反応をあわせて考えると、
「一番最初にスクリプトが動いた時」>「"Hello, Avatar!"と発言する」
ということになります。
「一番最初にスクリプトが動いた時」>「"Hello, Avatar!"と発言する」
ということになります。
次のイベントも見てみましょう。
「タッチしたとき」のほうは、文字通りアバターがオブジェクトをタッチしたときのことです。
touch_start?()の()の中に書いてある「integer total_number」については今は気にしなくていいです。
こういう風に書くんだと覚えておきましょう。
反応は先ほどと同じくllSayです。
今度はllSay(0, "Touched.");と書いてありますので、
「チャットチャンネル0番で"Touched."と発言する」
ということになります。
「タッチしたとき」のほうは、文字通りアバターがオブジェクトをタッチしたときのことです。
touch_start?()の()の中に書いてある「integer total_number」については今は気にしなくていいです。
こういう風に書くんだと覚えておきましょう。
反応は先ほどと同じくllSayです。
今度はllSay(0, "Touched.");と書いてありますので、
「チャットチャンネル0番で"Touched."と発言する」
ということになります。
つまり2番目のイベントと反応は、
「アバターにタッチされたとき」>「"Touched."と発言する」
ということです。
「アバターにタッチされたとき」>「"Touched."と発言する」
ということです。
本当にそうなってるのか?
スクリプトがどういう動作をするのかわかったところで、実際に試してみましょう。
まずは、スクリプトの編集ウインドウの下のほうにある、「リセット」のボタンを押してください。
このボタンを押すとスクリプトがリセットされます。
まずは、スクリプトの編集ウインドウの下のほうにある、「リセット」のボタンを押してください。
このボタンを押すとスクリプトがリセットされます。
リセットされるということは、初期状態に戻りますので、一番目に書いてあったイベント、
「一番最初にスクリプトが動いた時」
が発動するはずです。
このイベントが発動すると、
「"Hello, Avatar!"と発言する」
はずですので、チャット欄をよく見ておきましょう。
「一番最初にスクリプトが動いた時」
が発動するはずです。
このイベントが発動すると、
「"Hello, Avatar!"と発言する」
はずですので、チャット欄をよく見ておきましょう。
リセットしたときに"Hello, Avatar!"とオブジェクトが言っていれば予想通りの動きです。
次に、オブジェクトにタッチしてみます。
editウインドウが開いたままだとうまくタッチできませんので、一度editモードを終了して下さい。
それからオブジェクトにタッチしてみます。
2番目に書いてあったイベントの「アバターにタッチされたとき」が発動して、「"Touched."と発言する」はずです。
editウインドウが開いたままだとうまくタッチできませんので、一度editモードを終了して下さい。
それからオブジェクトにタッチしてみます。
2番目に書いてあったイベントの「アバターにタッチされたとき」が発動して、「"Touched."と発言する」はずです。
タッチしたときに"Touched."とオブジェクトが言っていることを確認しましょう。
今回は実際にスクリプトのコードを見て、その構造を理解し、どんな動きをするのか考えてみました。
フリーのスクリプトなどを入手する機会もあるかと思いますが、その動きを理解するときも同様の思考手順を踏みます。
フリーのスクリプトなどを入手する機会もあるかと思いますが、その動きを理解するときも同様の思考手順を踏みます。
さて、具体的にスクリプトを作る方法がわかりましたので、次回はオリジナルのスクリプトを作成するところまで進んでみたいと思います。
何かご意見・ご感想などありましたら遠慮なくコメントして下さいませ(^^
何かご意見・ご感想などありましたら遠慮なくコメントして下さいませ(^^
……的外れじゃないかと不安でたまらなくなってくるのでw
- とても分かりやすいですね。 -- チョコ (2011-12-12 22:46:05)