BlackSheep-LSL@Wiki 基礎知識 > LSLの構成要素は?
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

LSLを構成する3つの要素


通常の台本は、シーンやカット、台詞、動作などから構成されています。
一般的にはまずシーンがあり、そのシーンに含まれるカットごとに、台詞や動作が書かれています。シーンもカットも無しに、いきなり台詞だけがポツン・・・と書かれることはありません。

【一般的な台本の構成要素】
  • シーン:町外れの空き地
    • カット:楽しそうに騒いでいる猫たち
      • 台詞:にゃー
      • 動作:笑顔で尻尾を振る
    • カット:肩を叩かれて振り向く猫
      • 台詞:にゃ?
      • 動作:何気ない様子で振り向く

シーン、カット、台詞・動作が階層構造になっているのがわかるかと思います。
この階層構造が崩れてしまうと台本として成り立たなくなります。

同じように、LSLにも構成要素があり、各要素は階層構造になっています。
LSLの場合は「シーン」「カット」「台詞」ではなく、「状態」「きっかけ」「処理」が構成要素です。
「状態」「きっかけ」「処理」とは、以下のように考えてください。

「○○の状態で」 ・・・ 状態
「△△されたとき」 ・・・ きっかけ
「××をする」 ・・・ 処理

LSLという台本は必ず上記のような3要素を使って書かなければいけません。
かつ、この3つの要素は階層構造になっており、
「状態」の下に「きっかけ」
「きっかけ」の下に「処理」
を必ず書きます。

前章で例として示した台本を「状態」「きっかけ」「処理」の階層構造に展開してみましょう。

アバターが閉じたドアにタッチした時、ドアは手前に向かって90度開く。
30秒が経過した時、ドアは自動的に閉じる。
アバターが開いたドアにタッチした時、ドアは閉じる。

【一般的なLSLの構成要素(ドアのLSL)】
  • 状態:閉じた状態
    • きっかけ:アバターにタッチされたとき
      • 処理:90度回転する(開いた状態になる)
  • 状態:開いた状態 
    • きっかけ:30秒経過したとき
      • 処理:もとの角度に戻る(閉じた状態になる)
    • きっかけ:アバターにタッチされたとき
      • 処理:もとの角度に戻る(閉じた状態になる)

状態に対して、起こり得るきっかけを書き、きっかけの中には処理を書きます。
「処理」は必ず「きっかけ」の中に書かなければいけませんし、「きっかけ」は必ず「状態」の中に書かなければいけません。

ではこの3つの要素、「状態」「きっかけ」「処理」について、簡単にどんなものなのかを見てみましょう。

状態


「状態」のことをLSLでは「state(ステート)」と言います。

前章で「LSLは状況に応じて動きを変えることができる」と説明しました。
ステートはこれを実現する方法の一つです。

例えばテレビの動きについて考えて見て下さい。
テレビの「状態」というのは、大雑把に考えると、以下の二つがあります。

  • 電源がOFFになっている
  • 電源がONになっている

OFFの状態とONの状態では、テレビの動きに違いがありますよね。

例えばOFFの状態のときには、リモコンからチャンネルボタンを押したとしても、何も起きませんが、ONの状態のときにはボタンに応じてチャンネルが変わります。
同じように、LSLでは状態に応じて処理のきっかけを変えることができます。

例えば、ドアのLSLでは以下の二つの「ステート」を想定しています。
  • 閉じた状態
  • 開いた状態

閉じた状態でドアにタッチすると、ドアが開きます。
一方、開いた状態でドアにタッチすると、ドアが閉じます。
同じ「タッチ」という「きっかけ」にも関わらず、ドアの動作が異なるわけです。

また、閉じた状態で30秒経過しても、何も起きません。
ですが開いた状態で30秒経過すると、ドアが閉じます。
状態に応じて、扱うべき「きっかけ」が異なるということです。

以降は「ステート」という言葉を使いますが、LSLの状態のことだと理解して下さい。

きっかけ


