Unity笔记——如何使怪物拥有警戒范围和攻击范围

    在我们玩的所有游戏中,都会遇到在某个范围内怪物会侦测到玩家,并追随玩家,在和玩家一定距离后会发动攻击,但是逃过这个范围玩家就不会受伤了。综上,就是怪物的警戒范围和攻击范围。


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啦



猜你喜欢

转载自blog.csdn.net/sorski_cao/article/details/79669770
今日推荐