예제 #1
0
    private void ShootLaser()
    {
        // enable collision w stage and player (in default layer)
        int playerMask = 1 << LayerMask.NameToLayer("Default");
        int stageMask  = 1 << LayerMask.NameToLayer("Stage");
        int layerMask  = playerMask | stageMask;

        Vector3    eyeToPlayer = _playerTransform.position - _eyeTransform.position + new Vector3(0f, 0.5f, 0f);
        RaycastHit hit;

        // if (Physics.SphereCast(transform.TransformVector(_eyeTransform.position), 0.2f, transform.TransformVector(_headTransform.forward), out hit, Mathf.Infinity, layerMask))
        if (Physics.Raycast(transform.TransformVector(_eyeTransform.position), transform.TransformVector(_headTransform.forward), out hit, Mathf.Infinity, layerMask))
        {
            _attackLaser.SetPosition(1, _eyeTransform.InverseTransformPoint(hit.point));
            _attackLaser.gameObject.SetActive(true);

            if (hit.transform.gameObject.name == "Player")
            {
                hit.transform.gameObject.GetComponent <Health>().TakeDamage(1f, gameObject);
            }
        }
        else
        {
            _attackLaser.SetPosition(1, _eyeTransform.position + _headTransform.forward * _laserLength);
            _attackLaser.gameObject.SetActive(true);
        }

        AudioUtility.CreateSFX(_attackClip, transform.position, AudioUtility.AudioGroups.EnemyAttack, 0.8f, 10f, 100f, 1f);
    }
예제 #2
0
    private void OnCollisionEnter(Collision collision)
    {
        if (!IsHitValid(collision.collider))
        {
            return;
        }

        Damageable damageable = collision.collider.GetComponent <Damageable>();

        if (damageable)
        {
            damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
        }

        ContactPoint contact = collision.contacts[0];

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, contact.point + (contact.normal * impactVFXSpawnOffset), Quaternion.LookRotation(contact.normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, contact.point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
예제 #3
0
    void Start()
    {
        //spawn enemies every 5 frames
        _spawnInterval = 5f * Time.fixedDeltaTime;

        _durationOfSwarmerSpawns = (float)_spawnInterval * _numSwarmerSpawns;

        _centerStageTransform = Stage.Instance.transform.Find("CenterStage");
        _playerTransform      = GameObject.FindWithTag("Player").transform;

        //set initial position
        float   displacementFromCenterStage = _displacementToRadiusRatio * Stage.Instance.radius;
        Vector2 randomPoint   = GameFlowManager.Instance.currentRound <= 1 ? new Vector2(0, 1) : UnityEngine.Random.insideUnitCircle;
        Vector3 spawnPosition = new Vector3(randomPoint.normalized.x * displacementFromCenterStage, 0, randomPoint.normalized.y * displacementFromCenterStage);

        gameObject.transform.Translate(spawnPosition);

        //set initial eyeball rotation
        Vector3 awayFromPlayer = _eyeballTransform.position - _playerTransform.position;

        _eyeballTransform.rotation = Quaternion.LookRotation(awayFromPlayer);

        _health.onDamaged += HandleOnDamaged;

        _enemyAnimator.Stop();
        _enemyAnimator.Play("TowerSpawn");

        if (_spawnClip)
        {
            AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 0.75f);
        }
    }
    void Start()
    {
        //spawn duration will last 2 secondss
        _spawnDuration = 2 * Time.fixedDeltaTime;
        //death duration will last 10 frames
        _deathDuration = 10f * Time.fixedDeltaTime;

        _maxForce = _maxVelocity / 3 * _rigidbody.mass / Time.fixedDeltaTime;

        _deltaThetaLook = _deltaTheta * 2f;

        _playerTransform = GameObject.FindWithTag("Player").transform.Find("Main Camera");

        movesClockwise = UnityEngine.Random.value < 0.5 ? true : false;

        _enemyAnimator.Stop();
        _enemyAnimator.Play("OrbiterSpawn");

        gameObject.transform.Translate(initialPosition);

        _health.onDamaged += HandleOnDamaged;

        if (_spawnClip)
        {
            AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 30f, 500f, 0.4f);
        }
    }
