まず装置のプリムを作成します。1.0x1.0x0.2ぐらいのボックスを作り、面番号1番の面(Y軸のマイナス側の面)に操作パネルのテクスチャ(「← →」みたいな)を作って貼り付けてください。。。まあこのアニメーションベンダーと同じ感じにしてもらったらOKです。
そして、0.5x0.5x0.5ぐらいのボックス(ボックス以外でもいいけど)を作って、先ほど作ったプリムの真上に少し空間を空けて浮かべて、これを子プリムとしてリンクさせてください。(2プリムのオブジェクトになります)
続いてスクリプトです。スカルプの縫い目の種類はシリンダーに打ち決めしてます。http://wiki.secondlife.com/wiki/PRIM_TYPE_SCULPT/ja
// Sculpt viewer
integer number; // スカルプトテクスチャの数
integer cur; // ポインタ用
integer sculpt=2; // 子プリムのリンク番号
integer sculpt_type=PRIM_SCULPT_TYPE_CYLINDER; // スカルプの縫い目の種類
set_sculpt()
{
string texture=llGetInventoryName(INVENTORY_TEXTURE,cur); // ポインタからテクスチャ名を取得
if (number > 0) llSetText(texture+" ("+(string)(cur+1)+"/"+(string)number+")",<1,1,1>,1.0); // テクスチャが入ってるときフローティングテキストを表示
else llSetText("",<1,1,1>,1.0); // 入ってないときはフローティングテキスト非表示
llSetLinkPrimitiveParamsFast(sculpt,[PRIM_TYPE,PRIM_TYPE_SCULPT,texture,sculpt_type]); // スカルプを表示
}
init()
{
number=llGetInventoryNumber(INVENTORY_TEXTURE); // コンテンツ内のテクスチャ数
if (cur >= number) cur=0; // ポインタを初期化
set_sculpt(); // set_sculptへ
}
default
{
state_entry()
{
init(); // 最初はinitへ
}
changed(integer change)
{
if (change & CHANGED_INVENTORY) init(); // コンテンツ内が変化したらinit
}
touch_start(integer total_number)
{ // タッチ
integer i=llDetectedTouchFace(0); // タッチされた面番号
if (i == 1) { // 面番号が1だったら
vector v=llDetectedTouchUV(0); // タッチされた位置
if (v.x > 0.5) { // 中央よりも右だったら「→」
cur++;
if (cur >= number) cur=0;
}
else { // そうでないときは「←」
cur--;
if (cur < 0) cur=number-1;
}
if (cur >= 0) set_sculpt(); // set_sculptへ
}
else if (i == -1) { // 古いビューワーは非サポート
llWhisper(0,"Your viewer is not support.");
}
}
}
スクリプトを装置の親プリムのコンテンツに入れて、スカルプのテクスチャ(スカルプトUVマップ)もそこに入れてください。テクスチャを複数入れたら「←」「→」で順次表示できます^^
縦、横、高さとも同じ長さなので、やっぱりスカルプの階段なんかはこんな感じになりますけどねwww
0 件のコメント:
コメントを投稿