(蓝图)虚幻4制作超级马里奥(七)道具的生成和效果

目录

生成

1.一个新的Actor类蓝图

修改BP_Base_Wall

控制生成次数

效果

枚举类型记录道具的种类

修改BP_Item道具蓝图

执行不同事件

Wall生成Item

解决持续时间问题

修改BP_MyPlayerController

修改BP_Item蓝图


顶动方块之后有几率产生道具,角色接触到道具,获得效果

生成

1.一个新的Actor类蓝图

2.添加StaticMesh组件并设置成Shape_Sphere,设置位置z=-50,设置碰撞预设值为NoCollision(没有碰撞)

3.再添加一个Sphere Collision球形碰撞体积,调整碰撞体积的大小刚好包裹StaticMesh,

打开Simulate Physics,SimulationGeneratesHitEvents,设置碰撞预设值为PhysicsActor

Mesh一定要在Sphere层级下

在Sphere的细节面板中找到OnComponentHit并点击加号

添加如下蓝图,我们将测试物体碰到玩家角色时触发销毁事件

不出意外当玩家碰到小球道具的时候就会触发销毁事件,下面再使用timer实现自动销毁,顺便把控制器和角色的引用保存一下以便后面制作效果

回到

修改BP_Base_Wall

创建一个SpawnItem自定义事件,生成类节点SpawnActorfromClass,并绑定到顶动事件上

最后接到玩家进入box触发事件的WallJump后

运行游戏,已经能够生成道具了,但是可以无限次生成道具

控制生成次数

很简单我们用一个布尔变量控制该方块是否能生成道具(你也可以设置一个Int型变量用来控制次数)。

 

现在就只能生成一次道具了

似乎很生硬,我们在它生成的时候给它一个力,让它往右边移动。

效果

制作几个简单的道具效果——增加玩家角色的弹跳力、移动速度

首先到BP_Player玩家角色蓝图中,在游戏进行的时候打印角色的移动速度和跳跃高度

运行测试

接下来制作道具功能

枚举类型记录道具的种类

 

修改BP_Item道具蓝图

新建一个变量,命名为Type,类型为刚才创建的枚举类型(勾选InstanceEditable(蓝图中可编辑),和在生成时显示,以便后面在生成的时候设置道具的类型)

执行不同事件

添加一个流程控制中的 select(开启)E_ItemType,并接到之前创建的CasttoBP_Player节点后面,把刚才创建的变量拖拽到Selection上。

当玩家触碰到Item道具时,根据Item的Type执行不同的事件,如该道具的Type为JumpHigh,那么我们就增加角色的起跳速度

把Item拖拽到场景中进行测试可以看到,现在角色吃了道具后能跳的更高跑的更快。

但是这里有一个BUG。仔细观察上面的角色获得道具效果事件,角色在获得效果的同时,Item也被释放了,那么谁来让角色回到原来的状态?待会再解决,现在我们先实现在Wall生成Item时设置Item的类型

Wall生成Item

现在我们在创建道具之时对Type进行设置,回到Wall蓝图中,我们可以看到在SpawnActor节点中已经多了一个Type(如果没有先编译)

此时它的值是BP_Item中Type的默认值

我们让它每次生成的时候都随机生成一个布尔变量,然后根据布尔变量设置Type

这样,每次生成的道具就有了两种可能(如果有两个以上道具类型使用Int型变量)

解决持续时间问题

能够想到的最简单的办法是在Item(道具)蓝图中,触发效果之后,先不慌DestoryActor,设置一个Timer等待一定时间后取消掉角色效果再销毁Actor。这样做的是没有问题的,但我们为什么不在一个游戏过程中一直存在的类上创建事件,由Item调用,调用之后便Item可以立马被销毁。

 

我这里是在PlayerController中对玩家角色进行设置,在GameMode中进行设置更规范一点

PlayerController在游戏过程中不会被轻易销毁,我们只需要将效果函数写到PlayerController,由Item(道具)进行调用就可以放心的销毁了。

 

修改BP_MyPlayerController

游戏开始的时候记录BP_Player(角色)的最大移速和起跳速度

两个自定义事件用来设置最大移速和起跳速度

两个自定义事件JumpHigh和WalkQuick由Item触发Hit事件之后选择调用,注意这里的Timer的时间设置的3秒,也就是说效果产生后3秒又会恢复到最开始状态

修改BP_Item蓝图

修改之前的Hit事件

后面我们再增加UI显示

总的来说,这章使用枚举变量+碰撞检测直接实现了道具的拾取,也可以使用接口来实现,不过这里先到这里吧

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

锋哥游戏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值