精华内容
下载资源
问答
  • [原创]UnLua Emmylua UE4开发环境搭建 https://www.cnblogs.com/sevenyuan/p/11990776.html 前言  公司开发的第二个虚幻4项目已经上线了,慢慢趋于稳定。回想起开荒的日子,历历在目。从引擎脚本的选择,各工具...

    [原创]UnLua Emmylua UE4开发环境搭建

    https://www.cnblogs.com/sevenyuan/p/11990776.html

    前言

      公司开发的第二个虚幻4项目已经上线了,慢慢趋于稳定。回想起开荒的日子,历历在目。从引擎脚本的选择,各工具(导表,协议生成...)的重构、开发, 引擎扩展(多骨骼支持,Notify扩展,技能编辑器...),UMG蓝图的设计、适配,战斗Demo的创建,开发流程的接轨,功能堆砌,人员一波波的更迭...

      回到正题,18年中,立项的时候,UE4的脚本语言都在实验期,没有成熟的,Python、JS V8、Lua等等开源的脚本也都测试过,最终选择了Lua,主要是基于:

    1、Lua语言在游戏业的广泛引用性。确认不远的将来会有更稳定、程序的框架

    2、UE3老项目战斗Lua的继承

      最终框架使用了unreal.lua, https://github.com/asqbtcupid/unreal.lua, 感谢大大。最近也一直在关注腾讯游戏的lua开源框架,slua和UnLua,现在有时间了,所以来研究下,为新项目最准备。

    一、相关源码获取

    1,UnLua: https://github.com/Tencent/UnLua

    2,Emmylua: https://github.com/EmmyLua/IntelliJ-EmmyLua

    3,LuaSocket: https://github.com/diegonehab/luasocket

    4,Lua5.3: https://www.lua.org/ftp/

    5,MobDebug: https://github.com/pkulchenko/MobDebug/tree/master/src

    二、LuaSocket搭建

    1、编译Lua5.3.4

      Lua源码目录创建install.bat

    复制代码

    REM open `Developer Command Prompt For Visual Studio`
    REM install.bat 5.3.4
    
    %~d0
    cl /MD /O2 /c /DLUA_BUILD_AS_DLL *.c
    ren lua.obj lua.o
    ren luac.obj luac.o
    link /DLL /IMPLIB:lua53.lib /OUT:lua53.dll *.obj
    link /OUT:lua.exe lua.o lua53.lib
    lib /OUT:lua53-static.lib *.obj
    link /OUT:luac.exe luac.o lua53-static.lib
    
    del *.obj
    del *.o
    
    REM bin
    if exist ..\bin (
        rd /s /q ..\bin
    )
    mkdir ..\bin
    move *.exp ..\bin
    move *.dll ..\bin
    move *.exe ..\bin
    
    REM lib
    if exist ..\lib (
        rd /s /q ..\lib
    )
    mkdir ..\lib
    move *.lib ..\lib
    
    REM include
    if exist ..\include (
        rd /s /q ..\include
    )
    mkdir ..\include
    copy lauxlib.h ..\include
    copy lua.h ..\include
    copy lua.hpp ..\include
    copy luaconf.h ..\include
    copy lualib.h ..\include
    
    PAUSE

    复制代码

      启动x64 vs命令行,执行install.bat

      

       bin目录加入Path

    2、编译LuaSocket

      a、打开sln,选择x64,指定Lua的include和lib目录,编译生成core.dll

      b、复制socket文件夹(带着core.dll)到lua bin目录,这个文件夹后续也要复制在游戏引擎目录

      c、复制src中的lua文件到lua bin目录

    3、测试

      

    三、Emmylua搭建

    1、安装IntelliJ IDEA

    2、编译Emmylua

      Emmylua源码目录下: gradlew buildAll

    3、IDEA 安装Emmylua

      

      

    4、设置IDEA配置

      a、取消代码拼写错误检测

      

     5、启动debug调试

      新建运行配置

      

      运行

          

    四、引擎、UnLua配置

    1、UnLua源码置于Plugins下

    2、复制socket文件夹(带着core.dll)复制到 Engine\Engine\Binaries\Win64

    3、Lua脚本Content\Script目录下,创建debugger文件夹,将LuaSocket源码下的lua复制进来

    4、MobDebug.lua也复制进来,修改Socket路径

     5、UnLua.lua中require MobDebug

     

     

    五、OK,IDEA加上断点调试

     

    分类: Lua, Unreal Engine 4

    好文要顶 关注我 收藏该文

     

     

     

     

     

    展开全文
  • 适用于UE4的Bluelua 用Lua替换蓝图,使其与蓝图保持一致,然后无缝切换。 通过反射访问UObject的属性和方法,而无需生成胶合代码,更加简单,易于扩展。 现在支持Android,iOS,Mac,Windows,Linux。 二手开源库 ...
  • 针对UE4的游戏开发,UnLua以及sluaunreal都是采用lua编写逻辑的解决方案。 作为一个没有怎么接触过游戏开发技术栈的小白,本文主要上手UnLua的使用。 从github上,我们可以clone下来示例的project,编译后即可运行...

    大型的游戏项目包含许多错综复杂的业务逻辑,针对UE4游戏而言,如果纯粹采用C++编写的话,一方面会增加大量的劳动成本,影响效率,另一方面难以解决游戏热更的问题。lua作为胶水语言,能够与C/C++/C#等语言互通,简化业务逻辑编写,并且支持热更。针对UE4的游戏开发,UnLua以及sluaunreal都是采用lua编写逻辑的解决方案。

    作为一个没有怎么接触过游戏开发技术栈的小白,本文主要上手UnLua的使用。

    从github上,我们可以clone下来示例的project,编译后即可运行。整个demo的逻辑是在一个空间中自动生成AI敌人,玩家需要射击AI以保全自身,如果碰到AI即游戏失败。整个游戏的逻辑基本在Content/Script下的lua文件中,对于开发者而言,只需要创建蓝图——导出Lua脚本——编写逻辑,就能够完成需求。

    编辑器采用VSCode + Emmylua + C/C++的搭配即可,如果有debug需求可以VS搭配Code。要导出UnLua解析的UE4的lua接口,在UnLuaIntelliSense.Build.cs中修改至ENABLE_INTELLISENSE=1,然后重新构建,即可导出lua定义到Plugins/UnLua/Intermediate/IntelliSense,之后调整workspace的配置即可:

    {
        "settings": {
            "emmylua.source.roots": ["./Plugins/UnLua/Intermediate/IntelliSense"]
        }
    }
    

    我们可以对示例教程中的子弹进行改装。我们可以增加一个CustomProjectile,其蓝图实例为BP_CustomProjectile,并实现UnLua的接口。我们可以自定义其Static Mesh的形状以及材质。之后,通过蓝图窗口的lua template可以在项目中导出蓝图接口BP_CustomProjectile_C.lua,而不需要自己编写蓝图逻辑。然后在蓝图的Interfaces中选中Get Module Name,返回BP_CustomProjectile_C所在位置即可。

    首先对于CustomProjectile,可以自定义一个ProjectileInitializer.lua

    require "UnLua"
    
    _G.ProjectileInitializer = ProjectileInitializer or {}
    
    function ProjectileInitializer:GetRandomColor()
        local R = UE4.UKismetMathLibrary.RandomFloat()
        local G = UE4.UKismetMathLibrary.RandomFloat()
        local B = UE4.UKismetMathLibrary.RandomFloat()
        return UE4.FLinearColor(R, G, B, 1.0)
    end
    
    function ProjectileInitializer:GetInitializer()
        local color = self:GetRandomColor()
        return {
            Color = color,
            Ratio = (color.R + color.G + color.B) / 3,
        }
    end
    
    return ProjectileInitializer
    

    之后可以编写BP_CustomProjectile_C的代码,和BP_DefaultProjectile_C基本相同:

    require "UnLua"
    
    local BP_CustomProjectile_C = Class("Weapon.BP_ProjectileBase_C")
    
    function BP_CustomProjectile_C:Initialize(Initializer)
        self.BaseColor = Initializer.Color
        self.DamageRatio = Initializer.Ratio or 0.1
    end
    
    function BP_CustomProjectile_C:UserConstructionScript()
        self.Super.UserConstructionScript(self)
        self.Damage = self.Damage * self.DamageRatio
        print("Projectile Damage: " .. tostring(self.Damage));
        self.DamageType = UE4.UClass.Load("/Game/Core/Blueprints/BP_DamageType.BP_DamageType_C")
    end
    
    function BP_CustomProjectile_C:ReceiveBeginPlay()
        self.Super.ReceiveBeginPlay(self)
        local MID = self.StaticMesh:CreateDynamicMaterialInstance(0)
        if MID then
            MID:SetVectorParameterValue("BaseColor", self.BaseColor)
        end
    end
    
    return BP_CustomProjectile_C
    

    这样即可根据颜色深度来判断projectile的伤害,实现伤害随机的效果。

    对于UMG而言,也可以在UMG蓝图中先设置各个控件为变量,然后调用各个变量的反射接口以设置控件属性。

    require "UnLua"
    
    local UMG_Main_C = Class()
    
    UMG_Main_C.ExitBtnText = "Hello World"
    
    function UMG_Main_C:Construct()
        if not self.ExitButtonTextBlock then
            print("exit button text is nil!")
        else
            print("bind exit button text...")
            self.ExitButtonTextBlock:SetText(UMG_Main_C.ExitBtnText)
        end
        self.ExitButton.OnClicked:Add(self, UMG_Main_C.OnClicked_ExitButton)	
        --self.ExitButton.OnClicked:Add(self, function(Widget) UE4.UKismetSystemLibrary.ExecuteConsoleCommand(Widget, "exit") end )
    end
    
    function UMG_Main_C:OnClicked_ExitButton()
        UE4.UKismetSystemLibrary.ExecuteConsoleCommand(self, "exit")
    end
    
    return UMG_Main_C
    
    

    从一个UE4初学者角度而言,UnLua的熟悉会有一定壁垒,需要建立在对UE4的C++变成较为熟悉的基础上,才能熟练应用。UnLua/sluaunreal相对于蓝图解决了一个最大的问题是逻辑的可维护性以及可热更的能力,以便支持业务逻辑的快速迭代。lua本身是没有强制静态类型的,虽然最近已有了teal的产生,但整个生态还没有完全兴起。因此如果使用lua作为胶水语言,不在lua层先做一两层业务抽象再写逻辑的话,还不如直接写C++来的稳定。因此,针对初学者或者是独立开发者,用C++加上蓝图是更加妥当的选择。

    That’s it,游戏开发是一门很独特的技术栈,还有许多值得探索的东西。自己虽然没有从事游戏开发工作,但说不定有一天,能够自己写一个游戏呢。

    展开全文
  • UE4&lua

    千次阅读 2019-04-23 19:44:53
    UE4层面 Entity(c++)---------->ACharacter/APawn M V&C lua层面 Entity(lua)----------->Entity Controller------------>Actor M ...

    UE4层面

    Entity(c++)---------->ACharacter/APawn

        M                               V&C

     

    lua层面

    Entity(lua)----------->Entity Controller------------>Actor

        M                               C                                   V

     

    UI

    Mode(lua)------------>UI Controller------------>UMG

        M                              C                                  V

     

    通过单例来组织M&C,比如收到Entity消息后创建对应的Controller;大部分UI都是全局唯一的,所以UI的单例可以跟Model放一起

    展开全文
  • UE4使用unlua、EmmyLua 和IDEA进行lua开发

    千次阅读 2020-06-01 11:22:31
    UE4使用unlua、EmmyLua 和IDEA开发 一:相关软件/插件的下载安装 1、UnLua :https://github.com/Tencent/UnLua 2、IDEA:自搜 二:IDEA的安装破解以及安装EmmyLua插件 自己解决 三: UnLua导出 智能提示 1、修改...

    UE4使用unlua、EmmyLua 和IDEA开发

    一:相关软件/插件的下载安装

    1、UnLua :https://github.com/Tencent/UnLua
    2、IDEA:自搜

    二:IDEA的安装以及安装EmmyLua插件

    自己解决

    三: UnLua导出 智能提示

    1、修改UnLua\Source\UnLuaIntelliSense目录下的UnLuaIntelliSense.Build.cs

    在这里插入图片描述
    2、启动项目之后会自动在项目的Plugins目录生成IntelliSence文件夹
    在这里插入图片描述

    3、将IntelliSence压缩成Zip,如上图

    四、IDEA添加智能提示

    1、打开File-Project Structure
    在这里插入图片描述
    2、在Libraries中添加刚刚压缩得到的Zip包
    在这里插入图片描述
    在这里插入图片描述
    3、再到Modules里面Apply,Apply之后左侧的External Libraries就会添加对应的文件
    在这里插入图片描述
    4、等解析完成之后就可以使用EmmyLua的注解功能和智能提示进行UE4 的Lua开发了
    在这里插入图片描述
    注解:https://emmylua.github.io/annotation.html EmmyLua的注解用法请自行查看学习

    展开全文
  • Lua使UE4完美,哈哈哈~~ 这是什么? 这是用于将UE4绑定到lua的框架。 平台和版本 Windows,Mac,Android,IOS UE4:4.20〜4.24 Lua:5.3 如何建造 对于此存储库: Right click CatchMe.uproject then Generate ...
  • UE4热更新:基于UnLua的Lua编程指南 https://imzlp.me/posts/36659/ https://imzlp.me/posts/36659/ Z's Blog 首页 归档 分类 标签 笔记 微言 资源 简历 关于 待办事项 站点日志 搜索 UE4热更新:...
  • 简单就是力量,通过运行时反射调用UE4功能。 注意:将-FastLua添加到Visual Studio命令行,然后按F5,将生成静态绑定代码 关于 FastLuaHelper.h中的一些全局函数; 例: GameInstance = Unreal.LuaGetGameInstance...
  • UnLua是功能丰富,易于学习且经过高度优化的UE4脚本解决方案。 UnLua遵循UE4的编程模式。 UE4程序员可以以零学习成本使用它。 主要特点 无需胶水代码即可访问所有UCLASS , UPROPERTY , UFUNCTION , USTRUCT和...
  • UE4 UnLua对接流程

    2021-01-14 16:24:34
    UE官方没有提供Lua的支持,但是腾讯开源了Unlua。 (地址:https://github.com/Tencent/UnLua)。 特性 • 零胶水代码访问引擎反射体系内的所有UCLASS、UPROPERTY、UFUNCTION、USTRUCT、UENUM。 • 零辅助代码覆写...
  • 因此按F5会直接附加到UE4或者UE5的Editor进程,虚幻引擎编辑器中启动预览游戏,命中断点后可查看调用堆栈,鼠标悬浮变量监视, 或者将变量拖入变量监视窗口,也可以按Shift+F9打开快速监视对话框,如图所
  • [UE4]Image

    2019-01-23 10:23:00
    一、Image.Appearance.Brush.Tiling:平铺方式    1、No Tile:不平铺,拉伸会变形  2、Horizontal:横向... 4、Both:横向和纵向都平铺。横向和纵向拉伸都不会变形   二、Image.Appearance.Brush.Draw...
  • 银藤UE4Lua 简报: NDC2019(한국어):
  • 一、新建一个控件蓝图并重命名。将ProgressBar拖拽到CanvasPanel下 二、选中ProgressBar,细节面板调节参数 1.Style:设置背景图,进度条前景图,边框模式下使用的图片 ...Background Image:背景图,可以设置...
  • UE_Lua_Plugins.zip

    2019-08-29 10:58:56
    平台: Windows,Mac,Android,IOS UE4:4.20 4.21 Lua:5.3 特点: 1.实现蓝图API。 2.Lua热加载 3.观察器 4.调试器 5.非常容易进行c++绑定
  • 4.将滑动框设置为变量。选中滑动框(PlayerListBox),细节面板将Is Variable打对勾。 5.选择创建按钮,在细节面板选择OnClick,使用Creat Widget 创建 PlayerSlot UI,将PlayerListBox变量拖入蓝图中,使用...
  • UE4 slua插件,腾讯开源 git-hub下载下来的,新鲜热乎,基于UE4.18版本的插件
  • 几种游戏领域常用的lua脚本,TypeScript的静态类型检查有助于编写更健壮,可维护性更好的程序 高效:全引擎,全平台支持反射绑定,无需额外(生成代码)步骤即可开发 高级:全引擎,全平台支持静态绑定,兼顾了高级...
  • UnrealLua插件

    2018-12-05 11:18:34
    开源的 使用Lua进行UE4开发的插件 4.17 4.18亲测 可以 另附 lua调试插件
  • LuaPanda是一个基于VS Code的lua代码工具,设计目标是简单易用。它支持多种开发框架,主要提供以下功能: 代码补全(代码完成) 代码片段(代码段补全) 定义加速度(definition) 生成注释(评论生成) 类型定义...
  • 目前该项目作为腾讯PUBG手游和潘多拉系统,该系统用于腾讯UE4游戏业务,帮助游戏业务内置周边系统,运营系统,上线质量稳定。 欢迎发布会,公关,星级,叉子。 展示柜 什么是新的? ,修复了崩溃错误,更加稳定 ,...
  • Arteries是基于UE4蓝图的过程建模工具包。 通过使用此插件,您可以在UE4蓝图图中实现整个建模过程,而无需任何其他建模软件。 实施建模过程非常简单。 只需创建一个继承自ArteriesActor的蓝图并实现其OnBuild事件。 ...
  • 我们写UE4的C++代码时,习惯用IsPendingKill来判断一个Object是否还有效,尤其对于Actor最常见。使用Actor之前,判断一次nullptr和IsPendingKill,如果Actor合法,则继续之后的代码。一般情况下,这个做法不会出什么...
  • UE4中触摸屏的拖拽缩放功能——lua实现1.简述2.代码示例 1.简述 在移动端的触摸场景案例参考非常少,对于触摸的各种手势操作不好参考,然鹅这种需求对于各种应用或是需求最平常不过的了 ,这里仅针对UE4的开发提供几...
  •   luaL_loadstring 之后调用 lua_pcall 会出错。   luaL_dostring 的定义如下: #define luaL_dostring(L, s) \ (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) 结论   用 luaL_dostring。。
  • UE4UE4内使用Sqlite数据库

    千次阅读 2018-02-02 17:19:06
    因为项目需要数据库对一些数据进行管理和其他的操作,所以花了些时间研究了一下如何在UE4中使用Sqlite数据库。 围观了许多Blog和Answer,要么语焉不详,或者是版本太古老。 另外再吐槽一下官方文档,说是将Sqlite...
  • 虚幻引擎(UE4) UMG实例

    2021-02-02 19:09:03
    UI的重要性 游戏中UI系统具有以下特点: 庞大而复杂 一个游戏会包含多个系统,包括任务系统,进度系统,统计系统等等,而每个系统都有自己的可视化界面。 善变 在游戏开发中,经常会因为某些原因修改用户界面。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,104
精华内容 441
关键字:

luaue4