static IEnumerator delayComplete(BaseMonoBehaviour content, JigsawContainerCpt[] cptList, JigsawContainerCpt tempCpt, float mergeTime) { foreach (JigsawContainerCpt itemCpt in cptList) { Rigidbody2D itemRB = itemCpt.GetComponent <Rigidbody2D>(); if (itemCpt != null) { //设置质量为0 防止动画时错位 itemRB.velocity = Vector3.zero; //顺便冻结缸体 itemRB.constraints = RigidbodyConstraints2D.FreezeAll; } CompositeCollider2D itemCollider = itemCpt.GetComponent <CompositeCollider2D>(); if (itemCollider != null) { UnityEngine.Object.Destroy(itemCollider); } } yield return(new WaitForEndOfFrame()); for (int i = 0; i < cptList.Length; i++) { if (mergeTime > 5) { tempCpt.transform.position = tempCpt.startPosition; tempCpt.transform.localRotation = tempCpt.startRotation; } JigsawContainerCpt itemCpt = cptList[i]; itemCpt.isSelect = false; // 添加拼图碎片到容器里 if (cptList[i] != tempCpt) { tempCpt.addJigsawList(itemCpt.listJigsaw); //位置纠正 tempCpt.jigsawLocationCorrect(mergeTime, itemCpt.listJigsaw); // 最后删除当前容器 UnityEngine.Object.Destroy(itemCpt.gameObject); } yield return(new WaitForSeconds(0.1f)); } tempCpt.mergeDeal(mergeTime); }
/// <summary> /// 碰撞处理 /// </summary> /// <param name="collision"></param> private void collisionCheck(Collider2D collision) { if (!isOpenMergeCheck) { return; } if (!isSelect) { return; } //获取被撞物体和其父对象 JigsawContainerCpt collisionJCC = collision.gameObject.GetComponent <JigsawContainerCpt>(); if (collisionJCC == null) { return; } if (checkMerge(collisionJCC)) { //设置不可在拖拽 CommonData.IsDargMove = false; isSelect = false; //设置质量为0 防止动画时错位 Rigidbody2D collisionRB = collisionJCC.GetComponent <Rigidbody2D>(); Rigidbody2D thisRB = gameObject.GetComponent <Rigidbody2D>(); if (collisionRB != null && thisRB != null) { collisionRB.velocity = Vector3.zero; thisRB.velocity = Vector3.zero; //顺便冻结缸体 collisionRB.constraints = RigidbodyConstraints2D.FreezeAll; thisRB.constraints = RigidbodyConstraints2D.FreezeAll; // 添加拼图碎片到碰撞容器里 collisionJCC.addJigsawList(listJigsaw); collisionJCC.jigsawLocationCorrect(mergeAnimDuration, listJigsaw); } collisionJCC.mergeDeal(mergeAnimDuration); // 最后删除当前容器 Destroy(gameObject); } }