• unity之 PlayableGraph 动画应用(二)


    续上篇 unity之性能优化 PlayableGraph 动画应用(一)继续:

    多个动画如何播放,动画融合、权重等

    上代码:

     1 using System.Collections.Generic;
     2 using UnityEngine;
     3 using UnityEngine.Animations;
     4 using UnityEngine.Playables;
     5 
     6 public class TestPlayable : MonoBehaviour
     7 {
     8     private Animator m_Animator;
     9 
    10     [SerializeField]
    11     private AnimationClip m_AnimationClip;
    12     private PlayableGraph m_PlayableGraph;
    13     private AnimationPlayableOutput m_AnimationPlayableOutput;
    14 
    15     void Awake()
    16     {
    17         m_Animator = GetComponent<Animator>();
    18         //创建画布
    19         m_PlayableGraph = PlayableGraph.Create("testGraph");
    20         //为画布创建一个输出节点
    21         m_AnimationPlayableOutput = AnimationPlayableOutput.Create(m_PlayableGraph, "OutPut", m_Animator);
    22         Test2();
    23     }
    24 
    25     [SerializeField]
    26     private AnimationClip[] m_Clips;
    27     //动画剪辑Playable列表
    28     private List<AnimationClipPlayable> m_AnimationClipPlayable = new List<AnimationClipPlayable>(100);
    29     //动画混合
    30     private AnimationMixerPlayable m_AnimationMixerPlayable;
    31 
    32     /// <summary>
    33     /// 目的是为了 画出图形
    34     /// </summary>
    35     private void Test2()
    36     {
    37         int clipCount = m_Clips.Length;
    38         //创建动画混合
    39         m_AnimationMixerPlayable = AnimationMixerPlayable.Create(m_PlayableGraph, clipCount);
    40         //设置output的源头 动画混合
    41         m_AnimationPlayableOutput.SetSourcePlayable(m_AnimationMixerPlayable, 0);
    42 
    43         for (int i = 0; i < clipCount; i++)
    44         {
    45             //创建动画剪辑
    46             AnimationClipPlayable animationClipPlayable = AnimationClipPlayable.Create(m_PlayableGraph, m_Clips[i]);
    47             //画布连接动画混合、动画剪辑从index = 0到index = count-1 全部跟动画融合相连
    48             m_PlayableGraph.Connect(animationClipPlayable, 0, m_AnimationMixerPlayable, i);
    49             m_AnimationClipPlayable.Add(animationClipPlayable);
    50         }
    51     }
    52 }

    以上代码 运行起来:绘制的画布如下:

     

     好 播放的代码:

     1 private int index = 0;
     2     private void Play()
     3     {
     4         m_PlayableGraph.Play();
     5         //通过索引获取playable
     6         Playable playable = m_AnimationMixerPlayable.GetInput(index);
     7         playable.SetTime(0);
     8         playable.Play();
     9         int count = m_AnimationClipPlayable.Count;
    10         for (int i = 0; i < count; i++)
    11         {
    12             if (i == index)
    13             {
    14                 //需要播放的权重设置为1
    15                 m_AnimationMixerPlayable.SetInputWeight(i, 1);
    16             }
    17             else
    18             {
    19                 //不播放的权重设置为0
    20                 m_AnimationMixerPlayable.SetInputWeight(i, 0);
    21             }
    22         }
    23         index++;
    24         if (index == count)
    25         {
    26             index = 0;
    27         }
    28     }
    29 
    30     void Update()
    31     {
    32         if (Input.GetKeyUp(KeyCode.P))
    33         {
    34             Play();
    35         }
    36     }

    好了,以上就是 PlayableGraph 动画应用(二)混合动画的播放。

     

  • 相关阅读:
    C#新特性
    蛋清打发奶油状
    VS 2015 开发Android底部导航条----[实例代码,多图]
    使用微软的MSBuild.exe编译VS .sln .csproj 文件
    双色球基础分析--SQL
    Windows 7 中的 God Mode
    Free Online SQL Formatter
    Windows 特殊文件夹
    常用DNS列表(电信、网通)
    C语言词法分析:C#源码
  • 原文地址:https://www.cnblogs.com/zhaolaosan/p/16180696.html
Copyright © 2020-2023  润新知