状态和动画不是我自己的。
我有一个角色的预制件,附有Animator组件。层次结构中的角色具有Animator,其中包含一些状态和混合,还有一些动画片段。
现在当我播放/运行Animator状态时,这意味着我正在播放动画?或者动画片段是别的什么?
为什么我不能播放动画片段?我没有得到错误或例外,只是没有播放它。
这是附加到此角色的脚本,我还在此角色中添加了一个动画组件。所以现在角色对象同时具有Animator和Animation组件。
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class SwitchAnimations : MonoBehaviour
{
private Animator animator;
private int index = 0;
private static UnityEditor.Animations.AnimatorController controller;
private UnityEditor.Animations.AnimatorState[] an;
// Use this for initialization
void Start()
{
animator = GetComponent<Animator>();
an = GetStateNames(animator);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
animator.Play(an[index].name);
if (++index == an.Length)
index = 0;
}
}
private static UnityEditor.Animations.AnimatorState[] GetStateNames(Animator animator)
{
controller = animator ? animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController : null;
return controller == null ? null : controller.layers.SelectMany(l => l.stateMachine.states).Select(s => s.state).ToArray();
}
private void RollSound()
{
}
private void CantRotate()
{
}
private void EndRoll()
{
}
private void EndPickup()
{
}
}
在变量内部有9个状态:
Aiming
Death_A
Use
Grounded
Roll
PickupObject
Reload_Rifle
Shoot_Rifle
Empty
当我点击A键时,每次点击A Everything正常工作时,它会逐个播放状态我可以点击A来播放9个状态。
当我在层次结构中选择字符并且在菜单中时,我不理解状态是在编辑器中:窗口&gt; Animator我看到LegsLayer上的9个州:但是如果我点击状态接地双击我看到一个混合树,我不确定这是否也是状态或者这可能是动画片段?然后我怎样才能访问它们?
好的,这是关于动画师我不了解的一部分,以及我可以用它做什么以及如何玩。
第二部分与AnimationClip / s有关,为什么我不能玩它们?
动画片段的脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
public class SwitchAnimations : MonoBehaviour
{
private Animation animation;
private AnimationClip[] animationClips;
// Use this for initialization
void Start()
{
animation = GetComponent<Animation>();
animationClips = AnimationUtility.GetAnimationClips(gameObject);
foreach (AnimationClip clip in animationClips)
{
animation.AddClip(clip, clip.name);
}
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
animation.clip = animationClips[6];
animation.Play(animationClips[6].name);
}
}
private void RollSound()
{
}
private void CantRotate()
{
}
private void EndRoll()
{
}
private void EndPickup()
{
}
private void FootStep()
{
}
}
在变量animationClips中我有9个动画:
Rifle_Aiming_Idle
Rifle_Aiming_Walk_F_RM
Rifle_Aiming_Walk_B_RM
Rifle_Aiming_Walk_L_RM
Rifle_Aiming_Walk_R_RM
Rifle_Idle
Rifle_Walk_F_RM
Rifle_Run_F_RM
Rifle_Sprint_F_RM
当我正在运行游戏并点击A时,我在动画组件内的Inspector中看到所有动画片段,在动画中我看到要播放的动画片段。
我没有收到任何错误或异常,但它只是没有播放它。角色仍然闲着。即使我选择另一个动画片段索引来播放5或3或1也没有播放。
我想知道为什么当我点击A时它没有播放动画。在这种情况下,列表中的动画编号为6但仍然没有播放。
答案 0 :(得分:1)
动画组件是一个遗留组件,保留在Unity中以确保与旧项目的向后兼容性,因此您永远不应将其用于动画。
基本上,系统以这种方式工作:
首先,您需要一个Animator Controller
资产。此Animator是一个有限状态机(带子状态等),每个状态都可以有Animation Clip
(您可以通过Motion
字段中的via Inspector脚本进行分配。当FSM进入特定状态时,它将播放分配的Animation Clip
。
显然,为了被游戏对象使用,Animator
必须通过Animator
组件分配给该对象。
Animation Clips
是包含实际动画的资源,它们从未被指定为游戏对象的组件,但是它们必须由Animator
引用才能播放,正如我所说的之前。
混合树用于通过使用线性插值以无缝方式混合不同的动画。它们是Animator的“特殊”状态,它具有多个动画片段,您可以插值以显示从状态到另一个状态的转换,例如,当您需要在向前运行,向左运行和向右运行时更改动画。 / p>
这个论点非常广泛,您可以通过阅读有关动画师,动画剪辑和混合树的官方文档来开始讨论它: