// Itweenを使ってコルーチン作成(Itweenインストール必要あり) // 敵接触時の点滅(オブジェクトの色をStandardなどにしておかないと点滅しない場合がある) IEnumerator BombDamageCoroutine() { // プレイヤのレイヤーをInvincibleに変更 // Edit→ProjectSetting→Tags and LayersでInvicibleを追加 // Edit→ProjectSetting→Physicsで衝突させたくない対象と交差している所の✔を外す // ここではBombと衝突させたくない(すり抜ける)為、Bombのレイヤーも追加 // BombとPlayerの交差してる✔を外す(プレイヤのLayerをPlayer、BombのLayerをBombに設定しておく) gameObject.layer = LayerMask.NameToLayer("Invincible"); //while文を10回ループ int count = 10; iTween.MoveTo(gameObject, iTween.Hash( //KnockBackRange値だけ後に吹っ飛ぶ "position", transform.position - (transform.forward * KnockBackRange), "time", FlashTime, // 点滅時間(秒) "easetype", iTween.EaseType.linear )); while (count > 0) { //透明にする //modelColorChange.ColorChange(new Color (1,0,0,1)); modelColorChange.ColorChange(DamageColor); //0.1秒待つ yield return(new WaitForSeconds(0.1f)); //元に戻す modelColorChange.ColorChange(new Color(1, 1, 1, 1)); //0.1秒待つ yield return(new WaitForSeconds(0.1f)); count--; } //レイヤーをPlayerに戻す gameObject.layer = LayerMask.NameToLayer("Player"); }
// ショット衝突判定 /*void OnTriggerEnter(Collider collider) { * if (animator.GetBool ("dead") == true) { * return; * } * // Shotタグが付いているオブジェクトに当たったら * if (collider.gameObject.tag == "Shot") { * // Bullet01スクリプトのdamageを受け取る * damage = collider.gameObject.GetComponent<Bullet01> ().damage; * // 当たり判定用のHit01ObjectをHit01Prefabにし生成 * Hit01Object = Instantiate (Hit01Prefab, EffectPoint.position, Quaternion.identity); * // ダメージコルーチン(下記参照) * StartCoroutine ("DamageCoroutine"); * // Shot接触時敵Animatorを"damaged"へ移行 * // アニメーションした後元に戻すのならSetTriggerの方が単純で良い * animator.SetTrigger ("damaged"); * // 敵アーマーポイントからBullet01スクリプトのdamage値を差し引く * armorPoint -= damage; * BossLifeBar.GetComponent<BossLifeBar> ().UpdateArmorPointValue (); * } else if (collider.gameObject.tag == "Shot2") { * damage = collider.gameObject.GetComponent<Bullet02> ().damage; * Hit02Object = Instantiate (Hit01Prefab, EffectPoint.position, Quaternion.identity); * StartCoroutine ("DamageCoroutine"); * animator.SetTrigger ("damaged"); * armorPoint -= damage; * BossLifeBar.GetComponent<BossLifeBar> ().UpdateArmorPointValue (); * } else if (collider.gameObject.tag == "Shot3") { * damage = collider.gameObject.GetComponent<Bullet03> ().damage; * Hit03Object = Instantiate (Hit01Prefab, EffectPoint.position, Quaternion.identity); * StartCoroutine ("DamageCoroutine"); * animator.SetTrigger ("damaged"); * armorPoint -= damage; * BossLifeBar.GetComponent<BossLifeBar> ().UpdateArmorPointValue (); * } else if (collider.gameObject.tag == "Shot5") { * damage = collider.gameObject.GetComponent<Bullet05> ().damage; * Hit05Object = Instantiate (Hit01Prefab, EffectPoint.position, Quaternion.identity); * StartCoroutine ("DamageCoroutine"); * animator.SetTrigger ("damaged"); * armorPoint -= damage; * BossLifeBar.GetComponent<BossLifeBar> ().UpdateArmorPointValue (); * } * * //体力が0以下になったら消滅する * if (collider.gameObject.tag == "Shot" || collider.gameObject.tag == "Shot2" || collider.gameObject.tag == "Shot3" || collider.gameObject.tag == "Shot5") { || if (armorPoint <= 0) { || //Debug.Log ("敵"+gameObject.name); || // Animatorを"dead"へ移行 || // 移行後元に戻さないならBool判定にした方がよい || animator.SetBool ("dead", true); || // 死亡アニメーション中に敵が移動しないようにスピードをゼロにする || EnemySpeed = 0; || // 敵消滅用エフェクト発生 || // 敵消滅中にプレイヤに接触ダメージがを与えないようにDeadCoroutineで接触判定を無くす || DeadObject = Instantiate (Hit01Prefab, EffectPoint.position, Quaternion.identity); || StartCoroutine ("DeadCoroutine"); || Instantiate (DestroyEffect, transform.position, transform.rotation); || // バトルマネージャーにスコア(EnemyScoreで設定)を加算する || battleManager = GameObject.Find ("BattleManager").GetComponent<BattleManager> (); || // プレイヤのレベルアップ判定(PlayerLevel参照) || // レベルに関係している数値はDataManagedrで管理している || DataManager.Score += EnemyScore; || playerLevel.LevelUp (); || // 敵消滅 || Destroy (gameObject, DestroyTime); || // ボス、ラスボス消滅後は必ずクリア用スターを出現させる || // インスペクタ画面でIsBoss、IsLastBossに✔を付ける || if (isBoss == true) { || Instantiate (Star, transform.position, transform.rotation); || } || if (isLastBoss == true) { || Instantiate (BigStar, transform.position, transform.rotation); || // ボス、ラスボス以外が消滅後は一定確率(0,RedEncountでRedEncount分の1)でアイテム出現 || } || } || } ||}*/ // Itweenを使ってコルーチン作成(Itweenインストール必要あり) // ダメージ時の点滅処理 IEnumerator DamageCoroutine() { //while文を10回ループ int count = 10; iTween.MoveTo(gameObject, iTween.Hash( // その場からKnockBackRange数値分後(-transform.forwardで後)に移動 "position", transform.position - (transform.forward * KnockBackRange), // 無敵(ダメージ判定なし)時間設定(秒) "time", InvincibleTime, "easetype", iTween.EaseType.linear )); while (count > 0) { //透明にする(ModelColorChange参照) modelColorChange.ColorChange(new Color(1, 0, 0, 1)); //0.05秒待つ yield return(new WaitForSeconds(0.1f)); //元に戻す modelColorChange.ColorChange(new Color(1, 1, 1, 1)); //0.05秒待つ yield return(new WaitForSeconds(0.1f)); count--; } }
// ブースト時の点滅 IEnumerator BoostCoroutine() { // 無敵処理 // Edit→ProjectSetting→PhysicsでInvicivleとEnemyやBossの交差部分の✔を外して接触判定無効にする gameObject.layer = LayerMask.NameToLayer("Invincible"); //while文を10回ループ int count = 10; // 点滅回数 iTween.MoveTo(gameObject, iTween.Hash( //"position", transform.position - (transform.forward * KnockBackRange), "time", InvincibleTime, // 好きな時間(秒) "easetype", iTween.EaseType.linear )); isInvincible = true; while (count > 0) // 点滅処理 //透明にする { modelColorChange.ColorChange(new Color(1, 0, 0, 1)); //0.1秒待つ yield return(new WaitForSeconds(0.1f)); //元に戻す modelColorChange.ColorChange(new Color(1, 1, 1, 1)); //0.1秒待つ yield return(new WaitForSeconds(0.1f)); count--; } // レイヤーをPlayerに戻して無敵解除にする gameObject.layer = LayerMask.NameToLayer("Player"); }