セカンドライフプラネット

セカンドライフのスクリプト言語(LSL)をプラネットします。3DCG で物体をプラネットしたりもします。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

製品(キャンピングタイマー)をつくりました

以前、キャンピングタイマーのプロトタイプを制作しました。今回、それを製品化しました。

製品とプロトタイプとの大きな違いは、ユーザーインターフェース(UI)です。プロトタイプでは極端な話としてはUI がなくてもよいのですが、製品版では一転して洗練されたUI が必要となります。

UI を作成するには、その設計図となる「仕様」を決める必要があります。

UI は各言語に依存しています。LSL(リンデンスクリプト言語)では、ダイアログなど限られたUI 表現を用います。どんなに優れたUI を考えても、LSL で作成できなければ採用されません。

ここで、キャンピングタイマーで採用したUI について記述します。これは、筆者が現時点で、LSL を用いたUI の一つの解だと考えています。もちろん、最良ではありませんが・・・。

キャンピングタイマー Ver.1.0 ブレスレットタイプ
(Camping Timer Ver.1.0 Bracelet Type)

販売先(2007.07.22 現在):
巣鴨(sugamo)の月見神社、株(kabu)のフリマ、豊島区(toshimaku)の白屋

月見神社はアイピロさんのRookei’s Cafe の真ん前です。今日、Rookei’s Cafe に行くと、かわいいアバターのアイピロさんとセカンドライフウォーカーのにわとりさん、月見神社管理人さん、パソコンにお詳しい方、リアル巣鴨に住んでいた方、たまたま立ち寄られた方などなどがいらっしゃいました。とても楽しいカフェです。

価格:100L$

セカンドライフ スクリプト キャンプ

製品仕様(基本)
キャンピングのときに便利なタイマーとする
一定時間ごとに繰り返し、音とメッセージで知らせる
音もれゼロ
 音とメッセージはユーザー以外認識できない
サイズ変更可能
 ブレスレットの名前・位置・サイズ等が変更可能
クリックのみの簡単操作
 タイマーをクリックすることで、そのときに必要なUI を表示する
時間設定可能
 ダイアログ表示により、時間設定が選べる(5分, 10分, 15分, 20分, 30分)
経過時間表示
 クリックすると経過時間(00:00:00)を表示する

セカンドライフ スクリプト キャンプ

UI を設計する際に、ユーザーの予期せぬ使い方もある程度想定して設計します。

製品仕様(拡張)
タイマーのオン・オフが分かるように色を変える
 タイマーがオフのときは光沢シルバーとし、タイマーがオンのときは光沢イエローとする
オーナーを認識する
 オーナー以外のアバターによるタイマー操作は不可とする
キャンピング途中でシステムダウンした場合の処理
 復帰した際に初期化されタイマーオフとなる
タイマーがオンのときに持ち物にtake した場合の処理
 次にタイマーを装着した際に、初期化されタイマーオフとなる
タイマーがオンの状態で装着し続けた場合の処理
 2 週間経過した時点で、自動的にタイマーをオフにする
通信チャンネルが重複した場合の処理
 チャンネルは1000以上1 億以内の整数からランダムに選択する。装着の度にチャンネルを切り替える。万が一(億が一!)混線した場合、タイマーを装着しなおすとチャンネルが切り替わる。


「ものは試しです」 実際に購入して動かしてみてください。きれいに動いています。
・・・最後は宣伝でした(笑)

スポンサーサイト

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/22(日) 22:47:45|
  2. ロケット改造
  3. | トラックバック:1
  4. | コメント:1

スクリプト超初心者講座4(16進数、基数変換)

リンデンスクリプト言語の超初心者向けの講座、4 回目は16 進数と基数変換についてです。

LSL 超初心者講座(LSL-LSB:LSL lecture for super beginners)

前回、2 進数についてお話ししました。今回は、2 進数の親戚のような16 進数について解説し、その後、基数変換についてお話ししたいと思います。

16進数
使用文字
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F] の16 種類

桁(けた)
1, 16, 256, 4096, 65536, 1048576, ・・・
よびかたは、特にありません

これはまた、以下のように記述できます。
160, 161, 162, 163, 164, 165, ・・・

基数
各桁が16 の何乗といった形に表されるので、この16 を基数とよびます。16 進数の基数は16 です。

数の数え方
0 から始まり、1,2,3、4、5、6、7、8、9 と数えていきます。9 の次の数は、アルファベットの「A」です。その次は、「B」と「F」まで数えます。「F」の次の数は、新たに使用する文字がないので、桁が上がり2 つの文字を使用し、10 と表記します。



基数変換
10進数、2進数、16進数と見てきたように、数え方にはいろいろな進数がありました。各進数間での数の変換を基数変換といいます。

基数変換表
各基数間での変換を表にまとめたものを基数変換表といいます。

