listenイベントの最大数

listenイベントの最大数

by yin chang (infrared Razor) -
Number of replies: 6

前にスカイランタン(空飛ぶ行灯)を作っていたのをイベントで一度にたくさん飛ばそうと言うことになり、タッチで飛ぶ仕組みだったものを裏チャットで飛ぶように改造していました。

飛行部分はwebで拾ってきた風船のスクリで、いろいろググったりスクリプタさんに聞いたりしながら作ってたんですが…

自分のsimで試したところ、数十個rezしてシャウトで飛ばしてみると、6個くらいしか飛びませんw

そこでさらに調べてみるとllListenはずっと待機状態だとけっこう重いんだと書いてあるサイトを見つけ、これはもしかしたらとlistenしたらすぐにllListenRemoveするようにしました。

いやスクリ書いてる方には常識なのかもしれませんが^^;;

それでもう一度テストすると数十個ちゃんと飛んでくれました。

一斉に飛んじゃうとあっというまに終わっちゃうので、listenしたあとランダムに時間を置いて飛ぶように改造し、会場である島上で四百数十個rezしテストしたところ全部飛んでくれました。

ただこれだけの数が物理になるとかなり重く、物理FPSが一時的にひと桁にww

それでもトラブルなく終わったので再度タイマーの数値を変え、今度は600個以上でテストしたところ…今度は100個以上残ってしまいました。

残った子たちにチャットコマンド与えても反応しないところを見ると、listenイベントは起こりListenRemoveされているようです。それでも飛ばないところを見るとその後の物理化のユーザ関数呼び出しに失敗したのかな??

タッチしたところ、タッチイベントは発生し飛んでくれました。

不思議だったのは、listenで飛ばなかった子たちはスクリプトをリセットしてもチャットコマンドを受け付けてくれなかったことです。

新しくrezしたものは普通にチャットコマンドで飛んだので、sim側がお腹いっぱいでlisten受け付けないとかじゃなかったようです。

ま、本番は500個以下でやりましょうw

In reply to yin chang (infrared Razor)

Re: listenイベントの最大数

by Iseki Fumikazu -

有益な情報ありがとうございます.

確認ですが,これは OpenSimでの話でしょうか,それともSLですか?

OpenSim の場合は OpenSim.ini の [XEngine] の所でいろいろ数字を変えて試してみると面白いかもしれません.

MaxScriptEventQueue などの設定もあります(デフォルトは300)

(yinさん以外の方でも) もし時間がおありなら JOG_TEST2 あたりで色々実験しても良いですよ.
パラメータ変更のリクエストにも応じます.

ただし,実験データはくださいね smile

In reply to Iseki Fumikazu

Re: listenイベントの最大数

by yin chang (infrared Razor) -

JOG内での実験でした。

私はビューワからの操作しかできないので、物理FPS等もビューワ表示の数値です^^;

In reply to yin chang (infrared Razor)

Re: listenイベントの最大数

by Iseki Fumikazu -

>> JOG内での実験でした。

わかりました.ありがとうございます.

>> 私はビューワからの操作しかできないので、物理FPS等もビューワ表示の数値です^^;

実はサーバのFPS もOpenSimDefault.ini のデフォルトではかなり抑えられた数値になっています.
これを上げたらどうなるかもその内やってみたいです.

OpenSimDefault.ini 内のコメントも微妙なので... (^_^;

    ; The minimum proportion of a second that any particular frame can take to execute.
    ; Only change this if you really know what you're doing, and be prepared to change UpdatePhysicsEveryNFrames
    ; (and other Frames params) to match!  For instance, halving MinFrameTime to 0.0445 require
    ; UpdatePhysicsEveryNFrames = 2 unless you don't mind your avatar walking like Benny Hill.
    MinFrameTime = 0.089

Benny Hill の歩き方って,どんなのでしょう (^_^;

MinFrameTime = 0.089 で大体 1/0.089 = 11.2 FPS くらいです.

 

In reply to Iseki Fumikazu

Re: listenイベントの最大数

by yin chang (infrared Razor) -

>Benny Hill の歩き方って,どんなのでしょう (^_^;

Benny Hill walkでYoutube検索してみたところ、フィルムを早回ししたような動きのことを言うようですね^^;

In reply to yin chang (infrared Razor)

Re: listenイベントの最大数

by Shinobar Martinek -

> listenしたらすぐにllListenRemoveするようにしました。

そうですね。コマンドを1回限り聞くケースではそのようにします。

あと、時間制限を設けて、コマンドが一向に来ないときは一定時間後に強制的に llListenRemoveするのが無難です。

個別の状況でいろんな手法が考えられます。一般的な話として、タイムリミットを設けるやり方を紹介しました。

In reply to Shinobar Martinek

Re: listenイベントの最大数

by yin chang (infrared Razor) -

>あと、時間制限を設けて、コマンドが一向に来ないときは一定時間後に強制的に llListenRemoveするのが無難です。

なるほど、そうですね。それも追加してみます。