Unlua

Unlua使用注意点

蓝图启用lua脚本

  • 1.打开Class Settings
  • 2.在接口Interfaces中选择Unlua接口进行继承
  • 3.之后在左侧就会出现Get Module Name的接口函数
  • 4.在Return NodeReturn Value中填写相应的Lua脚本的名字
    • 填写名称是相对地址,相对于Content/Scripts,多级文件夹用.号分隔
  • 5.点击Lua Template在相对地址Content/Scripts下生成对应的Lua脚
    • 注意文件生成位置是否正确,我有时候生成位置不对,要手动调整一下

lua脚本框架 — 以BTTask为例

require "UnLua"  -- 1

local BTTask_RunAnywhere_C = Class() -- 2

function BTTask_RunAnywhere_C:Initialize() -- 3
end

function BTTask_RunAnywhere_C:ReceiveTick(OwnerActor,DeltaSeconds) --4
end

function BTTask_RunAnywhere_C:ReceiveExecute(OwnerActor) -- 4
    local OwnerAIController = UE4.UAIBlueprintHelperLibrary.GetAIController(OwnerActor) -- 5
    local actor = OwnerActor:Cast(UE4.AActor) -- 6
    local loc = actor:K2_GetActorLocation()
    local offset = UE4.FVector(100,100,100) -- 7
    actor:K2_SetActorLocation(loc+offset) -- 7
end

return BTTask_RunAnywhere_C -- 2

1.require模块

2.Class() 和 self

3.Initialize()函数

  • 所有绑定到Lua的对象初始化时都会调用Initialize的实例方法
  • 注意在Initialize()是调用不了蓝图变量的

4.覆盖蓝图事件

  • 覆盖蓝图事件时,只需要在返回的table中声明Receive{EventName}
    • 注意对于这里的事件在蓝图中就叫ReceiveTick,经过测试,这里还是用ReceiveTick来覆盖,使用ReceiveReceiveTick无效
    • 注意对于参数也需要对应正确

覆盖蓝图函数

  • 直接声明 {FunctionName} 来覆盖Function

调用被覆盖的蓝图函数

  • 如果需要调用被覆盖的蓝图Function,可以通过 self.Overridden.{FunctionName}(self, …) 来访问
    • 注意函数内的self

      5.使用UE4内置函数

  • 对应蓝图函数和C++函数

开启智能提示

6.如何使用事件参数/转换成对应UE4内置类型

  • 使用cast进行强制转换

7.lua点号和冒号的区别