Godot游戏开发——C# (一)

作者:云缘若仙日期:2025/11/6

1. 素材管理

核心内容:明确游戏开发所需基础素材类型,为场景与节点提供资源支撑,具体包括:

AssetBundle:资源打包容器,用于统一管理与加载资源;

Audio 音频素材:提供游戏音效、背景音乐等音频资源;

Sprites 精灵图片素材:提供角色、道具、场景元素等可视化图片资源。

2. 场景树与核心节点

节点类型功能描述
Root Node(根节点)场景树顶层节点,所有子节点均嵌套于其下,构成场景层级框架的基础。
Sprite(通用精灵节点)用于显示图片,核心属性为Texture(纹理属性),需配合纹理设置确保显示效果。
Camera2D(相机节点)控制游戏视角,通过Zoom(缩放) 功能实现相机推近(放大视角)或拉远(缩小视角)。
锁节点文档未补充详细功能,推测用于固定特定节点的位置、旋转或缩放状态,防止误操作。
CharacterBody2D专门通过脚本实现移动的角色节点,必须作为玩家对象的根节点,承载玩家控制逻辑。
AnimatedSprite2D扩展型 Sprite 节点,包含多个动画帧,支持自动播放,用于实现角色 / 物体动画。
场景链接支持实例化子场景,将独立场景作为模块嵌入当前场景,提升开发复用性。

3. 关键项目设置(跨文档模块)

3.1 纹理显示设置(针对像素图片)

操作路径:项目→设置→渲染→纹理;

核心配置:将纹理模式设为Nearest;

作用:避免像素图片缩放时模糊,保留清晰像素边缘,符合像素风格游戏视觉需求。

3.2 场景管理设置

保存操作:场景编辑完成后,需保存 scene 文件,防止开发进度丢失;

主场景设置:手动指定主场景,该场景为游戏运行时第一个渲染的场景,即游戏启动入口。

3.3 输入映射设置

操作路径:项目→设置→输入映射;

功能:绑定游戏操作(如移动、跳跃)与输入设备信号(键盘、手柄),为角色控制提供输入支持。

3.4 Export 特性设置

核心语法:通过[Export]关键字标注变量;

功能:使标注的变量在对象列表 — 检查器上可视化显示,无需修改代码即可直接调整参数。具体如下表:

**标注**功能描述
[Export]输出变量至检查器,支持在编辑器中可视化调整参数,无需修改代码。
Animated Sprite 2D动画类节点,可调用其实例实现动画播放、帧切换等动画控制逻辑。

4. 物理与碰撞检测相关节点

4.1 StaticBody2D(静态物理节点)

节点定位:静态物理物体,自身不可移动;

典型用途:制作 “空气墙”,限制玩家 / 物体移动范围,防止超出场景边界;

必备搭配:需添加Collision Shape 2D(2D 碰撞形状),定义碰撞区域的几何形态(如矩形、圆形)。

4.2 Area2D(区域检测节点)

核心功能:检测其他 CollisionObject(碰撞对象)的进入 / 退出,无物理阻挡能力,仅用于触发逻辑(如拾取道具、危险提示)。

信号连接:需通过代码手动连接 4 类关键信号,连接格式如下:

1Connect("body-entered",new Callable(this,nameof(OnBodyEntered)));
2
3Connect("body-exited",new Callable(this,nameof(OnBodyExited)));
4
5Connect("area-entered",new Callable(this,nameof(OnAreaEntered)));
6
7Connect("area-exited",new Callable(this,nameof(OnAreaExited)));

回调函数:每个信号对应专属函数,功能区分明确,如下表:

**回调函数**功能描述
private void OnBodyEntered (Node body)检测到非 Area 类型的碰撞对象(如玩家)进入当前 Area2D 区域。
private void OnBodyExited (Node body)检测到非 Area 类型的碰撞对象离开当前 Area2D 区域。
private void OnAreaEntered (Area2D area)检测到其他 Area2D 区域进入当前 Area2D 区域。
private void OnAreaExited (Area2D area)检测到其他 Area2D 区域离开当前 Area2D 区域。

4. 关键问题

问题 1:开发笔记中 CharacterBody2D、StaticBody2D、Area2D 三种 2D 节点的核心用途与本质区别是什么?(侧重节点功能区分)

三者均服务于游戏物理与角色逻辑,但定位完全不同:

①CharacterBody2D是 “动态角色载体”,专门通过脚本实现移动,必须作为玩家根节点,承载行走、跳跃等主动控制逻辑。

