using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DragonAnimator : LoadResou
{
    //AudioSouce组件
    public AudioSource m_Audio;

//出事位置
    Vector3 oldPos;
    //持有女孩animator引用
    Girlanimartor m_girlanimartor;
    //获取animator组件
    public Animator anim;
    //动画器状态信息
    AnimatorStateInfo anim_StateInfo;
    //所有动画剪辑
    AnimationClip[] clips;
    string[] clipnames = null;
    void Start () {
        m_Audio = this.GetComponent<AudioSource>();
        oldPos = transform.position;
        m_girlanimartor = transform.parent.Find("Girl").GetComponent<Girlanimartor>();
        anim = this.GetComponent<Animator>();
        clips = anim.runtimeAnimatorController.animationClips;
    }

// Update is called once per frame
void Update () {
        anim_StateInfo = anim.GetCurrentAnimatorStateInfo(0);
        //walk状态
        if (anim_StateInfo.IsName("dragon-walk"))
        {
            anim.SetBool("towalk", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("toturnidle", true);
                m_girlanimartor.SettingState(StateType.turn);
            }
            transform.position = Vector3.MoveTowards(transform.position, new Vector3(2.5f, 0, 2), 0.035f);
        }
        //speak1
        if (anim_StateInfo.IsName("dragon-speak1"))
        {
            anim.SetBool("tospeak1", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("toturnidle", true);
                m_girlanimartor.SettingState(StateType.speak11, "2-Girl");
                //--------------------------------女孩播放speak11
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "2-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //speak21
        if (anim_StateInfo.IsName("dragon-speak21"))
        {
            anim.SetBool("tospeak21", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                anim.SetBool("tospeak22", true);
                //-------------------------------------------播放小龙speak22
                m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "5");
                m_Audio.Play();
            }
        }
        //speak22
        if (anim_StateInfo.IsName("dragon-speak22"))
        {
            anim.SetBool("tospeak22", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                anim.SetBool("towalkidle", true);
                m_girlanimartor.SettingState(StateType.speak2, "6-Girl");
                //-------------------------------------------播放女孩speak2
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "6-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //speak3
        if (anim_StateInfo.IsName("dragon-speak3"))
        {
            anim.SetBool("tospeak3", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("towalkidle", true);
                m_girlanimartor.SettingState(StateType.speak3, "8-Girl");
                //-------------------------------------------播放女孩speak3
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "8-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //speak4
        if (anim_StateInfo.IsName("dragon-speak4"))
        {
            anim.SetBool("tospeak4", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("towalkidle", true);
                m_girlanimartor.SettingState(StateType.speak4, "10-Girl");
                //-------------------------------------------播放女孩speak4
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "10-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //speak5
        if (anim_StateInfo.IsName("dragon-speak5"))
        {
            anim.SetBool("tospeak5", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("towalkidle", true);
                m_girlanimartor.SettingState(StateType.speak5, "12-Girl");
                //-------------------------------------------播放女孩speak5
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "12-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //speak6
        if (anim_StateInfo.IsName("dragon-speak6"))
        {
            anim.SetBool("tospeak6", false);
            if (anim_StateInfo.normalizedTime >= 1)
            {
                //回到idle
                anim.SetBool("towalkidle", true);
                m_girlanimartor.SettingState(StateType.speak6, "14-Girl");
                //-------------------------------------------播放女孩speak6
                //m_girlanimartor.m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, "14-Girl");
                //m_girlanimartor.m_Audio.Play();
            }
        }
        //idle状态
        if (anim_StateInfo.IsName("dragon-idle"))
        {
            anim.SetBool("toidle", false);
            if (anim_StateInfo.normalizedTime >= 1f) {
                anim.SetBool("towalk",true);
            }
        }
        //走完待机状态
        if (anim_StateInfo.IsName("dragon-turnidle"))
        {
            anim.SetBool("toturnidle", false);
        }
        //迈步待机状态
        if (anim_StateInfo.IsName("dragon-walkidle"))
        {
            anim.SetBool("towalkidle", false);
        }
    }
    
    public void SettingState(StateType stateType,string str = null)
    {
        if (!CheckClip("dragon-" + stateType.ToString())) {
            anim.SetBool("toidle",true);
            return;
        }
        StartCoroutine(Buffer(stateType, str));
        //anim.SetBool("to" + stateType.ToString(),true);
    }
    //检验是否有该动画
    bool CheckClip(string clipname) {
        //添加判断名字数组是否为空
        if (clipnames == null) {
            clipnames = new string[clips.Length];
            for (int i = 0; i < clips.Length; i++)
            {
                clipnames[i] = clips[i].name;
            }
        }
        int index = Array.IndexOf(clipnames, clipname);
        if (index == -1) {
            return false;
        }
        return true;
    }
    public void Init()
    {
        transform.position = oldPos;
        StartCoroutine(ReStart());
    }
    IEnumerator ReStart(){
        yield return new WaitForSeconds(3f);
        anim.SetBool("toidle", true);
    }
    //缓冲动画
    IEnumerator Buffer(StateType type,string name = null) {
        //StateType bufferstate;
        //switch (type) {
        //    case StateType.speak1:
        //        bufferstate = StateType.turnidle;
        //        anim.SetBool("to" + bufferstate,true);
        //        break;
        //}
        yield return new WaitForSeconds(anim_StateInfo.length);
        anim.SetBool("to" + type, true);
        if (name != null) {
            m_Audio.clip = GetAsset<AudioClip>(AssetType.audio, name);
            m_Audio.Play();
        }
    }

}

animator动画相关推荐

  1. 用Unity的Animation播放Animator动画Clip

    简单的动画,其实不需要Animator动画状态机管理,用Animation播放效率更高,但可能由于历史遗留问题,或网上下载的第三方资源,得到的是Animator资源,可以在Clip的Debug试图下, ...

  2. Cartoon Animator动画制作软件CTA自动保存项目小工具

    大家都知道Cartoon Animator动画软件总是会无辜闪退 好不容易K了很多帧,然后崩溃立马回到解放前. 做了这个小工具暂时解决一下燃眉之急!!!! 下载地址: https://download ...

  3. 【Unity3D小技巧】Unity3D中Animation和Animator动画的播放、暂停、倒放控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦. 一.前言 ...

  4. 『ANDROID』android animator 动画

    原文地址:android animator 动画 animator 动画 动画的作用是让UI有动感, 看上去时尚. Android中动画分两种方式: 一种方式是补间动画Tween Animation, ...

  5. android animator 动画

    animator 动画 动画的作用是让UI有动感, 看上去时尚. Android中动画分两种方式: 一种方式是补间动画Tween Animation,就是说你定义一个开始和结束,中间的部分由程序运算得 ...

  6. 【Unity3D】Animator动画播放时卡死在第一帧BUG系列

    常见因素: 1.Animator在Update或其他每帧执行的协程或方法里疯狂被代码调用. 2.Animator动画播放事件会再次调用Animator动画播放. 3.Animator状态机切换问题,A ...

  7. Unity中的Animator动画详解

    Unity中的Animator动画详解 Animator动画导入 Animator动画详解 动画类型选择 Rig面板属性 Mode面板属性 Animation面板属性 动画片段 控制使用 Animat ...

  8. Android Animator(动画)类 详解

    Android Animator动画类 详解 动画分为3种 ValueAnimator类 ObjectAnimator类 AnimatorSet类 Animator的addListener()方法(监 ...

  9. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  10. Unity简单操作:设置触发条件 切换Animator动画控制器 里面播放的Animation动画

    确保animator里面有多个animation动画剪辑,点击Animator里面[Parameters]添加触发条件 添加连线箭头并且 给箭头连线绑定触发事件 添加连线箭头并且 给箭头连线绑定触发事 ...

最新文章

  1. pandas 绘图 机器学习看特征相关性
  2. [分享]千万数量级分页存储过程(效果演示)
  3. 报错 之 ModuleNotFoundError: No module named ‘setproctitle‘
  4. 计算机知识产权结合,计算机知识产权.doc
  5. 微信公众平台开发接口PHP SDK完整版
  6. 不止代码:合唱队列(动态规划)
  7. redis源码剖析(十五)——客户端思维导图整理
  8. (转)腾讯2011.10.15校园招聘会笔试题
  9. 解聘!“双一流”教授被通报批评
  10. 古风祥云PNG免抠素材,喜欢吗?
  11. sklearn-数据预处理scale
  12. 剑指offer——跳台阶变态跳台阶矩形覆盖
  13. ab753变频器中文说明书_怎样快速学习使用和维修变频器
  14. sql 找不到oracle接口,sql-server – sql server链接服务器到oracle返回数据存在时找不到的数据...
  15. [北航软工]技术规格说明书
  16. python_基础部分(1)
  17. 注册gitlab-runner
  18. 钟控RS,D,JK,T触发器
  19. 互联网人必备的六大类专业搜索工具
  20. Java将图片压缩为原来的一半

热门文章

  1. python情人节之玫瑰花与表白方式,用python画一朵玫瑰花,拿去表白趴
  2. MATLAB|用循环描点画波形图
  3. 基于 Electron + ES6 实现的桌面计算器应用
  4. 基于YOLOV3的通用物体检测项目实战---(5)利用DarkNet框架进行YOLOV3模型训练实操(笔记)
  5. 在Spring Boot中使用数据缓存
  6. 解决Mybatis3.3中NVARCHAR2生僻字乱码
  7. linux内核机制之设备树
  8. 快速搞懂Vue里面components和template
  9. 应届计算机科学与技术简历,计算机科学与技术应届生简历范文
  10. 计算机科学技术考研内容,计算机科学与技术考研考哪些科目?