首页 团结教程

统一动画介绍

在本教程中,您将通过在交叉开奖结果3d的馅饼扔馅饼来学习units动画的内部和推出。

5/5 10个评分
笔记: 本教程是团结盛宴的一部分。在Unity Feast中看到更多教程,以及了解如何参加Unity Feast Game Jam, 点击这里.

caketheclown.

有动画的游戏感觉更加抛光和乐趣。幸运的是, Mecanimunity的动画系统,为动画游戏提供了丰富的可能性。在本教程中,您将通过在移动开奖结果3d中投掷蛋糕来学习动画的基础知识。

你会学习如何

  • 创建动画
  • 使用状态机在动画之间切换
  • 将动画连接到脚本

到了教程结束时,您将能够加速您自己的游戏 - 或没有开奖结果3d:]

笔记: 本教程是初学者的意思。虽然它不需要任何先决条件,但我建议您熟悉我们的Unity用户界面 统一:入门教程.

入门

下载 初学项目 并以团结打开它。它为您提供了一些初始图形和音频资产,以及已经让您抛出蛋糕的场景。乐趣!

音乐: “马戏团华尔兹”凯文麦利德(unppetech.com.)
在Creative Commons下获得许可:通过归因于3.0
http://creativecommons.org/licenses/by/3.0/

为了更轻松地遵循教程,选择 默认 从右上角的下拉菜单中布局。 Unity现在应该看起来像这样:

defaultLayout.

双击 Gamescene. 在项目浏览器中,然后击中 顶部的按钮以运行Starter项目。你会看到一个彩色背景。点击它扔掉一块蛋糕!蛋糕是使用物理的动画,这不是本教程的一部分。您可以了解有关Unity Physics的更多信息 这里.

templateproject.

您的基本项目现在已启动并运行。准备 - 套 - 蛋糕!

移动目标 - 你的第一个动画

现在要添加一个开奖结果3d。通过选择来将场景视图与相机视图对齐 主摄像头 在层次结构中选择 GameObject \ aligal视图选择 from the menu.

拖拉 模特\ clown. 从项目浏览器到层次结构。

添加开奖结果3d资产

在检查员,确保 位置 被设定为 (0,0,0)。改变 回转(0,180,0):

中心的开奖结果3d

是时候创建你的第一个动画了。开奖结果3d应该向左移动,然后向右移动,最后回到其起始位置。

从菜单中,选择 窗口\动画。此视图允许您创建和操作动画。将其拖放到控制台视图旁边。

动画视图

在层次结构中,确保仍然选择开奖结果3d。在里面 动画视图 您将看到文本阅读,“开始动画开奖结果3d,创建一个动画仪和动画剪辑。”按 创建 按钮下面。在文件对话框中输入 搬家 作为文件名并按 .

因此,Unity创建了两个文件:movehorizo​​lextally.anim和clown.controller。此外,它还增加了一个 animator组件 到开奖结果3d(1),这指向Clown.Controller(2):

创建动画剪辑和动画师

目前,您只需要专注于幽默潜水。这是 动画剪辑 这允许您为您的开奖结果3d的多个属性设置动画,例如:

  • 位置,旋转和规模
  • 材料颜色和光强度
  • 音量
  • 您自己的脚本中的变量

你用这个 动画视图。它很复杂,所以看看最重要的地区:

  • 物业清单 添加或删除要生动的属性。
  • 时间线 预览或修改动画片段的特定帧(样本)。这些数字对应于秒和样品,所以3:14表示3个脚石和14个样本。
  • 涂料片 有关多个属性的关键帧定时概述。

AnimationWindow.

编辑动画剪辑

有几种方法可以在动画片段中更改属性值。首先,直接更改属性以使开奖结果3d移动到左侧。

在动画视图中,单击 添加财产。从下拉菜单中选择 变换\位置 然后点击 加号。在里面 物业清单 展开 开奖结果3d:位置 点击左侧的小箭头。现在位置有一个x,y和z坐标 - 只是你对3D游戏的期望。

点击动画的 时间线 并选择一个时间 0:15 在动画期间修改开奖结果3d的位置。在里面 物业清单 点击后的号码 position.x. 并进入 -6。这补充说A. 关键帧 这会在这个特定时间改变属性的价值。

编辑动画剪辑

笔记: 一旦您在动画时间轴中移动播放头,动画 录制按钮 被激活了。此外,Unity的主要主要 播放按钮 变红了。这表明您现在所做的所有更改都将适用于动画时间轴,而不是整个场景。完成配置动画时务必退出录制模式。

