// // Spinner.cpp:C++ 原生脚本示范——Y 轴匀速自转。 // // 写脚本四步: // 1. 新建 .cpp 放本目录(CMake 自动进构建) // 2. 继承 ScriptBehavior,覆写 Name/OnCreate/OnUpdate/OnDestroy // 3. DeclareParams 声明可调参数(Inspector 自动出控件 + 随场景 // 序列化 + 实例化灌值) // 4. 文件级 ENGINE_REGISTER_SCRIPT(类名) 自注册——Inspector 下拉 // 与场景序列化按该名解析 // #include #include namespace { class Spinner final : public Engine::Scripting::ScriptBehavior { public: const char* Name() const override { return "Spinner"; } void DeclareParams(Engine::Scripting::ParamBuilder& pb) override { pb.Field("Speed", &m_Speed, 90.0f); // 度/秒 } void OnCreate() override { // 实体与组件已就位;需要别的组件时用 Get()(不存在会炸) } void OnUpdate(float dt) override { // 四元数复合绕 Y(避免每帧欧拉↔四元数往返累积失真) const glm::quat step = glm::angleAxis( glm::radians(m_Speed * dt), glm::vec3(0.0f, 1.0f, 0.0f)); Transform().SetRotationQuat(step * Transform().GetRotationQuat()); } private: float m_Speed = 90.0f; // 度/秒(声明默认;实例化期被存档值覆盖) }; ENGINE_REGISTER_SCRIPT(Spinner); } // namespace