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

学习目标:

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


学习内容:

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

记得要把它们三个的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还有音乐播放,完美。

猜你喜欢

转载自blog.csdn.net/dangoxiba/article/details/124033278