private void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Gold") && playerHealth > 0) { dust += 5; playerHealth += 5; Destroy(collision.gameObject); uIBarControl.SetHealth(playerHealth); healthbarongame.SetHealth(playerHealth); } if (collision.gameObject.CompareTag("Green") && playerHealth > 0) { dust += 5; playerHealth += 5; Destroy(collision.gameObject); uIBarControl.SetHealth(playerHealth); healthbarongame.SetHealth(playerHealth); } if (collision.gameObject.CompareTag("White") && playerHealth > 0) { dust += 5; playerHealth += 5; Destroy(collision.gameObject); uIBarControl.SetHealth(playerHealth); healthbarongame.SetHealth(playerHealth); } if (collision.gameObject.CompareTag("Blue") && playerHealth > 0) { dust += 5; playerHealth += 5; Destroy(collision.gameObject); uIBarControl.SetHealth(playerHealth); healthbarongame.SetHealth(playerHealth); } //else if (collision.gameObject.CompareTag("Item")) //{ // collision.gameObject.GetComponent<ItemPickup>().PickUp(); //} }
public virtual void GetHit(float Damage) { //被攻擊後歸零下一次怪物攻擊時間 if (enemyController != null) { enemyController.attackCD = 0; } //播放受擊動畫 animator.SetTrigger("GetHit"); //朝面對的反方向後退 if (faceDirection != null) { rigidbody.velocity = -faceDirection.forward * bounceForce; } //取消追蹤玩家凸顯後退效果應該沒用 if (navMeshAgent != null) { navMeshAgent.enabled = false; } //毒的受擊次數減少 if (beAttackMin > 0) { beAttackMin--; } //受擊音效 if (enumAttack != EnumAttack.count) { switch (enumAttack) { case EnumAttack.wind: { audioSource.PlayOneShot(windHitSFX); break; } //暫時沒用 //case EnumAttack.poison: // { // audioSource.PlayOneShot(poisonHitSFX); // break; // } case EnumAttack.fireTornado: { audioSource.PlayOneShot(tornadoHitSFX); break; } default: { //如果被風、讀、火龍捲打到就跳過 break; } } } //誰被打到 Debug.Log(transform.name); //生成特效 GameObject FX = Instantiate(getHitEffect[0], transform.position + Vector3.up * 0.8f, transform.rotation); //一秒後刪除特效 Destroy(FX, 1); //怪物血量減少 Hp -= Damage; //實際血量顯示在UI healthBarOnGame.SetHealth(Hp); //跟上面重複被擊退應該沒用 //rigidbody.velocity = -gameObject.transform.forward * pushforce; //如果怪物死亡 if (Hp <= 0) { MonsterDead(); //避免一直跳進來 beAttackMin = 0; } }
void Update() { lastFireTime += Time.deltaTime; Movement.Set(0, 0, 0); //攻速&普攻按鍵 attackTime += Time.deltaTime; if (attackTime >= attackSpeed && !gameMenu.anyWindow[0].activeSelf && !gameMenu.anyWindow[2].activeSelf && !gameMenu.anyWindow[4].activeSelf && !gameMenu.anyWindow[5].activeSelf && !gameMenu.anyWindow[6].activeSelf && !playerFaceDirection.isMagicAttack && getHitEffect.playerHealth > 0 && !isRoll) { if (Input.GetMouseButtonDown(0)) { if (EventSystem.current.IsPointerOverGameObject()) { return; } Attack(); attackTime = 0;//另外一種計時方式 } if (Input.GetMouseButtonDown(1) && attackTime >= attackSpikeSpeed) { if (EventSystem.current.IsPointerOverGameObject()) { return; } Attack(); attackTime = 0;//另外一種計時方式 } } //開關玩家血條 if (Input.GetKeyDown(KeyCode.P)) { playerOptions.SetPlayerHealthActive(); } //開關怪物血條 if (Input.GetKeyDown(KeyCode.O)) { playerOptions.SetMonsterHealthActive(); } //開關背包介面 if (Input.GetKeyDown(KeyCode.B) && !gameMenu.anyWindow[0].activeSelf) { backPackUI.SetActive(!backPackUI.activeSelf); } if (Input.GetKeyDown(KeyCode.K) && !gameMenu.anyWindow[0].activeSelf) { skillUI.SetActive(!skillUI.activeSelf); } if (Input.GetKeyDown(KeyCode.Tab)) { miniMap.SetActive(!miniMap.activeSelf); } //卸下所有裝備欄裡的裝備 if (Input.GetKeyDown(KeyCode.U)) { equipmentManager.UnequipAll(); } #region 存檔功能 if (Input.GetKeyDown(KeyCode.Z)) { Debug.Log("存檔中"); SaveSystem.SavePlayer(getHitEffect, transform); } if (Input.GetKeyDown(KeyCode.X)) { Debug.Log("回復存檔"); PlayerData data = SaveSystem.LoadPlayer(); getHitEffect.playerHealth = data.Playerhealth; uIBarControl.SetHealth(data.Playerhealth); Vector3 SavePosition; SavePosition.x = data.position[0]; SavePosition.y = data.position[1]; SavePosition.z = data.position[2]; transform.position = SavePosition; Debug.Log(SavePosition); healthbarongame.SetHealth(data.Playerhealth);//人物身上的血條 } #endregion //翻滾 if (Input.GetKeyDown(KeyCode.Space) && getHitEffect.playerHealth > 0 /* && !animator.GetBool("IsAttack")*/) { if (lastFireTime > fireRate) { Roll(); lastFireTime = 0; } } if (isInvincible) { rollTime += Time.deltaTime; } //無敵時間超過上限取消無敵狀態 if (rollTime > rollTimeLimit) { isInvincible = false; rollTime = 0; rigidbody.velocity = Vector3.zero; collider.isTrigger = false; rigidbody.useGravity = true; rayMask = wall & monster; isRoll = false; } if (stamina < staminaLimit) { stamina += Time.deltaTime * 10; uIBarControl.SetStamina(stamina); } else { stamina = staminaLimit; uIBarControl.SetStamina(stamina); } if (Input.GetKeyDown(KeyCode.N))//傳送到指定地點 &場景重置 { transform.position = new Vector3(-6.31f, 0, 6.08f); Application.LoadLevel(Application.loadedLevel); } }