summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit/Components/UnitAnimation/MonsterAnimation.cs
blob: ee111f73e8956dd2a67ffff070d088d262f2a6ba (plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonsterAnimation : UnitAnimation
{
    public enum ELayer
    {
        Basic = 0,

        Count,
    }

    // 动作名,和animator里的state对应
    public enum EAnimState
    {
        // layer 0 
        Idle = 0,
        Move,
        Jump,

		HitLight,
		HitAir,
        HitInAir,
        HitBackHeavy,

        Rise,
	}

    public override void Initialize()
    {
        base.Initialize();

        m_Animator = this.m_Owner.unitObj.GetComponent<Animator>();

        m_Animator.speed = 0;

        m_LayerInfo = new AnimatorLayerInfo[2];
        m_LayerInfo[0] = new AnimatorLayerInfo(this, m_Animator, (int)ELayer.Basic);
        //m_LayerInfo[1] = new AnimatorLayerInfo(this, m_Animator, ELayer.Attack);

        if (m_Animator == null)
        {
            LogHelper.LogError("没有挂Animator组件");
        }

    }

    public override void OnUpdate()
    {
        base.OnUpdate();

        UpdateLayer();
        UpdateAnimation();
        UpdateRootMotion();
    }

    void UpdateLayer()
    {
        m_LayerInfo[0].OnUpdate();
        return;
        for (int i = 0; i < m_LayerInfo.Length; ++i)
        {
            m_LayerInfo[i].OnUpdate();
        }
    }

    void UpdateAnimation()
    {
        m_Animator.speed = 1;
        m_Animator.Update(Time.deltaTime);
        m_Animator.speed = 0;
    }

    void UpdateRootMotion()
    {
        m_Owner.unitRootMotion.UpdateRootMotion();
    }

    public void AnimIdle()
    {
        this.CrossFade(EAnimState.Idle, 0.2f, 0);
    }

    public void AnimHitLight()
    {
		this.Play(EAnimState.HitLight, 0, 0);
        //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0);
    }

    public void AnimHitAir()
    {
		this.Play(EAnimState.HitAir, 0, 0);
        //m_Animator.CrossFade("HitLight", 0.05f, 0, 0, 0);
    }

    public void AnimHitInAir()
    {
        this.Play(EAnimState.HitInAir, 0, 0);
    }

    public void AnimHitBackHeavy()
    {
        this.Play(EAnimState.HitBackHeavy, 0, 0);
    }

    public void AnimRise()
    {
		this.CrossFade(EAnimState.Rise, 0);
    }

	private void Play(EAnimState animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity)
	{
		AnimatorLayerInfo layer = this.layers[layerIndex];
		if (layer == null)
			return;
		layer.OnPlay(animState.ToString(), normalizedTime);
	}

	public void CrossFade(EAnimState animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
	{
		AnimatorLayerInfo layer = this.layers[layerIndex];
		if (layer == null)
			return;
		layer.OnCrossFade(animState.ToString(), normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime);
	}

}