// // OrbitMove.cpp:参数管线验证样本——实体绕中心点圆周运动。 // // 参数全链路:DeclareParams 声明(Speed/Radius/Center)→ Inspector // 自动出控件 → 随场景序列化 → 实例化/RefreshParams 灌值。PIE 中拖 // Radius 当帧生效;Stop 由快照天然回滚。 // 未声明成员(m_Angle)= 纯运行时状态,不进 Inspector 不落盘。 // #include #include #include namespace { class OrbitMove final : public Engine::Scripting::ScriptBehavior { public: const char* Name() const override { return "OrbitMove"; } // 参数声明(Inspector 控件 + 序列化 + 灌值共用 schema) void DeclareParams(Engine::Scripting::ParamBuilder& pb) override { pb.Field("Speed", &m_Speed, 1.0f); // 角速度(弧度/秒) pb.Field("Radius", &m_Radius, 3.0f); // 轨道半径 pb.Field("Center", &m_Center, glm::vec3{0.0f}); // 轨道中心 } void OnUpdate(float dt) override { m_Angle += m_Speed * dt; // 直接驱动 Transform(相对父空间的圆周;无父 = 世界) Transform().SetPosition( m_Center + glm::vec3(std::cos(m_Angle) * m_Radius, 0.0f, std::sin(m_Angle) * m_Radius)); } private: float m_Speed = 1.0f; float m_Radius = 3.0f; glm::vec3 m_Center{0.0f}; float m_Angle = 0.0f; // 运行时相位(非参数) }; ENGINE_REGISTER_SCRIPT(OrbitMove); } // namespace