讲师中心 微信公众号
AI工具推荐 视频效率加速

3D 游戏开发(Godot 4)

Polar Sponsor
爱发电 赞助
.NET 9.0

用 Godot 4 + GDScript 开发 3D 游戏的端到端工作流。触发场景:"做一个 3D 游戏"、 "第一人称/第三人称/FPS/TPS/3D 平台跳跃"、"用 Godot 做 3D"、"加个 3D 角色控制器/ 相机/敌人寻路/关卡"、"导入 glb 模型不显示"、"3D 场景太暗/太卡"、"make a 3D game"、 "first-per

3D 游戏开发(Godot 4 + GDScript)

功能概述

3D 游戏开发(Godot 4 + GDScript)是一项面向实际任务的技能,主要用于从零把一个 3D 游戏做到可玩、可验证、可发布;引擎固定 Godot 4.x + GDScript;

核心要点

  • 资产格式固定 glTF(.glb);
  • 约定 1 unit = 1 米 ,所有模型按真实尺度摆放;
  • 核心原则: 先灰盒后美术 ——用 CSGBox3D/基本几何把玩法和手感调对,再替换成正式;

使用与执行

每加一个系统就跑一遍验证 (见第。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

3D 游戏开发(Godot 4 + GDScript)

从零把一个 3D 游戏做到可玩、可验证、可发布。引擎固定 Godot 4.x + GDScript, 资产格式固定 glTF(.glb)。约定 1 unit = 1 米,所有模型按真实尺度摆放。

核心原则:先灰盒后美术——用 CSGBox3D/基本几何把玩法和手感调对,再替换成正式 模型;每加一个系统就跑一遍验证(见第 9 节)。

1. 环境与脚手架

godot --version   # 需要 4.x;macOS: brew install godot

project.godot 最小配置(渲染器决定平台与画质上限):

[application]
config/name="My3DGame"
run/main_scene="res://scenes/main.tscn"
config/features=PackedStringArray("4.4")

[rendering]
renderer/rendering_method="forward_plus"   ; 桌面端;导出网页/手机改 "mobile" 或 "gl_compatibility"

目录约定:

scenes/    main.tscn player.tscn enemy.tscn level_1.tscn hud.tscn
scripts/   同名 .gd
assets/    models/ materials/ textures/ hdris/ audio/
autoload/  game_state.gd

main.tscn 起步三件套:WorldEnvironment + DirectionalLight3D(开 shadow)+ 一块地板(CSGBox3D 或 MeshInstance3D+StaticBody3D)。没有灯和环境的 3D 场景是 纯黑的——"画面全黑"九成是这里。

2. 角色控制器(CharacterBody3D)

第一人称

节点:CharacterBody3D > CollisionShape3D(Capsule) + Node3D(Head) > Camera3D

extends CharacterBody3D
const SPEED := 5.0
const JUMP_VELOCITY := 4.5
const MOUSE_SENS := 0.002
@onready var head: Node3D = $Head

func _ready() -> void:
    Input.mouse_mode = Input.MOUSE_MODE_CAPTURED

func _unhandled_input(event: InputEvent) -> void:
    if event is InputEventMouseMotion:
        rotate_y(-event.relative.x * MOUSE_SENS)
        head.rotate_x(-event.relative.y * MOUSE_SENS)
        head.rotation.x = clampf(head.rotation.x, -PI/2, PI/2)

func _physics_process(delta: float) -> void:
    if not is_on_floor():
        velocity += get_gravity() * delta
    if Input.is_action_just_pressed("jump") and is_on_floor():
        velocity.y = JUMP_VELOCITY
    var input := Input.get_vector("move_left", "move_right", "move_forward", "move_back")
    var dir := (transform.basis * Vector3(input.x, 0, input.y)).normalized()
    velocity.x = dir.x * SPEED
    velocity.z = dir.z * SPEED
    move_and_slide()

按 Esc 释放鼠标:Input.mouse_mode = Input.MOUSE_MODE_VISIBLE。

第三人称

相机换成 SpringArm3D > Camera3D(spring_length 3~5,SpringArm 自动防穿墙), 水平旋转加在 SpringArm 的 yaw 上;移动方向按相机朝向换算,角色模型用 look_at 或对 rotation.y 做 lerp_angle 平滑转身。

3. 资产管线(glTF)

  • 免费 CC0 源:KayKit(低多边形套件+带骨骼动画角色,Godot AssetLib 可搜)、 Quaternius、Poly Haven(写实道具/PBR 材质/HDRI,无角色)、Poly Pizza。 先拿套件把关卡拼出来,风格统一且零成本。
  • .glb 优先于 .gltf:Godot 4 下部分 .gltf 会静默导入失败 (load() 返回 null 且无报错)。下载的资产包好文件常嵌很深, find -iname '*.glb' 先定位。
  • 导入:.glb 拖进 res:// 自动导入;代码里 preload("res://assets/models/x.glb").instantiate() 直接实例化。
  • 碰撞:导入的模型自带的只有网格。静态景物在 Import 面板给 mesh 开 "Generate Physics",或代码 $Mesh.create_trimesh_collision()(仅静态; 动态刚体用 convex)。
  • 带动画的角色:glb 内含 AnimationPlayer, $Model/AnimationPlayer.play("Run");先 get_animation_list() 打印确认动画名。 状态多了再上 AnimationTree(locomotion 混合、one-shot 攻击),两三个状态 直接 play 切换即可。
  • AI 生成贴图/HUD:若装有 game-asset-gen skill 可生成无缝贴图与图标; game-asset-3d skill 可自动搜索下载上述 CC0 源。没有则手动下载。

4. 关卡搭建

  • 灰盒:CSGBox3D 快速拼布局(记得勾 Use Collision),手感对了再替换模型。
  • 套件拼搭(kit-bash):KayKit 类套件逐件实例化摆放;同一件重复几十次以上 改用 MultiMeshInstance3D(一次 draw call)。
  • 规则网格关卡(地牢/体素风):GridMap + MeshLibrary(把套件场景转成 MeshLibrary 后像 3D TileMap 一样刷)。
  • 出生点、触发器用 Marker3D / Area3D(拾取、伤害区、关卡切换门,写法同 2D, 只是节点带 3D 后缀)。物理层命名规范同样适用:layer=我是谁,mask=我碰谁。

5. 材质与贴图(StandardMaterial3D)

  • 贴图三件套:albedo + normal(Godot 用 OpenGL 约定 nor_gl)+ roughness/AO/metallic(Poly Haven 的 arm 是三合一打包图, 勾 "ORM" 材质类型或分通道指定)。
  • 平铺:uv1_scale 控制重复次数;没有 UV 的程序化几何体勾 uv1_triplanar。
  • 天空:WorldEnvironment > Environment > Sky。快速出效果用 ProceduralSkyMaterial;要真实感用 Poly Haven HDRI + PanoramaSkyMaterial, 并把 ambient light source 设为 Sky,让环境光来自天空。

6. 灯光与氛围(画面质感的 80%)

  • DirectionalLight3D 当太阳:开 shadow,角度斜 30~45°;室内补 OmniLight3D/SpotLight3D(阴影灯越少越好,每盏阴影灯都有开销)。
  • Environment 上依次调:Tonemap 设 Filmic/ACES(默认 Linear 是"塑料感" 主因)、开 Glow(自发光材质会泛光)、加 Volumetric Fog 或普通 Fog 拉出景深 层次、SSAO 增强角落接触感(Forward+ 专属)。
  • 调完灯光对比截图前后——这一步性价比极高,别跳过。

7. 敌人 AI 与寻路

关卡根挂 NavigationRegion3D,把静态地面/障碍放进去后 Bake(编辑器按钮或 bake_navigation_mesh())。敌人:

# CharacterBody3D + NavigationAgent3D
@onready var agent: NavigationAgent3D = $NavigationAgent3D

func _physics_process(delta: float) -> void:
    agent.target_position = player.global_position       # 加 Timer 每 0.2s 更新更省
    if not agent.is_navigation_finished():
        var next := agent.get_next_path_position()
        var dir := (next - global_position).normalized()
        velocity.x = dir.x * SPEED
        velocity.z = dir.z * SPEED
    if not is_on_floor():
        velocity += get_gravity() * delta
    move_and_slide()

行为分层:巡逻(导航到路径点)→ 发现(到玩家距离 + 视线 RayCast3D)→ 追击 → 攻击(Area3D hitbox),一个 enum 状态机足够。

8. HUD 与游戏流程

3D 场景之上叠 CanvasLayer:准星(居中 TextureRect)、血条 (TextureProgressBar)、拾取提示。流程同 2D: get_tree().change_scene_to_file() 切主菜单/关卡/结算;暂停时记得把 Input.mouse_mode 还原成 VISIBLE。

9. 验证闭环(agent 自测)

# 1. 导入 + 解析检查(改完必跑;新增 glb 后尤其要跑,看有无导入失败)
godot --headless --path . --import 2>&1 | grep -iE "error|SCRIPT ERROR" || echo IMPORT_OK

# 2. 无头跑 120 帧抓运行时报错
godot --headless --path . --quit-after 120 2>&1 | grep -iE "error" || echo RUN_OK

# 3. 视觉验收:带窗口跑几秒 + 自动截图(无头不渲染)
godot --path . --quit-after 240

截图 autoload 与 2D 相同(get_viewport().get_texture().get_image().save_png(...), 定时存 3 张)。3D 重点检查:画面是否全黑(灯/环境)、模型是否显示(.gltf 静默 失败、scale 过大过小)、材质是否发紫(贴图丢失)、角色是否穿地(碰撞没生成)。

10. 性能

按收益排序:阴影灯数量与 shadow 分辨率 > 重复物件改 MultiMeshInstance3D > Camera3D.far 别默认 4000 米 > 大关卡加 OccluderInstance3D(遮挡剔除)> 网格 LOD(导入时自动生成,确认没关)。目标平台弱(网页/手机)就直接换 Mobile / Compatibility 渲染器,比逐项抠更有效。

11. 导出

godot --headless --install-export-templates   # 首次
godot --headless --path . --export-release "macOS" build/mac/MyGame.zip
godot --headless --path . --export-release "Windows Desktop" build/win/MyGame.exe
# 网页导出需 gl_compatibility 渲染器;3D 网页包体大,桌面端是 3D 的主发布目标

12. 常见坑

  • 画面全黑/死白 → 没灯、没 Environment,或 HDRI 曝光没调(Environment 里调 background energy / tonemap exposure)。
  • .gltf 静默导入失败 → 换 .glb,或换资产;load() 返回 null 必查此项。
  • 模型尺度错 → 别在 Godot 里手动缩放刚体(物理会出鬼畜),在导入设置里改 scale 或用正确尺度的资产。
  • 鼠标视角上下颠倒/过快 → relative 符号与灵敏度;忘了 clamp pitch 会翻筋斗。
  • 敌人穿墙 → 导航网格没重 Bake(改了关卡要重烘焙),或 agent radius 与 碰撞体不匹配。
  • 影子全糊 → DirectionalLight3D 的 shadow max distance 太大,拉小到玩家 视距(如 50m)立刻清晰。
目录

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

相关专题

更多
C++游戏引擎核心架构与实时渲染优化实践
C++游戏引擎核心架构与实时渲染优化实践

本专题围绕 C++ 在游戏引擎开发中的核心技术展开,讲解渲染管线设计、内存管理优化、组件化架构以及实时渲染性能提升方法。通过实际引擎模块分析,帮助开发者掌握高性能游戏系统设计能力。

266

2026.06.22

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

229

2026.04.13

C++ 游戏开发
C++ 游戏开发

本专题聚焦 C++ 在游戏开发领域的应用,内容涵盖游戏循环机制、内存与性能优化、2D/3D 图形渲染、物理引擎实现、输入与交互系统、音效处理等核心知识。通过实战案例(如小游戏引擎构建、射击类游戏开发、角色控制系统),帮助学习者掌握 从底层到完整项目的C++游戏开发能力。

2971

2025.09.30

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

0

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

0

2026.10.28

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

0

2026.10.28

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
阶跃Al官方手册
阶跃Al官方手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习

C++教程
C++教程

共115课时 | 43.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn