コード例 #1
0
ファイル: GM.cs プロジェクト: jarosloov/my_humble_job
    static bool CanUse(Vector3 position, Rigidbody2D body, ExplosionForce2DMode mode)
    {
        if (mode == ExplosionForce2DMode.Simple)
        {
            return(true);
        }

        RaycastHit2D hit = Physics2D.Linecast(position, body.position);

        if (hit.rigidbody != null && hit.rigidbody == body)
        {
            return(true);
        }

        return(false);
    }
コード例 #2
0
ファイル: GM.cs プロジェクト: jarosloov/my_humble_job
    /// <summary>
    /// Эффект взрыва для 2D игры.
    /// </summary>
    /// <param name="explosionForce">Сила взрыва.</param>
    /// <param name="explosionPosition">Точка взрыва.</param>
    /// <param name="explosionRadius">Радиус взрыва.</param>
    /// <param name="mode">Режим эффекта. Simple - не учитывает преграды. Adaptive - учитывает окружение.</param>
    /// <param name="layerMask">Фильтр по маске слоя.</param>
    public static void AddExplosionForce2D(float explosionForce, Vector3 explosionPosition, float explosionRadius, ExplosionForce2DMode mode = ExplosionForce2DMode.Simple, int layerMask = Physics2D.AllLayers)
    {
        Collider2D[] colliders = Physics2D.OverlapCircleAll(explosionPosition, explosionRadius, layerMask);

        foreach (Collider2D hit in colliders)
        {
            if (hit.attachedRigidbody != null)
            {
                Vector3 direction = hit.transform.position - explosionPosition;
                direction.z = 0;

                if (CanUse(explosionPosition, hit.attachedRigidbody, mode))
                {
                    hit.attachedRigidbody.AddForce(direction.normalized * explosionForce);
                }
            }
        }
    }