예제 #1
0
        private void Update()
        {
            timeToLive -= Time.deltaTime;

            if (timeToLive <= 0)
            {
                if (spawnOnDeath)
                {
                    Spawnable.Spawn(spawnOnDeath, transform.position, transform.rotation);
                }
                Spawnable.Despawn(gameObject);
            }
        }
예제 #2
0
        protected virtual void OnHitObject(Transform col, Vector3 position)
        {
            Vector3 impact = velocity * impactForce;

            col.Damage(new PointDamage(damage * damageMultiplier, position, velocity.normalized, velocity.magnitude * impactForce));

            if (impactForce > 0)
            {
                var rb = col.GetComponentInParent <Rigidbody>();
                if (rb)
                {
                    rb.AddForce(impact, ForceMode.Impulse);
                }
                var rb2d = col.GetComponentInParent <Rigidbody2D>();
                if (rb2d)
                {
                    rb2d.AddForce(impact, ForceMode2D.Impulse);
                }
            }

            HitObject?.Invoke(col.gameObject, position);

            if (stopOnHit)
            {
                velocity = Vector3.zero;
            }

            if (destroyOnHit)
            {
                Spawnable.Despawn(gameObject, linger);
                fired = false;
            }

            if (impactSound)
            {
                impactSound.PlayAtPoint(transform.position);
            }

            if (impactPrefab)
            {
                Spawnable.Spawn(impactPrefab, position, transform.rotation, parentImpactObject ? col : null, true);
            }
        }