セカンドライフ スクリプト 基数変換表

ここで、基数の異なる数を同時に扱う場合、数に括弧をつけて右下に小さく基数を表記します。

例えば、
    (100)2  は2 進数の 100 です。
    (9)10  は10 進数の 9 のことです。

基数変換表を見ると、10 進数の 5、すなわち(5)10 を、2 進数に基数変換すると、(101)2 となることが分かります。逆に、(101)2  を10 進数に基数変換すると、(5)10 となることも分かります。

基数変換しても、物の数に変化はないことに注意してください。以下に例を示します。

リンゴが5 個ある状態

セカンドライフ スクリプト 2進数

この状態を、10 進数で表現すると、「リンゴが(5)10 個ある」です。2 進数で表現すると、「リンゴが (101)2 個ある」となります。

(5)10 と(101)2 とは、同じ数を表しています。すなわち、基数変換で物の数が変化することはありません。



人間とコンピューターとを隔てる高い壁
コンピューター(ノイマン型)はその数学的基礎が2 進数です。一方、人間は10 進数です。10 進数と2 進数の間には高い壁が存在します。それはそのまま「人間」と「コンピューター」を隔てる高い壁となっています。

セカンドライフ スクリプト 基数変換

基数変換においても、10 進数と2 進数の間では、計算を行う必要があります

一方、2 進数と16 進数は親戚の関係にあり、2 進数と16 進数間の基数変換では、計算を行う必要はありません


基数変換(10 進数 → 2 進数)
以下の手順で基数変換します。なお、手順はここで紹介する以外にも複数存在します。

2 進数の各桁が以下のようになっていることを利用します。
(1)10 = (1)2
(2)10 = (10)2
(4)10 = (100)2
(8)10 = (1000)2
(16)10 = (10000)2
(32)10 = (100000)2
(64)10 = (1000000)2
(128)10 = (10000000)2

2 進数の桁「ニー、ヨン、パー、イチロク、サンニー、ロクヨン、イチニッパー、・・・」は暗記しましたか?

1.対象となる数を、2 進数の各桁で構成されるように分解する。
2.分解した各々の数を、2 進数に基数変換する。
3.2 進数に基数変換した各々の数を合成(足し算)する。

手順を文章にしてもよく分からないと思いますので、例を示します。

例1.(76)10 を2 進数に基数変換しなさい。

1.(76)10 を2 進数の各桁に分解します。

  (76)10   =   (64)10   +   (8)10   +   (4)10


分解方法は以下のようにします。
・対象となる数(76)10に一番近くかつ小さい2 進数の桁を探します。(64)10 ですね。
・(76)10 から(64)10 を引きます。
  (76)10   =   (64)10   +   (12)10
・次に、(12)10 に一番近くかつ小さい2 進数の桁を探します。(8)10 ですね。
・(12)10 から(8)10 を引きます。
  (76)10   =   (64)10   +   (8)10   +  (4)10
・(4)10  は、2 進数の桁なので、対象となる数の分解は終了です。


2.分解した各々の数を、2 進数に基数変換します。
  (76)10  =  (1000000)2  +  (1000)2  +  (100)2

3.2 進数に基数変換した各々の数を合成(足し算)します。
足し算する各々の数は2 進数の桁なので、足し算することで桁上がりすることはありません。

セカンドライフ スクリプト 2進数
結局、答えは(1001100)2 です。


基数変換(2 進数 → 10 進数)

ビットが立っている
2 進数の場合、「1」となっている状態を「ビットが立っている」といいます。一方、「0」のことを「ビットが座っている」とかいったような言い方はありません。

例えば、(1001)2 では、一桁目(右端)と四桁目(左端)はビットが立っています。

2 進数から10 進数へは、以下の手順で基数変換します。なお、手順はここで紹介する以外にも複数存在します。

1.対象となる数を、ビットが立っている各桁に分解する。
2.分解した各桁を10 進数に基数変換する。
3.基数変換した各数を足し算する。

ここでも、例示します。
例1.(10100)2 を10 進数に基数変換せよ。

1.(10100)2 を、ビットが立っている各桁に分解する。
  (10100)2  =  (10000)2  +  (100)2

2.分解した各桁を10 進数に基数変換する。
  (10100)2  =  (16)10  +  (4)10

3.基数変換した各数を足し算する。
  (10100)2  =   (20)10


基数変換(2 進数 → 16 進数)
以下の手順で変換します。計算は一切必要ありません。

1.対象となる数を、右から四桁毎に分解する。
2.基数変換表を用いて、各四桁の2 進数を、16 進数に変換する。
3.基数変換した数をそのまま並べる。

例1.(10010101)2 を16 進数に基数変換せよ。

1.(10010101)2 を右から四桁で区切る。間に線を入れる。
セカンドライフ スクリプト 基数変換

