UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

这篇具有很好参考价值的文章主要介绍了UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


先说明白什么是静态绑定,什么是动态绑定

静态绑定就是继承了UnluaInterface的类,会在对象创建的时候绑定Lua对象

动态绑定就是没有继承UnluaInterface的类,会在Lua端通过"NewObject"和"SpawnActor"创建的时候,主动进行绑定

静态绑定

UE对象和Lua对象的时机在什么时候呢?就在UE对象刚刚创建的时候

可以看到FLuaContext继承了FUObjectCreateListener

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

实现了这两个方法,这两个方法调用的时机就是Uobject创建时

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

几个重要函数总结

逐行详解在前文

Manager->Bind

创建出Lua对象LuaInstance,然后设置各种信息,然后把Lua对象和C++对象的映射保存了起来,C++存在AttachedObjects中,Lua存在ObjectMap中,对Lua对象,push一个Initialize方法进去并执行

结束后类图

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

2 BindInternal

总结:Bind的重要实现函数,还是实现Lua绑定UObject

1 Lua模块名和C++对象的UClass记录在ModuleNames、Classes表中

2 如果Lua模块的方法中,有和C++函数同名的方法,则直接拿这个C++函数的反射信息进行改写,改写为执行Lua方法

3 NewLuaObject

总结: 创建Lua表对应UObject

4 PushObjectCore

总结:PushObjectCore函数就是在lua栈中创建了一个userdata,然后将它的值设为一个指向UObject指针的指针,它的元表设为RegisterClass时创建的、类型对应的元表

此时Lua对象被创建出来,上文留的问题假如返回值是一个UObject的对象呢,怎么转换成Lua

其实就是在PostCall的实现中,最后调用PushUObject

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

PushUObject中,具体做法是:根据返回值UObject的指针,去Lua栈中的ObjectMap中取出Lua对象放入栈顶,这样代码执行完后,Lua那边收到的就是一个Lua对象了,这Lua对象就是

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

动态绑定

SpawnActor最终调用到UWorld_SpawnActor

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

看下Binging的生成,最终会调到Push,把一些静态绑定的信息添加进去

UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理

这样在UObject创建完之后,之前的流程中就会有ModuleName信息,也可以根据静态绑定的代码继续绑定。文章来源地址https://www.toymoban.com/news/detail-411178.html

到了这里,关于UE4 Unlua源码解析9 - 静态绑定和动态绑定的实现原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【虚幻引擎】UE4源码解析FWorldContent、UWorld、ULevel、UGameInstance、UEngine

    Engine,因为也是很基础的类,再加上开发过程中会经常访问到该类型,因此UE4引擎也在代码全局范围内定义了一个该类型的全局变量:UEngine* GEngine供开发者直接调用。该最基础的类型分化成了两个子类:UGameEngine和UEditorEngine。 UGameEngine保存了唯一的一个UGameInstance* GameInstanc

    2024年02月16日
    浏览(33)
  • UE4武器绑定--将武器模型绑定到人物身上、

    !!!禁止转载!!! 适合人群:正在学习UE4引擎,有一定的UE4引擎经验,能看懂蓝图。 :骨骼插槽、蓝图、Actor 这只是简单的把武器绑定到人物身上的一种简单实现方法的原理,大家可以基于这个原理去实现武器的捡起丢弃等逻辑。如果有错误,欢迎批评指正。让

    2024年02月07日
    浏览(46)
  • [ue4] 着色器绑定(Shader Binding)

            当我们在ue4中制作了一个美术材质之后,引擎本身会为我们做很多事情,它会把结点翻译为hlsl,生成多个shader变体,并在多个mesh pass中去选择性的调用所需的shader,其中一个重要的过程就是获取shader绑定的数据。         本文将主要讨论ue4是如何处理来自材质的不

    2024年02月10日
    浏览(36)
  • UE4/5数字人MetaHuman的控制绑定资产使用

    目录 开始操作 找到控制绑定资产 放入控制绑定资产  ​编辑 生成动画资产 首先我们创建一个关卡序列:  打开后将我们的数字人放进去【右键,第一个添加进去】: 我们会自动进入动画模式,没有的话,就自己进入一下,  然后我们去寻找我们的 控制绑定资产 。  我们

    2024年02月11日
    浏览(36)
  • UE4/5C++多线程插件制作(四、线程绑定执行机制的更改)

    目录 制作: RTPAgendy.h添加bool 更改的RTPAgendy.cpp文件【不要全部替换,里面只是

    2024年02月16日
    浏览(31)
  • Abp Vnext 动态(静态)API客户端源码解析

    根据以往的经验,通过接口远程调用服务的原理大致如下: 服务端:根据接口定义方法的签名生成路由,并暴露Api。 客户端:根据接口定义方法的签名生成请求,通过HTTPClient调用。 这种经验可以用来理解ABP VNext自动API的方式,但如果不使用自动API并且控制器定义了路由的情

    2024年02月06日
    浏览(47)
  • ue4 合并静态网格体(合并Actor)

    ue4 合并静态网格体(合并Actor)。 1.选择actor 2 合并

    2024年02月13日
    浏览(30)
  • 【UE4 C++】根据指定路径生成静态网格体

    在上一篇博客中(【UE C++】蓝图调用C++函数),我们用C++创建了一个蓝图函数库,本篇文章在这个蓝图函数库基础上增加一个方法,该方法只需输入一个文件目录路径,就可在场景中生成该目录下得所有静态网格体。(如果不想写C++的话,可以用这篇文章的方法:UE4 | BP | 使

    2024年02月15日
    浏览(63)
  • UE使用UnLua(二)

    最近也是比较忙,忘了来更新了,好多都是开了头断更的(狗头),今天抽空再更一篇!! 这篇讲一下在UnLua中覆盖蓝图事件(函数),及按钮、文本控件的一些使用 官方文档中也给出了覆盖的例子,在这就相当于巩固把 首先是蓝图事件的覆盖,需要在table返回中增加Recei

    2024年02月15日
    浏览(17)
  • UE4动作游戏实例RPG Action解析三:实现效果,三连击Combo,射线检测,显示血条,火球术

    实现武器三连击,要求: 1.下一段Combo可以随机选择, 2.在一定的时机才能再次检测输入 3. 等当前片段播放完才播放下一片段 1.1、蒙太奇设置 通过右键-新建蒙太奇片段,在蒙太奇里创建三个片段,并且移除相关连接,这样默认只会播放第一个片段 不同片段播放动画从 资产

    2024年02月21日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包