Unity在运行时修改动画

时间:2017-05-17 01:40:08

标签: c# animation unity3d

TLDR: 基本上,我为所有士兵使用相同的动画,但我希望这些动画的表现彼此差别不大,所以我的所有士兵都不会表现得一样。我能在运行时修改这些动画吗?

所以我正在研究这种拥有一群士兵的RTS风格游戏,让我们说充电。由于他们大多数使用相同的动画。虽然我随机化了每个动画的开始时间,但它们不会同时播放。但是该单位的每个人仍在使用相同的动画。它看起来很奇怪。

我想知道是否有一种可以在运行时稍微改变每个动画的方式,他们摆动手臂的程度,例如,其中一个士兵会多摆几度,其他人会摆动减。

我想知道在运行时是否可以统一。如果是这样,我该怎么做?

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

我建议你做的是设置条件,以便在满足条件时执行某些操作。

转换不仅定义了状态之间的混合应该持续多长时间,还定义了应该在什么条件下激活

您可以设置转换为仅在特定条件为真时发生

要设置这些条件,请在 Animator Controller 中指定参数值。

此外,您可以尝试:有序的中断,过渡抵消或过渡时间,以实现您的目标。

进一步修改:

在这种情况下,您的高级脚本将需要设置角色的动画参数,以便化身执行文本文件中指定的内容。使用Animator.Play()或.CrossFade()直接更改动画状态而不是设置动画参数甚至可能更好。

例如,假设你的角色3在时间02:49抽搐。然后在02:49,字符3上的脚本(但仅限于字符3)应该将触发器参数(例如“twitch”)设置为true,或者直接播放动画状态,例如Animator.Play(“twitch”)。

因此,实际上所有士兵都会分配不同的脚本。

脚本具有您在检查器中设置的公共属性。您可以为角色的编号定义属性。对于每个角色,此值都是唯一的。

这会回答你的问题吗?对不起,如果我还没有得到你的问题

答案 1 :(得分:0)

首先,用动画控制器替换你的动画。

例如,在动画制作者中,您可以添加animation events。您还可以定义animation parameters。根据您定义的参数,您的角色可以在不同的动画之间切换。让我们现在看一个例子。

在你的士兵身上放一个脚本SoldierAnimator,参考动画师控制器。现在,让我们说你的士兵的负载枪。动画有3种变化。您现在为每个动画分配一个参数。所以' crouchLoad',' quickLoad'并且' stuckLoad'可以为子状态分配参数' loadType'值为0,1和2。

假设你可以从"任何国家" to' loadGun'触发参数“加载”状态,并且您的SoldierAnimator到达必须加载枪的位置,您可以执行以下操作:

public class SoldierAnimator : MonoBehaviour
{
    public Animator _animator;

    void someUserInputEvent()
    {
        //... Some code here...
        loadGun();            
    }

    void loadGun()
    {
        int animType = Random.Range(0, 3);
        _animator.SetInt("loadType", animType);
        _animator.SetTrigger("load"); //Now your animations are randomized



        // You can also experiment with _animator.speed = xx, for 
        // different speeds of loading animation, probably randomized a
        // little, but then add an event to end of the animation and
        // on the event, set speed back to 1.
    }        
}