イベントの看板はたいてい正方形の画面です。
でも正方形でなくてももちろんOKで 今度のイベント(16日木曜日)では縦が長い看板です。
そこでどんな縦横比の看板でも対応できるようにしました。
看板飛行船の準備は箱を編集して画像を貼ることで(Edit > Texture > Texture)できますが もし看板画面が正方形でない場合には箱の横幅も変えます。(Edit > Object > Size:X)
こうすると飛行船が飛ぶときにさげる看板の縦横比を箱と同じにします。
画面縦横の比率だけが問題なので横幅(X)さえ変えれば箱の高さ(Z)は変えなくてOK!
(…高さを変えると箱の一部が地面に埋まったり逆に浮いたりするので あれ?調整が必要?と悩むはめに…(^^;)…実際にはもちろんこの心配も不要!)
看板の縦横比を調節するスクリプト:
listen(integer ch,string na,key id,string msg)
{
list info = llParseString2List(msg,[":"],[]);
string command = llList2String(info,0);
string data = llList2String(info,1);
if (command=="XzRatio") { // 縦横比
float xzratio = (float)data;
vector size = getSignParams(PRIM_SIZE); // 看板のサイズ
vector pos = getSignParams(PRIM_POS_LOCAL); // ローカル位置
pos.z += size.z*0.5; // 看板の上端
size.x = llSqrt(size.x*size.z*xzratio); // 画面の横幅, 面積は同じ
size.z = size.x/xzratio; // 画面の高さ
pos.z -= size.z*0.5; // 看板の中心
llSetLinkPrimitiveParams(LinkSign,[PRIM_POS_LOCAL,pos,PRIM_SIZE,size]);
}
}
箱も看板も Xが横で Zが縦です。
スクリプトはイベントが始まる飛行船を出すタイミングで箱の縦横比を調べて Rez した飛行船に伝えます。
飛行船の側ではもとからつけてる看板と面積は同じになるように縦横の長さを変えます。
さげる位置も看板のてっぺんが同じになるように Z 方向の位置を調節しています。

