ページ

2011/09/05

リンクしたドアを開け閉めするスクリプト

参照http://stwo.slmame.com/e940823.html



①まずドアを作る
パスカット(始点と終点)・・・0.375 と 0.875

②ドアを子プリムにして、本体とリンクする
この時、ルートプリム(編集時、黄色く表示されるプリム)を固定したら
それ以降、変更しないように

③以下のスクリプトをコピーする
default
{
touch_start(integer num) {
string S_Tmp = "\n\t\t//----------------\n";
S_Tmp += "\t\tS_Pos += [" + (string)llGetLocalPos() + "];\n";
S_Tmp += "\t\tS_Rot += [" + (string)(llRot2Euler(llGetLocalRot())*RAD_TO_DEG) + "];\n";
S_Tmp += "\t\tS_Snd += [\"\"];\n";
S_Tmp += "\t\t//----------------";
llOwnerSay(S_Tmp);
}
}

プリム編集画面で、リンク部分を編集にチェックを入れて、ドアを選択
中身(コンテンツ)タブを選択して、新しいスクリプトをクリック
新しくできたスクリプトを開き、書かれているスクリプトを消す
先ほどコピーしたスクリプトをペーストして保存する

編集画面を閉じる

④ドアの位置を記録する
ドアを初期の位置にしてクリック
このときチャット欄に出てくる数字が位置情報

続いて、ドアを開けた位置に合わせて再度クリック

これらの数値は後で使用します

⑤メインスクリプトを入れる
以下のスクリプトをコピーする
list S_Pos = [];
list S_Rot = [];
list S_Snd = [];
integer S_Mode = 0;

SMove(integer num) {
if (llGetListLength(S_Pos) > num) {
key S_Sound = llList2Key(S_Snd, num);
if (S_Sound) llPlaySound(S_Sound, 1.0);
llSetPrimitiveParams([
PRIM_POSITION, llList2Vector(S_Pos, num),
PRIM_ROTATION, llEuler2Rot(llList2Vector(S_Rot, num)*DEG_TO_RAD) / llGetRootRotation()
]);
}
}

default
{
state_entry() {
// ここへ順番にコピペしてください。一番最初が初期位置となります。

// ここまで
SMove(0);
}

touch_start(integer num) {
if (++S_Mode >= llGetListLength(S_Pos)) S_Mode = 0;
SMove(S_Mode);
}
}

ドアのスクリプトを上記のものに差し替える

⑥メインスクリプトに位置情報を入力する
④で表示された位置情報を
// ここへ順番にコピペしてください。一番最初が初期位置となります。

// ここまで
の場所に挿入する
保存して糸冬 了..._φ(゚∀゚ )アヒャ




開閉音を挿入する場合は
フルパーのサウンドを用意し、UUIDを
位置情報3行目の" "の空欄に入力する