2.基数変換表を用いる

セカンドライフ スクリプト 基数変換


3.基数変換した数をそのまま並べる。間の線を取り去る。

セカンドライフ スクリプト 基数変換
答えは、(95)16 です。


基数変換(16 進数 → 2 進数)
以下の手順で変換します。計算は一切必要ありません。

1.対象となる数を、右から一桁毎に分解する。
2.基数変換表を用いて、各一桁の16 進数を、2 進数に変換する。
3.基数変換した数をそのまま並べる。

例1.(6C)16 を2 進数に基数変換せよ。

1.一桁毎に線を入れる。

セカンドライフ スクリプト 基数変換


2.各桁の16 進数を、2 進数に変換する。基数変換表を用いる。

セカンドライフ スクリプト 基数変換


3.線をとる。

セカンドライフ スクリプト 基数変換
答えは、(01101100)2 です。


確認
●基数変換表を作成してください。何も見ないで再現できることを確認してください。
●(255)10 を2 進数に変換してください。計算が必要なことを確認してください。
●(10000000)2 を16 進数に変換してください。計算が必要ないことを確認してください。
●(255)10 を16 進数に変換してください。計算が必要なことを確認してください。
●(E8)16 を2 進数に変換してください。計算が必要ないことを確認してください。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/17(火) 19:52:31|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座3(2進数)

リンデンスクリプト言語の超初心者向けの講座、3回目は2進数についてです。

LSL 超初心者講座(LSL-LSB:LSL lecture for super beginners)

リンデンスクリプト言語の場合、実は、2進数の知識がなくてもスクリプトを作成することは可能です。そのため、パスしてもよかったのですが、プログラマーであれば2進数は理解しておかないとと思い、記述することにしました。

LSL を深く理解する上でも、2進数の知識は有用です。知っていて損はないです。

2進数に入る前に、10進数についての簡単なおさらいをします。

10進数
使用文字
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] の10 種類

桁(けた)
1, 10, 100, 1000, 10000, 100000, 1000000, 100000000, ・・・
イチ、ジュー、ヒャク、セン、マン、ジュマン、ヒャクマン、センマン、イチオク、・・・

これはまた、以下のように記述できます。
100, 101, 102, 103, 104, 105, 106, 107,・・・

ここで、例えば102 は10 の2 乗のことで、10×10 と10 を2  回かけ算することです。

基数
各桁が10 の何乗といった形に表されるので、この10 を基数とよびます。10 進数のは基数は10 です。

数の数え方
0 から始まり、1,2,3、4、5、6、7、8、9 と数えていきます。9 の次の数は、新たに使用する文字がないので、桁が上がり2 つの文字を使用し、10 と表記します。「イチ・ゼロ」を「ジュー」とよびます。


2進数
使用文字
[0, 1] の2 種類

桁(けた)
1, 2,4,8,16,32,64,128,256,512,1024,・・・
ニー、ヨン、パー、イチロク、サンニー、ロクヨン、イチニッパー、ニゴロ、ゴーイチニー、イチマルニーヨン、・・・
これは、何度も暗唱して確実に覚えてください!

これはまた、以下のように記述できます。
20, 21, 22, 23, 24, 25, 26, 27,・・・

ここで、例えば23 は2 の3 乗のことで、2×2×2 と2 を3  回かけ算することです。

基数

各桁が2 の何乗といった形に表されるので、この2 を基数とよびます。2 進数のは基数は2 です。

数の数え方
0 から始まり、1 と数えていきます。1 の次の数は、新たに使用する文字がないので、桁が上がって2 つの文字を使用し、10 と表記します。10 は「イチ・ゼロ」とよびます。2 進数では、使用する文字が2 種類しかないので、10 進数の場合と比べて頻繁に桁が上がります。


下図のようなリンゴの状態を表す数

セカンドライフ スクリプト 2進数

10 進数では、「リンゴが5(ゴ)個あります」といい、2 進数では、「リンゴが101(イチ・マル・イチ) 個あります」といいます。

2 進数の基本パターン
2 進数の数の数え方には基本パターンがあります。箱に石を入れる話を思い出してください。空箱に右から左へと順序よく石を入れていきます。2 進数なので一つの箱に石は一つしか入れられません。

セカンドライフ スクリプト 2進数

2 進数の数の増え方を以下に述べます。箱と石を思い浮かべで思考実験してみてください。少し複雑ですが、がんばってパターンを理解してください。

1. 最初、全ての箱に石が入っていません。
2. 次に、右端の箱に石を入れます。
3. 既に、右端の箱に石が入っているので、右から2 番目の箱に石を入れて、右端の箱から石を取り出します。
4.   2. を行います。
5. 既に、右端から2 番目までの箱に石が入っているので、右から3 番目の箱に石を入れて、右端から2 番目までの箱に入っている石を取り出します。
6.   2. ~4. を行います。
7. 既に、右端から3 番目までの箱に石が入っているので、右から4 番目の箱に石を入れて、右端から3 番目までの箱に入っている石を取り出します。
8.   2.~6. を行います。

