101 lines
2.8 KiB
C#
101 lines
2.8 KiB
C#
|
// Felix-Bang:FBBallBullet
|
|||
|
// へ /|
|
|||
|
// /\7 ∠_/
|
|||
|
// / │ / /
|
|||
|
// │ Z _,< / /`ヽ
|
|||
|
// │ ヽ / 〉
|
|||
|
// Y ` / /
|
|||
|
// イ● 、 ● ⊂⊃〈 /
|
|||
|
// () へ | \〈
|
|||
|
// >ー 、_ ィ │ //
|
|||
|
// / へ / ノ<| \\
|
|||
|
// ヽ_ノ (_/ │//
|
|||
|
// 7 |/
|
|||
|
// >―r ̄ ̄`ー―_
|
|||
|
// Describe:球形子弹
|
|||
|
// Createtime:2018/10/18
|
|||
|
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace FBApplication
|
|||
|
{
|
|||
|
public class FBBallBullet : FBBullet
|
|||
|
{
|
|||
|
#region 属性
|
|||
|
//目标
|
|||
|
public FBMonster Target { get; private set; }
|
|||
|
|
|||
|
//移动方向
|
|||
|
public Vector3 Direction { get; private set; }
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Unity回调
|
|||
|
protected override void Update()
|
|||
|
{
|
|||
|
//已爆炸无需跟踪
|
|||
|
if (f_isExploded)
|
|||
|
return;
|
|||
|
|
|||
|
//目标检测
|
|||
|
if (Target != null)
|
|||
|
{
|
|||
|
if (!Target.IsDead)
|
|||
|
{
|
|||
|
//计算方向
|
|||
|
Direction = (Target.transform.position - transform.position).normalized;
|
|||
|
}
|
|||
|
|
|||
|
//角度
|
|||
|
LookAt();
|
|||
|
|
|||
|
//移动
|
|||
|
transform.Translate(Direction * Speed * Time.deltaTime, Space.World);
|
|||
|
|
|||
|
//打中目标
|
|||
|
if (Vector3.Distance(transform.position, Target.transform.position) <= FBConsts.DotClosedDistance)
|
|||
|
{
|
|||
|
//敌人受伤
|
|||
|
Target.Damage(Attack);
|
|||
|
|
|||
|
//爆炸
|
|||
|
Explode();
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//移动
|
|||
|
transform.Translate(Direction * Speed * Time.deltaTime, Space.World);
|
|||
|
|
|||
|
//边界检测
|
|||
|
if (!f_isExploded&& !MapRect.Contains(transform.position))
|
|||
|
Explode();
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 方法
|
|||
|
public void Load(int bulletID, int level, Rect mapRect, FBMonster monster)
|
|||
|
{
|
|||
|
Load(bulletID, level, mapRect);
|
|||
|
|
|||
|
Target = monster;
|
|||
|
|
|||
|
//计算方向
|
|||
|
Direction = (Target.transform.position - transform.position).normalized;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 帮助方法
|
|||
|
void LookAt()
|
|||
|
{
|
|||
|
float angle = Mathf.Atan2(Direction.y, Direction.x);
|
|||
|
Vector3 eulerAngles = transform.eulerAngles;
|
|||
|
eulerAngles.z = angle * Mathf.Rad2Deg - 90;
|
|||
|
transform.eulerAngles = eulerAngles;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|