Godot引擎3D游戏开发:设计怪物场景
Godot引擎3D游戏开发:设计怪物场景【免费下载链接】godot-docsGodot Engine official documentation项目地址: https://gitcode.com/GitHub_Trendi...
·
Godot引擎3D游戏开发:设计怪物场景
概述
在3D游戏开发中,怪物(Mob)是游戏体验的重要组成部分。本文将详细介绍如何在Godot引擎中创建一个基础的怪物场景,包括3D模型导入、碰撞检测、移动逻辑以及屏幕外销毁机制。
场景搭建
基础节点结构
- 根节点:使用
CharacterBody3D
作为根节点,命名为"Mob" - 旋转支点:添加
Node3D
子节点,命名为"Pivot" - 3D模型:将模型文件(mob.glb)拖拽到Pivot节点下,并重命名为"Character"
碰撞形状设置
- 为Mob节点添加
CollisionShape3D
子节点 - 在检查器面板中,为Shape属性分配
BoxShape3D
- 调整碰撞盒大小:
- 确保碰撞盒接触地面
- 宽度略小于模型实际尺寸
- 高度可以适当高于模型
设计建议:碰撞形状不必完全匹配模型外观,应以游戏实际体验为准。过大的碰撞盒会让玩家在视觉上未接触怪物时就触发碰撞,影响游戏公平性。
屏幕外销毁机制
可视性检测
- 为Mob节点添加
VisibleOnScreenNotifier3D
子节点 - 调整粉色检测框大小,使其完全包围3D模型
- 连接
screen_exited
信号到Mob脚本
销毁实现
func _on_visible_on_screen_notifier_3d_screen_exited():
queue_free()
当怪物完全离开屏幕时,自动调用queue_free()
方法销毁实例,避免内存浪费。
性能提示:对于频繁创建销毁的对象,可以考虑使用对象池技术。但在GDScript中,由于采用引用计数内存管理,通常不需要担心频繁创建销毁的性能问题。
移动逻辑实现
基础属性
extends CharacterBody3D
# 怪物最小移动速度(米/秒)
@export var min_speed = 10
# 怪物最大移动速度(米/秒)
@export var max_speed = 18
func _physics_process(_delta):
move_and_slide()
初始化方法
func initialize(start_position, player_position):
# 面向玩家位置
look_at_from_position(start_position, player_position, Vector3.UP)
# 随机旋转角度(-45度到+45度之间)
rotate_y(randf_range(-PI / 4, PI / 4))
# 计算随机速度
var random_speed = randi_range(min_speed, max_speed)
# 设置初始速度向量
velocity = Vector3.FORWARD * random_speed
# 根据旋转角度调整速度方向
velocity = velocity.rotated(Vector3.UP, rotation.y)
关键点说明:
look_at_from_position()
使怪物生成时面向玩家- 随机旋转角度避免所有怪物直线冲向玩家
- 随机速度增加游戏变化性
- 速度方向与怪物朝向保持一致
完整脚本参考
extends CharacterBody3D
# 怪物最小移动速度(米/秒)
@export var min_speed = 10
# 怪物最大移动速度(米/秒)
@export var max_speed = 18
func _physics_process(_delta):
move_and_slide()
# 初始化方法(由主场景调用)
func initialize(start_position, player_position):
# 定位并面向玩家
look_at_from_position(start_position, player_position, Vector3.UP)
# 随机旋转角度
rotate_y(randf_range(-PI / 4, PI / 4))
# 计算随机速度
var random_speed = randi_range(min_speed, max_speed)
# 设置速度向量
velocity = Vector3.FORWARD * random_speed
# 调整速度方向
velocity = velocity.rotated(Vector3.UP, rotation.y)
# 屏幕外销毁
func _on_visible_on_screen_notifier_3d_screen_exited():
queue_free()
总结
通过本教程,我们完成了怪物场景的完整搭建,包括:
- 3D模型导入与节点结构设计
- 碰撞检测设置
- 移动逻辑实现
- 屏幕外自动销毁机制
这些基础组件为后续的怪物生成系统打下了坚实基础。在下一阶段,我们将实现怪物在游戏场景中的随机生成逻辑,使游戏体验更加完整。
更多推荐
所有评论(0)