基本パターンが理解できたら、石が入っていない箱を 「0」に、石が入っている箱を 「1」に置き換えます(下図参照)

セカンドライフ スクリプト 2進数

2進数と10進数との対応表
今までの話しを総合すると以下のような表となります。

セカンドライフ スクリプト 2進数

黄色でぬってあるところは桁上がりしているところです。

基数の異なる数を同時に扱う場合、数に括弧をつけて右下に小さく基数を表記します。例えば、(100)は2 進数の100 です。(9)10 は10 進数の9 のことです。

対応表を全部覚えるのは大変なので、まずは桁上がりしているところだけを覚えましょう。ニー、ヨン、パー、イチロク、サンニー、・・・です。

(2)10 = (10)2
(4)10 = (100)2
(8)10 = (1000)2
(16)10 = (10000)2


確認
●2 進数と10 進数との対応表を、(0)10から(15)10 まで作成してください。パターンを考えながら、何も見ないでできることを確認してください。
●上で作成した対応表において、桁上がりしているところが間違っていないか確認してください。
●2 進数と10 進数との対応表を、(16)10から(31)10まで作成してください。パターンを考えながら、何も見ないでできることを確認してください。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/15(日) 22:51:35|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプト超初心者講座(接頭語)

リンデンスクリプト言語の超初心者向けの講座、2回目は接頭後についてです。

LSL 超初心者講座(LSL-LSB:LSL lecture for super beginners)

接頭語(せっとうご)

「目的地は5kメートル先です」とか、「ペン先が0.3mメートルのボールペン」とかに使われている「k」や「m」が接頭語です。メートルは長さの単位です(前回やりました)。

ちなみに、メートルは「m」と表記するので、上記の例では通常は「5km」、「0.3mm」と表記されます。

k(キロ)
1,000 倍のことを表す接頭語は、「k」です。
1km とは、1,000m のことです。1kg とは、1,000g のことです。
1Kbit とは、1,000bit のことです。1kByte とは、1,000Byte のことです。

M(メガ)
1,000,000 倍のことを表す接頭語は、「M」です。「M」は「k」の1,000 倍です。

G(ギガ)
1,000,000,000 倍のことを表す接頭語は、「G」です。「G」は「M」の1,000倍です。「G」は「k」の1,000,000 倍です。

T(テラ)
「T」は「G」の1,000 倍のことを表す接頭語です。

P(ペタ)
「P」は「T」の1,000 倍のことを表す接頭語です。

ここまで記述するともうお分かりのように、1,000倍・1,000倍・1,000 倍と接頭語が変わっていきます。

なぜ、1,000倍で接頭語が変わるのでしょうか?

人間の情報処理能力が1,000 倍が限度なのが原因ではないでしょうか。

人間の指は10 本です。そのため、指折り数えることで、10 までの数を処理することができます。人間の直感で実感できる数字が1,000 が限界なのではないでしょうか。

例えば、一日のおこずかい(自由に使えるお金)が千円(1K円)の人がいたとします。

その人にとって、1 円以下のお金は意味があるでしょうか?たぶん、拾ってもうれしくないし、落としても気がつかないのではないでしょうか(1円を大事にしないという話ではありません)

また、その人にとって、毎日100万円(1M円)使うとはどうゆうことでしょうか?

1,000 倍というのは、それくらいの大きな違いがあり、そのため接頭語を変えると考えると納得がいきます。

10倍、100倍までは何となく実感がわくのですが、1000倍を越えると世界が変わるといった感じでしょうか。

キロ・メガ・ギガ・テラ・ペタ」、「キロ・メガ・ギガ・テラ・ペタ」、「キロ・メガ・ギガ・テラ・ペタ」と何回も繰り返し暗唱して暗記してください。


m(ミリ)
1,000 分の1倍のことを表す接頭語は、「m」です。

μ(マイクロ)
1,000,000 分の1倍のことを表す接頭語は、「μ」です。「μ」は「m」の1,000 分の1倍です。

n(ナノ)
1,000,000,000 分の1倍のことを表す接頭語は、「n」です。「n」は「μ」の1,000 分の1倍です。

p(ピコ)
1,000,000,000,000 分の1倍のことを表す接頭語は、「p」です。

f(フェムト)
1,000,000,000,000,000 分の1倍のことを表す接頭語は、「f」です。

ミリ・マイクロ・ナノ・ピコ・フェムト」、「ミリ・マイクロ・ナノ・ピコ・フェムト」、「ミリ・マイクロ・ナノ・ピコ・フェムト」と何回も繰り返して暗唱して暗記してください。

