UE4 AllowPrivateAccess用法

博客提及官方文档及源代码注释位置为 Engine\Source\Runtime\CoreUObject\Public\UObject\ObjectMacros.h,其作用是让蓝图能够访问私有变量,还提到了测试相关内容。

官方文档.
源代码注释:Engine\Source\Runtime\CoreUObject\Public\UObject\ObjectMacros.h
在这里插入图片描述
作用:使蓝图可以访问私有变量
测试:
在这里插入图片描述
在这里插入图片描述

### UE4 Lua 获取蓝图组件方法 在 Unreal Engine 4 (UE4) 中,通过 Lua 脚本获取蓝图上的组件需要借助 UnLua 插件的功能。UnLua 提供了强大的 Lua 和蓝图交互能力,使得开发者可以通过 Lua 脚本访问和操作蓝图中的组件。 以下是一个完整的实现方式: 1. **确保蓝图中组件的可见性** 在蓝图类中定义组件时,必须使用 `UPROPERTY` 宏来设置组件的可见性和访问权限。例如,以下代码片段展示了如何声明一个静态网格组件并使其对蓝图只读[^3]: ```cpp UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true")) UStaticMeshComponent* MeshComp; ``` 2. **通过 Lua 获取蓝图组件** 在 Lua 中,可以通过 `self` 引用蓝图实例,并调用 `GetComponentByName` 方法获取指定名称的组件。以下是一个示例代码,展示如何从蓝图中获取名为 `MeshComp` 的静态网格组件[^2]: ```lua function MyBlueprint:OnConstruction() -- 获取蓝图中的静态网格组件 local meshComponent = self:GetComponentByName("MeshComp") if meshComponent then print("成功获取组件:" .. tostring(meshComponent)) -- 对组件进行操作,例如设置材质 local material = LoadAsset("Material'/Game/Materials/MyMaterial.MyMaterial'") if material then meshComponent:SetMaterial(0, material) end else print("未能找到组件:MeshComp") end end ``` 3. **加载资产(如材质或纹理)** 使用 `LoadAsset` 函数可以从项目资源中加载资产。例如,上述代码中加载了一个名为 `MyMaterial` 的材质资产,并将其应用到静态网格组件上。 4. **注意事项** - 确保蓝图中的组件名称与 Lua 脚本中调用的名称一致。 - 如果蓝图组件是动态生成的(例如通过 C++ 实例化),可能需要额外的逻辑来确保组件存在后再进行操作[^1]。 - 避免直接修改蓝图组件的只读属性,否则可能会导致运行时错误。 ### 示例代码总结 以下是一个完整的 Lua 脚本示例,用于获取蓝图中的组件并对其进行操作: ```lua function MyBlueprint:OnConstruction() -- 获取蓝图中的静态网格组件 local meshComponent = self:GetComponentByName("MeshComp") if meshComponent then print("成功获取组件:" .. tostring(meshComponent)) -- 加载材质资产 local material = LoadAsset("Material'/Game/Materials/MyMaterial.MyMaterial'") if material then -- 设置组件材质 meshComponent:SetMaterial(0, material) else print("未能加载材质:MyMaterial") end else print("未能找到组件:MeshComp") end end ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值