アウトプットから自分の技術力をスコア化してみませんか?PR

LAPRASでQiitaやX、connpassなど、様々なアウトプットを総合して統計的に技術力を算出!

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アバターの状態を監視して、アニメーションを変更するスクリのサンプル

Last updated at Posted at 2018-12-16

アバターの状態でアニメーションを変更するスクリのサンプルです。
Timer でアバターの状態を取得して、状態によってアニメを切り替えます。
サンプルは2つのアニメを切り替えるだけですが
以下の状態わけで再生するアニメーションを変更できますので
string anim_* を追加してゆけばそれぞれ別のアニメを再生することが可能です。

ではみなさんお楽しんでね!!

AOの実装には向きません1

ステータス 説明
AGENT_ALWAYS_RUN 走行モード("常に走る") になっている、もしくは tap-tap-hold を使っている
AGENT_ATTACHMENTS 装着している
AGENT_AUTOPILOT "オートパイロット" モード
AGENT_AWAY "away" モード
AGENT_BUSY "busy" モード
AGENT_CROUCHING しゃがんでいる
AGENT_FLYING 飛んでいる
AGENT_IN_AIR 空中に浮かんでいる
AGENT_MOUSELOOK マウスルック
AGENT_ON_OBJECT オブジェクトに座っている
AGENT_SCRIPTED スクリプトを装着
AGENT_SITTING 座っている
AGENT_TYPING 入力している
AGENT_WALKING 歩いている、走っている、しゃがみ歩きをしている
[status_anim_change.lsl]

string anim_1 = "patapata";
string anim_2 = "patapata 1";
float gap = 0.5;
string currentAnim = "";

startAnimation(string anim)
{
    if(currentAnim == anim) return;
    
    stopAnimation();
    
    currentAnim = anim;
    
    if( currentAnim != "")
    {
        llStartAnimation(currentAnim);
    }
}

stopAnimation()
{
    if(currentAnim != "")
    {
        llStopAnimation(currentAnim);
        currentAnim = "";
    }
}

default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
        //channel = genCh();
        //handle = llListen(channel, "", llGetOwner(), "");
    }

    changed(integer change)
    {
        if(change & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
    
    attach(key id)
    {
        if(id)
        {
            llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION);
        }
        else
        {
            currentAnim = "";
        }
    }
    
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_TRIGGER_ANIMATION)
        {
            llStopAnimation("sit");
            startAnimation(anim_1);
            llSetTimerEvent(gap);
        }
    }
    timer()
    {
        /*
        AGENT_ALWAYS_RUN    // 走行モード("常に走る") になっている、もしくは tap-tap-hold を使っている 
        AGENT_ATTACHMENTS   // 装着している 
        AGENT_AUTOPILOT     // is in "オートパイロット" モード 
        AGENT_AWAY          // "away" モード 
        AGENT_BUSY          // "busy" モード 
        AGENT_CROUCHING     // しゃがんでいる 
        AGENT_FLYING        // 飛んでいる 
        AGENT_IN_AIR        // 空中に浮かんでいる 
        AGENT_MOUSELOOK     // マウスルック 
        AGENT_ON_OBJECT     // オブジェクトに座っている 
        AGENT_SCRIPTED      // スクリプトを装着 
        AGENT_SITTING       // 座っている 
        AGENT_TYPING        // 入力している 
        AGENT_WALKING       // 歩いている、走っている、しゃがみ歩きをしている 
        */
        
        integer info = llGetAgentInfo(llGetOwner());

        if( info & AGENT_FLYING )
        {
            startAnimation(anim_1);
        }
        else if( info & AGENT_IN_AIR )
        {
            startAnimation(anim_1);
        }
        else if( info & AGENT_TYPING )
        {
            startAnimation(anim_2);
        }
        else if( info & AGENT_WALKING )
        {
            startAnimation(anim_1);
        }
        else if( info & AGENT_ATTACHMENTS )
        {
            startAnimation(anim_1);
        }
        else
        {
            stopAnimation();
        }
    }
}
  1. AO には 本来 llSetAnimationOverride を使うべきです。そうすれば Timer の使用もせずきれいにまとまります。本スクリは装着物に応じた変更を AO もしている状態でどう実装するかというのに対するアプローチの一例であることを前置きします。http://wiki.secondlife.com/wiki/LlSetAnimationOverride/ja

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Advent Calendar is held!

Qiita Advent Calendar is an article posting event where you post articles by filling a calendar 🎅

Some calendars come with gifts and some gifts are drawn from all calendars 👀

Please tie the article to your calendar and let's enjoy Christmas together!

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?