具体代码资源链接:https://download.youkuaiyun.com/download/qq_36680300/80971020
先说思路,因为是拾取道具后触发效果,所以被拾取的道具上需要有一个2d的碰撞器,设置为isTrigger,新添加标签为Bonus。
最开始我是想直接在Bonus上挂一个脚本,然后在Player脚本中通过OnTriggerEnter2D函数,以sendmessage的方式去调写好的方法,想的是比较规范。
但出现了一个问题,以sendmessage形式调用的方法里如果含有函数嵌套,比如说一个方法里需要延时调用另一个方法,运行的结果虽然不会报错,但嵌套的方法是无效的。
尝试了许久无法解决这个问题,只能退而求其次绕过sendmessage把这些方法直接全放Player脚本里了。
// tank拾取奖励
//0:生命,1:钟表,2:铲子,3:炸弹,4:星星,5:头盔
private void OnTriggerEnter2D(Collider2D collision)
{
switch (collision.tag)
{
// 增加生命
case "Life":
BonusPlay();
PlayerManager.lifeValue++;
Destroy(collision.gameObject);
break;
// 暂停敌人行动
case "Clock":
BonusPlay();
PuaseEnemy();
Destroy(collision.gameObject);
break;
// 升级Heart周围Wall为Barriar
case "Shovel":
BonusPlay();
ReplaceBarriar();
Destroy(collision.gameObject)

本文介绍Unity2D坦克大战中道具效果的实现,包括增加生命、暂停敌人行动、钢铁化砖块、杀死敌人、坦克升级和无敌状态。通过碰撞检测和标签系统,结合静态变量和协程来控制游戏逻辑。遇到使用SendMessage调用方法的问题,最终选择直接在Player脚本中处理。
最低0.47元/天 解锁文章
3277






