赞
踩
今天我教一下怎么设置砖块(比如需要碰撞两次,三次才能彻底击碎)然后我们再更换不同的颜色让画面更有色彩,话不多说直接开搞。
接着就编写一下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还有音乐播放,完美。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。