
首先在根节点(world)下添加一个KinematicBody,并命名为Enemy,并添加如下节点:

大致是这样:

当然,敌人的形状你想改成什么样子都可以,但gun(红色的)的位置不可以变!它必须在Z轴的反方向(即蓝色箭头的反方向),原因稍后解释。
接下来我们看脚本:
首先是变量:

毕竟敌人是会和玩家一样发射子弹的,所以先预加载"but"场景,并声明clone方便后续操作
敌人的手速不能“快到飞起”,所以我们得设置一个time,使其每隔一段时间再发射一次子弹
敌人也是有血量的,所以得设置health
在设置敌人的子弹伤害BULLET_DAMAGE(“撞衫”“撞包”可能会有,但“撞子弹”一般是没有的)。当然,你也可以省略这一步。
接下来是主体部分_process函数:

首先是look_at方法:
它的作用可以直接理解为“使节点看着某一个点”,它可以传入两个参数,一个是“所要看的点”,另一个为up(这个暂时不用在意,直接写全局Y指向 0,1,0 就行)
第一个参数中:
先用get_node("../player")获取到人物节点,再用global_transform[3]获取到人物的位置
(注:global_transform获取的是一个数组,共有4个数据,前三个是局部XYZ轴指向,最后是全局坐标位置)
这样,敌人的正面(z轴的反方向)就可以对着玩家,这样枪口就可以对着玩家了(总觉得这句活哪里怪怪的)
接下来behind_dir赋值为当前节点局部z轴指向
并用move_and_slide()方法,使当前节点向z轴反方向(即“正面”)运动
在将time加上帧时间(delta)
然后判断time是否大于等于2秒
如果是,则先把time清零
(接下来的步骤与人物射击相似)
首先实例化子弹场景
然后将子弹的全局变换设置为gun的全局变换
接下来将子弹的伤害设置为当前脚本中的BULLET_DAMAGE(当然,这是可以省略的)
然后再获取当前节点的父节点(world)并添加子节点clone(即“子弹”)
最后再复制来受到伤害的:

注:即使我们在这个脚本中将BULLET_DAMAGE赋值为20
但这里的BULLET_DAMAGE,实际是由子弹脚本传入的参数:

!所以互不干扰!
敌人的代码到这就结束了,敌人的加入,就意味着我们的人物再也不是“金刚不坏”了,所以打开player脚本添加:

(至于角色阵亡后的事件,我就不多赘述了)
这样,简易的敌人就添加完成了