/// <summary>
/// 获取预判方向
/// </summary>
/// <param name="ArmsObject">武器对象</param>
/// <param name="ArmsObjectMoveSpeed">武器移动速度</param>
/// <param name="AttackObject">攻击对象</param>
/// <param name="AttackObjectMoveDir">攻击对象移动方向</param>
/// <param name="AttackObjectMoveSpeed">攻击对象移动速度</param>
/// <param name="distance">判断距离</param>
/// <returns></returns>
public virtual Vector3 GetPrejudgeMoveDir(GameObject ArmsObject, float ArmsObjectMoveSpeed, GameObject AttackObject, Vector3 AttackObjectMoveDir, float AttackObjectMoveSpeed, float distance)
{
//移动方向
Vector3 moveDir = Vector3.zero;
//(攻击对象移动结束后坐标)
Vector3 AttackObjectEndPos = AttackObject.transform.position;
while (true)
{
//(当前武器对象移动)到(攻击对象移动结束后坐标)所需时间
float t = Vector3.Distance(ArmsObject.transform.position, AttackObjectEndPos) / ArmsObjectMoveSpeed;
//根据时间 t 重新计算(攻击对象移动结束后坐标)
AttackObjectEndPos = AttackObject.transform.position + AttackObjectMoveDir * AttackObjectMoveSpeed * t;
//计算(当前武器对象移动)到(攻击对象移动结束后坐标)的新方向
moveDir = (AttackObjectEndPos - ArmsObject.transform.position).normalized;
//计算(当前武器对象移动)在新方向上移动 t 之后的坐标点
Vector3 ArmsObjectEndPos = ArmsObject.transform.position + moveDir * ArmsObjectMoveSpeed * t;
//判断(当前武器移动后坐标)与(攻击对象移动结束后坐标)的距离
if (Vector3.Distance(ArmsObjectEndPos, AttackObjectEndPos) < distance)
{
break;
}
}
return moveDir;
}
获取预判方向
最新推荐文章于 2024-04-26 14:09:08 发布