Beispiel #1
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.layer == LayerMask.NameToLayer("Characters"))
        {
            Character otherChar = other.GetComponent <Character>();

            if (otherChar)
            {
                if (otherChar != character)
                {
                    otherChar.SetDamage(damage, direction, force, character);
                }
            }
        }

        if (other.gameObject.tag == "Destroyable")
        {
            Destroyable otherDestroy = other.GetComponent <Destroyable>();
            if (otherDestroy)
            {
                otherDestroy.Shatter(true);
            }
        }
    }
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(other.gameObject.name);

        if (!isDone)
        {
            if (other.gameObject.layer == LayerMask.NameToLayer(characterMask))
            {
                // Get collided character reference
                Character otherChar = other.GetComponent <Character>();

                if (otherChar)
                {
                    if ((character.IsPlayer && otherChar.gameObject.tag == "Enemy") || (!character.IsPlayer && otherChar.gameObject.tag == "Player"))
                    {
                        // Apply damage or time scale to character
                        switch (type)
                        {
                        case ProjectileType.DAMAGE: otherChar.SetDamage(damage, Vector3.zero, 0f, character); break;

                        case ProjectileType.TIME: otherChar.SetTimeScale(duration, scale); break;

                        default: break;
                        }
                    }
                }
            }
            else if (other.gameObject.layer == LayerMask.NameToLayer(pickableMask))
            {
                // Apply time scale to pickable object
                if (type == ProjectileType.TIME)
                {
                    other.GetComponent <PuzzlePiece>().SetTimeScale(duration, scale);
                }
            }
            else if (other.gameObject.tag == "Destroyable")
            {
                // Get destroyable reference from collided object
                Destroyable otherDestroy = other.GetComponent <Destroyable>();

                // If exist, shatter destroyable object
                if (otherDestroy)
                {
                    otherDestroy.Shatter(false);
                }
            }

            if (other.gameObject.layer != LayerMask.NameToLayer("Actions") && other.gameObject.tag != "Trap")
            {
                // Disable physics and parent bullet to triggered transform component
                rb.isKinematic = true;
                trans.parent   = other.transform;

                // Destroy object after a delay
                Invoke("DestroyObject", destroyDelay);

                // Disable projectile and enable explosion
                projectile.SetActive(false);
                explosion.SetActive(true);

                // Update done state
                isDone = true;

                // Disable collider
                coll.enabled = false;
            }
        }
    }