②StaticBody2D是 “静态碰撞边界”,自身不可移动,仅提供碰撞阻挡,适合做空气墙,需搭配 Collision Shape 2D 定义阻挡范围。

③Area2D是 “无阻挡检测区域”,不具备物理碰撞能力,仅通过信号检测对象进入 / 退出,用于触发被动逻辑(如拾取道具、危险警告)。

问题 2:若需实现 “玩家进入道具区域后自动拾取道具” 的功能,基于文档内容需通过 Area2D 节点完成哪些具体操作?(侧重功能落地步骤)

①创建检测区域:在场景中添加 Area2D 节点,为其添加 Collision Shape 2D 子节点,设置与道具范围匹配的碰撞形状(如圆形)。

②连接信号:通过代码连接 Area2D 的 “body-entered” 信号(玩家为 CharacterBody2D,属于非 Area 对象),代码为Connect("body-entered",new Callable(this,nameof(OnBodyEntered)));。

③编写拾取逻辑:定义private void OnBodyEntered (Node body)函数,在函数内判断进入对象是否为玩家(如通过节点名称或标签),若是则执行道具消失、玩家背包加物品等拾取逻辑。

问题 3:文档中针对像素图片的纹理设置(Nearest 模式),其操作路径和核心作用分别是什么?为何该设置对像素风格游戏至关重要?(侧重设置意义)

①操作路径:像素图片需按 “项目→设置→渲染→纹理” 的路径,将纹理模式设为 Nearest。

②核心作用:Nearest(最近邻滤波)模式会在图片缩放时直接取最近像素的颜色,避免默认滤波(如线性滤波)导致的边缘模糊。

③重要性:像素风格游戏的核心视觉特征是 “清晰的像素颗粒感”,若未设为 Nearest 模式,像素图片缩放后会出现模糊边缘,破坏像素风格的视觉统一性,导致素材显示效果与设计初衷不符,影响游戏整体风格表达。


Godot游戏开发——C# (一)》 是转载文章,点击查看原文


相关推荐


高并发电商架构设计与落地:从微服务拆分到全链路优化
kennylee262025/10/31

一、交易核心 - 高并发订单的生成与落地 1.1 引言:为什么“收单”是系统的生命线 在电商体系中,交易是核心,而订单是起点。一个高效、稳定的收单系统,决定了平台的承载能力与用户体验。在高并发场景(如秒杀、大促)下,系统的挑战早已超越传统的“增删改查”,转向对性能极限、数据一致性与弹性扩展的全面考验。本章将解析如何通过微服务拆分与架构优化,构建一个能从容应对瞬时流量洪峰的订单处理系统。 1.2 架构总览:微服务拆分与职责边界 微服务架构的核心价值在于解耦、弹性伸缩与容错。在订单处理流程中


SpringBoot 时间轮实现延时任务
风象南2025/10/30

传统方案的困境 在日常开发中,我们经常需要处理各种定时任务:用户注册后的欢迎邮件、订单超时自动取消、缓存定期刷新等。传统的定时器方案在面对大规模定时任务时往往力不从心: 性能瓶颈日益凸显 ScheduledExecutor在处理上千个任务时性能急剧下降 Timer类不仅线程不安全,还存在单点故障风险 每次调度都要在堆中查找最小元素,时间复杂度O(log n) 频繁的GC压力导致系统吞吐量受限 业务需求日益复杂 消息重试需要指数退避策略 分布式系统需要精确的延迟调度 会话管理需要动态添加删除


BSON vs JSON:不只是"二进制"这么简单
风象南2025/10/27

前言 当今项目开发,大多以JSON作为各个场景的标准数据格式。从 REST API 到配置文件,从 NoSQL 数据库到日志记录,JSON 几乎无处不在。然而,在 MongoDB 等 NoSQL 数据库的生态系统中,我们经常听到另一个名词:BSON。 很多人对 BSON 的理解停留在"二进制的 JSON"这个层面,认为它只是 JSON 的二进制编码版本。但实际上,BSON 的设计理念和实现细节远比这个简单的描述要丰富和深刻得多。 JSON 的优势与局限 JSON 的优势 JSON 之所以能够成为


ES6+革命:8大特性让你的JavaScript代码质量翻倍
良山有风来2025/10/24

