2013年6月1日土曜日

AnimationOverride関数

こんばんは、こんじょおです。またちょっとゲームをやっている間に夏ですよ。


今回は私はLSL素人だという予防線を念頭に置いてお読みください。

AO用のLSL関数が知らない内に実装されていたので試してみました。
実装されてからそれなりに時間が経ってますのでエロい人がZHAO的なフリー品を放出してるだろうと軽く検索するも見つからず自作。

実に軽快な動作です。

LSL知らない方にそもそもZHAOとは何をしているかざっくりと説明するとですね
・装着しているアバターが現在何のアニメを再生しているか調べる→
・該当アニメに上書きするように設定されているか調べる→
・設定されている場合そのアニメを再生する
というのを標準だと0.25秒に一度やってるアレです。
この頻度のおかげでAOは重いと言われていたわけですが、Override関数を使うと
・装着した時に標準アニメそのものを書き換える
で、終わりですのでラグの原因にはならないのです。今後イベント時に「重いからAO切れ」と言う時は注意が必要です。
標準以外のアニメをDLするから帯域喰うだろバーカですか知りません

又、標準アニメそのものを書き換えますので、アニメの優先度を4にしないと標準アニメに上書きされちゃう現象も回避できます。
手持ちアニメが仕込まれた装着品等の事を考えると、AO用のアニメは優先度3以下がよろしいのではないかと。
ZHAOの時にあった操作時の微妙なもっさり感もなくなりました。

ここまではいいんですが、さすがLindenきれいに終わりません。

Wikiにあったサンプル文のここ
    attach(key id)
    {
        if ( id ) llRequestPermissions(id , PERMISSION_OVERRIDE_ANIMATIONS);
        else if ( llGetPermissions() & PERMISSION_OVERRIDE_ANIMATIONS ) llResetAnimationOverride("ALL");
    }
装着されたらOverrideの権限を求め、外す時にoverrideの権限を持っていれば全ての設定をリセットする
という意味ですが
外す時はすでにoverrideの権限が開放されており、当然その後の設定リセットがなされません。
権限が開放されてますので
else llReset~と外す時に問答無用でリセットと書くと、「権限もっとらんぞキサマ」エラーが出ます。
ですので、外す時に再度override権限を取得し、設定リセットとやる手間が。
これ書いた人試してねえだろですよ

二つ目。PreJumpとJump

私がAOを作る時は上記の二つは一つのアニメを共有しているのですが、override関数でこの二つに同じアニメを割り振るとですね
prejumpの溜めが無視されます。
0.5秒ほどの溜めを想定して作ったアニメですので、見た目がおかしい事に。ついでに時々固まります。
んじゃちょっとの手間とうp代を支払ってprejumpとjumpを別アニメにしてそれぞれに割り振れば解決だよなーと思えばどっこい
prejumpとjumpの間に謎の間ができます。
どうもprejumpの前のアニメがひょっこり顔を出してるような感があります。ものすごい違和感です。

色々試しましたが、結局
溜めを作ったjump用アニメをjumpに設定し、同アニメの冒頭を切り取ったアニメをprejumpに設定。その上で
control( key _id, integer _level, integer _edge ) {
    if ( _level && _edge & CONTROL_UP) {
        if(!(llGetAgentInfo(Owner) & AGENT_IN_AIR)){
            llStartAnimation("Jump用アニメ");
        }
    }
で、無理やり謎の間をjumpアニメで上書き。
これだと溜めが無視されたりされなかったりで気持ち悪いんですが固まったり謎の間が出たりするよりはマシかと妥協。
エロい人ならもっとスマートなやり方を思いつくでしょうからそれまで我慢。がんばれエロい人!
動作は軽いのでWyvernのAOはこっちで組もうと思います。それまでになんとかしてくださいエロい人!!

手持ちで不具合出ても困らない品、という事でえび尻尾とトカゲ足をoverride関数使用に置き換えました。
トカゲ足にはjumpも追加しました。
マーケットプレイスのも入れ替えましたので、ラグ無縁のAO体験はこれでどうぞ。
https://marketplace.secondlife.com/p/5-Joints-on-Legs/4683136

Wyvernの進展状況
wy04
お気にの音楽が流れると踊りだすインコの動画の再現っぽく。

Walk/Run/Crouch/CrouchingWalk/TurnL.R/softLanding/Landing/Jump
上記9種のアニメがひとまず終わり。
残すはHover/Hovering Up/Hovering Down/Fly/Falling Down/Standing Up
6種ですね。
StandとSit関連は思いつくだけ作ります。10種ぐらいでしょうか

アニメはあと一週間もかからないはずですが、メッシュ部分が細部の作りこみもUV展開もテクスチャ作成もまだですので、発売はもーちょい先です。

テクスチャは適当にすませてMod用素体として出すっていうのも有りですねえ、楽ですし。