
2009年02月01日
タッチしたらしゃべる
住人のknockさんが作ってたワンコのおうち
タッチしたらチャットに「touched.」ってでました

触ったら「さわったよ」と
犬小屋が喋っています
ちなみにこれは立派なスクリプト
プリムの生成をして「コンテンツ」タブを開き
「新しいスクリプト」をクリックすると出来上がるデフォルトのスクリプトです

出来上がった「New Script」をダブルクリックすると
こんな編集画面がでてきます

すべてはこのスクリプトが基本
以下、ざっくり解説です
*********************************************
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, " Touched. " );
}
}
*********************************************
【default】
リンデンスクリプトのはじまりを意味します
例外もありますが、ここから以降がスクリプトとして動いていきます
【state_entry】
スクリプトの「最初の状態」を意味します
NewScriptを生成した際「Hello,Avator! 」とチャットで発言されるのは
その状態が「最初の状態」にあるから
ここでは「Hello,Avator! 」と発言されていますが
ほかにもこのスクリプト(プリム)がどんな性質であるか
記述する場合にも使われれます
【touch_start】
文字通り「タッチしたらスタート」です
この「タッチしたら〜」はイベントと呼ばれ
「装着したら〜」「ぶつかったら〜」「お金を払ったら〜」
スクリプトの動くきっかけになります
【llSay( 0, " Hello,Avator! " );】
llSayは日本語で言うところの「動詞」にあたる部分です
ここではチャットで発言させるllSayが使われていますが
この赤文字にあたる「ll」のついた物を関数といいます
ちなみにこのllSay( 0, " Hello,Avator! " );
ざっくり訳すと「0チャンネルで、Hello,Avator! と発言さす」
ということになります
「0チャンネル」とは通常チャットで使われるチャンネル
このチャンネルについては必要に応じて説明しますが
みんながチャットでみえるよう喋らせたいときは通常「0」を指定します
さて、今回 knockさんが目指していたのは
「犬小屋をタッチしたらワンという」というスクリプトをいれること
いまの状態はタッチしたら「Touched.」といいますので
単純にこの部分を「ワン」に入れ替えてしまいます
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, " ワン! " );
}
}
じつはこれは間違いです
では何が間違い?
正解は " ワン! "
スクリプトに日本語が使えないからです
しかしエンコードという方法を用いて日本語を表示可能にします
SL内でもできなくはありませんが今回はこちらのサイトを使い
日本語をエンコードしていきます
urlencode.net
左のマスに日本語を
「オプション」で必ず「UTF-8」を選択して
「エンコード」ボタンを押します
すると右のマスに暗号のような半角英数の文字列が出てきます
ワン! → %E3%83%AF%E3%83%B3%EF%BC%81
エンコードするとこんな結果になりました
では以下 貼付けてみます
*********************************************
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, llUnescapeURL(" %E3%83%AF%E3%83%B3%EF%BC%81 " ));
}
}
*********************************************
エンコードした文字列をスクリプトに読ませるため
llUnescapeURL( )を追加してやりました
編集画面の「保存」をクリックします
「Compile successful,saving...」 ・・・保存中
「Save complete」 ・・・保存成功
これで完了です
【エラーが出る場合はここを疑え】
・スクリプトはみな{ }( ) でくくられます
括弧がきちんと閉じられないとエラーが出ます
・関数のあとにある「;」は大事
編集中に消したりしているとエラーになります
・スクリプトに日本語は使えません
すべて半角英数字で記述します。全角の( )や句読点もエラーの対象です
・文章や文字列は必ずダブルクォーテーション「" "」で囲みます
スクリプトでは文字列と整数はサルと鯛くらい種別が異なります
文字列は必ずダブルクォーテーション「" "」でしっかり囲ってやります
ここまでできればいろんな物に応用可能です
おもわぬ物におもわぬ発言をさせて遊びましょう
タッチしたらチャットに「touched.」ってでました

