在我们玩的所有游戏中,都会遇到在某个范围内怪物会侦测到玩家,并追随玩家,在和玩家一定距离后会发动攻击,但是逃过这个范围玩家就不会受伤了。综上,就是怪物的警戒范围和攻击范围。
1.警戒范围
如图,是作者的Monster,蓝色是警戒范围,红色是攻击范围。
一般我们选择圆来成为我们的警戒范围,圆的半径始终是不变的,因此更加人性化,更适合我们操作。
首先导入using UnityEditor;
接下来我们要定义角度和半径
[Range(0, 10)]
public float AlertRadius;//半径
[Range(0, 360)]
public float Alertangle;//角度
//====================================================================
//绘制警戒范围
private void OnDrawGizmos()
{
Color color = Handles.color;
Handles.color = Color.blue;
Vector3 StartLine = Quaternion.Euler(0, -Alertangle, 0) * this.transform.forward;
Handles.DrawSolidArc(this.transform.position,this.transform.up,StartLine, Alertangle, AlertRadius);
Handles.color = color;
}
//====================================================================
绘制好警戒范围之后,我们就可以进行判断了,判断Player是否在警戒范围内
首先我们要定义一个布尔变量,用来判断是否进入范围,然后触发事件。
public bool Alertistrue = false;
其他代码如下:
//====================================================================
//警戒
void Alert() {
float distance = Vector3.Distance(this.transform.position,target.transform.position);
Vector3 vector3 = target.transform.position - this.transform.position;
float angle = Vector3.Angle(vector3,this.transform.forward);
if (distance <= AlertRadius && angle <= Alertangle)
{
Alertistrue = true;
}
else {
Alertistrue = false;
}
}
//====================================================================
代码是通过判断距离和角度来进行判断是否进入范围的,很好理解。
其他的事件代码就不再贴啦,可以自己发挥能力去写,布尔变量Alertistrue就在这时起作用了。
2.攻击范围
和警戒范围几乎一致,这里就不再细说,大家分清两个范围内触发的事件就OK啦