PCプログラミングやPC周辺機器のスペックによく出てくる接頭語は、大きいほうは「k」「M」「G」で、最近は「T」です。近い将来には、「P」が登場するでしょう。

確認
●100MByte のUSBメモリーに、一枚約100kByte の画像を何枚保存できるでしょうか?
●「bps」とは通信回線などのデータ転送速度の単位で、「bits per second」一秒当たりに転送する情報量(ビット数)の略です。100Mbps の光回線で、1bit のデータは理論上何秒で転送できるでしょうか?

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/14(土) 03:56:56|
  2. LSL-Tips集
  3. | トラックバック:1
  4. | コメント:0

スクリプト超初心者講座(単位)

リンデンスクリプト言語の超初心者向けの講座、初回は単位についてです。

LSL 超初心者講座(LSL-LSB:LSL lecture for super beginners)

単位(たんい)

単位は「長さの単位はメートルです」といった使われ方をします。

単位とは、何かの量を数値で表現するための基準値のことです。何かの量とは、重さとか長さとか時間などです。

単位には、歴史文化的背景、科学的発見、人体構造などいろいろな要因で、同じ量を表すにもいろいろな表現があります。

●重さの単位:グラム、トン、オンス、匁(もんめ)、など。
●長さの単位:メートル、インチ、フィート、ヤード、尺(しゃく)、など。
●時間の単位:秒、分、時間、日、など。

情報も量です。「情報量が多い」とかいいますよね。情報も量であるので単位が存在します。

●情報の単位:ビット(bit)、バイト(byte)など。


1ビットの情報とは?

質問:それでは、1ビットの情報とは、どれだけの情報量でしょうか?

回答:1ビットの情報は、「2つの状態を識別できる」情報量です。
例をあげると
・・・スイッチのONとOFF
・・・イスに座っているか立っているか
・・・箱に石が入っているか入っていないか
・・・などなど

2つの状態:箱に石が入っている状態と入っていない状態


セカンドライフ スクリプト ビット

                  箱に石が入っていない


セカンドライフ スクリプト ビット

                  箱に石が入っている


箱と石の状態を図にすると以下となります。



セカンドライフ スクリプト ビット



2ビットの情報とは?
2ビットの情報により、2個の箱に石が入っているか否かの状態を表現することができます。すなわち、2×2の4通りの状態を表すことができます。

2ビットの情報は、1ビットの情報の組み合わせ(掛け算)となります。足し算2+2ではありません。


4つの状態:右の箱にだけ石が入っている状態


セカンドライフ スクリプト ビット


箱と石の各状態を図にすると以下となります。


セカンドライフ スクリプト ビット



8ビットの情報とは?
8ビットの情報は、2×2×2×2×2×2×2×2の256通りの状態を表現できます。


セカンドライフ スクリプト 箱と石



8ビットのことを、1バイトとよびます。


1バイト =  8ビット


8ビットをひとまとめにして1バイトと名付けるには理由があります。たた、今は丸暗記してください。ビットという単位が小さすぎて不便なことが多々あるのでバイトを導入したと考えてください。

例えば、「2時間後に会いましょう」というのと、「7,200秒後に会いましょう」では全く同じ意味ですが、普段後者の言い方をすることはありません。

日常生活においては、「秒」という単位は使いずらいので、「時間」を使用します。


1時間 = 3,600秒


それと同じです。



確認:
3ビットの情報で、表現できる状態は8通りであることを確認してください。箱3個と石3個を用意し(図にしても可)、箱と石の状態が8通りあることを実験して確認してください。実験結果から、3ビットの場合、2×2×2の8通りであり、2+2+2の6通りではないことを確認してください。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/12(木) 17:20:48|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:0

スクリプトの超初心者向け講座はじめます

リンデンスクリプト言語の超初心者向けの講座をはじめます。

LSL 超初心者講座(LSL-LSB:LSL lecture for super beginners)

LSL(リンデンスクリプト言語)には、日本語訳wiki がありLSL初心者向けのチュートリアルが充実しています。また、言語体系も明確なので、他のコンピュータ言語を知っているがLSL は知らない人(LSL 初心者)にとっては簡単に習得できます。

ただ、そこのLSLチュートリアルを見ていると、他のコンピュータ言語を全く知らない、本当の初心者(超初心者)にとっては、プログラミングまでには至らないだろうなと感じます。周りを見てもLSL などのスクリプトに大変苦戦しています。

やはり、プログラミングできるようになるためには、オーソドックスなプログラミング教育を習得する必要があります。

プログラミングに王道なし!

そのために、例えばまずC言語を勉強するのも一つの方法です。確実な方法ですが、たぶん独学では大部分の人は息切れしてしまうでしょう。LSL はC よりも格段に簡単です。

