Godot引擎3D游戏开发:设计怪物场景

【免费下载链接】godot-docs Godot Engine official documentation 【免费下载链接】godot-docs 项目地址: https://gitcode.com/GitHub_Trending/go/godot-docs

概述

在3D游戏开发中,怪物(Mob)是游戏体验的重要组成部分。本文将详细介绍如何在Godot引擎中创建一个基础的怪物场景,包括3D模型导入、碰撞检测、移动逻辑以及屏幕外销毁机制。

场景搭建

基础节点结构

  1. 根节点:使用CharacterBody3D作为根节点,命名为"Mob"
  2. 旋转支点:添加Node3D子节点,命名为"Pivot"
  3. 3D模型:将模型文件(mob.glb)拖拽到Pivot节点下,并重命名为"Character"

碰撞形状设置

  1. 为Mob节点添加CollisionShape3D子节点
  2. 在检查器面板中,为Shape属性分配BoxShape3D
  3. 调整碰撞盒大小:
    • 确保碰撞盒接触地面
    • 宽度略小于模型实际尺寸
    • 高度可以适当高于模型

设计建议:碰撞形状不必完全匹配模型外观,应以游戏实际体验为准。过大的碰撞盒会让玩家在视觉上未接触怪物时就触发碰撞,影响游戏公平性。

屏幕外销毁机制

可视性检测

  1. 为Mob节点添加VisibleOnScreenNotifier3D子节点
  2. 调整粉色检测框大小,使其完全包围3D模型
  3. 连接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)

关键点说明

  1. look_at_from_position()使怪物生成时面向玩家
  2. 随机旋转角度避免所有怪物直线冲向玩家
  3. 随机速度增加游戏变化性
  4. 速度方向与怪物朝向保持一致

完整脚本参考

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()

总结

通过本教程,我们完成了怪物场景的完整搭建,包括:

  1. 3D模型导入与节点结构设计
  2. 碰撞检测设置
  3. 移动逻辑实现
  4. 屏幕外自动销毁机制

这些基础组件为后续的怪物生成系统打下了坚实基础。在下一阶段,我们将实现怪物在游戏场景中的随机生成逻辑,使游戏体验更加完整。

【免费下载链接】godot-docs Godot Engine official documentation 【免费下载链接】godot-docs 项目地址: https://gitcode.com/GitHub_Trending/go/godot-docs

Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