Site search
2008年7月12日土曜日
テレポーターのスクリプト
テレポーターにはいくつかタイプがありますね^^
まずはタッチでマップを開くタイプのテレポーターです。主に他のSIMへテレポートするのに使われます。
// マップテレポート
default
{
touch_start(integer total_number)
{
llMapDestination("JapanSeychellesLand", <128,128,2>, ZERO_VECTOR);
}
}
このテレポートの行き先は http://slurl.com/secondlife/JapanSeychellesLand/128/128/2 になります。はい、簡単ですねー^^
9月4日追記: llMapDestinationで出るマップは高度1000mが限界みたいです。
2009年9月13日追記: llMapDestinationの高度1000mの限界はビューワー1.22で修正されてます。
そして、お次は座ると一瞬で移動するタイプのテレポーターです。SIM内でのみ使用できます。それから高さに制限があって、詳しいことは知らないんですが高度300m以下までぐらいにしか座れませんw
// 座るテレポート
default
{
state_entry()
{
llSetSitText("Teleport"); // パイメニューのSit Hereを変更
llSitTarget(<0,10,20>, ZERO_ROTATION); // 座る位置
}
changed(integer change)
{
if (change & CHANGED_LINK) {
key agent=llAvatarOnSitTarget();
if (agent) llUnSit(agent); // アバターが座ったらすぐに立たせる
}
}
}
これだとテレポーターからY方向へ10m、Z方向へ20mテレポートします。
はい、座る位置決めて、座ったら立たせてるだけなんですw だから座る位置がテレポート先になるように、テレポーターと目的地の座標の差として計算します。
でも計算がめんどいので簡単にセットアップできるようなスクリプトにしてみましょうねー^^
// 座るテレポート簡単セットアップ♪
vector pos;
vector dest;
default
{
state_entry()
{
dest=llGetPos(); // 現在の座標を目的地用の変数に設定
llSetSitText("Teleport");
}
touch_start(integer total_number)
{
if (llDetectedKey(0) == llGetOwner()) { // オーナーがタッチ開始すると
llSetTimerEvent(0.5); // 0.5秒後にタイマーイベント
}
}
touch_end(integer total_number)
{ // タイマーイベントまでにタッチを離すとタイマーキャンセル
llSetTimerEvent(0);
}
timer()
{ // タイマーイベント
llSetTimerEvent(0); // タイマーストップ
pos=dest-llGetPos(); // 目的地と現在地の座標差
llSitTarget(pos, ZERO_ROTATION); // 座る位置設定
if (pos != <0,0,0>) llOwnerSay("Setup done."); // 差があれば設定OKですw
}
changed(integer change)
{
if (change & CHANGED_LINK) {
key agent=llAvatarOnSitTarget();
if (agent) llUnSit(agent);
}
}
}
使い方は、目的地にテレポーターを置いてスクリプトをリセットしてですね、次にテレポーターを設置する出発地に置いてタッチ長押しでセットアップ完了です^^
あと、もうひとつ高度300m以上へ行けるタイプのテレポーターは乗ったらオブジェクトごと移動するんですがそれは次回書きますねw
まずはタッチでマップを開くタイプのテレポーターです。主に他のSIMへテレポートするのに使われます。
// マップテレポート
default
{
touch_start(integer total_number)
{
llMapDestination("JapanSeychellesLand", <128,128,2>, ZERO_VECTOR);
}
}
このテレポートの行き先は http://slurl.com/secondlife/JapanSeychellesLand/128/128/2 になります。はい、簡単ですねー^^
9月4日追記: llMapDestinationで出るマップは高度1000mが限界みたいです。
2009年9月13日追記: llMapDestinationの高度1000mの限界はビューワー1.22で修正されてます。
そして、お次は座ると一瞬で移動するタイプのテレポーターです。SIM内でのみ使用できます。それから高さに制限があって、詳しいことは知らないんですが高度300m以下までぐらいにしか座れませんw
// 座るテレポート
default
{
state_entry()
{
llSetSitText("Teleport"); // パイメニューのSit Hereを変更
llSitTarget(<0,10,20>, ZERO_ROTATION); // 座る位置
}
changed(integer change)
{
if (change & CHANGED_LINK) {
key agent=llAvatarOnSitTarget();
if (agent) llUnSit(agent); // アバターが座ったらすぐに立たせる
}
}
}
これだとテレポーターからY方向へ10m、Z方向へ20mテレポートします。
はい、座る位置決めて、座ったら立たせてるだけなんですw だから座る位置がテレポート先になるように、テレポーターと目的地の座標の差として計算します。
でも計算がめんどいので簡単にセットアップできるようなスクリプトにしてみましょうねー^^
// 座るテレポート簡単セットアップ♪
vector pos;
vector dest;
default
{
state_entry()
{
dest=llGetPos(); // 現在の座標を目的地用の変数に設定
llSetSitText("Teleport");
}
touch_start(integer total_number)
{
if (llDetectedKey(0) == llGetOwner()) { // オーナーがタッチ開始すると
llSetTimerEvent(0.5); // 0.5秒後にタイマーイベント
}
}
touch_end(integer total_number)
{ // タイマーイベントまでにタッチを離すとタイマーキャンセル
llSetTimerEvent(0);
}
timer()
{ // タイマーイベント
llSetTimerEvent(0); // タイマーストップ
pos=dest-llGetPos(); // 目的地と現在地の座標差
llSitTarget(pos, ZERO_ROTATION); // 座る位置設定
if (pos != <0,0,0>) llOwnerSay("Setup done."); // 差があれば設定OKですw
}
changed(integer change)
{
if (change & CHANGED_LINK) {
key agent=llAvatarOnSitTarget();
if (agent) llUnSit(agent);
}
}
}
使い方は、目的地にテレポーターを置いてスクリプトをリセットしてですね、次にテレポーターを設置する出発地に置いてタッチ長押しでセットアップ完了です^^
あと、もうひとつ高度300m以上へ行けるタイプのテレポーターは乗ったらオブジェクトごと移動するんですがそれは次回書きますねw
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