LSL のwiki にあるチュートリアルを元に、「言葉」を一つ一つ解読していくのも一つの方法です(実際、全然お勧めではないのですが)。ただこの方法では情報の迷宮(wiki) に迷い込み、目的地(プログラミング)に到達できないでしょう。プログラミングは「知識:頭で理解する」ものではなく、「反応:体で覚える」ものです(本当です)。

そこで、プログラミング言語を全く知らない(超初心者)向けのLSL 講座を記述していこうと思います。

オーソドックスなプログラミング教育を、LSL プログラミング向けにアレンジします。

それにより、超初心者が最速でLSL プログラミングできるようになる(なれば良いなぁー)と考えています。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/12(木) 03:15:22|
  2. LSL-Tips集
  3. | トラックバック:0
  4. | コメント:1

滝と噴水のスクリプト

リンデンスクリプト言語にはパーティクルの機能があります。パーティクルにより、火炎や雨・雪・雲、水流や爆発などなど多彩な自然現象や人工現象を表現することができます。

以前、パーティクルを利用した「ポータブル滝」を制作した際に、店頭(Toshimaku:132,179,22)まで「ポータブル滝」を見に来られた方(アバター)がいらっしゃいました。(また遊びにきてください)

その時に、「ポータブル滝をカスタマイズ(パラメータ調整)したい」との要望がありましたので、解説したいと思います。

The Particle Lab.
全てはここから始まります。パーティクルのスクリプトをいじる人は一度は訪ねて損はないです。ここは、パーティクルの(だけの!)体験型学習システムです。大変よく出来ています。

パーティクルを用いた多彩な表現を体験することができ、多量のNotecards からsample script そのものまでタダでもらえます。

その中で、自分のイメージに近いものをもらってきて、アレンジして使えばよいと思います。

滝(Water Fall)
滝のイメージに近いスクリプトをもらってきました。黄色いパーティクルの方がオリジナルで、青いパーティクルの方はアレンジしたものです。


セカンドライフ スクリプト 滝 Waterfall


オリジナルのスクリプトは以下のとおりです。個々のパラメータについては名前から何となく内容が分かります。また、実際にパラメータを変化させ、どのように変化するかを実験すると、パラメータの内容がよく理解できると思います。いろいろとカスタマイズしてみてください。

オリジナルのスクリプトは、The Particle Lab. で入手してください(0L$)。

噴水(Fountain)
今回また、The Particle Lab.に行ってみました。以前は気が付かなかったのですが、「Fountain(噴水)」と名付けられたデモがありました。滝を作るのであれば、Fountain スクリプトをカスタマイズするのが早道かと思います。このスクリプトも入手可能です。


セカンドライフ スクリプト パーティクル particle


左から、「Fountain」「Smoke」「JetFlame」「Fire」「CandleFlame」「Bling」「Explosion」です。近くで、「Glow」「Chain」「Beam」「Blackhole」「Plasma」「Rain」「Snow」「Stream」「Ripples」「DoubleSpiralも配布されています。


セカンドライフ スクリプト 滝 Fountain


Fountain のスクリプトは以下のとおりです。みごとな噴水です。

Fountainのスクリプトは、The Particle Lab. で入手してください(0L$)。

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/08(日) 21:15:12|
  2. パーティクルドライブ
  3. | トラックバック:2
  4. | コメント:0

キャンプに便利なタイマーをつくりました

セカンドライフでのバイト(キャンプ)のときにあると便利なタイマーをつくりました。

アバターにバイト(キャンプ)させながら、自分は別の仕事をしている人は多いのでは。(もちろん、チャットしている人も大勢います)

私のアバター(Aa)はいつもは店先を整理したり、空中工房で作業したりしていますが、
ヒマなときにはバイトに出かけています。

そんなとき、バイトの終了に気が付かないで、アバターがイスの横にボウゼンと立たされているのを良く見かけます(Aa もよくそうなってます)。

バイト終了に気付くのがあまりに遅く、「バイト代」をもらえないこともありました。

そこで、バイトのときに便利なキャンピング・タイマー(以下、タイマー)を考えました。


セカンドライフ スクリプト タイマー timer


タイマーの使用方法
(1) 装着
タイマーをアバターに添付装着します。タイマーを右クリックしてパイ・メニューを表示し、「さらに>」-「添付>」-「Right Hand」と進みます。


セカンドライフ スクリプト タイマー timer


手で持っても良いですが、肩に乗せてもカッコイイですヨ。


セカンドライフ スクリプト タイマー timer


(2)スイッチ~ON
タイマーをクリック(マウス左ボタン)します。タイマーが黄色になり、タイマーからメッセージが発せられます。

