从c++开始搭一个能捡东西又能扔东西的背包系统

从C++开始搭一个能捡东西又能扔东西的背包系统,其实挺简单的。第一步是把所有东西拆开来看:你得弄一个BP_PickupActor,这是玩家能看见的实际物体,它主要负责响应按E键的操作。另外还得有个BP_InventoryActor,这是后台的数据类,存着物品的名字、重量和图标这些东西,但它不负责画面渲染。 接下来是写蓝图的时候。BP_PickupActor这边,你得先设好一个InventoryClass,默认指向BP_InventoryActor。在OnUsed事件里调用角色蓝图的AddItem函数,就能把这个东西塞进玩家的背包里了。至于要不要开物理模拟?看你自己:勾选Simulate Physics可以让东西掉在地上有真实的碰撞效果;如果关掉,那就得自己写代码让它“看起来”掉在地上。 BP_InventoryActor这块主要是隐藏细节。你得填上DisplayName和PickupClass这两个字段,前者是HUD要显示的名字,后者是指向BP_PickupActor的那个蓝图。如果不填好这两个值,物品是不会出现在UI上的。 然后看角色蓝图。这里有个InventoryItems数组来存所有物品的数据,还有个SelectedItem变量记录当前选中的是哪一个(默认是-1,表示没选中)。关键的函数有SetSelectedItemIndex,用来防止选中的索引越界;AddItem负责新建一个物品实例并塞到数组里;DropItem会移除选中的物品,再在玩家面前生成一个可拾取的物体来模拟丢弃动作。 为了方便操作,把DropSelectedItem绑定到F键上,按了以后不仅要丢弃物品还要重置选中状态。滚轮上下滚动可以通过SetSelectedItemIndex来调整选中的格子循环选择。 HUD方面比较简单,设置好间距和位置参数就行。选中的时候把图标放大1.2倍就能一眼看出操作的是哪个格子了。 至于让掉落物看得见,得在GameMode里把HUD设为BP_HUD,还要在世界设置里确认关卡使用了这个模式。全局后处理方面,可以新建一个Global PostProcess体积,选上Unbound确保全场生效。用Blendable材料选PP_OutlineCustomDepth再配合脚本就能让掉落物的轮廓高亮起来。 最后加武器也很方便,复制粘贴已有的蓝图子类型改改模型和图标就行。如果项目大了还可以升级到用DataTable来管理数据。 遇到问题怎么办?检查默认值填没填全?E/F键还有滚轮有没有映射对?HUD和GameMode的设置是不是一致?如果东西穿模检查碰撞体积有没有勾对。Cast To报错的话从返回值拉线并勾选Context Sensitive就能解决。 总结一下只需要三步:拆成可视和数据两个蓝图;角色蓝图里维护一个数组加选中索引;用AddItem、DropItem和SetSelectedItemIndex这三个函数把CRUD流程跑通。