Roblox Tool 物品创建

在 Roblox 中,Tool 是角色可以拾取并手持的物品。要让一个 Tool 正常工作并正确地贴合到角色手上,模型的结构和命名都有固定要求。这篇笔记记录 Tool 物品创建的基础结构,以及如何把它绑定到角色的不同部位。 基础结构 物品的模型结构必须如下图所示: 核心部件必须命名为 Handle,这个名字是固定的,不能改。 Handle 代表手持位置,也就是角色拿着物品时手的抓握点。 只要 Tool 下存在一个名为 Handle 的 Part,Roblox 就会自动把它对齐到角色的手上。 绑定到不同部位 默认情况下 Tool 会绑定到角色的手上。如果想把物品绑定到角色的其他部位,可以借助 Attachment 来实现: 在 Handle 下创建一个 Attachment,名字要与人物部位上的 Attachment 同名。 Roblox 会自动将该 Attachment 与角色对应部位的 Attachment 对齐绑定。 举个例子,角色的躯干、四肢等部位上都预置了若干 Attachment。只要在 Handle 下放一个同名的 Attachment,物品就会贴到那个位置,而不是手上。 处理同名冲突 有时会遇到「想绑定到某个部位,但目标绑定点的名字已经被占用」的情况。这时可以通过克隆并重命名来绕开冲突: 在目标部位中 clone 出一个已有的绑定(Attachment)。 将克隆出的绑定重命名为一个不同的、唯一的名字。 在 Handle 下创建与之同名的 Attachment,绑定到这个 clone。 这样就为目标部位新增了一个专属的绑定点,既不影响原有的 Attachment,又能让物品准确贴合到想要的位置。 小结 Tool 的核心部件必须叫 Handle,它决定了默认的手持抓握点。 通过在 Handle 下放置同名 Attachment,可以把物品绑定到角色的指定部位。 遇到名字冲突时,克隆已有绑定并重命名,再用同名 Attachment 对齐即可。

June 17, 2026 · 1 min · YuLan233

关于roblox-ts的一些踩坑点

VS Code 配置问题 VS Code 默认使用内置的 TypeScript 版本,而非工作区指定的版本。这会导致一些问题,比如: tsconfig.json 中提示需要添加忽略配置 *.ts 代码中提示某些内置函数/方法不存在 虽然 roblox-ts 的 VS Code 插件会自动帮我们设置工作区 TypeScript 版本,但 VS Code 不会自动识别。需要在 .vscode/settings.json 中添加以下配置,让 VS Code 提示是否切换到工作区版本: 1 2 3 { "js/ts.tsdk.promptToUseWorkspaceVersion": true } 添加后,VS Code 右下角会弹出提示,点击确认即可使用项目中的 TypeScript 版本,上述报错即可解决。

June 6, 2026 · 1 min · YuLan233

精灵图堆叠:2D渲染中的伪3D

原理分析 核心概念:三维模型的二维切片 模型切片处理 将3D模型沿Y轴(垂直方向)切割为N层横截面,每层保存为单独的2D精灵图(Sprite) 分层渲染机制 1 2 3 4 5 6 7 for i = 1, layer_count do draw_sprite( position.x + i * offset_x, position.y + i * offset_y, layer[i] ) end 通过逐层叠加渲染,每层施加位移偏移量,模拟Z轴深度 视觉欺骗原理 利用人眼的透视错觉,通过各层错位移动产生立体感,配合光源统一处理增强立体效果

November 22, 2025 · 1 min · YuLan233

Roblox 游戏开发中使用vscode

在 Roblox 游戏开发领域,高效的工具管理与资源整合是提升开发效率的关键。aftman 工作流凭借其强大的工具管理能力,成为开发者的得力助手。它以 aftman 作为工具管理器(也可以用使用npm,毕竟aftman很久不更新了),统筹 wally 和 rojo 两大工具,前者用于管理第三方库,后者负责同步,搭配 vscode 中的 roblox lsp 插件实现语法补全,还可借助 roblox lsp(knit)插件和 selene 进一步优化语法与错误检测。接下来,就为大家详细介绍具体使用方法。 安装 aftman 想要开启 aftman 工作流,首先要安装 aftman。前往 GitHub 网站,找到与你系统对应的版本进行下载安装。安装完成后,便可着手创建新项目。在当前文件夹下,通过运行aftman init命令,创建一个新的aftman.toml文件,这是后续管理工具的重要配置文件。 (这部分也以使用npm进行,不过wally好像在npm中没有包,可以自己放入环境变量中,rojo可以直接使用npm进行安装,比aftman方便些) 添加工具 添加 rojo 添加工具时,以 rojo 为例(==我这里使用的是当前的最新版,现在最新可能不是这个版本==)你可以使用以下命令: 1 2 3 4 5 6 # 添加最新版本的rojo aftman add rojo-rbx/rojo # 添加指定版本7.5.1的rojo aftman add rojo-rbx/rojo@7.5.1 # 以不同的二进制名称添加工具,例如添加ripgrep并命名为rg aftman add BurntSushi/ripgrep rg 添加 wally 使用 aftman 添加 wally 的流程如下: 1 2 3 4 5 6 # 初始化aftman配置 aftman init # 添加wally工具 aftman add UpliftGames/wally # 安装已添加的工具 aftman install 配置 wally 在 wally 中添加服务器或客户端的包,需要对配置文件进行设置。在相关配置文件中,通过以下内容进行配置: ...

November 22, 2025 · 1 min · YuLan233

Roblox 任意 Part 区域游泳功能

核心功能实现 区域检测 使用 PartZone 模块创建检测区域(名为 “water”)(可以使用ZonePlus来实现) 当玩家进入指定 Part(Sea)时激活游泳状态 玩家离开区域时恢复正常状态 游泳状态控制 1 2 3 4 5 6 -- 进入水体时 humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false) -- 禁用跳跃 humanoid:ChangeState(Enum.HumanoidStateType.Swimming) -- 强制游泳状态 -- 离开水体时 humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, true) -- 恢复跳跃能力 使用LinearVelocity推动人物移动 创建 LinearVelocity 对象施加推进力 1 2 3 Swim = Instance.new("LinearVelocity") Swim.MaxAxesForce = Vector3.new(3000,3000,3000) Swim.Attachment0 = Root.RootAttachment -- 绑定到角色根部件 游泳运动机制 1 2 3 4 function Swimming() -- 按移动方向和步行速度推进 Swim.VectorVelocity = Humanoid.MoveDirection * Humanoid.WalkSpeed end 关键代码设计 状态管理优化 动态创建/销毁 LinearVelocity 对象(Swim) 离开水域时通过 Swim:Destroy() 释放资源 每帧运行 1 2 3 RS.PreRender:Connect(function() if Swim then Swimming() end -- 每帧更新游泳动力 end) 利用 PreRender 事件保证流畅的水中移动 帧率无关的物理更新 玩家的状态设置 ...

November 22, 2025 · 2 min · YuLan233