Exemple #1
0
    // 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");
    }
Exemple #2
0
    // ショット衝突判定

    /*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");
    }