public void AddGameObjectToContainter(eFruitType type, GameObject obj) { if ( (null == obj) || (type <= eFruitType.Fruit_None || type >= eFruitType.Fruit_Size) ) { Debug.LogError("Illegal input parameter type = " + type + " obj = " + obj); return; } obj.transform.parent = transform; obj.SetActive(false); List <GameObject> list; if (true == m_dGCList.ContainsKey(type)) { list = m_dGCList[type]; } else { list = new List <GameObject>(); m_dGCList[type] = list; } list.Add(obj); }
public GameObject GetGameObjectFromContainer(eFruitType type) { if (type <= eFruitType.Fruit_None || type >= eFruitType.Fruit_Size) { Debug.LogError("Input type is illeagl:)"); return(null); } if (m_dGCList.ContainsKey(type)) { List <GameObject> list = m_dGCList[type]; if (list.Count > 0) { GameObject obj = list[0]; obj.SetActive(true); obj.transform.parent = null; list.RemoveAt(0); return(obj); } else { return(null); } } else { return(null); } }
private void OnDisable() { m_eFruitType = eFruitType.Fruit_None; m_eFruitState = eFruitState.FruitState_None; m_oFrameObj = null; m_fYBtm = 0f; rb = null; }
void InstantiateFruites() { eFruitType etype = eFruitType.Fruit_None; int n = Random.Range(1, 101); FruitController.SliceDelgate delSlice = FruitSliceEvent; if (n < 30) { etype = eFruitType.Fruit_Melon; } else if (n >= 30 && n < 60) { etype = eFruitType.Fruit_Lemon; } else if (n >= 60 && n < 90) { etype = eFruitType.Fruit_Pear; } else { delSlice = MissleSliceEvent; etype = eFruitType.Fruit_Missle; } FruitController fc = FruitController.InstantiateMyFruit( transform.position, Vector3.zero, eFruitState.FruitState_Game, etype, delSlice); //注册坠球事件 m_uigame.RegisterDropBall(fc); fc.RB.AddForce( new Vector3( Random.Range(-300, 300), Random.Range(600, 700), 0 ) ); fc.RB.AddTorque( new Vector3( Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360) ) ); }
public void OnDisable() { m_Inst = null; for (eFruitType type = eFruitType.Fruit_Melon; type <= eFruitType.Fruit_Size; type++) { if (m_dGCList.ContainsKey(type)) { List <GameObject> list = m_dGCList[type]; list.Clear(); list = null; } } m_dGCList = null; }
//实例化水果 public static FruitController InstantiateMyFruit( Vector3 pos, Vector3 rot, eFruitState state = eFruitState.FruitState_Game, eFruitType type = eFruitType.Fruit_Melon, SliceDelgate _sliceEvent = null ) { GameObject fruit; //动态加载预制体到层级列表中 if (null == GarbageCollection.m_Inst || null == (fruit = GarbageCollection.m_Inst.GetGameObjectFromContainer(type))) { fruit = Instantiate(Resources.Load(GlobalHelper.g_dGlobalInfos[type]), pos, Quaternion.Euler(rot)) as GameObject; } else { fruit.transform.position = pos; fruit.transform.rotation = Quaternion.Euler(rot); } FruitController fc = fruit.GetOrAddComponent <FruitController>(); //设置水果状态对应的行为 fc.SetFruitBehaviour(state); //设置水果类型 fc.m_eFruitState = state; fc.m_eFruitType = type; //归零速度 fc.RB.velocity = Vector3.zero; //设置离开视野坐标 fc.m_fYBtm = GlobalHelper.GetVisibleYPos(pos.z, fc.MaxSize); if (null != _sliceEvent) { fc.m_delSliceEvent = _sliceEvent; } return(fc); }
private void OnTriggerExit(Collider other) { if (other.gameObject.tag == "Knife")//如果是刀片 { #region 判断生成什么类型的水果 eFruitType ft = m_eFruitType; int nFT = (int)ft; if (nFT % 3 == 1) { ft += 1; } else { return; } #endregion #region 切除水果事件 m_delSliceEvent(other.gameObject, gameObject); #endregion #region 如果判断是雷,则直接返回,雷不需要生成两个小雷。 if (m_eFruitType == eFruitType.Fruit_Missle) { return; } #endregion AudioManager.PlayAudio(other.gameObject, eAudioType.Audio_CutFruit, "Melon"); #region 播放切水果声音 #endregion #region 播放轨迹特效 tempv = (other.transform.position - m_vOrigPos); tempq = Quaternion.LookRotation(new Vector3(tempv.x, tempv.y, tempv.z)); Instantiate(Resources.Load("Prefabs/Effects/Explosion 12"), transform.position, transform.rotation); Instantiate(Resources.Load("Prefabs/Effects/myflare13"), transform.position, tempq); #endregion #region 生成水果 FruitController fc; Vector3 vPos; Vector3 vRot; //生成两个新的水果 for (int i = 0; i < 2; i++) { fc = InstantiateMyFruit(transform.position, transform.root.eulerAngles, eFruitState.FruitState_Game, ft); if (i == 0) { vPos = new Vector3( Random.Range(-80f, -40f), Random.Range(20f, 40f), 0); vRot = new Vector3( Random.Range(-300, -200f), Random.Range(100f, 200f), Random.Range(-200f, -100f)); } else { vPos = new Vector3( Random.Range(40f, 80f), Random.Range(20f, 40f), 0); vRot = new Vector3( Random.Range(200, 300f), Random.Range(100f, 200f), Random.Range(100f, 200f)); } fc.RB.AddForce(vPos); fc.RB.AddTorque(vRot); } #endregion #region 将原来的水果放到回收站中 if (m_eFruitState == eFruitState.FruitState_Game) { GarbageCollection.m_Inst.AddGameObjectToContainter(m_eFruitType, gameObject); } else if (m_eFruitState == eFruitState.FruitState_Login) { Destroy(gameObject); } #endregion } }