少年修仙传客户端代码仓库
hch
2025-03-03 28785d6ddf9c08e49527ede9405c7b6c93c6ed32
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
using UnityEngine;
 
[RequireComponent(typeof(SFXController))]
public class WarnEffectController : MonoBehaviour
{
    public Transform startEffect;
    public Transform scaleEffect;
    public Transform endEffect;
    public Renderer rectScale;
    public Vector3 baseScale;
 
    private Vector3 m_AtkSize;
    private float m_CurrentTime;
    private float m_TotalTime;
    private E_HitTestType m_HitTestType;
    private SFXController m_SfxController;
 
    private byte m_Step;
 
    public void Init(int skillId, int totalTime, int remainTime)
    {
        m_TotalTime = totalTime * Constants.F_GAMMA;
        m_CurrentTime = m_TotalTime - remainTime * Constants.F_GAMMA;
        m_SfxController = GetComponent<SFXController>();
        m_Step = 0;
        if (startEffect)
        {
            startEffect.SetActive(true);
            startEffect.localPosition = Constants.Special_Hide_Position;
        }
        if (scaleEffect)
        {
            scaleEffect.SetActive(true);
            scaleEffect.localPosition = Constants.Special_Hide_Position;
        }
        if (endEffect != null)
        {
            endEffect.SetActive(false);
        }
    }
 
    public void CalculateScale(E_HitTestType hitTestType, float range, float distance)
    {
        m_HitTestType = hitTestType;
        if (m_HitTestType == E_HitTestType.Sector)
        {
            m_AtkSize = distance * baseScale;
        }
        else if (m_HitTestType == E_HitTestType.Rect)
        {
            m_AtkSize.x = baseScale.x * range;
            m_AtkSize.y = 1;
            m_AtkSize.z = baseScale.z * distance;
            rectScale.material.SetTextureOffset("_MainTex", Vector2.up);
        }
    }
 
    // Update is called once per frame
    void Update()
    {
        switch (m_Step)
        {
            case 0:// 这个步骤是因为特效资源如果一开始就播放在指定位置就会出现很奇怪的表现...
                transform.localScale = m_AtkSize;
                if (startEffect)
                {
                    startEffect.localPosition = Vector3.zero;
                }
                if (scaleEffect)
                {
                    scaleEffect.localPosition = Vector3.zero;
                }
                m_Step = 1;
                break;
            case 1:
 
                m_CurrentTime += Time.deltaTime;
 
                if (scaleEffect)
                {
                    if (m_HitTestType == E_HitTestType.Sector)
                    {
                        scaleEffect.localScale = Vector3.one * (m_CurrentTime / m_TotalTime);
                    }
                    else if (m_HitTestType == E_HitTestType.Rect)
                    {
                        float _val = m_CurrentTime / m_TotalTime;
                        _val = 1.8f * _val;
                        _val = 1 - _val;
                        Vector2 _offset = new Vector2(0, _val);
                        rectScale.material.SetTextureOffset("_MainTex", _offset);
                    }
                }
 
                if (m_CurrentTime >= m_TotalTime)
                {
                    m_CurrentTime = 0;
                    m_Step = 2;
                    if (endEffect)
                    {
                        endEffect.SetActive(true);
                    }
                }
 
                break;
            case 2:
                m_CurrentTime += Time.deltaTime;
                if (m_CurrentTime > 0.5f)
                {
                    if (m_SfxController)
                    {
                        SFXPlayUtility.Instance.Release(m_SfxController);
                        if (endEffect)
                        {
                            endEffect.SetActive(false);
                        }
                        m_SfxController = null;
                    }
                }
                break;
        }
    }
}