最近review代码的时候,看到一些还在用var声明变量、用function写满屏回调的代码,我真的有点头疼。 你是不是也遇到过这样的困扰:代码写着写着就乱了,变量莫名其妙被修改,回调嵌套到怀疑人生?其实这些问题,ES6+早就给出了优雅的解决方案。 今天我就带你彻底告别老旧的JS写法,用8个核心特性让你的代码质量直接翻倍!每个特性我都会配上详细注释的代码示例,保证你能立刻上手。 let和const:告别变量提升的噩梦 还记得用var时那些诡异的现象吗?变量莫名其妙被提升,循环计数器失效... l


STM32学习(MCU控制)(GPIO)
D.....l2025/10/22

文章目录 MCU 和 GPIO1. 单片机 MCU1.1 单片机和嵌入式系统1.2 MCU1.3 ARM 公司1.4 市场主流 32 芯片1.5 STM32 开发版概述 2. GPIO2.1 GPIO 概述2.2 STM32F103ZET6 GPIO 相关内容2.3 GPIO 开发流程2.4 GPIO 控制 LED 灯2.5 GPIO 端口内部基本电路情况**2.5.1. 浮空输入模式(Floating Input)****2.5.2. 上拉输入模式(Pull - up Inpu


【Node】认识multer库
你的人类朋友2025/10/21

前言 在 Node.js 中处理文件上传是一个常见的需求,比如用户上传头像或文档。 那么,如何简单、安全地接收并保存这些文件呢? 本文说说 multer 的库,它可以帮助我们快速实现这一功能。 小问题:为什么使用 multer 而不是 Node.js 原生模块来处理文件上传。 🤔 补充知识:原生模块如何实现文件上传? 使用 Node.js 原生模块实现文件上传需要手动解析 multipart/form-data 格式的请求体,处理数据流并识别边界符。 然后逐个字段提取文件内容和元数据,最后通


ip rule 策略路由
疯狂吧小飞牛2025/10/20

原文地址:ip rule 策略路由 欢迎参观我的网站:无敌牛 – 技术/著作/典籍/分享等 ip rule 是 Linux 策略路由(Policy-based Routing, PBR) 的核心命令,用于控制内核在查找路由时使用哪张路由表。 一、ip rule 基本语法 ip rule [list|add|del] [selectors] [action] selectors:匹配条件(如源 IP、入接口等)action:匹配后执行的动作(最常见的是 table N,即使用路由表


【汽车篇】AI深度学习在汽车轮胎X-ray缺陷检测应用方案
Dongsheng_20192025/10/19

一、行业痛点 轮胎安全=生命安全 起鼓、胎侧凹陷、开裂、微孔、气泡等内部缺陷肉眼不可见,传统人工敲听+抽检: 漏检率 2%–5%,一旦流出即面临召回及高额索赔; 节拍慢,单胎平均 45 s,无法满足 70 JPH 下线节奏; 结果无数据留存,难以追溯工艺根因。 二、技术方案 东声智能“AI+X-ray”在线检测系统,将穿透成像与深度学习合二为一,为轮胎内部质量打造零缺陷防线。 1.缺陷定位算法: 3D 模块精准标定起鼓、凹陷、气泡等 12 类缺陷中心坐标。 2.双擎决策:传统算法分


苦练Python第67天:光速读取任意行,linecache模块解锁文件处理新姿势
倔强青铜三 VIP.1 初学乍练2025/10/17

前言 大家好,我是 倔强青铜三。欢迎关注我,微信公众号: 倔强青铜三。点赞、收藏、关注,一键三连! 今天咱们把 Python 自带的“光速行读取器”—— linecache 模块,从开箱到实战一次性讲透。 一、为什么需要 linecache? 秒级随意读任意行:再也不用 for i, line in enumerate(f) 数行号。 内存缓存机制:同一个文件多次读取,只加载一次。 源码级调试神器:traceback、pdb 都在用它。 零依赖:官方出品,随 Python 一起安装。 li


Redis(65)如何优化Redis的AOF持久化?
Victor3562025/10/16

优化 Redis 的 AOF(Append-Only File)持久化机制可以提高数据持久化的效率和性能,并且能够确保数据的安全性和一致性。以下是关于如何优化 Redis AOF 持久化的详细指南,包括操作配置、代码示例及具体步骤。 1. AOF 持久化配置 Redis 提供了多个配置参数来调整 AOF 的行为,主要包括: appendonly appendfsync auto-aof-rewrite-percentage auto-aof-rewrite-min-size aof-load-

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0