虚幻中的UnLua全部语法及其函数
时间: 2024-05-02 16:23:10 浏览: 518
UnLua是一个虚幻引擎4(UE4)的Lua脚本插件,用于在UE4中实现Lua脚本编程。以下是UnLua支持的全部语法及其函数:
## 基本语法
### 变量
```lua
local a = 1 -- 定义一个局部变量
global b = 2 -- 定义一个全局变量
```
### 函数
```lua
function add(a, b)
return a + b
end
local result = add(1, 2)
```
### 控制结构
```lua
if a > 0 then
print("a > 0")
elseif a < 0 then
print("a < 0")
else
print("a = 0")
end
for i = 1, 10 do
print(i)
end
while a > 0 do
a = a - 1
end
```
### 类和对象
```lua
-- 定义一个类
local MyClass = Class()
-- 定义一个构造函数
function MyClass:ctor()
self.Value = 0
end
-- 定义一个成员函数
function MyClass:Add(v)
self.Value = self.Value + v
end
-- 创建一个对象
local obj = MyClass()
-- 调用对象的成员函数
obj:Add(1)
```
## UnLua插件函数
### UObject
```lua
-- 创建一个UObject对象
local obj = UE4.UObject()
-- 获取对象的名称
local name = obj:GetName()
-- 设置对象的名称
obj:SetName("NewName")
-- 销毁对象
obj:ConditionalBeginDestroy()
-- 判断对象是否已经销毁
local isDestroyed = obj:IsPendingKill()
```
### UActorComponent
```lua
-- 获取组件所属的Actor对象
local actor = self:GetOwner()
-- 获取组件所在的关卡
local level = self:GetLevel()
-- 获取组件所在的世界
local world = self:GetWorld()
```
### UActor
```lua
-- 获取Actor的位置
local location = actor:GetActorLocation()
-- 设置Actor的位置
actor:SetActorLocation(UE4.FVector(0, 0, 0))
-- 获取Actor的旋转
local rotation = actor:GetActorRotation()
-- 设置Actor的旋转
actor:SetActorRotation(UE4.FRotator(0, 0, 0))
-- 获取Actor的缩放
local scale = actor:GetActorScale()
-- 设置Actor的缩放
actor:SetActorScale(UE4.FVector(1, 1, 1))
-- 获取Actor的Transform
local transform = actor:GetActorTransform()
-- 设置Actor的Transform
actor:SetActorTransform(UE4.FTransform(UE4.FRotator(0, 0, 0), UE4.FVector(0, 0, 0), UE4.FVector(1, 1, 1)))
-- 判断Actor是否可见
local isVisible = actor:IsVisible()
-- 设置Actor的可见性
actor:SetActorHiddenInGame(false)
-- 判断Actor是否已经销毁
local isDestroyed = actor:IsPendingKill()
-- 销毁Actor
actor:Destroy()
```
### UGameplayStatics
```lua
-- 获取当前游戏世界中的所有Actor
local actors = UE4.UGameplayStatics.GetAllActorsOfClass(self, UE4.AActor.Class())
-- 获取当前游戏世界中指定标签的Actor
local actorsWithTag = UE4.UGameplayStatics.GetAllActorsWithTag(self, UE4.FName("MyTag"))
-- 获取当前游戏世界中指定类型的Actor
local actorOfType = UE4.UGameplayStatics.GetActorOfClass(self, UE4.AActor.Class())
-- 获取当前游戏世界中指定名称的Actor
local actorWithName = UE4.UGameplayStatics.GetActorByName(self, "MyActor")
-- 获取当前游戏世界中指定类和名称的Actor
local actor = UE4.UGameplayStatics.GetActorOfClassByName(self, UE4.AActor.Class(), "MyActor")
-- 获取当前游戏世界中的游戏模式
local gameMode = UE4.UGameplayStatics.GetGameMode(self)
-- 获取当前游戏世界中的玩家控制器
local playerController = UE4.UGameplayStatics.GetPlayerController(self, 0)
-- 获取当前游戏世界中的本地玩家控制器
local localPlayerController = UE4.UGameplayStatics.GetPlayerController(self, UE4.UGameplayStatics.GetPlayerControllerId(self))
-- 获取当前游戏世界的时间
local time = UE4.UGameplayStatics.GetRealTimeSeconds(self)
-- 设置当前游戏世界的时间
UE4.UGameplayStatics.SetGlobalTimeDilation(self, 2.0)
```
### USoundWave
```lua
-- 加载音频文件
local soundWave = UE4.USoundWave.LoadFromFile("AudioFile.wav")
-- 播放音频
UE4.UGameplayStatics.PlaySound2D(self, soundWave, 1.0, 1.0, 0.0)
```
### UWidget
```lua
-- 创建一个Widget组件
local widget = UE4.CreateWidget(self, UE4.UUserWidget.Class(), UE4.FName("MyWidget"))
-- 显示Widget组件
widget:AddToViewport()
-- 隐藏Widget组件
widget:RemoveFromViewport()
-- 获取Widget组件的大小
local size = widget:GetDesiredSize()
-- 设置Widget组件的大小
widget:SetDesiredSize(UE4.FVector2D(100, 100))
```
### UDataTable
```lua
-- 加载数据表
local dataTable = UE4.UDataTable.LoadFromAsset("MyDataTable")
-- 获取数据表中的一行数据
local data = dataTable:FindRow("MyRowName", "")
-- 获取数据表中所有的行数据
local rows = dataTable:GetAllRows()
-- 修改数据表中的一行数据
data.Value = 2
-- 保存数据表的修改
dataTable:Modify()
-- 重新加载数据表
dataTable:Reload()
```
### UInputComponent
```lua
-- 创建一个Input组件
local inputComponent = actor:CreateDefaultSubobject(UE4.UInputComponent.StaticClass(), "MyInputComponent")
-- 绑定一个按键事件
inputComponent:BindAction("MyAction", UE4.EInputEvent.IE_Pressed, self, self.OnMyAction)
-- 定义按键事件的处理函数
function MyClass:OnMyAction()
-- 处理按键事件
end
```
### UMaterialInstance
```lua
-- 加载一个材质实例
local materialInstance = UE4.UMaterialInstance.LoadFromAsset("MyMaterialInstance")
-- 获取材质实例中的一个参数
local paramValue = materialInstance:GetScalarParameterValue(UE4.FName("MyScalarParam"))
-- 设置材质实例中的一个参数
materialInstance:SetScalarParameterValue(UE4.FName("MyScalarParam"), 2.0)
-- 应用材质实例到一个Mesh组件上
meshComponent:SetMaterial(0, materialInstance)
```
### UParticleSystem
```lua
-- 加载一个粒子系统
local particleSystem = UE4.UParticleSystem.LoadFromAsset("MyParticleSystem")
-- 播放粒子系统
particleSystemComponent:SetTemplate(particleSystem)
particleSystemComponent:Activate()
-- 停止播放粒子系统
particleSystemComponent:Deactivate()
-- 获取粒子系统中的一个参数
local paramValue = particleSystem:GetFloatParameter(UE4.FName("MyFloatParam"))
-- 设置粒子系统中的一个参数
particleSystem:SetFloatParameter(UE4.FName("MyFloatParam"), 2.0)
```
### UTexture
```lua
-- 加载一个贴图
local texture = UE4.UTexture2D.LoadFromAsset("MyTexture")
-- 应用贴图到一个材质实例上
materialInstance:SetTextureParameterValue(UE4.FName("MyTextureParam"), texture)
```
### USkeletalMesh
```lua
-- 加载一个骨骼网格
local skeletalMesh = UE4.USkeletalMesh.LoadFromAsset("MySkeletalMesh")
-- 创建一个骨骼动画实例
local animInstance = skeletalMesh:CreateAndSetAnimationInstance(UE4.UAnimInstance.Class())
-- 播放一个骨骼动画
animInstance:Montage_Play(UE4.UAnimMontage.LoadFromAsset("MyAnimMontage"))
-- 停止播放骨骼动画
animInstance:Montage_Stop(0.2)
-- 获取骨骼网格上的一个骨骼
local bone = skeletalMesh:FindBone("MyBone")
-- 获取骨骼网格上的一个插槽
local slot = skeletalMesh:FindSlot("MySlot")
-- 获取骨骼网格上的所有插槽
local slots = skeletalMesh:GetAllSocketNames()
-- 获取骨骼网格的缩放
local scale = skeletalMesh:GetImportedScale()
```
### UStaticMesh
```lua
-- 加载一个静态网格
local staticMesh = UE4.UStaticMesh.LoadFromAsset("MyStaticMesh")
-- 创建一个静态网格组件
local staticMeshComponent = actor:CreateDefaultSubobject(UE4.UStaticMeshComponent.StaticClass(), "MyStaticMeshComponent")
-- 设置静态网格组件的网格
staticMeshComponent:SetStaticMesh(staticMesh)
-- 获取静态网格组件的材质
local material = staticMeshComponent:GetMaterial(0)
-- 设置静态网格组件的材质
staticMeshComponent:SetMaterial(0, UE4.UMaterial.LoadFromAsset("MyMaterial"))
```
### ULevelStreaming
```lua
-- 加载一个关卡
local levelStreaming = UE4.ULevelStreaming.LoadFromAsset("MyLevel")
-- 加载关卡的子关卡
levelStreaming:Load()
-- 卸载关卡的子关卡
levelStreaming:Unload()
-- 获取关卡的状态
local levelState = levelStreaming:GetLoadedLevelState()
-- 设置关卡的状态
levelStreaming:SetShouldBeLoaded(true)
```
### ULevelSequencePlayer
```lua
-- 加载一个关卡序列
local levelSequence = UE4.ULevelSequence.LoadFromAsset("MyLevelSequence")
-- 创建一个关卡序列播放器
local levelSequencePlayer = UE4.ULevelSequencePlayer.Create(self, levelSequence, UE4.FMovieSceneSequencePlaybackSettings())
-- 播放关卡序列
levelSequencePlayer:Play()
-- 停止播放关卡序列
levelSequencePlayer:Stop()
```
### UMovieScene
```lua
-- 加载一个电影场景
local movieScene = UE4.UMovieScene.LoadFromAsset("MyMovieScene")
-- 获取电影场景的时长
local duration = movieScene:GetPlaybackRange().Size
-- 获取电影场景的帧率
local frameRate = movieScene:GetTickResolution()
-- 获取电影场景的所有轨道
local tracks = movieScene:GetAllTracks()
-- 获取电影场景中指定轨道的所有关键帧
local sections = movieScene:GetAllSectionsInTrack(movieScene:GetMasterTrack())
```
### UMediaSource
```lua
-- 加载一个媒体源
local mediaSource = UE4.UMediaSource.LoadFromAsset("MyMediaSource")
-- 创建一个媒体播放器
local mediaPlayer = UE4.UMediaPlayer.Create(self)
-- 打开媒体源
mediaPlayer:OpenSource(mediaSource)
```
### UUserDefinedStruct
```lua
-- 加载一个自定义结构体
local struct = UE4.UUserDefinedStruct.LoadFromAsset("MyStruct")
-- 创建一个自定义结构体实例
local instance = struct:CreateDefaultObject()
-- 获取自定义结构体中的一个字段
local value = instance.MyField
-- 设置自定义结构体中的一个字段
instance.MyField = 2
-- 应用自定义结构体到一个数据表的行数据中
local row = dataTable:FindRow("MyRowName", "")
row.MyStructField = instance
```
## 总结
以上是UnLua插件支持的全部语法及其函数,这些函数是UnLua插件的核心功能,可以帮助开发者快速实现UE4游戏的开发。如果您想深入了解UnLua插件的更多功能,请参考官方文档。
阅读全文