思路:在player脚底下放一个踩踏判定的位置(创建一个StampPositon的空游戏对象作为player的子对象,获取其transform)
1、定义一个Transform对象用来表示检测的中心点
Transform stampPosition;//踩击点的位置
2、在Awake()中获取transform
transform.Find("子物体名字”)寻找子物体
stampPosition = transform.Find("StampPosition");
3、定义检查是否踩怪的函数
函数逻辑为:通过Physics2D.OverlapCircle方法进行线性检测,检测以stampPosition.position为中心,0.1f为半径的范围内,是否有存在于”Enemy“图层的游戏对象发生碰撞,若存在则返回发生碰撞的Collider2D碰撞体。若没有发生碰撞就return,若发生了碰撞就对Player游戏对象施加一个向上的力并Destory该怪物。
注意:这里需要将Player的速度的y轴速度设置为0,从而保证每次反弹的效果相同。
private void StampCheck()//检测是否踩怪
{
Collider2D enemy=Physics2D.OverlapCircle(stampPosition.position, 0.1f, LayerMask.GetMask("Enemy"));
if (enemy == null)//没有踩到怪
{
return;
}
else
{
rb.velocity = new Vector2(rb.velocity.x, 0);//保证每次反弹高度一样
rb.AddForce(new Vector2(0, reboundForce));//踩到怪后施加一个反弹力
Destroy(enemy.gameObject);//消灭怪物
}
}
4、在FixedUpdate中进行检测
private void FixedUpdate()
{
StampCheck();
}