2010年04月09日

装備オブ内のアニメが誰かにタッチされると起動するスクリプト

こんにちは☆

Google検索で結局情報を得られず、こちらに質問をさせて頂きます>< どなたかお詳しい方の貴重なアドバイス頂けたら本当に嬉しいです。。。

お尋ねしたいことはスクリプトのことなのですが、こういったことをしたいのです。

Aさんが装備しているオブジェクトの中にアニメファイルとスクリプトを仕込んであり、BさんやCさんなど不特定多数の誰でも、Aさんが装備しているそのオブジェクトをタッチすることで、そのオブジェクト内に仕込まれているアニメーションが起動されることがしたいのです。。


アニメーションを止めるために以下のように、2タイプのバリエーションが知りたいです。一つのスクリプトでいずれも兼ねる必要はございません。

①アニメーションが1回再生し終わると、元のデフォルト状態の姿勢に戻るタイプと、
②アニメーションが延々繰り返されるタイプ(再度オブジェクトをタッチするまでアニメは停止しない。※停止権限はAさん自身でも誰でも停止することが出来る)


お詳しい方のアドバイス、どうかよろしくお願いいたします (o^^o)

momoko



同じカテゴリー(スクリプト関連)の記事画像
オブジェクトのリンクとタッチで開く扉
自動チャットを止めたい
テレポートするとアニメーションが解除される
同じカテゴリー(スクリプト関連)の記事
 テクスチェンジのHUDについて (2015-07-01 04:51)
 モール用のプリムカウンターを探しています (2014-11-29 20:09)
 連続するアニメーションの処理 (2014-08-24 03:23)
 オブジェクトの上にフローティングテキストを出す。 (2014-08-22 16:46)
 チャットログの盗聴について (2014-02-03 03:43)
 椅子に座った後で位置調整できるスクリプト (2013-03-24 16:37)

Posted by momoko23  at 16:01 │Comments(8)スクリプト関連

この記事へのコメント

attach
 アタッチされたなら
  パーミッション要求

touch_start
 アタッチされているなら
  アニメーションを再生する


②のタイプなら、
touchイベントでそのアニメーションが再生中かどうか調べて、再生中なら停止、再生していなければ再生する。


基本的にこれだけなんですが、どの辺がわからないですか?
Posted by ん? at 2010年04月09日 18:40
あ、ちがった
②はtimer使えばよかですね
Posted by ん? at 2010年04月09日 19:37
アニメのループと非ループは、アニメをアップロードする時点で設定します。
ループ設定されているアニメを使用するのであれば、再生1回の長さを計っておいて、再生してからその秒数経ったら止めるくらいしか思いつかないな…。
Posted by L at 2010年04月10日 09:03
ん?そつき
Posted by 雪崩 at 2010年04月10日 10:36
色々なパターンが想像されますが、どんな動きを目指しているのでしょうか?
-----------------------
確認1
「Aさんが装着しているアイテムをBさんやCさんがタッチすると・・・」
case1-1:Aさんがアニメーションする
case1-2:BさんやCさんがアニメーションする
-----------------------
case1の場合、ん?さんが仰っている流れでOKだと思います。

case2の場合↓
-----------------------
確認2
「Bさんがアニメしているところに、Cさんがタッチすると・・・」
case2-1:Bさんのアニメが停止して、Cさんがアニメを開始する
case2-2:Bさんに続いてCさんもアニメを開始する
-----------------------
case2-1ならば、一度Bさんのアニメを停止させてから、新しくCさんのパーミッションを取り直してアニメを再生させます。

case2-2の場合、アニメーションさせたい人数分のアニメ再生スクリプトが必要になります。(例>5人同時にアニメさせたいなら5個)

-----------------------
アニメの繰り返しは、アニメーションファイル自身に設定しますので、アップロード時にループ設定を行って下さい。
ループするアニメならば、一度開始すれば停止命令を出すまで何度も繰り返します。
Posted by natsu at 2010年04月11日 14:46
①の場合はループしないアニメーションであれば普通にアニメを開始すればOKです。

②の場合は、アニメーションの制御は最後にパーミッションを取得したアバターに対して発動します。
ですから、どんな仕様で作成されるにせよ、多人数のダンスボールないしその類似品を作成される場合は、権限を取得済みのアバターの情報を何らかの形で管理しておく必要があります。


たとえば、要するに模式的には以下の様な事になります。
list agentListにアバターのキーを保存・削除しています。

市販の多人数用のダンス装置は、当然はるかに高度ですが、基本的な構造は同じです。
(たとえば、下はこのままでは、タッチしてアニメーションが開始されたアバターがアニメを停止(=2回目のタッチ)せずに他のSIMなどにいってしまった場合に、agentListに当人の情報が残ってしまいますので、そのうちメモリーが足りなくなってスクリプトは実行を停止するでしょう。)

// www.lsleditor.org by Alphons van der Heijden (SL: Alphons Jano)
list agentList;
default
{
touch_start(integer total_number)
{
//パーミッションを要求する。
llRequestPermissions(llDetectedKey(0),PERMISSION_TRIGGER_ANIMATION);
}
run_time_permissions(integer perms)
{
if (perms & PERMISSION_TRIGGER_ANIMATION)
{
//パーミッションが取れたアバターのキーを取得する。
key k=llGetPermissionsKey();
//タッチしたアバターのキーがリストにあるか探す
integer i=llListFindList(agentList,(list)k);
if (i==-1)
{
//いなかった
//再生開始。
llStartAnimation("turn_180");
//再生を開始したアバターのキーをリストに登録する。
agentList=agentList+k;
}
else
{
//いた。何かする。

//例)アニメーションを停止してリストから削除する
llStopAnimation("turn_180");
agentList=llDeleteSubList(agentList,i,i);
}
}
}
}
Posted by RBK Drachnyd at 2010年04月13日 20:15
タッチしたアバターの管理はいらないですね。^^;
消せないみたいなので、忘れてください、上は間違いです。失礼致しました。
Posted by RBK Drachnyd at 2010年04月13日 20:30
お返事が遅くなってしまいました。

アドバイスをしてくださったみなさん、本当にどうもありがとうございました☆
Posted by momoko at 2010年04月17日 19:50
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。