记录按钮

现在要查看另一种方式来编辑动画剪辑,这次通过使开奖结果3d向右移动。在里面 时间线,选择一个时间 0:45。去检查员并设置 位置X.6。您将看到Unity将另一个关键帧添加到时间轴。

按Animator View中的播放按钮播放动画。 HM,它对我们的蛋糕抛出技能差了有点太快了。通过设置来解决此问题 样本12。再次运行动画 - 开奖结果3d现在更容易。

动画剪辑采样率

你做到了!您创建了第一个动画:]创建另一个动画。

动画声音

当开奖结果3d被击中时,你会想要发出声音。确保首先停止动画录制模式,然后拖放 音频/泼溅物 从项目浏览器到 开奖结果3d GameObject在层次结构中。

添加声音

选择 开奖结果3d 在层次结构中。在检查员中,您会发现这增加了一个 音频组件 到开奖结果3d。 禁用音频源 点击 复选框 在它的左上角。当开奖结果3d实际命中时,您只需要启用声音。此外,声音有点响亮,所以设置了它 体积0.25。结果:

音频源组件设置

是时候从动画剪辑中播放声音的时间。在动画视图中,单击 搬家。从下落选择 创建新剪辑.

createNewClip3.

在“文件”对话框中,将其命名为 然后点击 .

点击 记录 在动画视图中。在里面 时间线,将播放头移动到 0:10,然后在检查员 使能够音频源 通过激活其左上角的复选框。重复 1:00, 但现在 禁用 它。请注意:当您在动画视图中播放播放时,您将 不是 hear the sound.

观察到位置和比例以外的属性的变化可能很困难。使用 关键帧导航 在下面的图像中突出显示,检查音频源在启用和禁用之间切换。

Bildschirmfoto 2015-10-02 UM 17.35.40

轮到你

准备挑战?当然你是:]

创建另一个名为的动画剪辑 诙谐地。在其中,使开奖结果3d向上移动(0,3,0),然后向下(0,-3,0),然后返回中心。还调整采样率。

[扰流板]
选择 开奖结果3d 在层次结构中。在动画视图中,单击 并选择 创建新剪辑。将其保存为 诙谐地.

激活 记录 按钮。在时间线上,选择 0:15。改变开奖结果3d的位置 (0,3,0) 在检查员。重复这个 0:45 一个位置 (0,-3,0)。最后,集合 样本12.

结果应该如下所示:
诙谐地
[/扰流器]

操纵动画曲线

涂料板提供紧凑的视图 什么时候 属性改变,但很难看到 什么价值 关键帧之间的属性。在 曲线 模式,随着时间的推移,您可以看到并控制每个属性的精确值。

点击 曲线 在动画视图的底部。对于致命的,它应该看起来像这样:

动画曲线

您可以看到Unity从您指定的关键帧中派生了一个很好的,光滑的曲线。在曲线模式下,您可以更改此项以创建像这两条曲线一样的艺术:

艺术或混乱,让批评者决定:]

艺术或混乱?这是批评者决定:]

使用曲线,您将确切地对财产变更进行控制。试验它,如果你想详细了解发生了什么,请偷看 文件.

在动画之间切换 - 状态机101

到目前为止,您已创建动画剪辑。您可以运行它们,但您无法更改游戏过程中的动画播放。这是哪里 国家机器 come in.

创建第一个动画片段时,Unity已经为开奖结果3d创建了一个状态机。您可以在Animator视图中查看它。为此,请从菜单中选择层次结构中的开奖结果3d选择 窗口\动画。你现在应该看到 动画师 选项卡在“游戏”选项卡旁边。

动画师视图

已经有几个州:Movehorizo​​zortally,Moveverly,Hist,Rest,Exit和AnyState。基本上,每个状态对应于只要状态处于活动状态的动画剪辑。

您还会看到一个箭头,即从入门到移动方面。这意味着移动性是 默认状态,状态机在第一次激活时的状态。它是橙色的。

笔记: 如果你有一个小屏幕,请不要看到所有的州,别担心。刚抓住 alt. 并将鼠标移动到鼠标左键下,以在Animator视图中导航。

国家的布局不会影响行为,因此可以随意以适合您的方式安排国家 - 只是拖动它们。

你的第一次过渡

到目前为止,一切都很好。现在,您希望开奖结果3d一旦相应的动画结束,就会在幽默倾向的内容和移动地之间切换。从一个状态切换到另一个状态被称为a 过渡.