触ったら「さわったよ」と
犬小屋が喋っています
ちなみにこれは立派なスクリプト
プリムの生成をして「コンテンツ」タブを開き
「新しいスクリプト」をクリックすると出来上がるデフォルトのスクリプトです

出来上がった「New Script」をダブルクリックすると
こんな編集画面がでてきます

すべてはこのスクリプトが基本
以下、ざっくり解説です
*********************************************
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, " Touched. " );
}
}
*********************************************
【default】
リンデンスクリプトのはじまりを意味します
例外もありますが、ここから以降がスクリプトとして動いていきます
【state_entry】
スクリプトの「最初の状態」を意味します
NewScriptを生成した際「Hello,Avator! 」とチャットで発言されるのは
その状態が「最初の状態」にあるから
ここでは「Hello,Avator! 」と発言されていますが
ほかにもこのスクリプト(プリム)がどんな性質であるか
記述する場合にも使われれます
【touch_start】
文字通り「タッチしたらスタート」です
この「タッチしたら〜」はイベントと呼ばれ
「装着したら〜」「ぶつかったら〜」「お金を払ったら〜」
スクリプトの動くきっかけになります
【llSay( 0, " Hello,Avator! " );】
llSayは日本語で言うところの「動詞」にあたる部分です
ここではチャットで発言させるllSayが使われていますが
この赤文字にあたる「ll」のついた物を関数といいます
ちなみにこのllSay( 0, " Hello,Avator! " );
ざっくり訳すと「0チャンネルで、Hello,Avator! と発言さす」
ということになります
「0チャンネル」とは通常チャットで使われるチャンネル
このチャンネルについては必要に応じて説明しますが
みんながチャットでみえるよう喋らせたいときは通常「0」を指定します
さて、今回 knockさんが目指していたのは
「犬小屋をタッチしたらワンという」というスクリプトをいれること
いまの状態はタッチしたら「Touched.」といいますので
単純にこの部分を「ワン」に入れ替えてしまいます
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, " ワン! " );
}
}
じつはこれは間違いです
では何が間違い?
正解は " ワン! "
スクリプトに日本語が使えないからです
しかしエンコードという方法を用いて日本語を表示可能にします
SL内でもできなくはありませんが今回はこちらのサイトを使い
日本語をエンコードしていきます
urlencode.net
左のマスに日本語を
「オプション」で必ず「UTF-8」を選択して
「エンコード」ボタンを押します
すると右のマスに暗号のような半角英数の文字列が出てきます
ワン! → %E3%83%AF%E3%83%B3%EF%BC%81
エンコードするとこんな結果になりました
では以下 貼付けてみます
*********************************************
default
{
state_entry( )
{
llSay( 0, " Hello,Avator! " );
}
touch_start(integer total_number)
{
llSay( 0, llUnescapeURL(" %E3%83%AF%E3%83%B3%EF%BC%81 " ));
}
}
*********************************************
エンコードした文字列をスクリプトに読ませるため
llUnescapeURL( )を追加してやりました
編集画面の「保存」をクリックします
「Compile successful,saving...」 ・・・保存中
「Save complete」 ・・・保存成功
これで完了です
【エラーが出る場合はここを疑え】
・スクリプトはみな{ }( ) でくくられます
括弧がきちんと閉じられないとエラーが出ます
・関数のあとにある「;」は大事
編集中に消したりしているとエラーになります
・スクリプトに日本語は使えません
すべて半角英数字で記述します。全角の( )や句読点もエラーの対象です
・文章や文字列は必ずダブルクォーテーション「" "」で囲みます
スクリプトでは文字列と整数はサルと鯛くらい種別が異なります
文字列は必ずダブルクォーテーション「" "」でしっかり囲ってやります
ここまでできればいろんな物に応用可能です
おもわぬ物におもわぬ発言をさせて遊びましょう