コンニチハ。
最近、セカンドライフやりだした。なたでです。
たぶん以前やったのが、
今から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めも
コメント