(3)タイマー動作中
初期設定として、10分毎にタイマーからアラーム(音とメッセージ)が発せられます。タイマーからの音とメッセージは、それを装着しているアバターにのみ認識可能です。近くのキャンパーの迷惑になることはありません。

(4)スイッチ~OFF
タイマーをクリックします。タイマーが水色に戻り、タイマーからその旨のメッセージが発せられます。

(5)時間間隔の調整
調整のためのユーザーインターフェース(UI)はまだ作っていません。お手数ですが、スクリプトを直接修正してください。修正箇所はスクリプトの先頭箇所です。

integer  Time_Interval = 10; // minutes

例えば、20分間隔でアラームしたい場合は、上記コマンドの「10」を「20」に修正し保存します。

タイマーの基本仕様
●一定時間毎にアラーム(音とメッセージ)を出す
●周りのキャンパーに迷惑をかけない
●キャンプを強制終了させられたときにアラームを出す


タイマーの実装
●一定時間毎のアラーム
timer イベントを使用しました。音源はリンデン直営フリーバザーで無料で入手しました。(secondlife://Stillman/150/90/23)
●周囲のキャンパー対策
メッセージはllOwnerSay 関数を使用したので、オーナー以外にメッセージ送信されません。
llTriggerSoundLimited 関数を使用したことで、タイマーを装着したアバター以外に音源がもれません。(タイマーに他のアバターが密着しても音は漏れていないことを確認済み)

詳しくは、以下のwiki を参照してください。
http://rpgstats.com/wiki/index.php?title=LlTriggerSoundLimited


タイマー実機の配布(現在やっていません)

豊島区(toshimaku)で実機をお配りしています。無料(0$L)です。

テレポート先は以下のとおりです。
Toshimaku(134.159.22)
テレポート
注)セカンドライフと立ち上げておいてください。その後、上のテレポートをクリックしてください。



タイマーの今後の課題
●キャンプ強制終了への対応
最初に考えたのが、キャンピングを時間制限等の理由により、強制的に終了させられた場合に「アラーム」を発することでした。いろいろと調べてみたのですが、実装する方法を思い付きません。どなたか実装方法をご存知の方は教えてください。
●他の人に操作されるかも
まだ確認していないのですが、他の人からもタイマーをクリック操作できるかもです。おちゃめな友人には気をつけてください。


タイマーの全スクリプト
-------------------------------------------------------------------------
//
// Camping Timer Ver.0.0 (Prototype)
//
// This Script was produced by Second Life Planet in 2007/07/04.
//
// http://gameworkshop.blog106.fc2.com/
//


integer Time_Interval = 10; // minutes
integer No_Interval;        // Number of Interval


default
{
    state_entry()
    {
        llPreloadSound("Jetsons-Doorbell-02");
        llSetColor(<0.0,1.0,1.0>,ALL_SIDES);
    }
   
    touch_start(integer t_num)
    {
        llSetTimerEvent(60.0*(float)Time_Interval);
        No_Interval=0;
        llSetColor(<1.0,1.0,0.0>,ALL_SIDES);
        state timer_state;
    }
            
}



state timer_state       
{
    state_entry()
    {
        llOwnerSay("I begin to work!");
    }
   
    timer()
    {
        llTriggerSoundLimited("Jetsons-Doorbell-02", 1.0,
        llGetPos() + <0.1,0.1,0.1>, llGetPos() - <0.1,0.1,0.1>);
        No_Interval+=1;
        llOwnerSay("It is "+(string)(Time_Interval*No_Interval)+" minutes now.");
    }
   
    touch_start(integer t_num)
    {
        llOwnerSay("I stop!");
        state default;
    }


}
-------------------------------------------------------------------------



テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/04(水) 18:41:35|
  2. ロケット改造
  3. | トラックバック:0
  4. | コメント:0

スクリプトの修正(ロケット推進力)

推進力を弱くしたロケット(青ロケット)を、豊島区(toshimaku)でお配りしています。スクリプトをいろいろといじって遊んでみてください。楽しいですよ。

元のロケット(赤ロケット)は、推進力が大きく(15)アッという間に視界から消えてしまいます。

ロケットが上昇していくところをもっとゆっくり見たいので、青ロケットは推進力を小さく(3)しました。


セカンドライフ スクリプト ロケット



ロケットを推進させるには、llSetForce 関数を使用します。

LlSerForce 関数は、Second Life Wiki で詳しく説明されています。
http://rpgstats.com/wiki/index.php?title=LlSetForce

力には2種類あります。
●永続的な力
llSetForce 関数は、重力やロケット推進力のように永続的な力の場合に使用します。
●瞬間的な力
ボールをキックしたりバッティングしたりする衝撃力など瞬間的な力の場合には、llApplyImpulse 関数を使用します。

ロケットを回転させながら推進させるなど、トルクを伴う力の場合には、llSerForceAndTorque 関数を使用します。


   llSetForce(vector  force,  integer  local);

