コード例 #1
0
    public override float ActionCharAnimRun(ActionCharAnim action)
    {
        string clip2DNew = action.clip2D;

        if (action.includeDirection)
        {
            clip2DNew += action.animChar.GetSpriteDirection();
        }

        if (!action.isRunning)
        {
            action.isRunning = true;

            if (action.method == ActionCharAnim.AnimMethodChar.PlayCustom && action.clip2D != "")
            {
                if (action.animChar.spriteChild && action.animChar.spriteChild.GetComponent <Animator>())
                {
                    action.animChar.charState = CharState.Custom;
                    action.animChar.spriteChild.GetComponent <Animator>().CrossFade(clip2DNew, action.fadeTime, action.layerInt);
                }
            }

            else if (action.method == ActionCharAnim.AnimMethodChar.ResetToIdle)
            {
                if (action.idleAfterCustom)
                {
                    action.layerInt = 0;
                    return(action.defaultPauseTime);
                }
                else
                {
                    action.animChar.ResetBaseClips();
                    action.animChar.charState = CharState.Idle;
                }
            }

            else if (action.method == ActionCharAnim.AnimMethodChar.SetStandard)
            {
                if (action.clip2D != "")
                {
                    if (action.standard == AnimStandard.Idle)
                    {
                        action.animChar.idleAnimSprite = action.clip2D;
                    }
                    else if (action.standard == AnimStandard.Walk)
                    {
                        action.animChar.walkAnimSprite = action.clip2D;
                    }
                    else if (action.standard == AnimStandard.Talk)
                    {
                        action.animChar.talkAnimSprite = action.clip2D;
                    }
                    else if (action.standard == AnimStandard.Run)
                    {
                        action.animChar.runAnimSprite = action.clip2D;
                    }
                }

                if (action.changeSpeed)
                {
                    if (action.standard == AnimStandard.Walk)
                    {
                        action.animChar.walkSpeedScale = action.newSpeed;
                    }
                    else if (action.standard == AnimStandard.Run)
                    {
                        action.animChar.runSpeedScale = action.newSpeed;
                    }
                }

                if (action.changeSound)
                {
                    if (action.standard == AnimStandard.Walk)
                    {
                        if (action.newSound != null)
                        {
                            action.animChar.walkSound = action.newSound;
                        }
                        else
                        {
                            action.animChar.walkSound = null;
                        }
                    }
                    else if (action.standard == AnimStandard.Run)
                    {
                        if (action.newSound != null)
                        {
                            action.animChar.runSound = action.newSound;
                        }
                        else
                        {
                            action.animChar.runSound = null;
                        }
                    }
                }
            }

            if (action.willWait && action.clip2D != "")
            {
                if (action.method == ActionCharAnim.AnimMethodChar.PlayCustom)
                {
                    return(action.defaultPauseTime);
                }
            }
        }

        else
        {
            if (action.animChar.spriteChild && action.animChar.spriteChild.GetComponent <Animator>())
            {
                // Calc how much longer left to wait
                float totalLength = action.animChar.spriteChild.GetComponent <Animator>().GetCurrentAnimatorStateInfo(action.layerInt).length;
                float timeLeft    = (1f - action.animChar.spriteChild.GetComponent <Animator>().GetCurrentAnimatorStateInfo(action.layerInt).normalizedTime) * totalLength;

                // Subtract a small amount of time to prevent overshooting
                timeLeft -= 0.1f;

                if (timeLeft > 0f)
                {
                    return(timeLeft);
                }
                else
                {
                    if (action.method == ActionCharAnim.AnimMethodChar.ResetToIdle)
                    {
                        action.animChar.ResetBaseClips();
                        action.animChar.charState = CharState.Idle;
                    }
                    else if (action.idleAfter)
                    {
                        action.animChar.charState = CharState.Idle;
                    }

                    action.isRunning = false;
                    return(0f);
                }
            }
            else
            {
                action.isRunning          = false;
                action.animChar.charState = CharState.Idle;
                return(0f);
            }
        }

        return(0f);
    }