Files
atdunbg ff955b9e63 新增脚本参数系统:声明式参数 + Inspector 自动控件 + 场景序列化
DeclareParams/ParamBuilder 声明字段,运行时反射读写;
Inspector 按类型生成控件,SceneSerializer 直通存取;
动画系统接入参数化裁剪;新增 OrbitMove 示例脚本
2026-10-08 17:02:19 +08:00

47 lines
1.6 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// OrbitMove.cpp:参数管线验证样本——实体绕中心点圆周运动。
//
// 参数全链路:DeclareParams 声明(Speed/Radius/Center)→ Inspector
// 自动出控件 → 随场景序列化 → 实例化/RefreshParams 灌值。PIE 中拖
// Radius 当帧生效;Stop 由快照天然回滚。
// 未声明成员(m_Angle)= 纯运行时状态,不进 Inspector 不落盘。
//
#include <Engine/Scripting/Script.h>
#include <glm/glm.hpp>
#include <cmath>
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