2007年04月05日
初!スクリプト(初級スクリプト第三回)
今回は・・・
前回はスクリプトの構成について説明しました。
「状態(ステート)」
「きっかけ(イベント)」
「反応」
の3つで構成されているという点は基礎中の基礎ですので踏まえておいて下さい。
今回は実際にSLの中でスクリプトを動かしてみたいと思います。
だらだらと説明ばかりでは飽きるでしょうし(^^;
前回はスクリプトの構成について説明しました。
「状態(ステート)」
「きっかけ(イベント)」
「反応」
の3つで構成されているという点は基礎中の基礎ですので踏まえておいて下さい。
今回は実際にSLの中でスクリプトを動かしてみたいと思います。
だらだらと説明ばかりでは飽きるでしょうし(^^;
スクリプトの作成
SLにログインし、実際に作ってみましょう。
スクリプトの作り方は、厳密には2つの方法があります。
primのコンテンツ内に作る方法と、アバターのインベントリ内に作る方法の二種類ですが、たいていの場合はprimのコンテンツ内に作成します。
何故ならスクリプトはprimのコンテンツ内に置かないと作動しないためです。
汎用的なスクリプトを作る場合などは、アバターのインベントリにスクリプトを作ったりもしますが、最初のうちはそういうこともあまりないでしょう。
適当にprimを作って下さい。
primの作り方がわからないという方は、「SL prim 初めて 作成」でGoogle検索して下さい(^^;
SecondLife Wiki JPのアイボリータワー翻訳プロジェクトなどがとても参考になると思います。
primを作ったら、editウインドウの下側に並んでいるタブの一番右、「コンテンツ」のタブをクリックします(editウインドウの下半分が表示されてない人は「more」ボタンで表示されます)。
「コンテンツ」タブには、primの中に入っているものの一覧が表示されています。
最初は「contents」というフォルダがあるのみで、空っぽになっているはずです。
この画面で「New Script」のボタンを押すと、新しいスクリプトが作成されます。
「New Script」という名称でコンテンツの中に表示されますので、今度は作られたスクリプトをダブルクリックします。
するとスクリプト編集用のウインドウが開き、なにやらコードが書かれているのが見れます。
以下のようなコードが表示されるところまで実際に試してみて下さい。
ハロー・アバター・スクリプト
作成されたスクリプトは、ハロー・アバター・スクリプトと呼ばれる初期スクリプトです。
前回のスクリプト構造についての話を思い出して、このスクリプトの構造を読み取って見ましょう。
読み取れたでしょうか。
「状態(ステート)」、「きっかけ(イベント)」、「反応」。
どこの部分が何に当たるのかをまずつかんで下さい。
それがわかると次には、
「defaultってのが状態なのはわかったけど、一体何のことやら?」
という疑問がわいてくるかと思います。
それぞれの英語の構文の意味について、簡単に説明しましょう。
・状態(ステート)
このスクリプトには状態(ステート)が一つしかありません。
defaultステートです。
このステートは特別なステートで、いわゆる「初期状態」です。
スクリプトは複数のステートを持つことができますが、このdefaultステートを無くすことはできません。
またdefaultステートは、スクリプトが開始されるときの最初のステートです。
・きっかけ(イベント)
きっかけ(イベント)は二つあります。
state_entry()というのと、touch_start(integer total_number)です。
この二つは最も基本的なイベントです。
state_entry()は、ステートにエントリーしたとき、つまり「この状態になったとき」に実行されます。
touch_start()は、タッチをスタートしたとき、つまり「タッチしたとき」に実行されます。
・反応
それぞれのイベントに対して反応が書かれています。
このスクリプトではどちらも、llSay(0, "ほげほげ")という反応になっています。
llSay()は、「言う」すなわち"ほげほげ"の部分に書かれた内容をオブジェクトが発言する命令です。
さて、ここまでわかると、このスクリプトの動きがわかるはずです。
ステート、イベント、そして反応を踏まえながら考えてみましょう。
まずステートについては一つしかないので悩むことは何もありません。
このスクリプトは初期状態から変化することがなく、初期状態のまま完結しています。
イベントは2つ。
「この状態になったとき」と「タッチしたとき」です。
「この状態になったとき」の「この状態」とは何かと言うと、当然defaultステートのことです。
つまりこのイベントは、「defaultステートになったとき」のことです。
このスクリプトは初期状態のdefaultステートしかありませんから、このイベントが発生するのは「一番最初にスクリプトが動いた時」だけです。
そのときにどんな反応をするのか。
llSay(0, "Hello, Avatar!");と書いてあります。
この命令を正確に説明すると、
「チャットチャンネル0番で"Hello, Avatar!"と発言する」
ということになります。
チャットチャンネルについてはとりあえず省略しますが、0番チャンネルでの発言というのは通常チャットと同じ発言になるということだけ知っておいて下さい。
イベントと反応をあわせて考えると、
「一番最初にスクリプトが動いた時」>「"Hello, Avatar!"と発言する」
ということになります。
次のイベントも見てみましょう。
「タッチしたとき」のほうは、文字通りアバターがオブジェクトをタッチしたときのことです。
touch_start()の()の中に書いてある「integer total_number」については今は気にしなくていいです。
こういう風に書くんだと覚えておきましょう。
反応は先ほどと同じくllSayです。
今度はllSay(0, "Touched.");と書いてありますので、
「チャットチャンネル0番で"Touched."と発言する」
ということになります。
つまり2番目のイベントと反応は、
「アバターにタッチされたとき」>「"Touched."と発言する」
ということです。
本当にそうなってるのか?
スクリプトがどういう動作をするのかわかったところで、実際に試してみましょう。
まずは、スクリプトの編集ウインドウの下のほうにある、「リセット」のボタンを押してください。
このボタンを押すとスクリプトがリセットされます。
リセットされるということは、初期状態に戻りますので、一番目に書いてあったイベント、
「一番最初にスクリプトが動いた時」
が発動するはずです。
このイベントが発動すると、
「"Hello, Avatar!"と発言する」
はずですので、チャット欄をよく見ておきましょう。
リセットしたときに"Hello, Avatar!"とオブジェクトが言っていれば予想通りの動きです。
次に、オブジェクトにタッチしてみます。
editウインドウが開いたままだとうまくタッチできませんので、一度editモードを終了して下さい。
それからオブジェクトにタッチしてみます。
2番目に書いてあったイベントの「アバターにタッチされたとき」が発動して、「"Touched."と発言する」はずです。
タッチしたときに"Touched."とオブジェクトが言っていることを確認しましょう。
今回は実際にスクリプトのコードを見て、その構造を理解し、どんな動きをするのか考えてみました。
フリーのスクリプトなどを入手する機会もあるかと思いますが、その動きを理解するときも同様の思考手順を踏みます。
さて、具体的にスクリプトを作る方法がわかりましたので、次回はオリジナルのスクリプトを作成するところまで進んでみたいと思います。
何かご意見・ご感想などありましたら遠慮なくコメントして下さいませ(^^
・・・的外れじゃないかと不安でたまらなくなってくるのでw
SLにログインし、実際に作ってみましょう。
スクリプトの作り方は、厳密には2つの方法があります。
primのコンテンツ内に作る方法と、アバターのインベントリ内に作る方法の二種類ですが、たいていの場合はprimのコンテンツ内に作成します。
何故ならスクリプトはprimのコンテンツ内に置かないと作動しないためです。
汎用的なスクリプトを作る場合などは、アバターのインベントリにスクリプトを作ったりもしますが、最初のうちはそういうこともあまりないでしょう。
適当にprimを作って下さい。
primの作り方がわからないという方は、「SL prim 初めて 作成」でGoogle検索して下さい(^^;
SecondLife Wiki JPのアイボリータワー翻訳プロジェクトなどがとても参考になると思います。
primを作ったら、editウインドウの下側に並んでいるタブの一番右、「コンテンツ」のタブをクリックします(editウインドウの下半分が表示されてない人は「more」ボタンで表示されます)。
「コンテンツ」タブには、primの中に入っているものの一覧が表示されています。
最初は「contents」というフォルダがあるのみで、空っぽになっているはずです。
この画面で「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ステートは、スクリプトが開始されるときの最初のステートです。
・きっかけ(イベント)
きっかけ(イベント)は二つあります。
state_entry()というのと、touch_start(integer total_number)です。
この二つは最も基本的なイベントです。
state_entry()は、ステートにエントリーしたとき、つまり「この状態になったとき」に実行されます。
touch_start()は、タッチをスタートしたとき、つまり「タッチしたとき」に実行されます。
・反応
それぞれのイベントに対して反応が書かれています。
このスクリプトではどちらも、llSay(0, "ほげほげ")という反応になっています。
llSay()は、「言う」すなわち"ほげほげ"の部分に書かれた内容をオブジェクトが発言する命令です。
さて、ここまでわかると、このスクリプトの動きがわかるはずです。
ステート、イベント、そして反応を踏まえながら考えてみましょう。
まずステートについては一つしかないので悩むことは何もありません。
このスクリプトは初期状態から変化することがなく、初期状態のまま完結しています。
イベントは2つ。
「この状態になったとき」と「タッチしたとき」です。
「この状態になったとき」の「この状態」とは何かと言うと、当然defaultステートのことです。
つまりこのイベントは、「defaultステートになったとき」のことです。
このスクリプトは初期状態のdefaultステートしかありませんから、このイベントが発生するのは「一番最初にスクリプトが動いた時」だけです。
そのときにどんな反応をするのか。
llSay(0, "Hello, Avatar!");と書いてあります。
この命令を正確に説明すると、
「チャットチャンネル0番で"Hello, Avatar!"と発言する」
ということになります。
チャットチャンネルについてはとりあえず省略しますが、0番チャンネルでの発言というのは通常チャットと同じ発言になるということだけ知っておいて下さい。
イベントと反応をあわせて考えると、
「一番最初にスクリプトが動いた時」>「"Hello, Avatar!"と発言する」
ということになります。
次のイベントも見てみましょう。
「タッチしたとき」のほうは、文字通りアバターがオブジェクトをタッチしたときのことです。
touch_start()の()の中に書いてある「integer total_number」については今は気にしなくていいです。
こういう風に書くんだと覚えておきましょう。
反応は先ほどと同じくllSayです。
今度はllSay(0, "Touched.");と書いてありますので、
「チャットチャンネル0番で"Touched."と発言する」
ということになります。
つまり2番目のイベントと反応は、
「アバターにタッチされたとき」>「"Touched."と発言する」
ということです。
本当にそうなってるのか?
スクリプトがどういう動作をするのかわかったところで、実際に試してみましょう。
まずは、スクリプトの編集ウインドウの下のほうにある、「リセット」のボタンを押してください。
このボタンを押すとスクリプトがリセットされます。
リセットされるということは、初期状態に戻りますので、一番目に書いてあったイベント、
「一番最初にスクリプトが動いた時」
が発動するはずです。
このイベントが発動すると、
「"Hello, Avatar!"と発言する」
はずですので、チャット欄をよく見ておきましょう。
リセットしたときに"Hello, Avatar!"とオブジェクトが言っていれば予想通りの動きです。
次に、オブジェクトにタッチしてみます。
editウインドウが開いたままだとうまくタッチできませんので、一度editモードを終了して下さい。
それからオブジェクトにタッチしてみます。
2番目に書いてあったイベントの「アバターにタッチされたとき」が発動して、「"Touched."と発言する」はずです。
タッチしたときに"Touched."とオブジェクトが言っていることを確認しましょう。
今回は実際にスクリプトのコードを見て、その構造を理解し、どんな動きをするのか考えてみました。
フリーのスクリプトなどを入手する機会もあるかと思いますが、その動きを理解するときも同様の思考手順を踏みます。
さて、具体的にスクリプトを作る方法がわかりましたので、次回はオリジナルのスクリプトを作成するところまで進んでみたいと思います。
何かご意見・ご感想などありましたら遠慮なくコメントして下さいませ(^^
・・・的外れじゃないかと不安でたまらなくなってくるのでw
衝突判定(スクリプト初級第二十三回)
カメラ制御(スクリプト初級第二十二回)
デモ商品を作ろう(スクリプト初級第二十一回)
センサーを使おう(スクリプト初級第二十回)
ステートのこと(スクリプト初級第十九回)
rez!(スクリプト初級第十八回)
カメラ制御(スクリプト初級第二十二回)
デモ商品を作ろう(スクリプト初級第二十一回)
センサーを使おう(スクリプト初級第二十回)
ステートのこと(スクリプト初級第十九回)
rez!(スクリプト初級第十八回)
Posted by Miz at 20:12│Comments(10)
│初級スクリプト
この記事へのコメント
第1回から順に読ませて頂いてます。
日本語でのスクリプトの説明がなかなか見つからないのでありがたいです^^。
日本語でのスクリプトの説明がなかなか見つからないのでありがたいです^^。
Posted by もに at 2007年04月12日 23:40
>もにさん
初めまして(^^
lslの使い方が広まれば、それだけ面白いものがSLに増えるに違いないと勝手に思い込んでいます。
多少なりともlsl習得の参考になれば幸いです(^^
初めまして(^^
lslの使い方が広まれば、それだけ面白いものがSLに増えるに違いないと勝手に思い込んでいます。
多少なりともlsl習得の参考になれば幸いです(^^
Posted by Miz at 2007年04月13日 00:55
はじめまして。
親切丁寧な解説なのでとても勉強になります。
これからもスクリプト講座楽しみにしております<(_ _)>ペコリ
親切丁寧な解説なのでとても勉強になります。
これからもスクリプト講座楽しみにしております<(_ _)>ペコリ
Posted by porsche at 2007年04月13日 01:19
>porscheさん
はじめまして。
ありがとうございます、お役に立つなら嬉しく思います。
なるべく実用的な例を詳細に紹介していくつもりではいますが、わかりにくいところなどあれば遠慮なくコメント下さい~。
はじめまして。
ありがとうございます、お役に立つなら嬉しく思います。
なるべく実用的な例を詳細に紹介していくつもりではいますが、わかりにくいところなどあれば遠慮なくコメント下さい~。
Posted by Miz at 2007年04月13日 10:06
追加情報:
実際にスクリプトの動きを確かめようとしたけれども、何故か動作しない・・・という質問を何人かの方からいただきました。
コードが正しいにも関わらず動作しない原因として、以下のようなものが考えられます。
・スクリプト禁止エリアである
画面の上のメニューバーのところに、書類に赤い禁止マークがついている土地は、スクリプトの実行が禁止されているエリアです。
この設定は土地に対して行われるものですので、利用者にはどうすることもできません。
スクリプトが禁止されていない土地で試してみて下さい。
・スクリプトが無効になっている
スクリプト編集画面の左下にあるチェックボックスにチェックがついていない場合は、そのスクリプトは無効状態です。
チェックボックスにチェックを入れれば動くようになります。
その他、ときどきラグのせいでスクリプトの実行が異様に遅くなることもあります。
実際にスクリプトの動きを確かめようとしたけれども、何故か動作しない・・・という質問を何人かの方からいただきました。
コードが正しいにも関わらず動作しない原因として、以下のようなものが考えられます。
・スクリプト禁止エリアである
画面の上のメニューバーのところに、書類に赤い禁止マークがついている土地は、スクリプトの実行が禁止されているエリアです。
この設定は土地に対して行われるものですので、利用者にはどうすることもできません。
スクリプトが禁止されていない土地で試してみて下さい。
・スクリプトが無効になっている
スクリプト編集画面の左下にあるチェックボックスにチェックがついていない場合は、そのスクリプトは無効状態です。
チェックボックスにチェックを入れれば動くようになります。
その他、ときどきラグのせいでスクリプトの実行が異様に遅くなることもあります。
Posted by Miz at 2007年04月16日 15:28
大変参考になってます。
ありがとうございます。
ありがとうございます。
Posted by やも at 2007年04月17日 23:54
>やもさん
コメントありがとうございます。
お役に立ててなによりです(^^
コメントありがとうございます。
お役に立ててなによりです(^^
Posted by Miz at 2007年04月18日 09:29
はじめまして楽しく読ませていただいてます。初歩的な質問ですいませんが,{の後にスペースをいれずに,続けて打ち込んではいけないんでしょうか?一行開いてたりするのは何か意味があるんですか?
Posted by すみ at 2007年05月11日 22:12
>すみさん
はじめまして。
{}の部分は自分の見やすいように書いて問題ありません。
デフォルトのスクリプトでは、
state_entry()
{
llSay(0, "Hello, Avatar!");
}
こうですが、私は以下のように書くほうが好みです。
state_entry() {
llSay(0, "Hello, Avatar!");
}
また、少々乱暴ですが、一行に書いてしまうこともできます。
state_entry() {llSay(0, "Hello, Avatar!");}
スペースを入れたり、改行したりするのは全て見やすくするためですので、すみさんの見やすい形で書くのが一番です(^^
イベントや反応の部分を字下げして書くのも同じ理由です。
全ての行を左詰めで書いてもスクリプトの動作自体には問題はありません。
かなり見づらくなりますが(^^;
はじめまして。
{}の部分は自分の見やすいように書いて問題ありません。
デフォルトのスクリプトでは、
state_entry()
{
llSay(0, "Hello, Avatar!");
}
こうですが、私は以下のように書くほうが好みです。
state_entry() {
llSay(0, "Hello, Avatar!");
}
また、少々乱暴ですが、一行に書いてしまうこともできます。
state_entry() {llSay(0, "Hello, Avatar!");}
スペースを入れたり、改行したりするのは全て見やすくするためですので、すみさんの見やすい形で書くのが一番です(^^
イベントや反応の部分を字下げして書くのも同じ理由です。
全ての行を左詰めで書いてもスクリプトの動作自体には問題はありません。
かなり見づらくなりますが(^^;
Posted by Miz at 2007年05月11日 23:09
そうだったんですか(>_<)ありがとうございます。これを見てがんばって上達しますねo(^-^)o
Posted by すみ at 2007年05月12日 06:11