public class Enemy : MonoBehaviour
//设置好两个巡逻点,之后拖入变量框
{
protected Animator anim;//protected可以在子类继承中调用
// Start is called before the first frame update
[Header(“Movement”)]
public float speed;
public Transform PointA, PointB;
public Transform TargetPoint;//目标点
public List<Transform> AttackList = new List<Transform>();
void Start()
{
SwichPoint();
}
// Update is called once per frame
void Update()
{
if (Mathf.Abs(TargetPoint.position.x - transform.position.x) < 0.01f)//如果目标点和NPC的距离小于0.01f则判断下一个目标点
{
SwichPoint();
}
MoveToTarget();//之后移动到目标点
}
public void MoveToTarget() {
transform.position = Vector2.MoveTowards(transform.position, TargetPoint.position, speed*Time.deltaTime);//这个Vector2.MoveTowards可以朝着制定方向移动参数为(当前坐标,目标坐标,和速度)
filpDirection();//移动到目标点以后改变rotation
}
public void AttackAction() {
}
public virtual void SkillAction()//特殊攻击方式用virtual表示可以在子类中被修改
{
}
public void filpDirection()
{
if (transform.position.x < TargetPoint.position.x)//如果NPC的X坐标小于目标点的X坐标就是目标点在右边则不改变方向
transform.rotation = Quaternion.Euler(0f, 0f, 0f);//注意这里使用欧拉角
else
transform.rotation = Quaternion.Euler(0f, 180f, 0f);//在左边就改变方向
}
public void SwichPoint()
{
if (Mathf.Abs(PointA.position.x - transform.position.x) > Mathf.Abs(PointB.position.x - transform.position.x))
{
TargetPoint = PointA;
}
else
{
TargetPoint = PointB;
}
}
public void OnTriggerStay2D(Collider2D collision)//如果停留在触发器里面的时候就把这个碰撞体添加到列表里面,在Collider2D里设置触发器的范围
{
if (!AttackList.Contains(collision.transform))
AttackList.Add(collision.transform);
}
public void OnTriggerExit2D(Collider2D collision)
{
AttackList.Remove(collision.transform);
}
}