前回制作した浮遊ライトのスクリプトについて説明します。豊島区(toshimaku)で、この浮遊ライトをお配りしています。
場所の検索で「toshimaku」として「テレポート」すると、中央付近にブースがあります。「buy」(0$L)の後、「take」してください。
(1)グローバル変数
4 つのグローバル変数を使用します。これらの変数は、ライトの色や強さに関するもので、llSetPrimitiveParam 関数で使用します。前回のスクリプトでは変数の設定にミスがあり、ライトがあまり明るくありませんでした。今回の値はライトの強さが最大で、太陽調整を正午にしても明るくなります。
各変数は「建造ウィンドウのライト設定(Light が軽いと訳されてますが・・・)の各パラメータに対応しています。
vector Color = <1, 1, 1>; // 色
float Intensity = 1.0; // 強さ
float Radius = 20.0; // 半径
float Falloff = 0.0; // 弱まる
「建造ウィンドウ」のパラメータを手動で調整することで、ライトの明るさの設定を「静的に」変更可能ですが、スクリプトを使用することで「動的に」変更可能になります。
(2) 関数
5 この関数を使用します。
llSetText 関数
物体の上に文字を表示する関数
例:物体の上に白文字「ABCDEFG」を表示
llSetText("ABCDEFG", <1,1,1>, 1.0);
llSetPrimitiveParam 関数
「建造ウィンドウ」で調整する各種パラメータを設定する関数
例:物体のライトの強さを最大にする関数。TRUE をFALSE にするとライトが消える
llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE,
Color, Intensity, Radius, Falloff]);
llSetStatus 関数
物体の設定を「物理」や「幻」などにする
例:物体を物理設定にする。物理設定にした物体は力(重力、浮力、衝撃力、など)を感知し、反応し、相互作用します。FAUSE は解除。
llSetStatus(STATUS_PHYSICS, TRUE);
llSetBuoyancy 関数
物体に及ぼす浮力を設定する
例1:浮力(1.1)の設定。浮かびます。
llSetBuoyancy(1.1);
例2:浮力(0.0)の設定。全く浮かびません。重力で落下します。
llSetBuoyancy(0.0);
llSetTimerEvent 関数
Timer イベントが発生するまでの時間を設定する
例:3 秒後にTimer イベントを発生させる
llSetTimerEvent(3);
(3) イベント
3このイベントがあります。
state_entry イベント
物体がレズした際の状態(default)の最初に発生するイベント
touch_start イベント
物体を左クリックした際に発生するイベント
timer イベント
llSetTimerEvent で設定した時間に発生するイベント
(4) 状態
4 つの状態があります。オブジェクトをクリックする度に、各状態を遷移します。
default 状態
・物理設定がオフ、ライトがオフ
・クリックすると、Buoyancy 状態に遷移
Buoyancy(浮力)状態
・物理設定がオン、ライトがオン
・タイマーを3秒に設定し、Floatage 状態に遷移
・3 秒間、浮き上がる
Floatage(浮遊)状態
・3 秒後に、物理設定がオフ、ライトがオン
・浮遊している
・クリックすると、Gravity 状態に遷移
Gravity(重力)状態
・物理設定がオン、ライトがオフ
・物体が落下する
・クリックすると、Buoyancy 状態に遷移
テレポート先は以下のとおりです。
Toshimaku(134.159.22) テレポート
注)セカンドライフを立ち上げておいてください。その後、上のテレポートをクリックしてください。
浮遊ライトを右クリックして、パイメニューから「Buy」を選んでください。
無料(0L$)なのでご心配なく。
浮いたり沈んだりする仕組み(スクリプト)は、前回の「浮遊ライトをつくりました」で公開しています。
前回制作した「空中工房」にライトがほしいと思い、「浮遊ライト」を制作しました。
浮遊ライト
1.クリック(左マウスボタン)すると、明るくなり上昇する。
2.一定時間後に上昇が止まる。
3.もう一度、クリックすると明かりが消えて落ちてくる。
浮遊ライトの制作
以下の手順で「浮遊ライト」を制作してください。
1.適当なオブジェクト(プリム)を制作する
2.「建造ウィンドウ」からスクリプトを入力する
具体的な方法は本ブログの以前の記事を参照してください。
3.スクリプトを記述するところに、以下のソースをコピーする
// ---------------------- スクリプト スタート --------------------------------
vector Color = <1, 1, 1>;
float Falloff = 2.0;
float Intensity = 20.0;
float Radius = 2.0;
default // 物理オフ状態
{
state_entry()
{
llSetText("Light:OFF, Physics:OFF", <1,1,1>, 1.0);
llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, Color, Intensity, Radius, Falloff]);
llSetStatus(STATUS_PHYSICS, FALSE);
state buoyancy;
}
}
state buoyancy // 物理オン状態(浮力)
{
touch_start(integer t_num)
{
llSetText("Light:ON, Physics:ON(Buoyancy)", <1,1,1>, 1.0);
llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, Color, Intensity, Radius, Falloff]);
llSetBuoyancy(1.1);
llSetStatus(STATUS_PHYSICS, TRUE);
llSetTimerEvent(3);
state floatage;
}
}
state floatage // 物理オフ状態(空中停止)
{
timer()
{
llSetText("Light:ON, Physics:OFF(Floatage)", <1,1,1>, 1.0);
llSetStatus(STATUS_PHYSICS, FALSE);
state gravity;
}
}
state gravity // 物理オン状態(重力)
{
touch_start(integer t_num)
{
llSetText("Light:OFF, Physics:ON(Gravity)", <1,1,1>, 1.0);
llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, Color, Intensity, Radius, Falloff]);
llSetStatus(STATUS_PHYSICS, TRUE);
llSetBuoyancy(0.0);
state buoyancy;
}
}
// ---------------------- スクリプト エンド --------------------------------
実験
実験風景です。上昇が止まらなく飛んでいってしまうことがあったので、空中工房を上下2つ使用しています。
各種パラメータには、力(浮力、重力)の大きさ、浮遊時間、ライトのオン・オフ、文字表示する・しない、等がありますが、適宜修正してください。
「浮遊ライト」をうまく動作させるにはコツがいります。少し長めにクリックしてください。
今回の「浮遊ライト」はプロトタイプなのでエラー処理が入っていません。典型的な例として、何かの拍子に飛んでいってしまうことがあります。その辺のエラー処理(リミット処理)は今後の課題です。飛んでいってしまっても怒らないでください(笑)。
このスクリプトの説明は次回にしたいと思います。
Author:Aa
SLプラネットへようこそ!
Game Forumで物づくりしてます。
皆さん、遊びにきてください。
ブログの内容を整理更新して掲載していきます。ラーニングの際には必ずHPでご確認ください。
スターオフィス(日本語版:StarSuite)がGoogleパックにて無料配布開始!
Microsoft Officeと互換性あり!
パソコンの横において、疑問点をサッと調べられます!...
オブジェクト制作を基礎から解説!販売方法も詳しく記述!...
すぐに使えるサンプルプログラムを多数収録!...
関数の詳しい記述あり!辞書のように便利!...
ゲーム用パソコンならドスパラへ!Galleriaシリーズが大人気!