少年修仙传客户端代码仓库
hch
2025-06-12 204ef05a831c9484e2abc561d27ecbff7c797453
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
using UnityEngine;
 
public class FoFollow : FlyObject
{
    protected Vector3 m_PrevPosition;
    private SoFoFollow m_FoFollow;
 
    public sealed override bool Initialize(InitInfo initInfo)
    {
        bool _result = base.Initialize(initInfo);
 
        m_FoFollow = m_Config as SoFoFollow;
 
        if (m_Config == null)
        {
            return false;
        }
 
        m_HSpeed = m_FoFollow.hspeed;
        m_VSpeed = m_FoFollow.vspeed;
 
        m_PrevPosition = m_Position;
 
        return _result;
    }
 
    protected sealed override void OnUpdate()
    {
        GActorFight _target = GAMgr.Instance.GetByCID(m_InitInfo.mainTargetClientInstID) as GActorFight;
 
        Vector3 _calculatePos = m_Position;
 
        if (_target != null)
        {
            m_Direction = (_target.MP_Hit.position - m_Position).normalized;
        }
 
        // 处理水平方向的位移
        // 计算此次位移距离
        Vector3 _currentMovePos = m_HSpeed * m_Direction * Time.deltaTime;
 
        // 已经移动的位移距离
        m_MoveDistance += _currentMovePos;
 
        // 如果此次的位移将超过配置的最远距离
        if (m_MoveDistance.sqrMagnitude < m_FoFollow.distance * m_FoFollow.distance)
        {
            // 设定水平位移位置
            _calculatePos += _currentMovePos;
        }
        else
        {
            _calculatePos = m_FoFollow.distance * m_Direction;
        }
 
        // 处理垂直方向上的位移
        _calculatePos.y += m_VSpeed * Time.deltaTime;
 
        m_Position = _calculatePos;
 
        if (m_Ammo)
        {
            m_Ammo.transform.LookAt(m_Position);
            m_Ammo.transform.position = m_Position;
        }
 
        if (m_FoFollow.acceleration != 0)
        {
            m_HSpeed += m_FoFollow.acceleration;
        }
 
        if (m_FoFollow.gravity != 0)
        {
            m_VSpeed += m_FoFollow.gravity;
        }
    }
 
    public sealed override bool IsOver()
    {
        bool _result = base.IsOver();
        return _result || (m_MoveDistance.magnitude >= m_FoFollow.distance);
    }
}