セカンドライフでプログラム1(書き方がC言語に似ているよ編)

セカンドライフ制作
スポンサーリンク

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

コメント

タイトルとURLをコピーしました