学习目标:

今天我教一下怎么设置砖块(比如需要碰撞两次,三次才能彻底击碎)然后我们再更换不同的颜色让画面更有色彩,话不多说直接开搞。


学习内容:

首先我们看到我们的素材上有这种破碎的砖块刚好可以做成碰撞几次的

记得要把它们三个的Pixel Per Unit都一样

接着就编写一下Block砖块的脚本

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Block : MonoBehaviour
{
    [SerializeField] AudioClip breakClip; //播放声音
    [SerializeField] GameObject impactVFX;
    Level level;

    [SerializeField] int hitsCount; //统计被击中几次

    [SerializeField] Sprite[]hitSprites; //分别是第一次被击中的Sprite,第二次,第三次
    private void Start()
    {
        CountBrealableBlocks();
    }

    private void CountBrealableBlocks()
    {
        level = FindObjectOfType<Level>();
        if (tag == "Breakable")
        {
            level.CountBreakBlocks();
        }
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.CompareTag("Ball") && tag == "Breakable")
        {
            HandleHit();
        }
    }

    private void HandleHit()
    {
        hitsCount++;
        int maxHits = hitSprites.Length + 1;
        if (hitsCount >= maxHits)
        {
            DestoryBlock(); //如果被击中的次数大于它最大的承受击中次数就直接破坏
            //Debug.Log(other.gameObject.name);
        }
        else
        {
            ShowNextHitSPrite(); //显示
        }
    }

    private void ShowNextHitSPrite() //显示下一张图片也就是击碎的Sprite
    {
        int spriteIndex = hitsCount - 1;
        if (hitSprites[spriteIndex] != null)
        {
            GetComponent<SpriteRenderer>().sprite = hitSprites[spriteIndex];
        }
        else
        {
            Debug.LogError("Array out of Index");
        }
    }
    private void DestoryBlock()
    {
        FindObjectOfType<GameStatus>().AddToScore();
        AudioSource.PlayClipAtPoint(breakClip, Camera.main.transform.position);
        Destroy(gameObject);
        level.BlockDestory();
        TriggerSparklesVFX();
    }
    private void TriggerSparklesVFX()
    {
        GameObject sparkles = Instantiate(impactVFX, transform.position.normalized, transform.rotation);
        Destroy(sparkles,1f);
    }
}

别忘了给你的游戏对象设置表情以及添加碰撞体

球的也要标签

再创建一个空对象BlockManagement用来存放过多的Block

要给需要两次三次击碎的砖块设置独特的预设体Prefab并改变他们的Hit Sprite 和 Max Hits

小技巧:如果你想准确的拖动你每个复制的砖块完全贴合,首先保证每个单位占一个单元格,然后设置你的Snap Settings,在Edit菜单的最下面,然后把MoveX和MoveY都设置成1,那么你每次按Ctrl拖动都是一个单元格。

学习产出:

不仅有特效还有破碎砖块的Sprite还有音乐播放,完美。

【Unity2D入门教程】简单制作一个弹珠游戏之制作场景③(设置砖块,添加碰撞)相关推荐

  1. 游戏建模入门教程:绝地求生—PUBG的游戏模型制作流程

    <绝地求生>好玩吗?说实话,好玩也很刺激,尤其是进房子的时候被别人一枪偷了屁股的时候.自游戏发布以来,已经有一个年头了.今天在这里就给大家看看游戏里面的模型是什么样的!!! 如果你也想未来 ...

  2. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之①搭建场景

    布置场景: 众所周知,植物大战僵尸非常好玩,所以我们来制作一款类似的,名字就叫Glitch Garden. 布置场景需要用到很多素材,这里我们在GitHub中找到一位老师的素材并把需要的导入到proj ...

  3. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之②搭建游戏场景+制作动画

    布置场景: 我们首先要创建一个新场景就叫level1, 我们在project面板中找到这张图 我们在新建的Canvas上创建一张background把这张拖进去点击Set Native Size 然后 ...

  4. [Unity2D入门教程]简单制作仿植物大战僵尸游戏之⑤制作更多的敌人Attacker以及防御者Defender

    制作更多的Defender: 之前我们创建了一个向日葵和一个仙人掌,今天我们多创建两个 首先是一个老头Gnome,我们让它的功能和仙人掌一样,所以我会尽量快点讲完, 需要给它三个脚本Defender, ...

  5. Unity2D 入门教程

    Unity2D 入门教程 常用操作 通用操作 游戏状态进行保存 使用 TileMap 绘制地图 实现碰撞体效果 移动 Bug 的修复 实现人物控制 动画系统 镜头控制 脚本控制 Cinemachine ...

  6. 使用Scratch制作项目《弹珠游戏》

    不知道大家有没有听说过这样一句话,"80后玩弹珠,90后玩游戏,00后怎么消遣业余时间?不是王者就是吃鸡." 作为一名90后,我们对打弹珠在熟悉不过了,今天,我们就来了解以下如果使 ...

  7. (译)如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  8. 14. 如何使用cocos2d来制作一个打地鼠的游戏:第一部分

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  9. (译)如何使用cocos2d制作一个塔防游戏:引子

    原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...

最新文章

  1. 计算机科学技术作文600,生活因科技而精彩作文600字
  2. 推荐一个提供干货的java公众号
  3. Linux的企业-Redis数据库、缓存和哨兵Sentinal、Redis高可用
  4. PostgreSQL 无会话、有会话模式 - 客服平均响应速度(RT)实时计算实践(窗口查询\流计算)...
  5. 微信小程序image组件开发程序以及相关图片问题参考资料汇总
  6. PHP 如何阻止用户上传成人照片或者裸照
  7. ITK:用内核卷积图像
  8. 监听vuex的某条数据
  9. linux内存一直占满问题
  10. 平板android优化网络,Android版Firefox更新 针对平板设备优化
  11. python编写自动化脚本工具_python自动化工具之pywinauto实例详解
  12. 小e的每日一画 之 飞毯旅行记 20071231
  13. Java 能抵挡住 JavaScript 的进攻吗?
  14. JS删除数组中某一项或几项的方法汇总
  15. 比特币 POW 白皮书 区块篡改成功的概率计算详解
  16. 在线API 工具之SosoApi
  17. c语言高斯法解方程,用C语言实现解线性方程组的高斯消去法
  18. 转载一篇c语言深度文章 《一个“蝇量级” C 语言协程库》
  19. 【100%通过率】华为OD机试真题 C++ 实现【完美走位】【2022.11 Q4新题】
  20. 一级化学反应多步骤Fluent仿真文献复现(三维、多孔介质催化剂表面反应)

热门文章

  1. butter滤波器matlab设计,详解滤波器设计命令之二:butter命令使用实例
  2. Ceph入门系列(一)
  3. 外呼系统与网络电话有什么差别?应该怎么选?
  4. vim编辑器显示与取消行号
  5. 《容忍与自由》读后感
  6. 【180928】中国象棋游戏源码
  7. C++通过三点坐标,获取夹角
  8. 【Java面试题】把数组排成最小的数
  9. 智能锁忘记密码怎么办
  10. 天才富豪鲁宾:长于资产变废为宝