llSetForce 関数には2つのパラメーターがあります。
●第1パラメーター(ベクトル型:vector
物体に加わる力の大きさと方向を指定します。

例: <0, 0, 10> // Z 軸方向に10 の力を加える

●第2パラメーター(整数型:integer
TRUE とFALSE の2通りの指定があります。第1パラメーター(力)を表現する座標系が、
ローカル座標系(オブジェクト座標系)の場合は「TRUE」で、グローバル座標系(SIM 座標系)の場合は「FALSE」と指定します。

ロケット推進力は「TRUE」で、重力の場合は「FALSE」と指定します。

1.準備
llSetForce 関数などを使用する場合、物体に物理法則が適用できるようにする必要があります。
具体的には、以下の関数を使用します。

llSetStatus(STATUS_PHYSICS, TRUE);

2.ロケットでの使用例
オブジェクトには質量があり、llGetMass 関数で計算可能です。そのため、ロケットの場合も、ロケットを打ち上げるのに必要な力を計算で正確に求めることができます。


しかし、セカンドライフでは、ロケット実験が簡単にできるので、パラメーターを適当に数値入力して試行錯誤すればよいかと思います。

例1.llSetForce(<0,0,2.5>, TRUE);
ロケットは打ち上がりません。風にゆられてユラユラします。

例2.llSetForce(<0,0,3.0>, TRUE);
辛うじて、打ちあがります。見ていて楽しいです。

例3.llSetForce(<0,0,3.5>, TRUE);
全然普通に打ちあがります。

3.青ロケットのスクリプト
ロケットの推進力は、「THRUST」という名の変数を使用しています。実験する際には、THRUST の値をいろいろと変えてみてください。
------------------------------------------------------
float  gTotalTime = 0.0;
float  gTimeStep = 0.2;


float  FLIGHT_TIME = 5.0;
float  WAIT_TIME = 5.0;
float  THRUST = 3.0; // 2.5 or 3.0 or 3.5


integer  launched = FALSE;


launch()
{
    launched = TRUE;
    gTotalTime = 0.0;
    llSetStatus(STATUS_PHYSICS, TRUE);
    llSetForce(<0,0,THRUST>, TRUE);
    llSetTimerEvent(gTimeStep);
    llTriggerSound("launch", 1.0);
    llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "smoke", ZERO_VECTOR);
}
default
{
    state_entry()
    {
        llPreloadSound("launch");
        llPreloadSound("explosion");
        llSetStatus(STATUS_PHYSICS, FALSE);        
    }
    touch_start(integer num)
    {
        llSay(0, "Launching, please wait!");
        llSetTimerEvent(WAIT_TIME);
    }
    timer()
    {
        if (!launched)
        {
            launch();
            return;   
        }
        gTotalTime += gTimeStep;
        if (gTotalTime < FLIGHT_TIME)
        {
            llMakeExplosion(5, 1.0, 2, 3.0, PI, "smoke", ZERO_VECTOR);
        }
        else
        {
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSetForce(<0,0,0>, TRUE);
            llTriggerSound("explosion", 10.0);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "green", ZERO_VECTOR);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "blue", ZERO_VECTOR);
            llDie();
        }       
    }
    collision_start(integer num)
    {
            llSetStatus(STATUS_PHYSICS, FALSE);
            llSetForce(<0,0,0>, TRUE);
            llTriggerSound("explosion", 10.0);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "green", ZERO_VECTOR);
            llMakeExplosion(20, 1.0, 5, 3.0, 1.0, "blue", ZERO_VECTOR);
            llDie();
    }
}
------------------------------------------------------

テーマ:セカンドライフ - ジャンル:オンラインゲーム

  1. 2007/07/01(日) 21:14:20|
  2. LSL超初心者講座
  3. | トラックバック:0
  4. | コメント:1

プロフィール

Aa

Author:Aa
SLプラネットへようこそ!
Koenjiで物づくりしてます。
皆さん、遊びにきてください。

ショップのSLURL

ショップ(白屋)のSLURLです。メタバーズの高円寺にあります。商品を展示販売しています。

メタバーズ、高円寺、白屋

最近の記事

月別アーカイブ

カテゴリー

ブログ内検索

おすすめ商品!


パソコンの横において、疑問点をサッと調べられます!...



オブジェクト制作を基礎から解説!販売方法も詳しく記述!...



すぐに使えるサンプルプログラムを多数収録!...



関数の詳しい記述あり!辞書のように便利!...

ゲームPC

ゲーム用パソコンならドスパラへ!Galleriaシリーズが大人気!

リンク

このブログをリンクに追加する

スポンサードリンク

スポンサードリンク

最近のコメント

最近のトラックバック

RSSフィード

FC2カウンター

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。