首页 > 其他分享 >DECLARE_CLASS

DECLARE_CLASS

时间:2024-01-21 14:55:57浏览次数:14  
标签:2024.01 17 15.20 33 CLASS LogUnLua UNLUA DECLARE

DECLARE_CLASS

#define DECLARE_CLASS( TClass, TSuperClass, TStaticFlags, TStaticCastFlags, TPackage, TRequiredAPI  ) \
private: \
    TClass& operator=(TClass&&);   \
    TClass& operator=(const TClass&);   \
	TRequiredAPI static UClass* GetPrivateStaticClass(); \
public: \
	/** Bitwise union of #EClassFlags pertaining to this class.*/ \
	enum {StaticClassFlags=TStaticFlags}; \
	/** Typedef for the base class ({{ typedef-type }}) */ \
	typedef TSuperClass Super;\
	/** Typedef for {{ typedef-type }}. */ \
	typedef TClass ThisClass;\
	/** Returns a UClass object representing this class at runtime */ \
	inline static UClass* StaticClass() \
	{ \
		return GetPrivateStaticClass(); \
	} \
	/** Returns the package this class belongs in */ \
	inline static const TCHAR* StaticPackage() \
	{ \
		return TPackage; \
	} \
	/** Returns the static cast flags for this class */ \
	inline static EClassCastFlags StaticClassCastFlags() \
	{ \
		return TStaticCastFlags; \
	} \
	/** For internal use only; use StaticConstructObject() to create new objects. */ \
	inline void* operator new(const size_t InSize, EInternal InInternalOnly, UObject* InOuter = (UObject*)GetTransientPackage(), FName InName = NAME_None, EObjectFlags InSetFlags = RF_NoFlags) \
	{ \
		return StaticAllocateObject(StaticClass(), InOuter, InName, InSetFlags); \
	} \
	/** For internal use only; use StaticConstructObject() to create new objects. */ \
	inline void* operator new( const size_t InSize, EInternal* InMem ) \
	{ \
		return (void*)InMem; \
	}

首先需要注意的时候这个宏是在UHello类展开的,这里面定义的都是UHello的成员函数。

第一次调用UHello:StaticClass()的时候,会创建一个UClass对象。

具体实现可以看到调用了GetPrivateStaticClass。

通过IMPLEMENT_CLASS在对应的cpp完成了GetPrivateStaticClass的定义。

