Beispiel #1
0
    void OnCollisionEnter(Collision c)
    {
        if (!isReady)
        {
            return;
        }

        if (c.transform.tag.Contains(TAG_NAME.TAG_GUN) || (c.transform.tag.Contains(TAG_NAME.TAG_THROW)) || (c.transform.tag.Contains(TAG_NAME.TAG_NONETARGET)))
        {
            return;
        }

        Instantiate(prefabExplosion, transform.position, prefabExplosion.transform.rotation);
        VR_AudioManager.Instance.PlaySE(AUDIO_NAME.SE_EXPLOSION, transform.position, 20.0f, 1.0f);

        Collider[] targets = Physics.OverlapSphere(transform.position, DAMAGE_AREA_RADUIUS);
        foreach (Collider obj in targets)
        {
            IRegionSettable i_region = obj.gameObject.GetComponent <IRegionSettable>();
            if (i_region != null)
            {
                i_region.SetRegionType(Region.TYPE.NONE);
            }

            IDamageable <int> i_damage = obj.gameObject.GetComponent <IDamageable <int> >();
            if (i_damage != null)
            {
                i_damage.SetGenPos(transform.position, BOMB_FORCE);
                i_damage.Damage(GetAttackValue());
            }
            else
            {
                if (!obj.tag.Contains(TAG_NAME.TAG_GUN) &&
                    !obj.tag.Contains(TAG_NAME.TAG_THROW))
                {
                    Rigidbody rigid = obj.GetComponent <Rigidbody>();
                    if (rigid != null)
                    {
                        Vector3 forceDir = (obj.transform.position - transform.position).normalized;
                        forceDir.x = forceDir.x * BOMB_FORCE;
                        forceDir.y = (forceDir.y + Random.Range(0.8f, 2.5f)) * BOMB_FORCE;
                        forceDir.z = forceDir.z * BOMB_FORCE;

                        rigid.AddForceAtPosition(forceDir, transform.position, ForceMode.Impulse);
                    }
                }
            }
        }
        Destroy(gameObject);
    }
    /// <summary>
    /// 損傷ダメージ
    /// </summary>
    /// <param name="_damageValue">Damage value.</param>
    public void Damage(int _damageValue)
    {
        IRegionSettable i_region = callTarget.GetComponent <IRegionSettable>();

        if (i_region != null)
        {
            i_region.SetRegionType(regionType);
        }

        IDamageable <int> i_damage = callTarget.GetComponent <IDamageable <int> >();

        if (i_damage != null)
        {
            i_damage.Damage(_damageValue);
        }
    }
    /// <summary>
    /// 損壊時の処理
    /// </summary>
    protected override void ToBreak()
    {
        base.ToBreak();

        // 走行エフェクト停止
        foreach (ParticleSystem smoke in arrayEffectSmoke)
        {
            smoke.Stop();
        }
        navMeshObstacle.enabled = true;
        // パス移動停止
        iTween.Stop(tankTransform.gameObject);

        foreach (Transform t in arrayBombPoint)
        {
            WaitAfter(Random.Range(0.0f, 0.1f), () => { Instantiate(prefabExplosion, t.position, prefabExplosion.transform.rotation); });
        }

        VR_AudioManager.Instance.StopSE(AUDIO_NAME.SE_TANK_MOVE);
        VR_AudioManager.Instance.PlaySE(AUDIO_NAME.SE_EXPLOSION, transform.position, 1.0f);

        foreach (GameObject go in arrayFire)
        {
            go.SetActive(true);
        }

        Collider[] targets = Physics.OverlapSphere(tankTransform.position, DAMAGE_AREA_RADUIUS);

        foreach (Collider obj in targets)
        {
            if (!gameObject.Equals(obj.gameObject))
            {
                IRegionSettable i_region = obj.gameObject.GetComponent <IRegionSettable>();
                if (i_region != null)
                {
                    i_region.SetRegionType(Region.TYPE.NONE);
                }

                IDamageable <int> idamage = obj.gameObject.GetComponent <IDamageable <int> >();
                if (idamage != null)
                {
                    idamage.Damage(DEAD_BOMB_POWER);
                }
                else
                {
                    if (!obj.tag.Contains(TAG_NAME.TAG_GUN) &&
                        !obj.tag.Contains(TAG_NAME.TAG_THROW))
                    {
                        Rigidbody rigid = obj.GetComponent <Rigidbody>();
                        if (rigid != null)
                        {
                            Vector3 forceDir = (obj.transform.position - transform.position).normalized;
                            forceDir.x = forceDir.x * BOMB_FORCE;
                            forceDir.y = (forceDir.y + Random.Range(0.8f, 2.5f)) * BOMB_FORCE;
                            forceDir.z = forceDir.z * BOMB_FORCE;

                            rigid.AddForceAtPosition(forceDir, transform.position, ForceMode.Impulse);
                        }
                    }
                }
            }
        }

        rootTurretColider.SetActive(false);

        foreach (BoxCollider col in arrayAfterCol)
        {
            col.enabled = true;
        }

        var rigidTurret = turret.gameObject.AddComponent <Rigidbody>();

        rigidTurret.mass = 100;
    }