Site search
2009年4月2日木曜日
長距離用高速テレポーターのスクリプト
速く移動させる方法はWarpPosが有名かなって思いますが、原理はllSetPrimitiveParamsに移動させる距離を10m以下に分割した位置をリストにして指定したらいいんですよ。あっという間に移動できます^^
例えば<10,10,10>の位置から真上に30m移動させるとき、こんな感じになりますね。
llSetPrimitiveParams([PRIM_POSITION,<10,10,20>, PRIM_POSITION,<10,10,30>, PRIM_POSITION,<10,10,40>]);
それで今回は速く移動できるテレポーターのスクリプトを書いてみました。
使い方は
// 長距離用の高速テレポーター
vector dest;
vector pos;
default
{
state_entry()
{
llSitTarget(<0.2,0,0.55>, ZERO_ROTATION); // 座る位置
dest=llGetPos(); // 現在位置の座標を目的地に設定
llOwnerSay("Destination = "+(string)dest);
}
changed(integer change)
{
if (change & CHANGED_LINK) { // リンクが変わったとき
key id=llAvatarOnSitTarget(); // 乗ってるアバターのキー
if (id) {
if (pos) return; // 出発地座標が設定されてるとき(動作中)はリターン
pos=llGetPos(); // 現在位置を出発地の座標に設定
vector v=dest-pos; // 目的地と出発地のベクトルの差
float f=llVecDist(dest,pos); // 移動する距離
list l; // llSetPrimitiveParams用のリスト
integer i;
integer j=llCeil(llFabs(f/10)); // 移動距離を10mで何分割になるか計算
vector p=v/j; // 1回に移動させるベクトル値
for (i=0; i <= j; i++)
{ // 分割した回数分ループ
l+=[PRIM_POSITION,pos+p*i]; // 分割した座標をリストアップ
}
llSetPrimitiveParams(l); // テレポート開始
llUnSit(id); // 目的地でアバターを降ろす
l=[]; // リストをクリア
for (i=j; i >= 0; i--)
{ // 行きと逆順のリストにする
l+=[PRIM_POSITION,pos+p*i];
}
llSetPrimitiveParams(l); // テレポーターを出発地に戻す
pos=ZERO_VECTOR; // 出発地の座標をクリア
}
}
}
}
自分の土地から出ないように使ってくださいね。スクリプト禁止になってる他の人の土地とかを通過するとアバターが降りた後テレポーターが戻ってこなくなりますのでwww
あと、地形の隆起してるところとか途中で地面に接触するようなポイントがあると、目的地もテレポーターの戻る出発地も大きくズレてしまうみたいです^^;
一瞬で移動なので座る位置はテキトーな小さめの値でオッケーだと思いますが、<0,0,0>にしてしまうとllAvatarOnSitTargetが反応しないので動かなくなりますw
2012年3月14日追記: 新関数llSetRegionPosに変更したものを載せました。
新関数を使った長距離用高速テレポーターのスクリプト
登録:
コメントの投稿 (Atom)
千尋さん
返信削除千尋さんのブログ、及び商品をたびたび利用させていただいています。
ありがとうございます。
ところでこの高速テレポーターですが指定したアバターだけが使えるようには出来ませんでしょうか?
ご利用頂きありがとうございます^^
返信削除許可するアバターをリストにして、リストに出てないアバターが乗ったときは立たせて中断させるようにしたらいいですかね。
スクリプトの最初に許可するアバター名のリストを置いて
list avatar=["アバター名1","アバター名2"];
それで
if (id) {
の後に
integer i=llListFindList(avatar,[llKey2Name(id)]); // リストをチェック
if (i < 0) { // 乗ったアバターがリストになかったら
llUnSit(id); // 立たせて
return; // リターン
}
を入れてください。
ただアバターのリストを頻繁に変更することがある場合は、その度に座標の設定をし直さないといけないので、リストはノートカードで読み込ませるようにしたほうがいいかもですね^^;
千尋さん、ご丁寧にありがとうございます。
返信削除悪戦苦闘の末。。。友達の力を借りて
設定することが出来ました^^;
もっともっと、勉強しなければと思いますが
スクリプトの壁は高いです><
ほんとうに、ありがとうございます
商用ブログ有料化・・・あたしもとても残念で仕方がありません