ue4 物品随机生成

这个只是简单的讲解一下物品生成时的概率问题,可以根据自己的需要在此基础上拓展

创建两个结构体蓝图

分别表示物体生成的位置和要生成的物体模型

在ST_Location里面创建一个Vector变量

在ST_Item里面创建两个变量

分别是当前物品生成的概率和这个物品的Actor引用

然后根据这两个结构体蓝图,创建两个数据表格

在DT_Location里面添加五行

然后我们要给这五行分别设置位置

在地图中拖出五个立方体,把这个五个立方体的位置分别设置给DT_Location

位置可以直接复制粘贴过去

 

然后把拉出的五个立方体删除

创建四个actor蓝图(添加StaticMesh,然后把Mesh修改成自己想要的模型),模型随便,不一样即可

这里为了演示用了蓝图,但是如果你要生成物品很多的话就会很麻烦,解决办法就是创建一个父类蓝图通过物品ID来修改蓝图的StaticMesh

 然后设置一下DT_Item

 

BluePrint分别设置成刚才创建的四个物品蓝图,概率分别是10,20,30,40

然后创建一个GameMod

 在世界大纲里面把游戏模式修改为MyGameMod

我们在GameMod里面实现生成物品的操作

创建一个函数,命名为GenerationItem,遍历之前创建的位置数据表格

每获取一个位置就随机生成一个物品,再创建一个函数命名为RandomItem,这个函数用来随机产生一个物品的类引用

在这个函数创建一个局部变量Arr,类型是Actor引用数组

原理就是在Arr数组中加入物品对应概率的数量,然后再打乱随机出一个物品

然后回到GenerationItem函数中调用这个函数生成物品

在事件图标的begin play后面调用GenerationItem即可

运行生成物品如下

有什么不对的地方欢迎评论区指正

有什么问题可以在评论区问我 

### 在 Unreal Engine 中实现区域内随机生成网格体 为了实现在特定区域内随机生成网格体的功能,可以通过编写蓝图脚本或C++代码来完成。以下是基于蓝图的方法: #### 使用蓝图实现区域内的随机网格体生成 1. 创建一个新的Actor Blueprint 或者打开现有的Blueprint。 2. 将要随机生成的Static Mesh组件拖入到事件图表中作为变量保存起来以便后续调用[^1]。 3. 添加一个`Event BeginPlay`节点触发一次性的初始化操作。 4. 连接`Event BeginPlay`至`For Loop with Break`循环结构,设定迭代次数代表想要生成的最大数量对象数。 5. 在每次循环内部执行如下逻辑: - **获取位置**:利用`Random Point In Navigation Volume`函数获得一个位于指定体积范围内的有效点位。 ```cpp FVector RandomLocation = UKismetMathLibrary::RandomPointInNavigableVolume(this, TargetNavVolume); ``` - **旋转角度**:通过`Make Rot from XYZ`构建任意方向向量转换成四元数形式的角度值。 ```cpp FRotator RandomRotation(FMath::FRand() * 360.f, FMath::FRand() * 360.f, FMath::FRand() * 360.f); ``` - **实例化静态网格物体**:使用`Spawn Actor From Class`节点并传入选定的目标类(即之前准备好的带有StaticMeshComponent的对象),同时传递计算所得的位置与朝向参数给新实体。 6. 设置好上述流程之后编译并关闭蓝图编辑器回到主界面测试效果。 7. 若希望控制更精细还可以加入额外条件判断比如检测重叠防止碰撞等问题处理机制。 8. 对于复杂需求考虑采用自定义Volumes限定具体分布边界以及密度权重等因素影响最终布局样式。 9. 若要求高效性能表现建议预先烘焙好可能涉及的所有变种情况存档下来供运行时快速加载读取减少实时运算负担。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的没事鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值