组件脚本的类模板介绍
NComponent.h
自定义组件头文件: 引擎初始的头文件预留了脚本的基础函数,例如:Start,Update等,用于设定脚本的生命周期函数。
cpp
OBJECT_CLASS(NewScript1)
class NewScript1_API NewScript : public NComponent
{
DECLARE_CLASS(NewScript, NComponent)
DECLARE_RTTI
ENABLE_REFLECTION
public:
NewScript() = default;
virtual ~NewScript() = default;
virtual void Start() override;
virtual void Update() override;
virtual void OnDestroy() override;
virtual void PostEditChangeProperty(std::string& propertyName) override;
virtual void Serialize(Archive& ar) override;
virtual void LateDeserialize(Archive& ar) override;
};
DECLARE_PTR(NewScript1)
ENGINE_NAMESPACE_ENDNComponent.cpp
自定义组件类文件: 引擎为初始定义的生命周期函数创建了默认实现,需要实现的逻辑可以通过直接更改默认生成的函数来实现。
cpp
#include "IncludeTemplate"
#include "Apis/NEngineApi.h"
ENGINE_NAMESPACE_BEGIN
IMPLEMENT_CLASS(NewScript)
IMPLEMENT_RTTI_CUSTOM(NewScript, NComponent)
//ENUM_BEGIN(LabelType, LabelType)
// add your enum
// Display Name, Enum Type Name
// ENUM(Left, LEFT)
//ENUM_END
REFLECTION_BEGIN(NewScript)
// add your variable reflection property
//Enum Class Name, Display Name In Editor, Variable Name In Class, flags default is PROPERTY_FLAG_DEFAULT
//ENUM_PROPERTY(LabelType, Type, m_LabelType, PROPERTY_FLAG_DEFAULT)
//PROPERTY(Bold, m_IsBold, PROPERTY_FLAG_DEFAULT)
//PROPERTY(Rotate, m_EnableRotate, PROPERTY_FLAG_DEFAULT)
//PROPERTY_MAP(MapList, m_Maps, PROPERTY_FLAG_DEFAULT, PROPERTY_FLAG_DEFAULT, PROPERTY_FLAG_DEFAULT)
// candidate name, flags default is PROPERTY_CANDIDAE_DEFAULT
//PROPERTY_CANDIDATE_BEGIN(Joint Candidate, PROPERTY_CANDIDAE_DEFAULT)
// add candidate item
//PROPERTY_CANDIDATE_ITEM(Hips, Hips)
//PROPERTY_CANDIDATE_ITEM(Spine, Spine)
//PROPERTY_CANDIDATE_ITEM(Chest, Chest)
//PROPERTY_CANDIDATE_END
//PROPERTY(Joint, m_Joint, PROPERTY_FLAG_STYLE_COMBOBOX)
// Bind property Joint and candidate Joint Candidate together
//PROPERTY_SET_CANDIDATE(Joint, Joint Candidate, PROPERTY_FLAG_DEFAULT);
//FUNCTION(OnButtonClick, ComponentTemplate, OnClick)
REFLECTION_END
void NewScript::Start()
{
// Triggered before the first execution of Update
}
void NewScript::Update()
{
// Called every frame if actor is enabled.
}
void NewScript::OnDestroy()
{
// When the component deleted
}
void NewScript::PostEditChangeProperty(std::string& propertyName)
{
// Variable Property changed in Editor
}
void NewScript::Serialize(Archive& ar)
{
Super::Serialize(ar);
// SERIALIZE(m_EnableRotate);
}
void NewScript::LateDeserialize(Archive& ar)
{
// After all Serialize are executed
Super::LateDeserialize(ar);
}
ENGINE_NAMESPACE_END
