Home Unity Animancer
Post
Cancel

Unity Animancer

[官方文档] (https://kybernetik.com.au/animancer/docs/introduction/)

# 快速开始

1
2
3
4
5
6
7
8
9
10
11
12
    using Animancer;
    using UnityEngine;
    public sealed class PlayAnimationOnEnable : MonoBehaviour
    {
        [SerializeField] private AnimancerComponent _Animancer;
        [SerializeField] private AnimationClip _Animation;

        private void OnEnable()
        {
            _Animancer.Play(_Animation);
        }
    }

简单移动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    using Animancer;
    using UnityEngine;

    public sealed class BasicMovementAnimations : MonoBehaviour
    {
        [SerializeField] private AnimancerComponent _Animancer;
        [SerializeField] private AnimationClip _Idle;
        [SerializeField] private AnimationClip _Move;

        private void Update()
        {
            float forward = ExampleInput.WASD.y;
            if (forward > 0)
            {
                _Animancer.Play(_Move);
            }
            else
            {
                _Animancer.Play(_Idle);
            }
        }
    }

Transitions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[SerializeField]
private AnimancerComponent _Animancer;

[SerializeField]
private ClipTransition _Idle;

[SerializeField]
private ClipTransition _Action;

private void OnEnable()
{
    _Action.Events.OnEnd = OnActionEnd;

    _Animancer.Play(_Idle);
}

	
private void OnActionEnd()
{
    _Animancer.Play(_Idle);
}

private void Update()
{
    if (ExampleInput.LeftMouseUp)
    {
        _Animancer.Play(_Action);
    }
}

Basic Character

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
sing Animancer;
using UnityEngine;

public sealed class BasicCharacterAnimations : MonoBehaviour
{
    [SerializeField] private AnimancerComponent _Animancer;
    [SerializeField] private ClipTransition _Idle;
    [SerializeField] private ClipTransition _Move;
    [SerializeField] private ClipTransition _Action;

    private enum State
    {
        NotActing,
        Acting,
    }

    private State _CurrentState;

    private void Awake()
    {
        _Action.Events.OnEnd = OnActionEnd;
    }
    
    private void OnActionEnd()
    {
        _CurrentState = State.NotActing;
        UpdateMovement();
    }

    private void Update()
    {
        switch (_CurrentState)
        {
            case State.NotActing:
                UpdateMovement();
                UpdateAction();
                break;

            case State.Acting:
                UpdateAction();
                break;
        }
    }

    private void UpdateMovement()
    {
        _CurrentState = State.NotActing;

        float forward = ExampleInput.WASD.y;
        if (forward > 0)
        {
            _Animancer.Play(_Move);
        }
        else
        {
            _Animancer.Play(_Idle);
        }
    }

    private void UpdateAction()
    {
        if (ExampleInput.LeftMouseUp)
        {
            _CurrentState = State.Acting;
            _Animancer.Play(_Action);
        }
    }
}
This post is licensed under CC BY 4.0 by the author.