Posted by   at 

2009年03月31日

オブジェクトのリンクとタッチで開く扉

みなさま、またお知恵をお貸し下さいませ。

現在、建物を造っていて困ったことがあります。

オブジェクトのリンク(全選択してCtrl+L)のことなのですが、一部ファントムの部分を作ってリンクさせるとファントムにならないのですが、これはどう解決したらいいのでしょうか?

また、同じようにタッチで開閉するドアをリンクさせるといつの間にか開く方向が変化してしまい、思うようになりません。

 ↑これくらい角度がずれてしまうのはまだ良い方で…><

またXYZ軸で回転を指定をしているため、当然ですが建物を移動させるとずれてしまいます。

ちなみに扉に入れているスクリプトはWEBで頂いてきた物で

rotation rot;
key sound_open = "Door_Op";
key sound_close = "Door_Clo";

default
{
state_entry()
{
rot = llGetRot();
state close;
}
}

state open {
state_entry()
{
llTriggerSound(sound_open, 1.0);
llSetRot(rot * llEuler2Rot(<0.0, 0.0, 90.0> * DEG_TO_RAD));
llSetTimerEvent(30.0);
}

touch_start(integer total_number)
{
state close;
}

timer(){
llSetTimerEvent(0);
state close;
}
}

state close {
state_entry()
{
llSetRot(rot);
llTriggerSound(sound_close, 1.0);
}

touch_start(integer total_number)
{
state open;
}
}

です。

ファントムも扉も今のところリンクさせなければ都合が悪くないのですが、
商品として売ろうと思ったときにリンクしていないとバラで梱包することになり不都合なので、うまくリンクをさせて持ち物のフォルダ内に収納させたいのですが…

最近買ったものではオモチャ箱みたいな物をREZするとダイアログが現れ、そこに建物と、位置の記憶をさせたリンクさせないオブジェクトを展開するシステムは便利で良いなぁ、とは思ったのですがサッパリやり方が分かりませんでした。



それと、これとは関係ないのですが、奥のテクスチャーを張ったオブジェクトが、手前のオブジェクトを抜けて一番手前に見えてしまうのは避けられないものなのでしょうか?
テクスチャを張ったテーブルの上にスカルプで作った物やテクスチャを張ったコップなどを置くと消えて見えなくなってしまいます。
勿論、テーブル面が重ならない方向から見るとちゃんと見えているのですが…
これにはかなり困ってしまっています。  


Posted by まおまお  at 21:36Comments(9)スクリプト関連

2009年03月31日

ダイアログとノートカード

よくラジオやテレポーターなどで、ノートカードから設定してダイアログのメッセージや
ボタンの名前やボタン数を変更できたりするのがありますが、どうやるのでしょう?
スクリプトにリストを書いてダイアログを表示させることはできます。
また、ノートカードを読み込ませて、Sayで発言させることもできます。
でも、それを合体させることができません。
例えばノートにテレポート先の名前を書き込んでいくと、それにあわせて
ダイアログのボタンの数も増えたり減ったりさせるとか、
また、ラジオでラジオ局とURLを書くとダイアログのボタンがそれに合わせて
増えたり減ったりして選局できたり、ダイアログとノートカードの組み合わせ方が
理解できません。
頭悪い僕でも理解できるように解説して頂ける方いらっしゃいませんか?  


Posted by 初心者  at 16:24Comments(3)スクリプト関連

2009年03月30日

X、Y軸以外の回転軸について

花びらが咲くイメージで四角形の側面を四方にパタンと倒すのを作ってます。
が、その四角形を45度回転させて置いた場合は変な動きになります。
これもキレイに四方に倒す事は出来ますでしょうか? (最終的には八角形にしたいのです)

基本スクリは下記のとおりです。
Y軸よう・・・
 for (int=0; int<18; int++){
llSetRot(llGetRot() * llEuler2Rot(<0.0, 5.0, 0.0>*DEG_TO_RAD));
 }

X軸よう・・・
 for (int=0; int<18; int++){
llSetRot(llGetRot() * llEuler2Rot(<5.0, 0.0, 0.0>*DEG_TO_RAD));
 }


  


Posted by shiros  at 15:36Comments(5)スクリプト関連