void Start() { // 현재 슬롯의 스크립트를 가져온다. slot = GetComponent <SlotCtrl>(); // 빈 이미지 객체를 태그를 이용하여 가져온다. Img = GameObject.FindGameObjectWithTag("DragImg").transform; // 빈 이미지 객체가 가진 Image컴포넌트를 가져온다. EmptyImg = Img.GetComponent <Image>(); }
// 아이템을 넣기위해 모든 슬롯을 검사. public bool AddItem(ItemCtrl item) { // 슬롯에 총 개수. int slotCount = ItemAllSlot.Count; // 넣기위한 아이템이 슬롯에 존재하는지 검사. for (int i = 0; i < slotCount; i++) { // 그 슬롯의 스크립트를 가져온다. SlotCtrl slot = ItemAllSlot[i].GetComponent <SlotCtrl>(); // 슬롯이 비어있으면 통과. if (!slot.isSlots()) { continue; } // 슬롯에 존재하는 아이템의 타입과 넣을려는 아이템의 타입이 같고. // 슬롯에 존재하는 아이템의 겹칠수 있는 최대치가 넘지않았을 때. (true일 때) if (slot.ItemReturn().type == item.type) { if (slot.ItemReturn().type.ToString() == "ProofVest") { return(false); } // 슬롯에 아이템을 넣는다. Debug.Log("중복 아이템 추가..!"); slot.AddItem(item, true, slot); return(true); } } // 빈 슬롯에 아이템을 넣기위한 검사. for (int i = 0; i < slotCount; i++) { SlotCtrl slot = ItemAllSlot[i].GetComponent <SlotCtrl>(); // 슬롯이 비어있지 않으면 통과 if (slot.isSlots()) { continue; } if (item.type.ToString() == "ProofVest") { player.armour += 100; player.imgArmourBar.fillAmount = (float)player.armour / (float)player.initArmour; player.send_PlayerHP(player.hp, player.armour); } slot.AddItem(item, false, null); return(true); } // 위에 조건에 해당되는 것이 없을 때 아이템을 먹지 못함. return(false); }
public void ActualizarSlot(Item item) { List <SlotCtrl> hijos = new List <SlotCtrl>(); transform.Find("ItemsParent").gameObject.GetComponentsInChildren(true, hijos); SlotCtrl slotVacio = BuscarSlotVacio(hijos); slotVacio.AdquirirItem(item); }
public void AddItem(ItemCtrl item, bool same, SlotCtrl sameSlot) { if (same == true) { if (item.type == 0) { player.bulletCount[0] += 30; sameSlot.ItemReturn().setItemCount(30); // 이미 존재 하면 해당 갯수를 증가한다. } else if ((int)item.type == 1) { player.bulletCount[1] += 30; player.bulletCount[2] += 30; sameSlot.ItemReturn().setItemCount(30); // 이미 존재 하면 해당 갯수를 증가한다. } else if ((int)item.type == 2) { player.bulletCount[3] += 30; sameSlot.ItemReturn().setItemCount(30); // 이미 존재 하면 해당 갯수를 증가한다. } else if ((int)item.type == 3) { sameSlot.ItemReturn().setItemCount(1); // 이미 존재 하면 해당 갯수를 증가한다 } if (player.now_Weapon != -1) { player.weaponText.text = player.reloadBulletCount[player.now_Weapon] + " / " + player.bulletCount[player.now_Weapon]; } } else { if (item.type == 0) { player.bulletCount[0] += 30; } else if ((int)item.type == 1) { player.bulletCount[1] += 30; player.bulletCount[2] += 30; } else if ((int)item.type == 2) { player.bulletCount[3] += 30; } if (player.now_Weapon != -1) { player.weaponText.text = player.reloadBulletCount[player.now_Weapon] + " / " + player.bulletCount[player.now_Weapon]; } slot.Push(item); } UpdateInfo(true, item.DefaultImg); }
public void ActualizarSlotSacandoElItem(Item item) { List <SlotCtrl> hijos = new List <SlotCtrl>(); transform.Find("ItemsParent").gameObject.GetComponentsInChildren(true, hijos); SlotCtrl slotConItem = BuscarSlotConItem(hijos, item); slotConItem.itemPrefab = null; slotConItem.ActualizarImagen(null); }
// 아이템 옮기기 및 교환. public void ItemSwap1(SlotCtrl value, Vector3 Pos) { SlotCtrl FirstSlot = NearDisItemSlot(Pos); // 현재 슬롯과 옮기려는 슬롯이 같으면 함수 종료. if (value == FirstSlot || FirstSlot == null) { value.UpdateInfo(true, value.slot.Peek().DefaultImg); return; } // 가까운 슬롯이 비어있으면 옮기기. if (!FirstSlot.isSlots()) { ItemSwap2(FirstSlot, value); } // 교환. else { int Count = value.slot.Count; ItemCtrl item = value.slot.Peek(); Stack <ItemCtrl> temp = new Stack <ItemCtrl>(); { for (int i = 0; i < Count; i++) { temp.Push(item); } value.slot.Clear(); } ItemSwap2(value, FirstSlot); { Count = temp.Count; item = temp.Peek(); for (int i = 0; i < Count; i++) { FirstSlot.slot.Push(item); } FirstSlot.UpdateInfo(true, temp.Peek().DefaultImg); } } }
void Fire(SlotCtrl slot) { // 동적으로 총알을 생성하는 함수 CreateBullet(); reloadBulletCount[now_Weapon] -= 1; slot.slot.Peek().setItemCount(-1); weaponText.text = reloadBulletCount[now_Weapon] + " / " + bulletCount[now_Weapon]; if (slot.slot.Peek().getItemCount() == 0 && slot.isSlots() == true) { slot.slot.Clear(); slot.UpdateInfo(false, slot.DefaultImg); } source.PlayOneShot(soundCollection[now_Weapon], 0.9f); // 잠시 기다리는 루틴을 위해 코루틴 함수로 호출 StartCoroutine(this.ShowMuzzleFlash()); }
public void UsarItemEnLaPosicion(int unaPosicion) { List <SlotCtrl> hijos = new List <SlotCtrl>(); transform.Find("ItemsParent").gameObject.GetComponentsInChildren(true, hijos); SlotCtrl slot = hijos[unaPosicion - 1]; if (slot.itemPrefab != null && slot.itemPrefab.consumible) { GameObject.FindGameObjectWithTag("Player").GetComponent <JugadorCtrl>().UsarItem(slot.itemPrefab); QuitarItem(slot.itemPrefab); slot.itemPrefab = null; slot.ActualizarImagen(null); } if (slot.itemPrefab != null && slot.itemPrefab.nombreDeItem == "Bote") { GameObject.FindGameObjectWithTag("Player").GetComponent <JugadorCtrl>().UsarBote(); } }
// 아이템!!!!!!!!!! 1: 비어있는 슬롯, 2: 안 비어있는 슬롯. void ItemSwap2(SlotCtrl xFirst, SlotCtrl oSecond) { int Count = oSecond.slot.Count; ItemCtrl item = oSecond.slot.Peek(); for (int i = 0; i < Count; i++) { if (xFirst != null) { xFirst.slot.Push(item); } } if (xFirst != null) { xFirst.UpdateInfo(true, oSecond.ItemReturn().DefaultImg); } oSecond.slot.Clear(); oSecond.UpdateInfo(false, oSecond.DefaultImg); }
void OnTriggerEnter(Collider coll) { // 충돌한 Collider가 Camchange의 CAMCHANGE(Tag값)이면 카메라 전환 if (coll.gameObject.tag == "CAMCHANGE") { FollowCam followCam = GameObject.Find("Main Camera").GetComponent <FollowCam>(); if (sensorCheck == false) { followCam.change = true; Debug.Log("체크 인"); followCam.height = 2.5f; followCam.dist = 7.0f; sensorCheck = true; } //집안에 들어갈 경우 네비 체크 해제 navagent.enabled = false; } // 충돌한 게임오브젝트의 태그값 비교 if (coll.gameObject.tag == "BULLET") { string shot_nickname = coll.gameObject.GetComponent <BulletCtrl>().playerNickName; CreateBloodEffect(coll.transform.position); if (armour <= 0) { // 맞은 총알의 Damage를 추출해 Player HP 차감 hp -= coll.gameObject.GetComponent <BulletCtrl>().damage; networkCtrl.Player_HP(-1, hp, armour, shot_nickname); // Image UI 항목의 fillAmount 속성을 조절해 생명 게이지 값 조절 imgHpBar.fillAmount = (float)hp / (float)initHp; } else { // 방어력 차감 armour -= coll.gameObject.GetComponent <BulletCtrl>().damage; networkCtrl.Player_HP(-1, hp, armour, shot_nickname); // Image UI 항목의 fillAmount 속성을 조절해 방어력 게이지 값 조절 imgArmourBar.fillAmount = (float)armour / (float)initArmour; // 방어력 0일때 방탄조끼 아이템 인벤토리에서 삭제 if (armour <= 0) { SlotCtrl proofVest = GetItem(4); proofVest.slot.Clear(); proofVest.UpdateInfo(false, proofVest.DefaultImg); } } // Image UI 항목의 fillAmount 속성을 조절해 생명 게이지 값 조절 //imgHpBar.fillAmount = (float)hp / (float)initHp; //if (hp <= 0) //{ // // 마우스 잠겨 있을경우 푼다. // Cursor.lockState = CursorLockMode.None;//마우스 커서 고정 해제 // Cursor.visible = true;//마우스 커서 보이기 // PlayerDie(); //} // Bullet 삭제 Destroy(coll.gameObject); } // 캐릭터 앞 트리거가 내부 벽과 충돌을 검사하는 변수 if (coll.gameObject.tag == "House") { shotable = false; } // 충돌한 게임오브젝트의 태그값 비교 if (coll.gameObject.tag == "ZombieAttack") { CreateBloodEffect(coll.transform.position); if (armour <= 0) { // 체력 차감 hp -= 50; networkCtrl.Player_HP(-1, hp, armour, "Zombie"); //Image UI 항목의 fillAmount 속성을 조절해 생명 게이지 값 조절 imgHpBar.fillAmount = (float)hp / (float)initHp; } else if (armour > 0) { // 방어력 차감 armour -= 50; networkCtrl.Player_HP(-1, hp, armour, "Zombie"); // Image UI 항목의 fillAmount 속성을 조절해 방어력 게이지 값 조절 imgArmourBar.fillAmount = (float)armour / (float)initArmour; // 방어력 0일때 방탄조끼 아이템 인벤토리에서 삭제 if (armour <= 0) { // GetItem(4)는 ProofVest를 받아옴 SlotCtrl proofVest = GetItem(4); proofVest.slot.Clear(); proofVest.UpdateInfo(false, proofVest.DefaultImg); } } //if (hp <= 0) //{ // // 마우스 잠겨 있을경우 푼다. // Cursor.lockState = CursorLockMode.None;//마우스 커서 고정 해제 // Cursor.visible = true;//마우스 커서 보이기 // PlayerDie(); //} } if (coll.gameObject.tag == "DangerLine") { dangerLineIn = true; } if (coll.gameObject.tag == "Vehicle") { rideCar = true; ridingCar = GameObject.Find(coll.gameObject.name).GetComponent <VehicleCtrl>(); } }
IEnumerator StartKeyInput() { do { // 총이 장착이 되었을때만 발사 가능 if (shotable == true) { if (Input.GetMouseButtonDown(0) && now_Weapon != -1) { if (now_Weapon >= 3) { bulletFinding = GetItem(2); } else if (now_Weapon == 2) { bulletFinding = GetItem(1); } else { bulletFinding = GetItem(now_Weapon); } if (bulletFinding != null && reloadBulletCount[now_Weapon] != 0) { Fire(bulletFinding); networkCtrl.Player_Shot(); } } } // 1번 , 2번 키 입력시 총 랜더링과 어떤 총인지 판별한다. if (Input.GetKeyDown(KeyCode.Alpha1) && weaponSlotNumber[0] != -1) { animator.SetBool("IsEquip", true); // 아래의 if else if문은 M4와 M16으로 총을 장착하였을 때 5.56mm의 종합적인 개수의 동기화를 위함. // 1번 장착 m16, 2번 장착 m4일때 if (weaponSlotNumber[0] == 1 && weaponSlotNumber[1] == 2) { bulletCount[1] = bulletCount[2]; } // 1번 장착 m4, 2번 장착 m16일때 else if (weaponSlotNumber[0] == 2 && weaponSlotNumber[1] == 1) { // m16의 토탈 불릿과 동일하게 m4 토탈 불릿을 개수 동기화 bulletCount[2] = bulletCount[1]; } now_Weapon = weaponSlotNumber[0]; weaponImage.GetComponent <Image>().sprite = weaponIEquipImage[now_Weapon]; weaponText.text = reloadBulletCount[now_Weapon] + " / " + bulletCount[now_Weapon]; for (int i = 0; i < 4; ++i) { if (now_Weapon == i) { weaponView[now_Weapon].GetComponent <Renderer>().enabled = true; } else { weaponView[i].GetComponent <Renderer>().enabled = false; } } } else if (Input.GetKeyDown(KeyCode.Alpha2) && weaponSlotNumber[1] != -1) { animator.SetBool("IsEquip", true); // 아래의 if else if문은 M4와 M16으로 총을 장착하였을 때 5.56mm의 종합적인 개수의 동기화를 위함. // 1번 장착 m16, 2번 장착 m4일때 if (weaponSlotNumber[0] == 1 && weaponSlotNumber[1] == 2) { bulletCount[2] = bulletCount[1]; } //1번 장착 m4, 2번 장착 m16일때 else if (weaponSlotNumber[0] == 2 && weaponSlotNumber[1] == 1) { bulletCount[1] = bulletCount[2]; } now_Weapon = weaponSlotNumber[1]; weaponImage.GetComponent <Image>().sprite = weaponIEquipImage[now_Weapon]; weaponText.text = reloadBulletCount[now_Weapon] + " / " + bulletCount[now_Weapon]; for (int i = 0; i < 4; ++i) { if (now_Weapon == i) { weaponView[now_Weapon].GetComponent <Renderer>().enabled = true; } else { weaponView[i].GetComponent <Renderer>().enabled = false; } } } // Tab키 입력시 인벤토리 코드 실행 if (Input.GetKeyDown(KeyCode.Tab)) { if (inventoryShow == false) { // 마우스 잠겨 있을경우 푼다. Cursor.lockState = CursorLockMode.None; //마우스 커서 고정 해제 Cursor.visible = true; //마우스 커서 보이기 inventory.SetActive(true); inventoryShow = true; RenewUpdate(); // 총 발사 잠금 shotable = false; } else if (inventoryShow == true) { // 마우스가 안점겨 있을경우 다시 잠군다. Cursor.lockState = CursorLockMode.Locked; //마우스 커서 고정 Cursor.visible = false; //마우스 커서 보이기 inventory.SetActive(false); inventoryShow = false; // 총 발사 잠금 해제 shotable = true; } } if (rideCar == true && GetTheCar == true && ridingCar.Car_Status == true && ridingCar.player_die == true) { //차량이 탑승 중에 차가 터진 경우 this.transform.position = new Vector3(ridingCar.transform.position.x - 1, ridingCar.transform.position.y, ridingCar.transform.position.z); PlayerDie(); networkCtrl.Player_HP(-1, hp, armour, "Car"); // 차량이 터지면서 hp는 0으로 만든다. } if (Input.GetKeyDown(KeyCode.G)) { if (rideCar == true && GetTheCar == false && ridingCar.Car_Status == false) { // 차량 탑승 여부를 나타냄 (탑승) GetTheCar = true; // 총 발사 가능 shotable = false; ridingCar.vehicleStop = false; CarNum = ridingCar.carNum; // 차량의 번호를 가지고 온다. ridingCar.Car_Status = true; networkCtrl.Car_Status(CarNum, true); // 차량 탑승했다고 서버에게 알린다. ridingCar.GetComponent <Rigidbody>().isKinematic = false; // 차량 탑승 하였으니 NavMesh Off navagent.enabled = false; // 캐릭터 캡슐 콜라이더 비활성화 gameObject.GetComponent <CapsuleCollider>().enabled = false; // 총구 앞 캡슐 콜라이더 비활성화 //firePos.GetComponent<CapsuleCollider>().enabled = false; // 차량 UI 활성화 VehicleUI.SetActive(true); vehicleHpBar.fillAmount = (float)ridingCar.vehicleHp / (float)ridingCar.vehicleInitHp; if (ridingCar.vehicleType.ToString() == "JEEP") { JEEPImage.SetActive(true); UAZImage.SetActive(false); } else if (ridingCar.vehicleType.ToString() == "UAZ") { UAZImage.SetActive(true); JEEPImage.SetActive(false); } // 차량 탑승시 PlayerModel에 있는 engine 사운드 재생 engineSource.Play(); } else if (rideCar == true && GetTheCar == true && ridingCar.Car_Status == true) { // 차량 탑승 여부를 나타냄 (하차) // 차량 탑승 가능한지 여부를 나타냄 rideCar = false; // 차량 하차했다고 서버에게 알린다. networkCtrl.Car_Status(CarNum, false); ridingCar.Car_Status = false; // 차량 하차 하였으니 NavMesh On navagent.enabled = true; // 차량을 내렸을 경우 차량 번호를 지운다. CarNum = -1; // 차량을 탑승 여부를 나타냄 (하차) GetTheCar = false; // 총 발사 가능 shotable = true; // 하차 후 차량 브레이크 작동 ridingCar.vehicleStop = true; ridingCar.GetComponent <Rigidbody>().isKinematic = true; // 차량 하차 시 좌표 이동 this.transform.position = new Vector3(ridingCar.transform.position.x - 1, ridingCar.transform.position.y, ridingCar.transform.position.z); // 캐릭터 캡슐 콜라이더 활성화 gameObject.GetComponent <CapsuleCollider>().enabled = true; // 총구 앞 캡슐 콜라이더 활성화 //firePos.GetComponent<CapsuleCollider>().enabled = true; // 차량 UI 비활성화 전 이미지 부터 비활성화 JEEPImage.SetActive(false); UAZImage.SetActive(false); // 차량 UI 비활성화 VehicleUI.SetActive(false); // 차량 하차시 PlayerModel에 있는 engine 사운드 멈춤 engineSource.Stop(); } } // 차량 탑승시 스페이스바로 경적 울림 if (Input.GetKeyDown(KeyCode.Space) && GetTheCar == true) { source.PlayOneShot(vehicleHornSound, 1.0f); } // R키를 누르면 재장전 if (Input.GetKeyDown(KeyCode.R)) { if (now_Weapon != -1 && bulletCount[now_Weapon] != 0) { cooltimeCtrl.ReloadCollTime(); } } if (Input.GetKeyDown(KeyCode.CapsLock)) { if (realView == false) { realMap.SetActive(true); realView = true; } else if (realView == true) { realMap.SetActive(false); realView = false; } } if (realView == true) { playerPositionImage.localPosition = new Vector3(-gameObject.transform.position.z * 0.5f, gameObject.transform.position.x * 0.5f); } //------------------------------------------------------------------------------ // 위치 이동 치트. if (Input.GetKeyDown(KeyCode.Alpha3)) // 낡은 공장 단지 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(875.8784f, 30.07964f, 2529.244f); } else { tr.transform.position = new Vector3(526.118f, 50.04224f, 2705.361f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha4)) // 학교 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(653.0f, 30.05061f, 1855.0f); } else { tr.transform.position = new Vector3(1407.026f, 50.0f, 2190.113f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha5)) // 언덕위 집 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(654.1024f, 30.05061f, 968.7f); } else { tr.transform.position = new Vector3(718.0281f, 50.0f, 1235.498f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha6)) // 컨테이너 단지 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(1001.0f, 30.07964f, 988.0f); } else { tr.transform.position = new Vector3(349.1992f, 60.06981f, 376.0149f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha7)) // 호수 옆 집 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(1572.333f, 30.07964f, 923.0f); } else { tr.transform.position = new Vector3(1545.017f, 59.95751f, 904.9451f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha8)) // 센터 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(1390.741f, 30.08651f, 2121.12f); } else { tr.transform.position = new Vector3(1008.397f, 30.06981f, 1553.832f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha9)) // 센터 { navagent.enabled = false; if (SingletonCtrl.Instance_S.NowMapNumber == 2) { tr.transform.position = new Vector3(1647.643f, 64.04927f, 2341.669f); } else { tr.transform.position = new Vector3(1008.397f, 30.06981f, 1553.832f); } navagent.enabled = true; } else if (Input.GetKeyDown(KeyCode.Alpha0)) { // Navmesh ON/OFF if (navagent.enabled == true) { navagent.enabled = false; } else { navagent.enabled = true; } } //------------------------------------------------------------------------------ if (playerState == PlayerState.die) { ScreenSceneOFF.color += new Color(0f, 0f, 0f, 0.003f); if (ScreenSceneOFF.color.a >= 1.0f) { // 플레이어 모든 코루틴 종료 SceneManager.LoadScene("DieGameScene"); // 다음씬으로 넘어감 } } if (SingletonCtrl.Instance_S.SurvivalPlayer == 1 && playerState != PlayerState.die) { ScreenSceneOFF.gameObject.SetActive(true); Cursor.lockState = CursorLockMode.None; //마우스 커서 고정 해제 Cursor.visible = true; //마우스 커서 보이기 ScreenSceneOFF.color += new Color(0f, 0f, 0f, 0.003f); if (ScreenSceneOFF.color.a >= 1.0f) { // 플레이어 모든 코루틴 종료 SceneManager.LoadScene("WinGameScene"); // 다음씬으로 넘어감 } } yield return(null); } while (true); //yield return null; }