2008年06月19日
オブジェクトが透明に・・
どうも!新米クリエイターのナイです
もう、わからないことばかりでぐつぐつ煮詰まっています。たすけてくださいな
当面のの問題は・・
制作したオブジェクトをクリックすると透明になってしまいます。
再度、クリックすると再表示されるのですが・・
玄人いわくそう設定されているとのこと・・
これを解除するにはどうすれびいいんでしょうか?
おしえてくださいな・・・
よろしくおねがいします。
この記事へのトラックバックURL
http://oshiete.slmame.com/t278404


どうやら搭載してるスクリプトに原因があるようです。
クリックすると透明になちゃうよ!と指定してあるみたいなんですが
その設定を外すところがわかりません。
だれかくわしいたおしえてください。
「クリックすると透明」ごと消して良いなら
touch_start
{
・・・・
}
を消せば良いけど、透明になる以外の処理もしてるなら消しちゃだめ。
差し支えなければスクリプトも載せると、もっと的確なお答えのレスが付くと思います^^
一応、スクリプトのせてみます
なにせ・・はじめたばりでわからず
ひろってきたものに変更を加えたものですので
いみがわからないんです
integer hidden = FALSE;
default
{
state_entry()
{
llSitTarget(<0.0, 0.0,0.6>, ZERO_ROTATION);
llSetSitText("AFK!");
}
changed(integer change)
{
if(change & CHANGED_LINK)
{
key avataronsittarget = llAvatarOnSitTarget();
if( avataronsittarget != NULL_KEY )
{
if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && llGetPermissionsKey() == avataronsittarget) {
llStopAnimation("sit");
llStartAnimation("Dance");
} else {
llRequestPermissions(avataronsittarget, PERMISSION_TRIGGER_ANIMATION);
}
}
}
}
run_time_permissions(integer perm)123
{
if(perm)
{
llStopAnimation("sit");
llStartAnimation("Dance");
}
}
touch_start(integer total_number)
{
if(hidden)
{
hidden = FALSE;
llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
}
else
{
hidden = TRUE;
llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
}
}
}
よろしくおねがいしますm(_ _)m
{
if(hidden) <ここから
{
hidden = FALSE;
llSetLinkAlpha(LINK_SET,1,ALL_SIDES);
}
else
{
hidden = TRUE;
llSetLinkAlpha(LINK_SET,0,ALL_SIDES);
} <ここまで
}
}
上の「ここから」と「ここまで」の間を消せば、タッチで透明度が変化することはなくなります。
いきなり消すのが怖ければ、
//if(hidden)
//{
//hidden = FALSE;
...
のように各行の先頭に//と書くことによっても無効化できます。
上で示した範囲ですが、行単位で消してくださいね。
つまり、最初の行でいうと、if(hidden){全部削除です。
解決しました
本当にたすかったですぅ
//==============================================================
integer hidden = FALSE; // 隠しているフラグ
default
{
state_entry()
{
llSitTarget(<0.0, 0.0, 0.6>, ZERO_ROTATION); // アバターが座ったときの位置と回転の指定
llSetSitText("AFK!"); // パイメニューのSitの設定
}
changed(integer change) // チェンジイベント
{
if(change & CHANGED_LINK) // オブジェクトのリンクに変化があった場合→アバターが座ったor立った
{
key avataronsittarget = llAvatarOnSitTarget(); // 座っているアバターのキー取得(立ち上がった場合はNULL_KEYとなる)
if(avataronsittarget != NULL_KEY) // アバターのキーがNULL_KEYではない場合=座った
{
if ((llGetPermissions() & PERMISSION_TRIGGER_ANIMATION) && llGetPermissionsKey() == avataronsittarget) // 現在保持しているパーミッションがアニメーションで、それは座っているアバターのキーと同じ場合→座っているアバターのアニメーションのパーミッションを保持している
{
llStopAnimation("sit"); // アニメーションの停止
llStartAnimation("Dance"); // アニメーションの開始
}
else // アバターのキーがNULL_KEYの場合=立った
{
llRequestPermissions(avataronsittarget, PERMISSION_TRIGGER_ANIMATION); // 座ったアバターにパーミッション要求
}
}
// ここに立ったときのアニメーションを停止する処理を入れる(後述)
}
}
run_time_permissions(integer perm) // パーミッション要求の応答イベント
{
if(perm) // なんらかのパーミッションが取得できている場合
// if(perm & PERMISSION_TRIGGER_ANIMATION) // ↑より正確な比較式
{
llStopAnimation("sit"); // アニメーションの停止
llStartAnimation("Dance"); // アニメーションの開始
}
}
touch_start(integer total_number) // タッチ開始イベント
{
if(hidden) // 隠しているフラグがTRUEの場合→隠している状態
{
hidden = FALSE; // 隠しているフラグの変更
llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); // リンクしているプリムの全面を非透明にする
}
else //
{
hidden = TRUE; // 隠しているフラグ変更
llSetLinkAlpha(LINK_SET, 0.0, ALL_SIDES); // リンクしているプリムの全面を透明にする
}
}
}
//==============================================================
まず、タッチしてプリムを透明/非透明にしているので、ご希望の動作をさせたいならtouch_startイベントごと削除すれば可能です。
ここで気になる点ですが、このスクリプトを入れたオブジェクトにアバターが座ってDanceを始めるわけですが、立ち上がってもダンスし続けてませんか?
(アニメーションの優先度の設定にもよります)
その場合は、if(avataronsittarget != NULL_KEY)に対になるように(コメント参照)
else
{
llStopAnimation("Dance");
}
を入れれば立ち上がるとDanceは停止します。
さらに、オリジナルではタッチすればオブジェクト(きっとダンスボール系のもの)が消えるようになって、見た目もすっきりすることを意図しているのだと思いますが、タッチしなくてもアバターが座ったら消える、立ったら現れるようにするには、それぞれDanceを開始している後に、タッチイベントの中で使っているllSetLinkAlpha関数を入れてやれば出来ます。
これは凄い!
凄く参考になります。
ご伝授有り難うございますm(_ _)m
なにせ、セカンドライフははじめて一週間くらいなもので
さらにこんなスクリプトは触ったこともないので
何が何だかめがまわっます。
これでどうなってるのかわかりました。
もともと、拾ってきたモノに変更をくわえてるだけなので
こちらの意図した通りにうごいてくれなくて
こまってました。
これから上記のものは穴の開くほど見つめて
スクリプトの変更させていただきます。
本当にあっりがとうございました(゚゚)(。。)ペコッ
else // アバターのキーがNULL_KEYの場合=立った
の部分は
else // パーミッションを持っていない場合
でした