예제 #5
0
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    {
        // damage
        Destructable dest = collider.GetComponent <Destructable>();

        if (dest)
        {
            dest.OnDie();
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
    public override void DeathBehavior(float timeSpentInCurrentState)
    {
        if (timeSpentInCurrentState < Time.fixedDeltaTime)
        {
            _enemyAnimator.Stop();
            _enemyAnimator.Play("OrbiterDeath");

            //ignore all collision
            _rigidbody.detectCollisions = false;

            //move to DontHit layer (so that dying enemy doesn't get hit by projectiles)
            gameObject.layer = LayerMask.NameToLayer("DontHit");
            _hitbox.layer    = LayerMask.NameToLayer("DontHit");

            if (_deathClip)
            {
                AudioUtility.CreateSFX(_deathClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f);
            }
        }

        //fade out idle audio during deathDuration (idle audio starts at volume 0.1)
        _mainAudioSource.volume = Mathf.Lerp(0.1f, 0f, (Time.time - timeSpentInCurrentState) / _deathDuration);

        if (timeSpentInCurrentState >= _deathDuration)
        {
            OnDeathComplete.Invoke();
        }
    }
예제 #7
0
    void Update()
    {
        // Reset the trigger flag
        if (BounceFlag)
        {
            BounceFlag = false;
        }
        Vector3 origin = transform.position;

        origin.y += HeightOffset;

        for (int i = 0; i < Angles.Length; i++)
        {
            Vector3 direction = GetDirectionFromAngle(Angles[i], Vector3.up, transform.forward);

            if (Physics.Raycast(origin, direction, out RaycastHit hit, RayDistance, CollisionLayer) && Time.time > resumeTime && !hasCollided && kart.LocalSpeed() > 0)
            {
                // If the hit normal is pointing up, then we don't want to bounce
                if (Vector3.Dot(hit.normal, Vector3.up) > 0.2f)
                {
                    return;
                }

                // Calculate the incident vector of the kart colliding into whatever object
                Vector3 incidentVector = hit.point - origin;

                // Calculate the reflection vector using the incident vector of the collision
                Vector3 hitNormal = hit.normal.normalized;
                reflectionVector   = incidentVector - 2 * Vector3.Dot(incidentVector, hitNormal) * hitNormal;
                reflectionVector.y = 0;

                kart.Rigidbody.velocity /= 2;
                // Apply the bounce impulse with the reflectionVector
                kart.Rigidbody.AddForce(reflectionVector.normalized * BounceFactor, ForceMode.Impulse);

                // Mark that the vehicle has collided and the reset time.
                kart.SetCanMove(false);
                BounceFlag = hasCollided = true;
                resumeTime = Time.time + PauseTime;

                if (BounceSound)
                {
                    AudioUtility.CreateSFX(BounceSound, transform.position, AudioUtility.AudioGroups.Collision, 0f);
                }
                return;
            }
        }

        if (Time.time < resumeTime)
        {
            Vector3    targetPos      = origin + reflectionVector;
            Vector3    direction      = targetPos - origin;
            Quaternion targetRotation = Quaternion.LookRotation(direction);
            kart.transform.rotation = Quaternion.Slerp(kart.transform.rotation, targetRotation, RotationSpeed * Time.deltaTime);
        }
    }
예제 #8
0
 private void OnDestroy()
 {
     if (GetComponentInParent <SpawnObjects>())
     {
         GameObject VFX = Instantiate(this.VFX, transform.position, transform.rotation);
         VFX.GetComponent <ParticleSystem>().Play();
         AudioUtility.CreateSFX(pickBox, transform.position, AudioUtility.AudioGroups.Pickup, 0f);
         Destroy(VFX, 2f);
         GetComponentInParent <SpawnObjects>().canInstantiate = true;
     }
 }
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    {
        // damage
        if (areaOfDamage)
        {
            // area damage
            areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner);

            //area knockback
            Collider[] colliders = Physics.OverlapSphere(transform.position, areaOfDamage.areaOfEffectDistance);
            foreach (Collider obj in colliders)
            {
                Rigidbody rb = obj.GetComponent <Rigidbody>();
                if (rb != null)
                {
                    rb.AddExplosionForce(force, transform.position, areaOfDamage.areaOfEffectDistance);
                }
            }
        }
        else
        {
            // point damage
            Damageable damageable = collider.GetComponent <Damageable>();
            if (damageable)
            {
                damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
            }
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.FromToRotation(point, normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
                ////if can show decal
                //if (collider.gameObject.GetComponent<Renderer>().material != null)
                //    collider.gameObject.GetComponent<BulletHitEffect>().Hit(point, normal, hitType);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }



        // Self Destruct
        Destroy(this.gameObject);
    }
    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Player")
        {
            Jumppack jumppack = other.GetComponent <Jumppack>();
            jumppack.Enable();

            if (pickupSFX)
            {
                AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f);
            }

            Destroy(gameObject);
        }
    }
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    {
        // damage
        if (areaOfDamage)
        {
            // area damage
            areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner);
        }
        else
        {
            // point damage
            Damageable damageable = collider.GetComponent <Damageable>();
            if (damageable)
            {
                damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
            }

            // turn light on
            CrystalLight crystalLight = collider.GetComponent <CrystalLight>();
            if (crystalLight && _notFromEnemy)
            {
                if (crystalLight.IsToggleLaser())
                {
                    crystalLight.LightOn();
                }
            }
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
예제 #12
0
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    {
        Damageable damageable = null;

        // damage
        if (areaOfDamage)
        {
            // area damage
            areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner);
        }
        else
        {
            // point damage
            damageable = collider.GetComponent <Damageable>();
            if (damageable)
            {
                damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
                m_ProjectileBase.OnHit(m_Velocity);
            }
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            if (damageable && damageable.damageMultiplier > 0f)
            {
                AudioUtility.CreateSFX(damageSFXClip, point, AudioUtility.AudioGroups.Impact, 0.6f, 1f, 100f, 1f);
            }
            else
            {
                AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f, 5f);
            }
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
    void OnCollect()
    {
        if (CollectSound)
        {
            AudioUtility.CreateSFX(CollectSound, transform.position, AudioUtility.AudioGroups.Pickup, 0f);
        }

        if (spawnPrefabOnPickup)
        {
            var vfx = Instantiate(spawnPrefabOnPickup, CollectVFXSpawnPoint.position, Quaternion.identity);
            Destroy(vfx, destroySpawnPrefabDelay);
        }

        Objective.OnUnregisterPickup(this);

        //TimeManager.OnAdjustTime(TimeGained);
        //Destroy(gameObject, collectDuration);
    }
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    {
        if (collider.gameObject.tag == "Player")
        {
            Health life = collider.GetComponent <Health>();

            life.TakeDamage(damage, m_ProjectileBase.owner);
        }

        // damage
        if (areaOfDamage)
        {
            // area damage
            areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner);
        }
        else
        {
            // point damage
            Damageable damageable = collider.GetComponent <Damageable>();
            if (damageable)
            {
                damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
            }
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
예제 #15
0
        void OnDetectedTarget()
        {
            if (AiState == AIState.Patrol)
            {
                AiState = AIState.Follow;
            }

            for (int i = 0; i < OnDetectVfx.Length; i++)
            {
                OnDetectVfx[i].Play();
            }

            if (OnDetectSfx)
            {
                AudioUtility.CreateSFX(OnDetectSfx, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f);
            }

            Animator.SetBool(k_AnimAlertedParameter, true);
        }
    void OnDetectedTarget()
    {
        if (aiState == AIState.Patrol)
        {
            aiState = AIState.Follow;
        }

        for (int i = 0; i < onDetectVFX.Length; i++)
        {
            onDetectVFX[i].Play();
        }

        if (onDetectSFX)
        {
            AudioUtility.CreateSFX(onDetectSFX, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f);
        }

        // animator.SetBool(k_AnimAlertedParameter, true);
    }
예제 #17
0
    public void PlayPickupFeedback()
    {
        if (m_HasPlayedFeedback)
        {
            return;
        }

        if (pickupSFX)
        {
            AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f);
        }

        if (pickupVFXPrefab)
        {
            var pickupVFXInstance = Instantiate(pickupVFXPrefab, transform.position, Quaternion.identity);
        }

        m_HasPlayedFeedback = true;
    }
예제 #18
0
    // Start is called before the first frame update
    void Start()
    {
        GameObject playerGameObject = GameObject.FindWithTag("Player");

        _playerTransform = playerGameObject.transform;

        _aimLaserRenderer = _aimLaser.gameObject.GetComponent <Renderer>();

        _centerStageTransform = Stage.Instance.transform.Find("CenterStage");

        //set deltaThetaHead such that the rotation of the golem's head is enough to follow player.MaxSpeedOnGround when player is _aimFollowsPlayerDistance units away from golem
        float playerMaxSpeedOnGround = playerGameObject.GetComponent <PlayerCharacterController>().maxSpeedOnGround;

        _deltaThetaHead = (float)Mathf.Atan((playerMaxSpeedOnGround * Time.fixedDeltaTime) / _aimFollowsPlayerDistance);

        //set initial position
        float   displacementFromCenterStage = _displacementToRadiusRatio * Stage.Instance.radius;
        Vector2 randomPoint   = GameFlowManager.Instance.currentRound <= 1 ? new Vector2(0, 1) : UnityEngine.Random.insideUnitCircle;
        Vector3 spawnPosition = new Vector3(randomPoint.normalized.x * displacementFromCenterStage, 0, randomPoint.normalized.y * displacementFromCenterStage);

        gameObject.transform.Translate(spawnPosition);

        //set initial rotation
        Vector3    towardsCenterStage = _centerStageTransform.position - _headTransform.position;
        Quaternion initialRotation    = Quaternion.FromToRotation(_headTransform.forward, towardsCenterStage);

        initialRotation.eulerAngles = new Vector3(initialRotation.eulerAngles.x, initialRotation.eulerAngles.y, 0f);
        _headTransform.rotation     = initialRotation;
        _bodyTransform.rotation     = initialRotation;
        // _headTransform.Rotate(initialRotation.eulerAngles.x, initialRotation.eulerAngles.y, initialRotation.eulerAngles.z);
        // _headTransform.rotation = initialRotation;

        _health.onDamaged += HandleOnDamaged;

        _enemyAnimator.Stop();
        _enemyAnimator.Play("GolemSpawn");

        if (_spawnClip)
        {
            AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f);
        }
    }
예제 #19
0
        void OnDamaged(float damage, GameObject damageSource)
        {
            // test if the damage source is the player
            if (damageSource && !damageSource.GetComponent <EnemyController>())
            {
                // pursue the player
                DetectionModule.OnDamaged(damageSource);

                onDamaged?.Invoke();
                m_LastTimeDamaged = Time.time;

                // play the damage tick sound
                if (DamageTick && !m_WasDamagedThisFrame)
                {
                    AudioUtility.CreateSFX(DamageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f);
                }

                m_WasDamagedThisFrame = true;
            }
        }
예제 #20
0
    void OnDetectedTarget()
    {
        if (aiState == AIState.Idle)
        {
            aiState = AIState.Attack;
        }

        for (int i = 0; i < onDetectVFX.Length; i++)
        {
            onDetectVFX[i].Play();
        }

        if (onDetectSFX)
        {
            AudioUtility.CreateSFX(onDetectSFX, transform.position, AudioUtility.AudioGroups.EnemyDetection, 1f);
        }

        animator.SetBool(k_AnimIsActiveParameter, true);
        m_TimeStartedDetection = Time.time;
    }
예제 #21
0
    // this method shouldnt really take an upgradeController but it was the best way for me to attach it to the onpick event while keeping handleonpick as an abstract method
    public void PlayPickupFeedback(PlayerUpgradeManager upgradeController)
    {
        if (m_HasPlayedFeedback)
        {
            return;
        }

        if (pickupSFX)
        {
            AudioUtility.CreateSFX(pickupSFX, transform.position, AudioUtility.AudioGroups.Pickup, 0f);
        }

        if (pickupVFXPrefab)
        {
            var pickupVFXInstance = Instantiate(pickupVFXPrefab, transform.position, Quaternion.identity);
        }

        m_HasPlayedFeedback = true;

        Destroy(gameObject);
    }
예제 #22
0
    public override void DeathBehavior(float timeSpentInCurrentState)
    {
        if (timeSpentInCurrentState < Time.fixedDeltaTime)
        {
            _enemyAnimator.Stop();
            _enemyAnimator.Play("GolemDeath");

            //ignore all collision
            _bodyRigidbody.detectCollisions = false;

            //move to DontHit layer (so that dying enemy doesn't get hit by projectiles)
            gameObject.layer = LayerMask.NameToLayer("DontHit");
            _hitbox.layer    = LayerMask.NameToLayer("DontHit");
            _hurtbox.layer   = LayerMask.NameToLayer("DontHit");

            //stop moving
            ChangeVelocity(new Vector3(0, 0, 0));

            //turn off lasers
            _aimLaser.gameObject.SetActive(false);
            _attackLaser.gameObject.SetActive(false);
            _laserHum.gameObject.SetActive(false);

            //spawn pickup
            PickupManager.Instance.ChooseDeathPickup(_eyeTransform.position);


            if (_deathClip)
            {
                AudioUtility.CreateSFX(_deathClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 5f, 500f, 1f);
            }
        }

        _mainAudioSource.volume = Mathf.Lerp(0.3f, 0f, (Time.time - timeSpentInCurrentState) / _deathDuration);

        if (timeSpentInCurrentState >= _deathDuration)
        {
            OnDeathComplete.Invoke();
        }
    }
예제 #23
0
    void OnHit(Vector3 point, Vector3 normal, Collider collider)
    //ヒット時(ポイントの向き、大きさ, コライダー)
    {
        // damage
        if (areaOfDamage)
        {
            // area damage
            areaOfDamage.InflictDamageInArea(damage, point, hittableLayers, k_TriggerInteraction, m_ProjectileBase.owner);
        }
        else
        {
            //ポイントダメージ
            Damageable damageable = collider.GetComponent <Damageable>();
            //ダメージ ダメージ = コライダー.コンポーネントを取得<破損>
            if (damageable)
            {
                damageable.InflictDamage(damage, false, m_ProjectileBase.owner);
                //ダメージ ダメージを与える(ダメージ,false,m_ProjectileBase. オーナー)
            }
        }

        // impact vfx
        if (impactVFX)
        {
            GameObject impactVFXInstance = Instantiate(impactVFX, point + (normal * impactVFXSpawnOffset), Quaternion.LookRotation(normal));
            if (impactVFXLifetime > 0)
            {
                Destroy(impactVFXInstance.gameObject, impactVFXLifetime);
            }
        }

        // impact sfx
        if (impactSFXClip)
        {
            AudioUtility.CreateSFX(impactSFXClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
        }

        // Self Destruct
        Destroy(this.gameObject);
    }
예제 #24
0
        void OnHit(Vector3 point, Vector3 normal, Collider collider)
        {
            // damage
            if (AreaOfDamage)
            {
                // area damage
                AreaOfDamage.InflictDamageInArea(Damage, point, HittableLayers, k_TriggerInteraction,
                                                 m_ProjectileBase.Owner);
            }
            else
            {
                // point damage
                Damageable damageable = collider.GetComponent <Damageable>();
                if (damageable)
                {
                    damageable.InflictDamage(Damage, false, m_ProjectileBase.Owner);
                }
            }

            // impact vfx
            if (ImpactVfx)
            {
                GameObject impactVfxInstance = Instantiate(ImpactVfx, point + (normal * ImpactVfxSpawnOffset),
                                                           Quaternion.LookRotation(normal));
                if (ImpactVfxLifetime > 0)
                {
                    Destroy(impactVfxInstance.gameObject, ImpactVfxLifetime);
                }
            }

            // impact sfx
            if (ImpactSfxClip)
            {
                AudioUtility.CreateSFX(ImpactSfxClip, point, AudioUtility.AudioGroups.Impact, 1f, 3f);
            }

            // Self Destruct
            Destroy(this.gameObject);
        }
예제 #25
0
    void Start()
    {
        //spawn duration will last 30 frames
        _spawnDuration = 30f * Time.fixedDeltaTime;
        //death duration will last 10 frames
        _deathDuration = 10f * Time.fixedDeltaTime;

        _maxForce = _maxVelocity / 3 * _rigidbody.mass / Time.fixedDeltaTime;

        _deltaThetaLook = _deltaTheta * 2f;

        gameObject.transform.Translate(initialPosition);

        _playerTransform = GameObject.FindWithTag("Player").transform.Find("Main Camera");

        _enemyAnimator.Stop();
        _enemyAnimator.Play("SwarmerSpawn");

        if (_spawnClip)
        {
            AudioUtility.CreateSFX(_spawnClip, transform.position, AudioUtility.AudioGroups.EnemySpawn, 0.6f, 30f, 500f, 0.4f);
        }
    }
예제 #26
0
    void OnDamaged(float damage, GameObject damageSource)
    {
        //損傷の原因がプレイヤーかどうかをテストします
        if (damageSource && damageSource.GetComponent <PlayerCharacterController>())
        {
            //プレーヤーを追跡します
            m_DetectionModule.OnDamaged(damageSource);

            if (onDamaged != null)
            {
                onDamaged.Invoke();
            }
            m_LastTimeDamaged = Time.time;

            //ダメージティックサウンドを再生します
            if (damageTick && !m_WasDamagedThisFrame)
            {
                AudioUtility.CreateSFX(damageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f);
            }

            m_WasDamagedThisFrame = true;
        }
    }
예제 #27
0
    void OnDamaged(float damage, GameObject damageSource)
    {
        // test if the damage source is the player
        if (damageSource && damageSource.GetComponent <PlayerCharacterController>())
        {
            // pursue the player
            m_TimeLastSeenTarget = Time.time;
            knownDetectedTarget  = damageSource;

            if (onDamaged != null)
            {
                onDamaged.Invoke();
            }
            m_LastTimeDamaged = Time.time;

            // play the damage tick sound
            if (damageTick && !m_WasDamagedThisFrame)
            {
                AudioUtility.CreateSFX(damageTick, transform.position, AudioUtility.AudioGroups.DamageTick, 0f);
            }

            m_WasDamagedThisFrame = true;
        }
    }