Godot《躲避小兵》实战之创建敌人

是时候创建一些玩家必须躲避的敌人了。它的行为很简单:怪物将随机生成在屏幕的边缘,沿着随机的方向直线移动。

我们将创建一个 Mob 的怪物场景,以便在游戏中独立实例化出任意数量的怪物。

节点设置

点击顶部菜单的"场景 -> 新建场景",然后添加以下节点:

  • RigidBody2D(名为Mob) 【由物理仿真进行移动的 2D 物理体。】
    • AnimatedSprite2D 【多纹理作为动画播放帧的 Sprite 节点。】
    • CollisionShape2D 【将PhysicsBody2D转为实体对象】
    • VisibleOnScreenNotifier2D 【2D 空间的矩形区域,用于检测其在屏幕上是否可见。】

别忘了对该节点编组,就像你对Player场景做的那样!

选择Mob节点,并在右侧检查器中把它的Gravity Scale(重力)属性设置为0。这样可以防止怪物向下坠落。

此外,在 RigidBody2D 部分下方的 CollisionObject2D 部分下,展开 Collision 分组并取消选中 Mask 属性里的 1。这将确保怪物们不会相互碰撞。

像设置玩家一样设置 AnimatedSprite2D这一次,我们有 3 个动画:flyswimwalk,每个动画在 art 文件夹中都有两张图片。

必须为每个单独动画设置 动画速度 属性,将三个动画的对应动画速度值都调整为 3

你可以使用 动画速度 输入区域右侧的"播放动画"按钮预览动画。

我们将随机选择其中一个动画,以便小怪有一些变化。

像玩家的图像一样,这些小怪的图像也要缩小。请将 AnimatedSprite2DScale 属性设为 (0.75, 0.75)

像在 Player 场景中一样,为碰撞添加一个 CapsuleShape2D。为了使形状与图像对齐,你需要将 Rotation 属性设为 90(在"检查器"的"Transform"下)。

保存该场景。

创建敌人脚本

像给玩家创建脚本一样给Mob关联创建一个脚本

继承RigidBody2D节点:

复制代码
extends RigidBody2D

现在让我们看一下脚本的其余部分。在 _ready() 中,我们从三个动画类型中随机选择一个播放:

python 复制代码
func _ready():
	# $AnimatedSprite2D.sprite_frames返回的是SpriteFrames资源对象
	# get_animation_names()返回一个包含每个动画的名称的数组。值按字母顺序排列。
	var mob_types = $AnimatedSprite2D.sprite_frames.get_animation_names()
	# 随机取出一个动画来进行播放
	$AnimatedSprite2D.play(mob_types[randi() % mob_types.size()])

首先,我们从 AnimatedSprite2D 的 sprite_frames 属性中获取动画名称的列表。返回的是一个数组,该数组包含三个动画名称:["walk", "swim", "fly"]

然后我们需要在 02 之间选取一个随机的数字, 以在列表中选择一个名称(数组索引以 0 起始). randi() % n 会在 0 and n-1 之中选择一个随机整数.

最后一步是让怪物在超出屏幕时删除自己。将 VisibleOnScreenNotifier2D 节点的 screen_exited() 信号连接到 Mob 上,然后添加如下代码:

复制代码
func _on_visible_on_screen_notifier_2d_screen_exited():
	# 怪物离开屏幕时销毁本身
	queue_free()

玩家和敌人已经准备就绪,接下来,我们将在一个新的场景中把他们放到一起。我们将使敌人在游戏板上随机生成并前进,我们的项目将变成一个能玩的游戏。

相关推荐
鼎艺创新科技10 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
新手unity自用笔记17 小时前
unity基于Socket的网络学习
网络·网络协议·学习·unity·c#·游戏引擎
心前阳光19 小时前
Unity之XR Interaction Toolkit | IPointerDownHandler问题
unity·游戏引擎·xr
帅_shuai_2 天前
unity 静态字段内存查找工具
unity·游戏引擎
郝学胜-神的一滴2 天前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
鹿野素材屋3 天前
Unity超轻量级中文语音播报,仅5兆大小,无需联网即可使用,适用于弹幕、提示等动态语音播出
unity·游戏引擎
电子云与长程纠缠4 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 上
开发语言·学习·3d·ue5·游戏引擎
玖玥拾4 天前
Unity3D RPG 入门项目(八)游戏设置面板、帧率控制、快捷技能药品栏、技能解锁系统
游戏·3d·unity·游戏引擎
牛哇网络工作室4 天前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
优梦创客5 天前
游戏开发架构选型:第1篇|什么是架构?从进球事件看 MVC 的局限
unity·架构·游戏引擎·游戏开发