2007年11月19日
超簡単自動ドア!?
昨日嵌っていたスクリプト。
結局、Waterさんからのヒントを生かしきれず&ファントムへのこだわり(w)が有ったため、寝る前に黒羊団のBBSにも投稿させてもらったのですが、早速お返事をいただけました!
やはり、Waterさんが仰ったとおり、リンクオブジェクトの一部をファントムにすることができないのは、SLの仕様なので、あきらめるしかないみたいです。
お答えでは、llSetScale関数を使ってそのprimを邪魔にならないサイズまで小さくしてしまう方法と、llSetPosを使って邪魔にならない場所に移動してしまう方法を代替案として出していただいたのですが、今回はllSetPosを使いたくない、というのがそもそもの始まりで起こった疑問だったので、llSetScaleを使って小さくしてみることにしました!
結局、Waterさんからのヒントを生かしきれず&ファントムへのこだわり(w)が有ったため、寝る前に黒羊団のBBSにも投稿させてもらったのですが、早速お返事をいただけました!
やはり、Waterさんが仰ったとおり、リンクオブジェクトの一部をファントムにすることができないのは、SLの仕様なので、あきらめるしかないみたいです。
お答えでは、llSetScale関数を使ってそのprimを邪魔にならないサイズまで小さくしてしまう方法と、llSetPosを使って邪魔にならない場所に移動してしまう方法を代替案として出していただいたのですが、今回はllSetPosを使いたくない、というのがそもそもの始まりで起こった疑問だったので、llSetScaleを使って小さくしてみることにしました!
まず、作りたいドアの2倍の横幅で、オブジェクトを作ります。

雪香の場合、横:2m・縦3m・厚さ0.2mのドアを作ることにしたので、サイズは
x:4.00
y:0.20
z:3・00
となりました。
次に、これをパスカットで半分にします。

パスカットの値は、B:0.125 ・ E:0.625 でした。
ドアが目的の大きさになったら、[コンテンツ]タブの[新しいスクリプト]ボタンをおして、スクリプトを作ります。

出来上がったスクリプトを開いて、スクリプトを書いていきましょう。
llSetScale関数で横幅を小さくして、5秒後に横幅を元の大きさに戻すことにします。
===
default
{
touch_start(integer total_number)
{ llSetScale(<0.01,0.2,3.0>); ←横幅を散っちゃくする
llSetTimerEvent(5.0); ←5秒後にタイマーセット
}
timer(){
llSetTimerEvent(0);
llSetScale(<4.0,0.2,3.0>); ←横幅を元に戻す
}
}
===
保存ボタンをおします。

Save complete. と出てからスクリプトを閉じましょう。

簡単自動ドアの完成~♪
このスクリプトなら位置情報を持っていないので、設置場所がそのつど移動しても全然OKですね!
ご回答くださった方、ありがとうございました!!
~おまけ~
ちなみに、llSetAlpha関数を使って、小さくしたドアを透明にすることも出来ます♪
default
{
touch_start(integer total_number)
{
llSetAlpha(0.0,ALL_SIDES);
llSetScale(<0.01,0.2,3.0>);
llSetTimerEvent(5.0);
}
timer(){
llSetAlpha(1.0,ALL_SIDES);
llSetTimerEvent(0);
llSetScale(<4.0,0.2,3.0>);
}
}

雪香の場合、横:2m・縦3m・厚さ0.2mのドアを作ることにしたので、サイズは
x:4.00
y:0.20
z:3・00
となりました。
次に、これをパスカットで半分にします。

パスカットの値は、B:0.125 ・ E:0.625 でした。
ドアが目的の大きさになったら、[コンテンツ]タブの[新しいスクリプト]ボタンをおして、スクリプトを作ります。

出来上がったスクリプトを開いて、スクリプトを書いていきましょう。
llSetScale関数で横幅を小さくして、5秒後に横幅を元の大きさに戻すことにします。
===
default
{
touch_start(integer total_number)
{ llSetScale(<0.01,0.2,3.0>); ←横幅を散っちゃくする
llSetTimerEvent(5.0); ←5秒後にタイマーセット
}
timer(){
llSetTimerEvent(0);
llSetScale(<4.0,0.2,3.0>); ←横幅を元に戻す
}
}
===
保存ボタンをおします。

Save complete. と出てからスクリプトを閉じましょう。

