unity中其实很多东西都是在使用的过程中慢慢积累的,今天我们就来学习U3D实战之CandyCrush。
在生成所有的糖果时,我们还需要检查是否在刚生成时就有糖果可以匹配消除。其中检查是否有匹配情况分为同行的检查和同的检查,方法如下:
今天就先到这里,代码有点多,我写的也有点乱,不过只要了解大概的思想就可以了,毕竟这不是唯一的方法,实现起来是多种多样的。谢谢大家的阅读!
下图是一种颜色的糖果属性面板。
- //控制生成糖果的类型
- private int candyTypeNumber = 7;
- //生成糖果材质素材
- public GameObject[] BGs;
- private GameObject bg;
- //指示糖果的颜色
- public int type;
- //生成对GameController的引用
- public GameController gameController;
- private SpriteRenderer sr;
- //生成随机颜色的糖果
- private void AddRandomBG()
- {
- //如果糖果已有颜色,就不再生成
- if (bg != null)
- return;
- //随机生成一种颜色的糖果
- type = Random.Range(0, Mathf.Min(candyTypeNumber,BGs.Length));
- bg = (GameObject)Instantiate(BGs[type]);
- sr = bg.GetComponent<SpriteRenderer>();
- bg.transform.parent = this.transform;
- }
在生成所有的糖果时,我们还需要检查是否在刚生成时就有糖果可以匹配消除。其中检查是否有匹配情况分为同行的检查和同的检查,方法如下:
- //返回布尔值,显示是否能够交换
- private bool CheckMatches()
- {
- return CheckHotizontalMatches() || ChecVerticalMatches();
- }
- //检查水平方向是否有可以消除的
- private bool CheckHotizontalMatches()
- {
- bool result = false;
- for (int rowIndex = 0; rowIndex < rowNumber; rowIndex++)
- {
- for (int columnIndex = 0; columnIndex < columnNumber - 2; columnIndex++)
- {
- if ((GetCandy(rowIndex, columnIndex).type == GetCandy(rowIndex, columnIndex + 1).type) &&
- (GetCandy(rowIndex, columnIndex + 1).type == GetCandy(rowIndex, columnIndex + 2).type))
- {
- //播放匹配音效
- audio.PlayOneShot(mathThreeClip);
- result = true;
- Debug.Log(columnIndex + "" + columnIndex + 1 + "" + columnIndex + 2);
- AddMatches(GetCandy(rowIndex, columnIndex));
- AddMatches(GetCandy(rowIndex, columnIndex + 1));
- AddMatches(GetCandy(rowIndex, columnIndex + 2));
- }
- }
- }
- return result;
- }
今天就先到这里,代码有点多,我写的也有点乱,不过只要了解大概的思想就可以了,毕竟这不是唯一的方法,实现起来是多种多样的。谢谢大家的阅读!