要创建第一个转换,请右键单击 搬家。选择 制作过渡 从下拉菜单中,然后单击 诙谐地。这在两个州之间产生了过渡。对相反的方向做同样的事情,从致畸到移动。

FirstRantition.

玩游戏:开奖结果3d现在从左到右移动,然后上下,无限地。

与过渡的动画

但事情发生了一些奇怪的事情:在州之间切换时,开奖结果3d正在削减角落。你从来没有告诉过那样。这是怎么回事?

要回答这个问题,请选择 开奖结果3d 在游戏正在运行并切换到的时,在检查员 动画师视图。你会看到一个 进度条 在目前的活跃状态。仔细看看有一个短暂的时间 两个国家,搬迁和移动性地,同时进行进度条。这意味着Unity同时运行两个状态,将一个与另一个混合。

两个国家同时活跃

混合状态可能是有用的;例如,当您具有从步行到运行的角色时,这看起来更加自然。但是还有你的案例 不是 想要混合两个州。幸运的是,Unity为您提供了允许您控制转换的设置。

在Animator视图中,单击 过渡箭头 从搬迁到诙谐。在检查器中,您现在可以看到控制转换的设置。展开 设置 单击它旁边的三角形。设定 退出时间1过渡持续时间0。对从波动到移动性的过渡来做同样的事情。

TransitionSettingsshort.

跑游戏。现在,开奖结果3d将水平和垂直移动,但从来没有同时移动。

动画没有过渡

再看一下过渡设置:

  • 有退出时间 确定是否可以随时触发过渡,或者仅在指定的退出时间之后触发。
  • 退出时间 是最早的过渡可以开始的时间。它在标准化时间内表示。 0.75的出口时间意味着转换只有当动画完成75%时才开始。
  • 过渡持续时间固定持续时间 允许您指定转换所需的时间。如果启用了固定持续时间,请在几秒钟内指定持续时间。否则,指定归一化时间中的持续时间。
  • 过渡偏移 控制在转换到的目标状态中开始播放的时间的偏移量。例如,值为0.5将意味着目标状态将从其自己的时间表开始以50%的方式播放。
  • 中断来源 控制转换是否可以被中断,例如触发另一个转换时。

有时候很难想象这些参数的意思。谢天谢地, 过渡图,它直接在检查器中的转换设置下方,表明您可以精确地配置每个动画:

转换设置DICKM.

去做就对了! - 任何州

无论开奖结果3d都被蛋糕击中,无论开奖结果3d当前是否进入,你都会想运行一个打击的动画。你如何实现这一目标?

从你到目前为止学到的内容,你可能只会为命中州创建两个转换:一个来自移动性状态的一个,另一个来自移动性状态。虽然这将有效,但它不会缩放。想象一下,你有一个使用十个州的更复杂的怪物游戏。您可以创建十个过渡,但它会变得令人困惑,我们希望保持尽可能简单的一切。

你可能已经注意到了绿松石盒子说 任何州。它基本上是一种简写方式,用于将所有状态从所有状态绘制到单个目标状态。完美的!

右键点击 雅典, 选择 制作过渡,然后点击 状态。现在,您的动画视图应该如下所示:

完成Admator.

当命中动画完成时,状态应转换为移动性状态。

尝试自己这样做。如果你被困,请偷看:

[扰流板]
右键单击 ,然后选择 制作过渡 然后点击 搬家 创建过渡。选择它。在检查员,套装 退出时间1过渡持续时间0.
[/扰流器]

使用参数和条件控制状态切换

接下来,您需要在任何状态和命中播放转换时识别统一,因为这不应该自动发生。当开奖结果3d实际命中时,您只希望动画仪切换到命中状态。

为此,您可以使用参数和条件。一种 范围 是您在动画函数上指定的变量。您可以使用它来定义一个 健康)状况 为了发生特定的过渡。

这是它在实践中的工作原理:

在Animator视图的左上角,选择 参数 标签。点击一下 + 按钮。从下拉菜单中,选择 扳机。这会创建一个新的触发器。说出它 。而已!您现在是第一个参数的自豪的所有者。

Creyeparametercropped.

接下来,选择 过渡箭头 从任何国家都击中。在检查员,滚动到 情况 部分。现在它读了 “列表是空的。” 点击一下 + 按钮。这将命中触发添加为条件。

AddConditionToAnimation.

The transition will now be triggered once the parameter turns to true.

