void checkCollision() { Entity candidate; Entity target; float dis; for (int i = 0; i < entities.Count; i++) { candidate = entities[i]; for (int j = 0; j < entities.Count; j++) { target = entities[j]; if (i == j || candidate.Id == 11 || target.Id == 11 || candidate.Id != target.Id || candidate.boomFlag || target.boomFlag || candidate.obj.transform.position.y < target.obj.transform.position.y) { continue; } dis = Vector3.Distance(candidate.obj.transform.position, target.obj.transform.position); //Debug.LogError("dis:" + dis); if (dis - candidate.Size * 0.5f - target.Size * 0.5f < 0f) { //candidate和target标记boomFlag candidate.boomFlag = true; target.boomFlag = true; //添加我BoomPair BoomPair pair = new BoomPair(candidate, target); boomPairs.Add(pair); } } } if (entities.Count > 0) { //移除标记了boomFlag的Entity for (int i = entities.Count - 1; i >= 0; i--) { if (entities[i].boomFlag) { entities.RemoveAt(i); } } } }
void doSingleBoom(BoomPair boomPair) { var candidateObj = boomPair.candidate.obj; var targetObj = boomPair.target.obj; int pairId = boomPair.candidate.Id; Vector3 fromPos = candidateObj.transform.position; Vector3 toPos = targetObj.transform.position; bool flag = false; TimerTween.Value(0, 1, 0.2f, (v) => { if (v > 0.3f) { targetObj.GetComponent <Rigidbody2D>().simulated = false;//不再受影响 } if (v > 0.6f && !flag) { flag = true; if (pairId == 10) { AudioManager.Instance.PlayAudioMaxMerge(); } else { AudioManager.Instance.PlayAudioMerge(); } AudioManager.Instance.PlayBoom(); string effName = ""; if (pairId < 9) { effName = "Effects/effect_hecheng_0" + (pairId + 1); } else { effName = "Effects/effect_hecheng_" + (pairId + 1); } GameObject effObj = ResHelper.Instance.LoadModel(effName); effObj.transform.position = boomPair.target.obj.transform.position; effObj.transform.localScale = Vector3.one * scaleRatio; TimerTween.Delay(1.2f, () => { GameObject.DestroyImmediate(effObj); if (pairId == 10) { GameCenter.Instance.maxMergeEffect.Show(); } }).Start(); } candidateObj.transform.position = fromPos + (toPos - fromPos) * v; }, () => { //在targetObj的位置生成新的合成的球 if (boomPair.candidate.Id < 11) { int score = boomPair.candidate.Id; if (boomPair.candidate.Id == 10) { score = 500; } EventDispatcher.Instance.DispatchEvent(EventID.OnScoreChange, singleScore, score); //Debug.LogError("score:" + singleScore); this.genEntityBy2DPos(boomPair.candidate.Id + 1, targetObj.transform.position, true); } boomPair.candidate.Destroy(); boomPair.target.Destroy(); }).Start(); }