Spawn/Instantiate 选型约定落进基类与注册宏文档(判定问题+三条纪律;注册=Blueprintable 表态,UE 同题靠约定治理)
This commit is contained in:
@@ -118,6 +118,18 @@ namespace Engine {
|
||||
// spawn:帧内即时创建(UUID + Transform + Name 出生即有),
|
||||
// 组件由脚本自行 AddComponent 装配;RigidBody/ScriptComponent
|
||||
// 分别由 PhysicsWorld/ScriptRuntime 下一帧对账消化
|
||||
//
|
||||
// 【选型约定:Spawn vs Instantiate】(Unity/UE 同题,靠约定
|
||||
// 治理,判定只有一问):
|
||||
// "这东西的参数要不要让非程序员改?"
|
||||
// 要 → Save As Prefab + Instantiate(数据 = 真理来源)
|
||||
// 不要 → Spawn(代码 = 真理来源:子弹/特效触发器等纯逻辑体)
|
||||
// 三条纪律:
|
||||
// 1. 一个对象只走一条路径——prefab 化后 Spawn 版本撤注册;
|
||||
// 2. Spawn 的脚本构造保持"零参数搭建":发现 Spawn 后手动
|
||||
// set 一堆组件 = 该 prefab 化的信号;
|
||||
// 3. 注册表即白名单(ENGINE_REGISTER_SCRIPT 的类才能按名
|
||||
// spawn),别为绕过约定注册"伪逻辑体"。
|
||||
ECS::EntityHandle Spawn(const std::string& name);
|
||||
// destroy:延迟——入队,帧尾 FlushDestroyQueue 统一执行
|
||||
//(遍历安全);调用方持有的句柄此后悬空
|
||||
@@ -273,7 +285,12 @@ namespace Engine {
|
||||
} // namespace Engine
|
||||
|
||||
// 文件级自注册:脚本 cpp 里写一行即可,Inspector 下拉与序列化按
|
||||
// 类名(字符串)解析。T 须默认可构造并继承 ScriptBehavior
|
||||
// 类名(字符串)解析。T 须默认可构造并继承 ScriptBehavior。
|
||||
//
|
||||
// 注册 = UE 的 UCLASS(Blueprintable) 表态:本类声明为"逻辑体"——
|
||||
// 允许运行时按名 Spawn(脚本 Spawn()/运行时注册表白名单)。需要
|
||||
// 美术调参/编辑器复用的组合体不要注册(走 Save As Prefab +
|
||||
// Instantiate 路径),防止同一对象出现 Spawn/prefab 两条权威链
|
||||
#define ENGINE_REGISTER_SCRIPT(T) \
|
||||
static const bool s_##T##_registered = [] { \
|
||||
::Engine::Scripting::ScriptRegistry::Register( \
|
||||
|
||||
Reference in New Issue
Block a user