要手动尝试,请在游戏视图旁边拖放动画视图,以便您可以同时查看。跑游戏。在层次结构中,选择 开奖结果3d。在Animator视图中,单击 单选按钮 在命中参数后。你会听到泼溅声,然后开奖结果3d重置。很棒 - 您的动画控制器按预期工作。

打手动触发

参数类型和组合条件

触发器很有用,但当然还有更多的参数类型,您可以使用:

  • 漂浮:馏分(0.1,0.999,6.31,......)
  • :整数(1,5,13,​​1005,......)
  • BOOL.: 对或错
  • 扳机:Boolean参数重置为False,一次过渡一次消耗

Each type can be used depending on your requirements. For example, an could count how often the player hits the clown and play a special animation the 10th time.

此外,您可以分配 默认值 对于Animat View的参数列表中的每个参数。

DESCHNEDDEFAULTVALUES.

A 健康)状况 用来决定 什么时候 应该发生过渡。您可以在转换中定义多个条件。在这种情况下, 全部 必须满足条件以触发过渡。

您还可以表达,例如,如果击中,开奖结果3d应该转换到命中状态 或者 如果时间限制已启动。为此,请在任何状态和命中状态之间创建第二个转换。在检查员中,您现在看到两个过渡。对于每个转换,您可以单独定义触发条件。

多平面朗斯

牛眼 - 组合动画和C#脚本

到目前为止,即使没有单行代码,你也可以看到有多强大和灵活的Unity的动画系统。但是,当然,用代码搞乱很有趣,所以从脚本触发动画就是你接下来的学习。

从代码触发动画

在您可以对碰撞作出反应之前,您需要能够检测到它。展开 开奖结果3d 在层次结构中,选择其孩子 皮肤。在检查员中,点击 添加组件 并选择 物理\网格撞机。在新的 网格撞机 组件,勾选 .

你现在可以看到开奖结果3d皮肤周围的绿色边界。授予,形状并不完全适合开奖结果3d,但它足够接近。

meshcollider.

试试看。跑游戏 - 蛋糕(因为它也有撞机)不再飞过开奖结果3d。

在代码中检测到此碰撞,请选择 皮肤 在检查员。点击 添加组件,选择 新脚本。姓名脚本 CollisionBehavior., 放 语言C sharp.,并按 创建和添加.

When another Collider touches the clown’s Mesh Collider, it triggers OnCollisionEnter. Open CollisionBehavior. 在Monodevelop中,通过双击项目浏览器中的文件。

Add the following code inside CollisionBehavior above the line void Start():

// 1
public bool collided;

//2
void OnCollisionEnter(Collision collision) {
  if (!collided) {
    collided = true;
    // 3
    GameObject clown = gameObject.transform.parent.gameObject;
    Animator clownAnimator = clown.GetComponent<Animator> ();
    // 4
    clownAnimator.SetTrigger ("打");
  }
}

这是代码的所作所为:

  1. 创建s a bool variable that remembers whether the clown already collided.
  2. Only triggers the animation if the clown has not collided yet. The next line sets collided 到 true to make sure you will only trigger the Hit animation once.
  3. Fetches the Clown GameObject, which is the parent of the current gameObject, then uses GetComponent 到 retrieve the 动画师.
  4. Calls SetTrigger on the clownAnimator. This makes the animator go to the Hit state. For other parameter types, you can use SetFloat, SetInt, SetBool 或者 ResetTrigger.

跑游戏。有一个良好的投掷。当你设法击中开奖结果3d时,它会产生一个溅声!

Gotcha!

Gotcha! (拍摄 Seth Lemmons在CC下发表)

状态机行为:对脚本的状态更改作出反应

国家机器行为 允许您依赖于状态的脚本行为。例如,只要它处于命中状态,您就可以使开奖结果3d缩减。试试看:

在Unity中,转到Animator视图并选择 状态。在检查员中,单击 添加行为。选择 新脚本,说出它 clownhitbehavior. 并按 创建和添加.

双击 clownhitbehavior. 打开它。您可能会注意到Unity已经添加了一些评论的方法。别担心他们 - 你会学会他们每个人都足够了。而专注于缩放开奖结果3d!