簡単自動ドアの完成~♪
このスクリプトなら位置情報を持っていないので、設置場所がそのつど移動しても全然OKですね!
ご回答くださった方、ありがとうございました!!
~おまけ~
ちなみに、llSetAlpha関数を使って、小さくしたドアを透明にすることも出来ます♪
default
{
touch_start(integer total_number)
{
llSetAlpha(0.0,ALL_SIDES);
llSetScale(<0.01,0.2,3.0>);
llSetTimerEvent(5.0);
}
timer(){
llSetAlpha(1.0,ALL_SIDES);
llSetTimerEvent(0);
llSetScale(<4.0,0.2,3.0>);
}
}
この記事へのトラックバックURL
この記事へのコメント
こんにちは。BBSから辿ってきました。
なるほど、llSetPosを使いたくないというのが前提だったんですね(^^
このタイプのドアは、テクスチャの張替えを併用しても面白いですよ。
例えばフスマ2枚分のテクスチャを貼ったものを、半分のサイズにしてテクスチャもフスマ1枚分に切り替える・・・とか。
設置位置や向きを気にしないで済むドアは便利ですね(^^
なるほど、llSetPosを使いたくないというのが前提だったんですね(^^
このタイプのドアは、テクスチャの張替えを併用しても面白いですよ。
例えばフスマ2枚分のテクスチャを貼ったものを、半分のサイズにしてテクスチャもフスマ1枚分に切り替える・・・とか。
設置位置や向きを気にしないで済むドアは便利ですね(^^
Posted by Miz at 2007年11月20日 13:55
Mizさん、こんばんわ!
その節は、お知恵を貸していただきまして、ありがとうございましたm(__)m
関数は、ただ知ってるだけじゃなくて、それをドコでどう使うかが、腕の見せ所なんですね~!
う~ん。スクリプト、奥が深いです(>_<)
話は変わって、昨日IMで、『なんでオブジェクトをパスカットしなきゃいけないの?』というご質問を頂きました。
透化しないでやってみてもらうと一発で判ると思いますが、llSetScaleでサイズ変更するとき、中心(重心)に向かって小さくなるんです。
なので、パスカットしないと、真ん中に変なのが残っちゃうんですよ~!
その節は、お知恵を貸していただきまして、ありがとうございましたm(__)m
関数は、ただ知ってるだけじゃなくて、それをドコでどう使うかが、腕の見せ所なんですね~!
う~ん。スクリプト、奥が深いです(>_<)
話は変わって、昨日IMで、『なんでオブジェクトをパスカットしなきゃいけないの?』というご質問を頂きました。
透化しないでやってみてもらうと一発で判ると思いますが、llSetScaleでサイズ変更するとき、中心(重心)に向かって小さくなるんです。
なので、パスカットしないと、真ん中に変なのが残っちゃうんですよ~!
Posted by 雪香
at 2007年11月20日 18:28
at 2007年11月20日 18:28リンクされているオブジェ内のうちの
一部のプリムだけファントムにする事は
出来ますよ。
うちはそれを利用したドアを作りは
しましたが、あまりスクで制御する物には
向かないのでお勧めできないのですが。
設置場所を変えた場合の事考えて
SetPosを使いたく無いとの事ですが、
開く際に自身の位置を取得してやる事で
移動タイプのドアは可能です。
これは回転タイプでもです。
またプリム数をかける事でオブジェは
動いていないけれどドアは動く様にする
事も可能です。
一部のプリムだけファントムにする事は
出来ますよ。
うちはそれを利用したドアを作りは
しましたが、あまりスクで制御する物には
向かないのでお勧めできないのですが。
設置場所を変えた場合の事考えて
SetPosを使いたく無いとの事ですが、
開く際に自身の位置を取得してやる事で
移動タイプのドアは可能です。
これは回転タイプでもです。
またプリム数をかける事でオブジェは
動いていないけれどドアは動く様にする
事も可能です。
Posted by maaya yohkoh at 2007年11月29日 20:27
お~、一部だけファントム、出来るんですか!?
公開可能であれば、ぜひ方法をお聞きしたいです~!!(>_<)
はじめ、llSetPosを使って、オブジェクトを出す度に位置情報を取得する方法でスクリプトを書いていたのですが、位置情報の取り直しがうまく出来なくて、挫折したんですよ~^^;
llResetScriptを使ってやろうとしてたんですが、違う関数なのかな?
公開可能であれば、ぜひ方法をお聞きしたいです~!!(>_<)
はじめ、llSetPosを使って、オブジェクトを出す度に位置情報を取得する方法でスクリプトを書いていたのですが、位置情報の取り直しがうまく出来なくて、挫折したんですよ~^^;
llResetScriptを使ってやろうとしてたんですが、違う関数なのかな?
Posted by 雪香
at 2007年11月30日 01:32
at 2007年11月30日 01:32※このエントリーではブログ管理者の設定により、ブログ管理者に承認されるまでコメントは反映されません