「きっかけ」はLSLでは「Event(イベント)」と言います。
イベントと聞くと何か催し物を想像してしまいますが、そんなに大それたものではなく、「タッチされた」とか「30秒が経過した」など、ごく些細な何らかの「きっかけ」のことです。

イベントはLSLが動き出すきっかけです。
動き出すきっかけ(タイミング)が来ることを、「イベントが起きる」「イベントが発生する」と言います。
これもまた何やら大層なことが始まりそうな表現ですが、ごくごくささやかな出来事ですので興奮したりしないで下さい。
以降、イベントという言葉を使います。イベントとはLSLの動き出す「きっかけ」だということをしっかりと覚えて置いて下さい。

前章で「LSLは必ずしも時間的な流れに沿って書かれているわけではない」と説明しました。
では一体どのような順番で処理が行われるのでしょうか。
その答えは「イベントが起きた順番で処理が行われる」です。

例えば、ドアのLSLでは、「開いた状態」のステート内に、
「30秒が経過したとき」
「タッチされたとき」
この二つのイベントがあります。
これらはどちらが先に書いてあるかに関係なく、あくまでも「イベントが発生したとき」に動くのです。

このような仕組みのことを「イベント・ドリブン」と言うことがあります。
これはイベントによって動かされるという意味で、まさにLSLはイベントありきのプログラミング言語です。

処理


「処理」はオブジェクトの詳細な動作を書く部分です。
先ほどから例示しているドアのLSLで言うと、
「90度回転する」
「もとの角度に戻る」
これらが「処理」に当たります。

ステートとイベントがLSLの動くタイミングを示しているのに対し、「処理」の部分は「何を」「どのくらい」「何に対して」「どうするのか」という細かい内容になります。

3つの要素の書き方


「ステート」「イベント」「処理」は階層構造になっていると説明しましたが、実際にLSLのコードでどのように書くのかを見ておきましょう。

「ステート」「イベント」「処理」はLSLの最も基本的な構造です。
人間で言うなら手・足・頭・胴体みたいなものです。
どれが頭でどれが足なのか、それを見極めることができなかったら、人間の姿が理解できないのと同じように、LSLの中のどこがステートでどこがイベントか、それを見極めることはとても重要です。

以下はLSLの一例です。

【LSLコードの例】
default
{
  state_entry()
  {
    llSay(0, "Hello, Avatar!");
  }

  touch_start(integer total_number)
  {
    llSay(0, "Touched.");
  }
}

拒絶反応を起こさないで下さい!ここではまだ、細かい部分については理解しなくても構いません。このコードが3段構造になっていることさえ解ればOKです。

ステートとイベントは{ }で範囲が区切られています。ステートの{ }の中にはイベントがあり、イベントの{ }の中には処理が書かれているのです。

まとめ


LSLという台本には以下のような内容を書きます。
「どのような状態で」・・・ステート
「何が起こったとき」・・・イベント
「何を」「どのくらい」「何に対して」「どうする」・・・処理
どんなLSLでも必ずこの3つの要素を書かなければいけません。
ですからLSLを作るときにはまずこの3つの要素について考えるべきです。

オブジェクトの状態には、どんなものがあるのか・・・。
例えばテレビの電源がON/OFFで変わるように、オブジェクトの状態が変わるのなら、それぞれにステートを用意すべきでしょう。

LSLの動き出すきっかけは、どんなときなのか・・・。
タッチされたときに動くのか、それとも時間が経つと動き出すのか・・・。
動き出すきっかけに応じて、イベントを書いてやらなければいけません。

動き出したLSLはどんな処理を行うのか・・・。
回転するのか、移動するのか、はたまた色が変わったり、サイズが変わったりするのか・・・。
また、回転するにしてもどのくらい回転するのか?
色が変わるのなら何色に変わるのか?
オブジェクトにはいくつかの面があったりしますので、その全ての面の色を変えるのか、それともどこか1面だけを変えるのか・・・などなど。


名前:
コメント: