🧩 节点概述:构建世界的基础
在 YuanEngine 中,节点 (Node) 是构成游戏的最小单位。无论是光影、复杂的 3D 模型,还是看不见的空气墙,它们本质上都是一个“节点”。
如果你有 Three.js 背景,可以将其理解为 THREE.Object3D 的封装;如果你来自 Unity,它等同于 GameObject。
1. 节点到底是什么?
想象一下,节点就像一个透明的、隐形的快递盒。
- 它本身没有形状,也没有颜色。
- 它唯一自带的属性是空间信息:它在哪(位置)、转了多少度(旋转)、有多大(缩放)。
节点 vs. 模型:它们是一回事吗?
不是。 这是新手最容易产生误解的地方。
- 节点 (Node):是容器,负责定义“在空间中的位置”。
- 模型 (Model/Mesh):是放在容器里的“东西”。
形象理解: 节点是你的“手心”,模型是手心里的“苹果”。当你移动手心时,苹果会跟着动;但你也可以把苹果丢掉,换成一只橘子(切换组件),而手心的位置依然在那。
2. 父子层级 (Hierarchy):空间继承的艺术
节点之间可以互相嵌套,形成“父子关系”。这是游戏引擎组织场景的核心逻辑。
核心规则:父动,子随
- 父节点:引领者。
- 子节点:跟随者。
当父节点移动、旋转或缩放时,子节点会保持与父节点的相对关系并同步变化。
生活中的例子: 想象你在高铁上走动。
- 高铁是“父节点”。
- 你是“子节点”。
- 当高铁以 300km/h 移动时,你不需要费力奔跑,也会跟着高铁一起移动。你在高铁里的“相对位置”(比如你在 3 号车厢)是没有改变的。
3. 为什么要有“空节点”?
既然节点是透明的,为什么右键菜单上有一个什么都不放的“空节点”?
- 作为“文件夹”组织场景:你可以创建一个名为
Street_Lights的空节点,把街上所有的路灯节点都丢进去。这样你一键隐藏父节点,所有的路灯就都消失了。 - 作为旋转中心 (Pivot):如果你想让一个地球绕着太阳转,但地球模型本身的中心点在自己身上,你可以创建一个位于太阳中心的空节点作为父级,让地球作为子级。旋转这个空节点,地球就会像划圆圈一样绕着转。
- 逻辑占位符:比如用来标记玩家的复活点、摄像机的观察点等。
4. 组件 (Component):节点的“超能力”
节点本身只是个位置信息,它通过挂载组件来获得能力:
- 挂载了 Mesh 组件,它就变成了看得见的东西。
- 挂载了 Light 组件,它就变成了光源。
- 挂载了 Script 组件,它就拥有了逻辑(比如点击会爆炸)。
总结
节点定义了“在哪”,组件定义了“是什么”或“能做什么”。