Unity通过代码控制动画范例脚本,从而实现对动画的全局控制

using UnityEngine;
using System.Collections;
 
public class AnimationManager : MonoBehaviour {
    /// <summary>
    /// 创建动画动画控制委托,后面创建播放动画方法,然后就调用就可以直接用委托的对象来调用
    /// 例:animationHandler = xxx, 
    /// </summary>
    public delegate void AnimationHandler();
    /// <summary>
    /// 创建动画对象
    /// </summary>
    Animation animation;
    /// <summary>
    /// 创建动画控制器单例
    /// </summary>
    public static AnimationManager instance;
    /// <summary>
    /// 创建各个动画,外面赋值
    /// </summary>
    public AnimationClip Dead;
    public AnimationClip JumpDown;
    public AnimationClip JumpLoop;
    public AnimationClip JumpUp;
    public AnimationClip Roll;
    public AnimationClip Run;
    public AnimationClip TurnLeft;
    public AnimationClip TurnRight;
    /// <summary>
    /// 实例化委托
    /// </summary>
    public AnimationHandler animationHandler;
 
    // Use this for initialization
    void Start () {
        //初始化单例
        instance = this;
        //默认播放奔跑动画
        animationHandler = PlayRun;
        //拿到动画组件,挂载在本体上的
        animation = GetComponent<Animation>();
    }
    /// <summary>
    /// 播放各个动画
    /// </summary>
    #region
    public void PlayDead()
    {
        animation.Play(Dead.name);
    }
 
    public void PlayJumpDown()
    {
        animation.Play(JumpDown.name);
    }
 
    public void PlayJumpLoop()
    {
        animation.Play(JumpLoop.name);
    }
 
    public void PlayJumpUp()
    {
        animation.Play(JumpUp.name);
        if (animation[JumpUp.name].normalizedTime > 0.95f)
        {
            animationHandler = PlayRun;
        }
    }
 
    public void PlayRoll()
    {
        animation.Play(Roll.name);
        if (animation[Roll.name].normalizedTime > 0.95f)
        {
            animationHandler = PlayRun;
            PlayerController.instance.isRoll = false;
        }
        else
        {
            PlayerController.instance.isRoll = true;
        }
    }
 
    public void PlayDoubleJump()
    {
        animation.Play(Roll.name);
        if (animation[Roll.name].normalizedTime > 0.95f)
        {
            animationHandler = PlayJumpLoop;
        }
    }
 
    public void PlayRun()
    {
        animation.Play(Run.name);
    }
 
    public void PlayTurnLeft()
    {
        animation.Play(TurnLeft.name);
        if(animation[TurnLeft.name].normalizedTime > 0.95f)
        {
            animationHandler = PlayRun;
        }
    }
 
    public void PlayTurnRight()
    {
        animation.Play(TurnRight.name);
        if (animation[TurnRight.name].normalizedTime > 0.95f)
        {
            animationHandler = PlayRun;
        }
    }
    #endregion
    // Update is called once per frame
    void Update () {
        if(animationHandler !=null)
        {
            //在update里面实时判断委托播放动画
            animationHandler();
        }
    }
}

 

 

 

 

G

M

T

 

 

 Detect languageAfrikaansAlbanianAmharicArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CorsicanCroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchFrisianGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHawaiianHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanKurdishKyrgyzLaoLatinLatvianLithuanianLuxembourgishMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPashtoPersianPolishPortuguesePunjabiRomanianRussianSamoanScots GaelicSerbianSesothoShonaSindhiSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshXhosaYiddishYorubaZulu

 

AfrikaansAlbanianAmharicArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CorsicanCroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchFrisianGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHawaiianHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanKurdishKyrgyzLaoLatinLatvianLithuanianLuxembourgishMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPashtoPersianPolishPortuguesePunjabiRomanianRussianSamoanScots GaelicSerbianSesothoShonaSindhiSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshXhosaYiddishYorubaZulu

 

 

 

 

 

 

 

 

 

Text-to-speech function is limited to 200 characters

 

 

 

Options : History : Feedback : DonateClose
  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Unity实现对话框的动画展开,可以使用Unity的Animation系统。以下是一个简单的示例,假设你有一个名为“DialogBox”的UI面板,其中包含一个名为“Content”的子对象,它是对话框中实际显示文本的容器。 1. 创建动画控制器 在项目资源文件夹中创建一个新的Animation Controller。右键单击资源管理器窗口中的文件夹,选择Create -> Animation Controller。将其命名为“DialogBoxAnimator”。 2. 添加动画状态 选中“DialogBoxAnimator”动画控制器,然后在Animator视图中单击“Create State”按钮。创建两个动画状态:一个用于展开对话框,一个用于收起对话框。将这两个状态分别命名为“Open”和“Close”。 3. 添加动画剪辑 选中“Open”状态,然后在Inspector视图中单击“Add Property”按钮。选择“RectTransform”组件,然后展开其“Scale”属性。单击“+”按钮以创建一个新的动画剪辑。将其命名为“OpenDialog”。 4. 编辑动画剪辑 选中“OpenDialog”动画剪辑。在Timeline视图中,将时间轴拖动到0秒处。在Inspector视图中,将“Content”对象的“Scale”属性设置为(0,0,0)。然后将时间轴拖动到1秒处,并将“Content”对象的“Scale”属性设置为(1,1,1)。这将使对话框在1秒内从完全隐藏到完全展开。 5. 添加动画参数 在Animator视图中,单击“Add Parameter”按钮。创建一个名为“isOpen”的布尔型参数。将其默认值设置为false。 6. 添加状态转换 从“Open”状态向右单击并拖动鼠标,然后将其释放在“Close”状态上。这将创建一个新的转换。在Inspector视图中,将“Exit Time”设置为0.9。这将使动画在90%的时间处结束,并在最后10%的时间内转换到“Close”状态。 7. 设置状态转换条件 选中从“Open”状态到“Close”状态的转换。在Inspector视图中,单击“+”按钮,然后选择“Condition”。将其命名为“isClosed”。将其“Parameter”设置为“isOpen”,将其“Value”设置为false。 8. 为打开和关闭添加触发器 在Inspector视图中,单击“Add Transition”按钮。创建一个从“Any State”状态到“Open”状态的转换。在转换的Inspector视图中,将“Has Exit Time”设置为false,并将“Duration”设置为0。然后单击“+”按钮,选择“Condition”。将其命名为“isOpen”。将其“Parameter”设置为“isOpen”,将其“Value”设置为true。 重复以上步骤,创建一个从“Any State”状态到“Close”状态的转换。将其“Condition”命名为“isClosed”,将其“Parameter”设置为“isOpen”,将其“Value”设置为false。 9. 编写代码脚本中,你可以控制对话框的展开和关闭: ``` public class DialogBoxController : MonoBehaviour { public Animator animator; public void OpenDialogBox() { animator.SetBool("isOpen", true); } public void CloseDialogBox() { animator.SetBool("isOpen", false); } } ``` 在上面的代码中,我们定义了一个名为“animator”的Animator对象,并在OpenDialogBox和CloseDialogBox方法中设置了“isOpen”参数的值,以控制对话框的展开和关闭。 现在你可以将DialogBoxController脚本添加到对话框上,并将animator变量设置为“DialogBoxAnimator”动画控制器中的Animator组件。这样,你就可以在代码中调用OpenDialogBox和CloseDialogBox方法,以展开或收起对话框,同时播放动画

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值