unity 可以用两种方式控制动画

1. Animation

Animation an;//动画组件

void Start()

{

an = GetComponent<Animation>(); //获取动画组件

}

public enum PlayerState
    {
        Idle,
        Fire,
        Reload,
        Melee 
    }

void PlayAnimation(GameRes.PlayerState ps)
    {
        switch (ps)
        {
            case GameRes.PlayerState.Idle:
                an.Play("Idle");
                break;
            case GameRes.PlayerState.Fire:
                an.Play("Fire");
                break;
            case GameRes.PlayerState.Reload:
                an.Play("Reload");
                break;
            case GameRes.PlayerState.Melee:
                an.Play("Melee");
                break;
            default:
                break;
        }
    }

2.Animator

//检查是否正在播放jump动画.
AnimatorStateInfo stateinfo = anim.GetCurrentAnimatorStateInfo(0);   
bool playingJump = stateinfo.IsName("jump");
if(playingJump)
{
    if(stateinfo.normalizedTime < 1.0f)
    {
        //正在播放
    }
    else
    {
        //播放结束
    }
    
}
控制播放时间

Animator ator = go1.GetComponent<Animator>();
var stateinfo = ator.GetCurrentAnimatorStateInfo(0);
if(stateinfo.IsName("Jump"))
{
    ator.speed = 2;
}
用Animator实现人物,走、跑。

void Move()
    {
        Vector3 dir = Vector3.zero;
        if (character.isGrounded)
        {
            float h = Input.GetAxis("Horizontal") * speed;
            float v = Input.GetAxis("Vertical") * speed;
            dir = new Vector3(h, 0, v);
            if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0&&po)
            {
                an.SetInteger("Walk", 5);
                if (!ac.isPlaying)
                {
                    ac.PlayOneShot(Clip);
                }
                transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
            }
            else if (Input.GetKeyDown(KeyCode.K))
            {
                if (p)
                {
                    an.SetInteger("Run", 4);
                    po = false;
                    if (Mathf.Abs(h) > 0 || Mathf.Abs(v) > 0 && po == false)
                    { 
                        transform.rotation = Quaternion.LookRotation(new Vector3(h, 0, v));//注视旋转
                    }                
                    p = !p;
                }
                else
                {
                    po = true;
                    an.SetInteger("Run", 2);
                    p = !p;
                }
            }
            else if (Input.GetKeyDown(KeyCode.L))
            {
                if (q)
                {
                    an.SetInteger("Sneak", 2);
                    q = !q;
                }
                else
                {
                    an.SetInteger("Sneak", 0);
                    q = !q;
                }
            }
            else
            {
                an.SetInteger("Walk", 3);
            }
        }
        character.SimpleMove(dir);
    }

实现摄像机跟随

private Transform player;
    public float x=4, y=5;
    public float speed = 2;
    void Start()
    {
        //通过标签获取游戏中的对象
        player = GameObject.FindWithTag("Player").transform;
    }
    void Update()
    {
        if (player != null)
        {
            //计算出摄像机的目标位置,即玩家角色的位置+摄像机的偏移值
            Vector3 targetPos = player.position + new Vector3(0, x, y);
            //设置摄像机位置
            transform.position = Vector3.Lerp(transform.position, targetPos, speed * Time.deltaTime);
            //计算出摄像机面向玩家角色的旋转角度
            Quaternion targetRotation = Quaternion.LookRotation(player.position - transform.position);
            //设置摄像机旋转
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
        }
    }

unity 动画控制器相关推荐

  1. Unity动画控制器

    添加Animator组件,拖入预制体的动画控制器 双击进入Animator面板 点了线之后给这个线添加Conditions 网上的博文 动画控制器 动画控制器

  2. Unity动画控制器animator.CrossFade

    需要特别注意: 1.CrossFade虽然可以不用任何逻辑来链接而直接跳转,但是CrossFade只能覆盖其他动画,当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败.造成动画依 ...

  3. 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器

    对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...

  4. Unity 2D动画控制器详解

    http://www.tairan.com/archives/6939#16 文章目录 开始 过渡 编辑过渡 颜色变化 动画参数 复习一下 CatConga动画 CatDisappear Clip A ...

  5. 【Unity 学习笔记】动画组件和动画控制器

    动画是一款游戏不可缺少的一部分.在Unity中,我们可以直接使用Unity自带的动画系统来制作我们想要的动画,其操作相当便捷. 帧动画是2D像素游戏的主流,我将以帧动画为例记录我最近学习动画系统的一些 ...

  6. Unity【NGUI】【UGUI】 动画效果实现,AnimationCurve曲线动画控制器,支持动画完成 回调

    动画效果如下: 展示图1 如下: 展示图2 如下: 展示图3 如下: 功能: 如上图所示 移动,旋转,缩放,渐变透明  都可并行实现 只要脑洞够大,创意动画效果随你实现. 注:所有动画都是用曲线[An ...

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

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

  8. AnimatorController即动画控制器创建的BUG

    AnimatorController即动画控制器创建的BUG //------------------------------------------------------------------- ...

  9. 动画组件和动画控制器资源介绍、动画状态机

    一.动画控制器资源:Create-Animator Control 相当于一个容器. 窗口包括: a.Base Layer层窗口:控制角色身体中各部分的运动,这个离不开Body Mask. b.Par ...

最新文章

  1. 10种Git技巧,让你省时省力又省心!
  2. 一文看懂深度学习模型压缩和加速
  3. JS 将负数转化为正数
  4. 防止电脑自动休眠小妙招
  5. jquery validation remote进行唯一性验证时只使用自定义参数,不使用默认参数
  6. MySQL【环境搭建 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
  7. UVa 11121 Base -2(负数进制)
  8. Java黑皮书课后题第5章:*5.14(计算最大公约数)下面是求两个整数n1和n2的最大公约数的程序清单5-9的另一种解法:...提示用户输入两个正整数,然后显示最大公约数
  9. Fiddler监听Https请求响应
  10. Opportunity在Fiori cloud system上编辑之后超时的根源分析
  11. 某测试仪控制系统的设计方案--ARM+FPGA+NIOS
  12. ux.form.field.Year 只能选年的时间扩展
  13. centos远程连接mysql_CentOS 配置mysql允许远程登录
  14. Oracle Solaris 11 11/11 新增功能
  15. 水星怎么设置网速最快_水星路由器怎么设置网速 - 卡饭网
  16. ESXi主机 TPM 证明警报
  17. C# Entity单条件查询与多条件查询
  18. Android实现PDF格式文件预览
  19. 羊毛党千亿产业链,信息安全何去何从?
  20. 13-ZF标志位,JB和JNB跳转指令

热门文章

  1. 保持健康和活力 - 颈椎病康复指南
  2. PicGo+github搭建免费图床
  3. java英文日期格式化_java如何把英文的日期格式改成数字化的
  4. 零基础小白需要多长时间可以学会UI设计?
  5. 三菱FX5U添加新模块
  6. linux双击打开二进制文件,linux下打开二进制文件
  7. Insomni’hack CTF-l33t-hoster复现分析
  8. 制作vagrant镜像
  9. 前沿综述:细数2018年最好的词嵌入和句嵌入技术
  10. 《操作系统真象还原》从零开始自制操作系统 自写源码实现 (fs相关文件)