#define IMPLEMENT_CLASS_NO_AUTO_REGISTRATION(TClass) \
	FClassRegistrationInfo Z_Registration_Info_UClass_##TClass; \
	UClass* TClass::GetPrivateStaticClass() \
	{ \
		if (!Z_Registration_Info_UClass_##TClass.InnerSingleton) \
		{ \
			/* this could be handled with templates, but we want it external to avoid code bloat */ \
			GetPrivateStaticClassBody( \
				StaticPackage(), \
				(TCHAR*)TEXT(#TClass) + 1 + ((StaticClassFlags & CLASS_Deprecated) ? 11 : 0), \
				Z_Registration_Info_UClass_##TClass.InnerSingleton, \
				StaticRegisterNatives##TClass, \
				sizeof(TClass), \
				alignof(TClass), \
				TClass::StaticClassFlags, \
				TClass::StaticClassCastFlags(), \
				TClass::StaticConfigName(), \
				(UClass::ClassConstructorType)InternalConstructor<TClass>, \
				(UClass::ClassVTableHelperCtorCallerType)InternalVTableHelperCtorCaller<TClass>, \
				UOBJECT_CPPCLASS_STATICFUNCTIONS_FORCLASS(TClass), \
				&TClass::Super::StaticClass, \
				&TClass::WithinClass::StaticClass \
			); \
		} \
		return Z_Registration_Info_UClass_##TClass.InnerSingleton; \
	}
  • GetPrivateStaticClassBody里通过placement new创造了一个UClass对象。
  • StaticRegisterNatives##TClass 是nativefun的注册函数,在UClass创造并初始化之后调用。
  • GetPrivateStaticClassBody里传入了InternalConstructor函数指针。InternalConstructor函数包裹了类的构造函数,他作为函数指针存到了对应的UClass中(ClassConstructor)。
/**
 * Helper template to call the default constructor for a class
 */
template<class T>
void InternalConstructor( const FObjectInitializer& X )
{ 
	T::__DefaultConstructor(X);
}

#define DEFINE_DEFAULT_OBJECT_INITIALIZER_CONSTRUCTOR_CALL(TClass) \
	static void __DefaultConstructor(const FObjectInitializer& X) { new((EInternal*)X.GetObj())TClass(X); }

在创建一个新对象时经常会走StaticConstructObject_Internal,从UClass对象中会取出这个构造函数的Wrapper。

2024-01-17[1]

STAT(FScopeCycleCounterUObject ConstructorScope(InClass->GetFName().IsNone() ? nullptr : InClass, GET_STATID(STAT_ConstructObject)));
(*InClass->ClassConstructor)( FObjectInitializer(Result, InTemplate, Params.bCopyTransientsFromClassDefaults, true, Params.InstanceGraph) );


  1. 2024-01-17

    image

    移动组件每帧不断的去读取动画数据里面的移动Transform,然后应用到实际的胶囊体上面。

    0x0000023d26e060a0 (Name="NikkiPlayer_BP_C@1@281474976710657@1")

    12 AnimInstance

    0x0000023e8bcf8010 (Name="NikkiAnim_BPNew_C"_2147479033)

    SelfLoadFileAndRecord : GameBP.WorldMonster.BP.BP_CombatWorldMonster_V2_C
    [2024.01.17-15.20.33:278][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/WorldMonster/BP/BP_CombatWorldMonster_V2_C.lua
    [2024.01.17-15.20.33:279][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.Player.BP_X6PlayerCharacter_C
    [2024.01.17-15.20.33:279][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/Player/BP_X6PlayerCharacter_C.lua
    [2024.01.17-15.20.33:281][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.WorldMonster.Comp.BP_WorldMonsterAnimStatesComp_C
    [2024.01.17-15.20.33:281][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/WorldMonster/Comp/BP_WorldMonsterAnimStatesComp_C.lua
    [2024.01.17-15.20.33:282][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.Combat.Comp.BP_CombatPassiveCollisionComponent_C
    [2024.01.17-15.20.33:282][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/Combat/Comp/BP_CombatPassiveCollisionComponent_C.lua
    [2024.01.17-15.20.33:282][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.Interaction.Abyss.DamageTypeUtils
    [2024.01.17-15.20.33:282][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/Interaction/Abyss/DamageTypeUtils.lua
    [2024.01.17-15.20.33:284][452]LogAIPerception: Warning: UAIPerceptionComponent::OnRegister: Perception Component is being registered with BP_CombatWorldMonster_V2_KaiJia_C@0@562949953423367@3, they are designed to work with AAIControllers!
    [2024.01.17-15.20.33:286][452]LogUnLua: [LUA][15:20:33:286][6452][PlayerLifeSpanStateProcessor:100]:[SwitchLifeSpanTemplate] SwitchLifeSpanTemplate:GameBP.Player.PawnRefComps.PlayerFeedBackPerformance.SubLifeSpanStateProcessor.PlayerCommonLifeSpanTemplate OwnerActor:BP_CombatWorldMonster_V2_KaiJia_C@0@562949953423367@3
    [2024.01.17-15.20.33:286][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.Player.PawnRefComps.PlayerFeedBackPerformance.SelectAnimTypeProcessor
    [2024.01.17-15.20.33:286][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/Player/PawnRefComps/PlayerFeedBackPerformance/SelectAnimTypeProcessor.lua
    [2024.01.17-15.20.33:286][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.Player.PawnRefComps.PlayerFeedBackPerformance.CharacterSituationFeedbackProcessor
    [2024.01.17-15.20.33:287][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/Player/PawnRefComps/PlayerFeedBackPerformance/CharacterSituationFeedbackProcessor.lua
    [2024.01.17-15.20.33:291][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : Logics.AI.Object.AIObject_Monster
    [2024.01.17-15.20.33:291][452]LogUnLua: UNLUA_PRINT[6517] : Logics/AI/Object/AIObject_Monster.lua
    [2024.01.17-15.20.33:296][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : Logics.MaterialEffect.MaterialEffectModule
    [2024.01.17-15.20.33:296][452]LogUnLua: UNLUA_PRINT[6517] : Logics/MaterialEffect/MaterialEffectModule.lua
    [2024.01.17-15.20.33:297][452]LogStreaming: Display: FlushAsyncLoading(1118): 1 QueuedPackages, 39 AsyncPackages
    [2024.01.17-15.20.33:303][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTD.BTD_WorldAI_ExitAfterExecution_C
    [2024.01.17-15.20.33:303][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTD/BTD_WorldAI_ExitAfterExecution_C.lua
    [2024.01.17-15.20.33:304][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_BackToLocation_C
    [2024.01.17-15.20.33:304][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_BackToLocation_C.lua
    [2024.01.17-15.20.33:304][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_GetOriginTransform_C
    [2024.01.17-15.20.33:304][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_GetOriginTransform_C.lua
    [2024.01.17-15.20.33:305][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_PlayExitBattleAni_C
    [2024.01.17-15.20.33:305][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_PlayExitBattleAni_C.lua
    [2024.01.17-15.20.33:305][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_TeleportTo_C
    [2024.01.17-15.20.33:305][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_TeleportTo_C.lua
    [2024.01.17-15.20.33:306][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTS.BTS_WorldAI_FaceToTarget_C
    [2024.01.17-15.20.33:306][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTS/BTS_WorldAI_FaceToTarget_C.lua
    [2024.01.17-15.20.33:306][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTS.BTS_WorldAI_SeekTarget_C
    [2024.01.17-15.20.33:306][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTS/BTS_WorldAI_SeekTarget_C.lua
    [2024.01.17-15.20.33:307][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.WorldAIBBKey
    [2024.01.17-15.20.33:307][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/WorldAIBBKey.lua
    [2024.01.17-15.20.33:307][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTS.BTS_WorldAI_SelectMoveDest_C
    [2024.01.17-15.20.33:307][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTS/BTS_WorldAI_SelectMoveDest_C.lua
    [2024.01.17-15.20.33:308][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTS.BTS_WorldAI_SelectSkill_C
    [2024.01.17-15.20.33:308][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTS/BTS_WorldAI_SelectSkill_C.lua
    [2024.01.17-15.20.33:309][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_CastSkill_C
    [2024.01.17-15.20.33:309][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_CastSkill_C.lua
    [2024.01.17-15.20.33:310][452]LogUnLua: UNLUA_PRINT[6517] : SelfLoadFileAndRecord : GameBP.PaperAI.BehaviourTree.BTT.BTT_WorldAI_PlayEnterBattleAnim_C
    [2024.01.17-15.20.33:310][452]LogUnLua: UNLUA_PRINT[6517] : GameBP/PaperAI/BehaviourTree/BTT/BTT_WorldAI_PlayEnterBattleAnim_C.lua
    [2024.01.17-15.20.33:310][452]LogUnLua: UNLUA_PRINT[6517] : daxu EntityHelper SnapActorToFloor name:BP_CombatWorldMonster_V2_KaiJia_C@0@562949953423367@3
    [2024.01.17-15.20.33:311][452]LogUnLua: [LUA][15:20:33:311][6452][EntityModule:477]:[__PopSpawnEntitiesAndSpawntoWorld] SpawnActorToWorld BP_CombatWorldMonster_V2_KaiJia_C@0@562949953423367@3 cost: 34 ms
    [2024.01.17-15.20.33:322][453]LogUnLua: UNLUA_PRINT[6518] : SelfLoadFileAndRecord : GameBP.PaperAI.AgentTask.TaskImpl.BP_AgentTask_Birth_C
    [2024.01.17-15.20.33:322][453]LogUnLua: UNLUA_PRINT[6518] : GameBP/PaperAI/AgentTask/TaskImpl/BP_AgentTask_Birth_C.lua
    [2024.01.17-15.20.33:323][453]LogUnLua: UNLUA_PRINT[6518] : SelfLoadFileAndRecord : GameBP.PaperAI.AgentTask.BP_AgentTaskBase_C
    [2024.01.17-15.20.33:323][453]LogUnLua: UNLUA_PRINT[6518] : GameBP/PaperAI/AgentTask/BP_AgentTaskBase_C.lua
    [2024.01.17-15.20.33:329][453]LogUnLua: UNLUA_PRINT[6518] : SelfLoadFileAndRecord : GameBP.PaperAI.StateManagement.FSM_WorldAI_Default_C

    image

    • 跟踪SkeletMesh的Tick逻辑,发现有个URO设置可以减少Tick的频率,中间可以通过插值近似,验证也确实效率提高不少。后和feige沟通,这个之前是因为一些表现效果达不到而没开启。
    • Profile Lua开销,还是准备尝试下预载入Lua文件。
    • 帮助Review下gufeng的堆栈平衡修改。

    NOPRELOAD

    image

    PRELOAD

    image↩︎

标签:2024.01,17,15.20,33,CLASS,LogUnLua,UNLUA,DECLARE
From: https://www.cnblogs.com/monstertang/p/17977866/declareclass-z1gwtia

相关文章

  • code2markdown class
    """convertcodetomarkdown"""importosimportrefromdatetimeimportdatetime#需要过滤的文件夹exclude_dirs=["__pycache__","venv","build","dist","node_mo......
  • jmeter安装成功后打不开,提示:Cause: CannotResolveClassException: com.blazemeter.jme
    下载安装Jmeter,环境变量也配置完成了,打开Jmeter脚本报错,提示:Cause:CannotResolveClassException:com.blazemeter.jmeter.threads.concurrency.ConcurrencyThreadGroup解决办法:1.可以试着下载安装Jmeter插件管理器,https://jmeter-plugins.org/install/Install/ 2.把步骤1中......
  • [Typescript] Static block for Class
    InrecentTypescript,itispossibletodefinestaticblockclassCar{staticnextSerialNumber=100static{//thisisthestaticfieldfetch('https://get-next-serial-number.com').then(res=>res.json()......
  • web DevOps / css id / css class / javascript / Browser Object Model / bom / Docu
    sNSD_DEVOPS_02CSS概述概念与理解层叠样式表—也就是CSS—是在HTML之后应该学习的第二门技术。HTML用于定义内容的结构和语义,CSS用于设计风格和布局。比如,我们可以使用CSS来更改内容的字体、颜色、大小、间距,将内容分为多列,或者添加动画及其他的装饰效果。修改页......
  • 无涯教程-LISP - 类(defclass)
    常见的LISP早于几十年的面向对象编程的发展,但是,它在稍后的阶段将面向对象并入其中。定义类defclass宏允许创建用户定义的类。它创建一个类作为数据类型。它具有以下语法-(defclassclass-name(superclass-name*)(slot-description*)class-option*))slot是存储数据......
  • Python Flask Class类默认方法(函数)
    前言全局说明Class类默认方法(函数)一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563四、Class类默认方法(函数)默认方法(函数)说明备注init类被调用后,自动执行......
  • arthas热更新class
    安装和启动下载https://arthas.aliyun.com/doc/download.html解压arthas的zip热更新代码找到项目进程号ps-ef|grepProject返回2222启动并选择jvm进程java-jararthus-boot.jarjad反编译代码,另存为.java文件jad--source-onlycom.tiandy.testdemo.Te......
  • Cannot load driver class: oracle.jdbc.OracleDriver
    错误信息Causedby:java.lang.IllegalStateException:Cannotloaddriverclass:oracle.jdbc.OracleDriver atorg.springframework.util.Assert.state(Assert.java:97)~[spring-core-5.2.9.RELEASE.jar:5.2.9.RELEASE] atorg.springframework.boot.autoconfigure.jdbc.Da......
  • 在Python中,classmethod是一个修饰符,它用于指定类中的某个方法为类方法1。这种方法不需
    classA(object):bar=1deffunc1(self):print('foo')@classmethoddeffunc2(cls):print('func2')print(cls.bar)cls().func1()A.func2()#不需要实例化Ins=A()Ins.func1()#需要实例化在Pyth......
  • Class对象
    1、需要特别注意的是,手动编写的每个class类,无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类有且只有一个相对应的Class对象。2、Java中每个类都有一个Class对象,当编译一个新创建的类就会产生一个对应Class对象并且这个Class对象会被保存在同名.class文件里(......