与爱丽丝不同,我们的开奖结果3d萎缩,当它与蛋糕接触时。 (来自CC0公共领域的Pixabay

与爱丽丝不同,我们的开奖结果3d在与蛋糕接触时缩小。 (从 CC0公共领域的Pixabay

To do this, add the startTime variable inside the ClownHitBehavior.

float startTime;

此变量将存储在输入命中状态时的时间。您可以使用它来控制动画的速度,具体取决于实际时间而不是帧速率。这确保了开奖结果3d以相同的速度缩小,无论游戏如何运行。

Next, look for the (commented out) OnStateEnter method. In this method, you set the value of startTime. Replace it with this:

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  startTime = Time.time;
}

OnStateEnter is called when the state machine enters the Hit state. With Time.time you retrieve the time in seconds since the start of the game. While not all that great for creating a clock, this is really sufficient for shrinking your clown :]

Next, look for the OnStateUpdate method and replace it with the following code:

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  GameObject clown = animator.gameObject;
  clown.transform.localScale *= Mathf.Lerp (1, 0, Time.time - startTime);
}

OnStateUpdate 在命中状态处于活动状态时呼叫每个帧。在每个框架中,您调整开奖结果3d的比例。

For this you first need to find the Clown GameObject. As the script is running on the Animator Component, you cannot simply access it via gameObject like you did before. Instead, ask the animator variable of the method for its gameObject 和 then store this in the clown variable.

Next, change the Clown GameObject’s scale using Mathf.Lerp. This method 线性插值 在两个数值之间。

Take for instance two different points on the screen. One is y-positioned on the left at 0 and the other is y-positioned on the right at 20. Passing in a .50 to Math.Lerp will return a point in the middle.

Call Math.Lerp 和 three parameters: the two values it interpolates between, in this case 10,并且自打动动画开始以来的时间。然后,LERP计算产生的比例。例如,在 0 它将返回秒 1, 在 1 其次它将返回 0 和在 0.75 它将返回秒 0.25.

在开奖结果3d中击中戏剧和折叠蛋糕,直到你得到一个击中 - 开奖结果3d萎缩,从不重新出现。确实是短暂的游戏!

命中开奖结果3d消失了

笔记: 如果您想知道A中的其他方法是什么 状态机行为 are for:
  • OnStateEnter 在播放状态的第一帧上呼叫。
  • OnStateUpdate is called after Update of MonoBehaviors on every frame while the state the behavior it is attached to is playing.
  • OnStateExit 在过渡到另一个状态的最后帧上调用。
  • OnStateMove is called instead of OnAnimatorMove on MonoBehaviors for every frame as long as the state is playing.
  • OnStateIK 在Unity计算后调用 逆运动学 对于人形字符 - 例如,允许它抓住物品。

动画事件:从动画中触发码

是时候让开奖结果3d再次适合职责。这是一种很好的方法是通过 动画事件,允许您在运行动画剪辑时从游戏对象脚本调用函数。

首先,您需要一个具有重置开奖结果3d尺寸的方法的脚本。选择 开奖结果3d 在层次结构中。在检查器中,滚动到底部,然后单击 添加组件。选择 新脚本 并命名脚本 resetclown.C sharp. 作为语言。按 创建和添加.

打开 resetclown. 在Monodevelop中的脚本并添加以下代码:

void ResetClownOnHit () {
  gameObject.transform.localScale = Vector3.one;
  gameObject.GetComponentInChildren<CollisionBehavior> ().collided = false;
}

In this method, you set the localScale of the clown back to 1 到 restore its original size. Then you use GetComponentInChildren() 到 reference the CollisionBehavior. on the Skin and make sure that its collided variable is set to false. If you leave out this step, your clown will still move, but won’t react to collisions anymore.

现在你需要创建一个 动画事件 调用此方法。在层次结构中选择Clown并选择Clows时切换到动画视图 动画剪辑。在里面 时间线 将播放头设置为 1:30。如果您的时间线在1:00之后不可见,请使用滚轮向下扩展。然后单击按钮 添加活动.

添加活动

双击 标记 对于您刚刚创建的动画事件。

Bildschirmfoto 2015-10-02 UM 15.45.28

In the dialog window, select resetclown.OnHit().

Bildschirmfoto 2015-10-02 UM 15.44.52

This creates an Animation Event that calls the method resetclown.OnHit() at 1:30.

跑游戏。现在开奖结果3d缩小,然后重置并开始再次移动,准备再次被蛋糕堵塞!

成立

然后去哪儿?

你可以下载 在这里完成项目.

在本教程中,您可以瞥见Unity的动画系统的可能性。但要学到你仍然存在,年轻的帕瓦兰。一些阅读建议:

目前,享受您在动画系统上获得的权力,使您的游戏更加美丽和互动。如果您有任何疑问或意见,请加入下面的讨论!

平均评级

5/5

为此内容添加评级

10 ratings

更像这样的

贡献者

评论