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);
|
}
|
}
|