今回は持ち物から出したら一定時間毎に成長していく(プリムが大きくなる)スクリプトを考えてみました。成長のたびにテクスチャも指定できるようにしたので植木やお花みたいなオブジェクトに良いんじゃないかなって思います。但しリンクしてるプリムは全部同じサイズで成長するようにしたので、鉢がくっついてるようなものには使えません^^;
サイズ変更、位置移動はllSetPrimitiveParamsとllSetLinkPrimitiveParamsでも良かったんですけど、嬉しそうにllSetLinkPrimitiveParamsFast使いましたw
各プリムのY方法のサイズを0.01にして、2~4枚組み合わせて作ってください。側面はスクリプトで透明にしています。
それから、最初のサイズの厚みを直さないといけないですけど、一応1プリムのスカルプにも対応してます。
// 成長する樹木
vector size=<0.5,0.01,0.5>; // 最初のサイズ
integer interval=86400; // 間隔(秒)
list grow_list=[ // 倍率,"テクスチャUUID"
1,"テクスチャのUUID1",
2,"テクスチャのUUID2",
4,"テクスチャのUUID3",
7,"テクスチャのUUID4",
10,"テクスチャのUUID5",
NULL_KEY];
integer len;
integer count; // カウンタ用
grow()
{
vector p=llGetPos(); // 位置取得
vector s1=llGetScale(); // 現在のサイズ取得
vector s2; // 次のサイズ計算用
float f=llList2Float(grow_list,count*2); // 倍率
key id=llList2Key(grow_list,count*2+1); // テクスチャのキー
if (llGetNumberOfSides() > 1) s2=<size.x*f,size.y,size.z*f>; // スカルプでないときのサイズ計算
else s2=size*f; // スカルプのとき
llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_SIZE,s2, PRIM_POSITION,<p.x,p.y,p.z+(s2.z-s1.z)/2>]); // 親プリムのサイズと位置変更
llSetLinkPrimitiveParamsFast(LINK_ALL_CHILDREN,[PRIM_SIZE,s2]); // 子プリムのサイズ変更
if (id) llSetLinkTexture(LINK_SET,id,ALL_SIDES); // テクスチャ変更
}
default
{
state_entry()
{
len=llGetListLength(grow_list)-1; // ヌルキーを除いたリストの長さ
if (llGetNumberOfSides() > 1) { // 親プリムに面が2つ以上あったら(スカルプじゃない)
llSetLinkAlpha(LINK_SET,0,ALL_SIDES); // 一度プリム全面を透明にして
llSetLinkPrimitiveParams(LINK_SET,[PRIM_COLOR,1,<1,1,1>,1.0,PRIM_COLOR,3,<1,1,1>,1.0]); // 面番号1と3だけ不透明にする
}
grow(); // growへ
}
on_rez(integer start_param)
{
grow(); // growへ
llSetTimerEvent(interval); // タイマースタート
}
timer()
{
count++; // カウンタ加算
grow(); // growへ
if (len <= (count+1)*2) { // 成長が終わったら
llSetTimerEvent(0); // タイマーストップ
llOwnerSay("The end of growing.");
}
}
}
サンプルは1日(86400秒)で1段階成長します。成長しきった状態は5m(0.5*10=5)です。倍率や最初のサイズを大きな値にしてもプリムの大きさの制限で10mが最大になります。
テクスチャのUUIDは、持ち物内のテクスチャを右クリックして「資産UUIDをコピー」でコピーできますので、それを貼り付けしてくださいね。
0 件のコメント:
コメントを投稿