Skip to content

组件脚本的类模板介绍

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_END

NComponent.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