
2009年02月07日
フローティングテキスト
物作り教室第3回目は「フローティングテキスト」
文字の書けないSLでは
フローティングテキストなど文字を表示できるスクリプトは必須
というわけで今回も初心者の方がかんたんに扱えるよう
こんなスクリプトを作成しました

これですべてです
【 llSetText(text,color,1.0); 】
text → 文字
color → 色
1.0 → 透明度 (0.0にすると見えない)
ほんとうにこれだけ
でもかんたんすぎるので解説すると
プログラミングには「型」というものが存在し
以下のように使い分けしているのです
「integer」・・・整数
「float」・・・小数点のつく数値(浮動小数)
「string」・・・文字列
「list」・・・複数リストとしてデータを扱う
「key」・・・アバターやプリムの識別
「vector」・・・float型を3つ集めて位置、色、速度などを表す
「rotation」・・・ float型4つ
最初に出ている「string text = "ここにメッセージを書く";」の「string」
これは" "で囲った部分が「文字でっせ」と型を指定しているわけです
次に出ている「vector color = <1.0,0.0,0.0>;」の「vector」
これはざっくり「3色を混ぜて色を表現してる」という意味合いでしょうか
各値が小数点を扱うfloatなのは
0.5とか0.8とかにするとまたも微妙な色合いが表現できるため
試しにいろいろ数値をかえると思いもよらぬ色調が出来上がります
今回はわかりやすいよう最初の行に文字を色を指定していますが
llSetText( " test " ,<1.0,0.0,0.0>,1.0);
こんなかんじで直接いれても同じ結果が得られます
日本語を扱う際は前回「タッチしたらしゃべる」でやったとおなじ
llUnescapeURL(" ")とエンコードした文字を入れるようにしてください
文字の書けないSLでは
フローティングテキストなど文字を表示できるスクリプトは必須
というわけで今回も初心者の方がかんたんに扱えるよう
こんなスクリプトを作成しました

これですべてです
【 llSetText(text,color,1.0); 】
text → 文字
color → 色
1.0 → 透明度 (0.0にすると見えない)
ほんとうにこれだけ
でもかんたんすぎるので解説すると
プログラミングには「型」というものが存在し
以下のように使い分けしているのです
「integer」・・・整数
「float」・・・小数点のつく数値(浮動小数)
「string」・・・文字列
「list」・・・複数リストとしてデータを扱う
「key」・・・アバターやプリムの識別
「vector」・・・float型を3つ集めて位置、色、速度などを表す
「rotation」・・・ float型4つ
最初に出ている「string text = "ここにメッセージを書く";」の「string」
これは" "で囲った部分が「文字でっせ」と型を指定しているわけです
次に出ている「vector color = <1.0,0.0,0.0>;」の「vector」
これはざっくり「3色を混ぜて色を表現してる」という意味合いでしょうか
各値が小数点を扱うfloatなのは
0.5とか0.8とかにするとまたも微妙な色合いが表現できるため
試しにいろいろ数値をかえると思いもよらぬ色調が出来上がります
今回はわかりやすいよう最初の行に文字を色を指定していますが
llSetText( " test " ,<1.0,0.0,0.0>,1.0);
こんなかんじで直接いれても同じ結果が得られます
日本語を扱う際は前回「タッチしたらしゃべる」でやったとおなじ
llUnescapeURL(" ")とエンコードした文字を入れるようにしてください
2009年02月04日
ポーズボール
住人のCranberryさんがソファーを作ってました
ワインレッドの重厚感漂うソファーなので
これはかわいくsitは似合わない
ちょっと大人っぽく座ってみようじゃないかと
スクリプトをいれることになりました
「英語をみてたら眠くなる」先週ある住人さんが
そうつぶやき落ちていった経緯を踏まえ
今回はひとまず名前を入れ替えるだけで座れるポーズボールを
スクリプト工場にて無料配布することにしました
ゲットしたら持ち物から取り出し
スクリプトを開きます

「sit」というのは全アバターがデフォルトで持っているアニメーション
なのでこのスクリプトだけでもエラーは出ず座れますが
目標とするセクシー座りをするには他のポーズアニメーションが必要です
Freebieショップでタダでもらえるポーズで十分
なんか適当にもらってきた物を用意して
string animation_name = "sit"; の「sit」部分を
そのアニメーション名で書き換えます
例:string animation_name = "sitting chair 01";
ちなみに今回Cranberryさんが「座ったらしゃべるようにしたいねん」
そういっていたメッセージは2段目
string text = "こんにちわ"; の「こんにちわ」部分を書き換えるだけで実行できます
アニメーションをおなじプリム内にいれ
スクリプトを保存して完了です

配布はここ /express/64/227/0/
ワインレッドの重厚感漂うソファーなので
これはかわいくsitは似合わない
ちょっと大人っぽく座ってみようじゃないかと
スクリプトをいれることになりました
「英語をみてたら眠くなる」先週ある住人さんが
そうつぶやき落ちていった経緯を踏まえ
今回はひとまず名前を入れ替えるだけで座れるポーズボールを
スクリプト工場にて無料配布することにしました
ゲットしたら持ち物から取り出し
スクリプトを開きます

「sit」というのは全アバターがデフォルトで持っているアニメーション
なのでこのスクリプトだけでもエラーは出ず座れますが
目標とするセクシー座りをするには他のポーズアニメーションが必要です
Freebieショップでタダでもらえるポーズで十分
なんか適当にもらってきた物を用意して
string animation_name = "sit"; の「sit」部分を
そのアニメーション名で書き換えます
例:string animation_name = "sitting chair 01";
ちなみに今回Cranberryさんが「座ったらしゃべるようにしたいねん」
そういっていたメッセージは2段目
string text = "こんにちわ"; の「こんにちわ」部分を書き換えるだけで実行できます
アニメーションをおなじプリム内にいれ
スクリプトを保存して完了です

配布はここ /express/64/227/0/
2009年02月02日
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」 ・・・保存成功
これで完了です
【エラーが出る場合はここを疑え】
・スクリプトはみな{ }( ) でくくられます
括弧がきちんと閉じられないとエラーが出ます
・関数のあとにある「;」は大事
編集中に消したりしているとエラーになります
・スクリプトに日本語は使えません
すべて半角英数字で記述します。全角の( )や句読点もエラーの対象です
・文章や文字列は必ずダブルクォーテーション「" "」で囲みます
スクリプトでは文字列と整数はサルと鯛くらい種別が異なります
文字列は必ずダブルクォーテーション「" "」でしっかり囲ってやります
ここまでできればいろんな物に応用可能です
おもわぬ物におもわぬ発言をさせて遊びましょう