コンニチハ。
最近、セカンドライフやりだした。なたでです。
たぶん以前やったのが、
今から6年前の2008年5月の「ネトゲ日記-1」ですね。

で、なぜやりだしたかというと、
前々からVRに興味があるという話をしていたと思いますが、
次世代HMD?である話題もちきりの「Occlusion Rift」が、セカンドライフで対応したのです。
(→ニュース Second Lifeの仮想空間、Oculus Riftでの移動が可能に
ということは、日本では失敗に終わった?セカンドライフが、Occlusion Riftの発売によって、再燃する可能性が!
しないかもしれませんが。絶対しないな。

とにかくそんなこんなでセカンドライフを、ちょっとやり始めたわけです。
さて、そんなセカンドライフなのですが、何が目的?とよくあるのですが、
基本的には、人と話し合ったり、触れ合ったりするのが楽しいです。

今回は、そんな話はおいておいて、
こんなセカンドライフで利用できるプログラミング言語 LSL (Linden Scripting Language) について、
紹介をしていきたいと思います。

このLSL、正直C言語と似てます。
文字列や配列とか考えると、JavaScriptに近いかもしれません。
あと、イベントがあります。イベントが発生するとこの関数が呼ばれるといった感じで。

話が戻りますが、どこが似ているのかというと、
たとえばコメントは同じです。

/*
コメント
*/
// コメント

ほかに、関数の作り方も。

myfunc() {
}

ちなみに、型はこんな感じです。
型は、宣言する必要があります。
すべて値型で、参照型ではありません。(値型、参照型とは

整数型は、integer
実数型は、float
文字列型は、string

それで、ほかに特殊な型がありまして、

  • key
  • list
  • vector
  • rotation

上の4つです。

・key
セカンドライフでは、すべてのものにUUIDという個別のIDが割り振られます。
たとえば、自分のアバターにもUUIDがありますし、
アップロードした画像1枚1枚、音声1つ1つ、
たった今作成したオブジェクト(プリム)にもUUIDが存在します。
そんなUUIDを記録するためのがこのキー型です。
中身は文字列らしいですが、key型として存在してます。
このkey型は組み込み関数の引数として、よく使用したりします。

・list
配列です。セカンドライフでは配列はこれです。
正直、この配列はJavaScriptみたいです。

list x = [ 1, 2, 3.4, "sss "];

のように配列に代入できるのですが、
list以外の型なら何でも入れることができます。
ただ、1つ癖がありまして、x[3]とか、添え字が使えないんです。
ということは、取得が少々面倒です。たぶんこれは各自調べるか、後々別の回で。

・vector
x, y, z の3つの値を持ちます。
セカンドライフの座標情報とか、大きさとかそういうのに使われます。

・rotation
x, y, z, s の4つの値を持ちます。
いわゆる、3D空間の回転でお馴染みのクォータニオン(四元数)です。
2D空間の座標を複素数で表せられれます。
四元数というのは、この複素数を3D空間へ拡張したようなものです。
各自が好きなオブジェクトを作れるセカンドライフでは、
オイラー角で管理すると起こるジンバルロックの問題youtube)があるため、
四元数で回転を管理しています。
中の値を見ても、どのような角度になっているか、正直わからないと思いますが、
分かりやすいオイラー角からrotation型へ変換する関数があります。

・おまけ json
実は JSON も扱えます。
ただし、string として扱っていきます。つまり型ではないです。
JSON自体が文字列なのでstringであっているといえばあっていますが。
キーワードだけおいておきます。各自調べてください。残念ながら使い方まで調べてません。
llJsonValueType
llJsonGetValue
llJsonSetValue

以上、型の紹介は終わりです。
matrix型がないので、回転移動の管理はちょっと面倒そうですね。
void型も、boolean型もないですよ。
boolean型は、C言語と同じ、0(false) か 0以外(true) として扱います。
ちなみに、これもすべて値型です。関数に渡すときは値渡しです。
配列が値渡しなのが驚きですね。

それで型を使って関数を書くと、
こんな感じに、まあほとんどC言語ですね。

integer abc(float x, float y) {
	integer c = 3;
	return((integer)(x + y) + c);
}

なお、型変換は上のようにC言語と同じ書き方でキャストできます。
気になる点としては、暗黙の型変換です。
というのは、文字列を入れる関数に、ベクトル型を入れるとエラーがでます。
まあ、当たり前かもしれませんが、JavaScriptに毒されていると違和感があります。
型変換については、/Typecast/ja を見るといいです。
あと、関数のオーバーロードはできません。

制御文は、C言語と同じ書き方で、
for/do/while文、if/else文があります。
gotoもあります。これはjump文という命令名となっていますが。

jump label;
@label;

break文、continue文がないので、jump文を使用しましょう。
なお、switch文もないようです。

さらに、スコープはC言語と同一で、
ブロックを好きなところに書いて、スコープを限定できます。

{
	integer x = 1;
	{
		integer x = 2;
	}
}

とりあえず、書き方の基礎的なものの話はこれで終わります。
興味あったら始めてみてはどうでしょうか。
プログラム触ったことがある方なら、すんなり入れると思います。はい。

ちなみに、次のサイトよく使用します。

それぞれの関数の具体的な内容や、使用例が書いてあるサイトです。
LSL ポータル

目的別で整理されているサイトです。
LSLめも

関連記事

  • セカンドライフのパーティクルシステムの特殊設定セカンドライフのパーティクルシステムの特殊設定 今回は、パーティクルシステムについてのお話です。 というか、自分用のメモです。 パーティクルは、llParticleSystem / llLinkParticleSystem […] Posted in セカンドライフ制作
  • セカンドライフでタッチイベントと状態遷移の落とし穴セカンドライフでタッチイベントと状態遷移の落とし穴 突然ですが、次のプログラムを見てみてください。 stateを使った状態遷移と、touch_startを使ったプログラムとなっています。 どのように動くか想像できますでしょうか。 default { state_entry() { llOwnerSay("state 0"); } touch_start(integer total_number) […] Posted in セカンドライフ制作
  • セカンドライフでプログラム6(臨時プリム編)セカンドライフでプログラム6(臨時プリム編) 臨時プリムの動きについて、ここでおさらいしたいと思います。 臨時プリムは、オブジェクトの種類の1つで、 これにチェックしておくと、いつのまにか削除されるという性質になっておりますが、 プリム数の扱いや、どのぐらいで削除されるのか、分からないとスクリプト上で使いづらいと思います。 臨時プリムについては、ヘルプの「ホーム / 建造物 / […] Posted in セカンドライフ制作
  • セカンドライフでプログラム3(はねるボールを作ろう編)セカンドライフでプログラム3(はねるボールを作ろう編) こんばんは。 セカンドライフでは、どんなものでも手軽に作れてしまいます。 たとえば、右クリックメニューの制作を選ぶと、 いくつか好きな形のプリムを選べます。 上のメニューから分かるとおり、13種類ありまして、 さらにこのプリムそれぞれで、変形させたりもできて、より複雑な形を作れます。 また、プリムが基本的な形なるのですが、 1つのプリムを好きな形へ変 […] Posted in セカンドライフ制作
  • セカンドライフでHSVとRGBを相互変換してみようセカンドライフでHSVとRGBを相互変換してみよう HSVというのは、いわゆるHSV色空間のことです。 これは、Hue(色相)、Saturation(彩度)、Value(明度)を表しておりましています。 ご存知?の通りRGBの色空間から、HSVの色空間へ変換が可能でして、 これを利用すれば、今のRGBの色から、少し濃い色にしたり、逆に薄い色にしたり、 明るい色にしたり、暗い色にしたり、色相を反転させたり、いろいろで […] Posted in セカンドライフ制作
  • セカンドライフで自分の行動の色々な情報を取得するセカンドライフで自分の行動の色々な情報を取得する 次のような自分の行動の情報を取得してみます。 ・自分が喋った回数 ・人から聞いた回数(アバターが話したものに限定) ・空を飛んでいる時間(ホバーは含めない) ・海の中を泳いでいる時間(ホバーは含めない) ・歩いている時間 ・走った時間 ・ジャンプ中の時間 ・テレポートした回数 ・SIMをまたいだ回数 ・人や当たり判定がある物体と衝突した回数 以下、サ […] Posted in セカンドライフ制作