Exemplo n.º 1
0
    public static ProjectileScript Spawn(Vector2 position, Sprite sprite, Vector2 vel, bool stickInTarget = false, int pierce = 0, float gravity = 0, float lifetime = 30, bool isEnemy = false, float rotationOffset = 0, float glow = 0)
    {
        var g = new GameObject();

        g.AddComponent <Rigidbody2D>();
        g.AddComponent <BoxCollider2D>();
        g.AddComponent <SpriteRenderer>();
        ProjectileScript p = g.AddComponent <ProjectileScript>();

        //Debug.Log(p);

        #region Position, Rotation and velocity
        p.transform.position = position;
        p.rotationOffset     = rotationOffset;

        p.AddComponents();
        p.rb.velocity           = vel;
        p.transform.eulerAngles = new Vector3(0, 0, p.rb.velocity.GetAngle() + rotationOffset);

        p.useGrav = gravity != 0;
        p.gravity = gravity;
        #endregion

        #region collision Setup
        if (isEnemy)
        {
            p.targetLayer      = LayerMask.NameToLayer("Player");
            p.gameObject.layer = LayerMask.NameToLayer("Enemy");
        }
        else
        {
            p.gameObject.layer = LayerMask.NameToLayer("Player");
            p.targetLayer      = (1 << LayerMask.NameToLayer("Default")) | (1 << LayerMask.NameToLayer("Enemy"));
        }

        p.groundLayer = 1 << LayerMask.NameToLayer("Terrain");

        p.willDespawn = lifetime != -1;
        p.lifetime    = lifetime;

        p.rb.freezeRotation = true;
        p.rb.velocity       = vel;

        p.collider.isTrigger = true;
        (p.collider as BoxCollider2D).size = sprite.rect.size / sprite.pixelsPerUnit;
        #endregion

        #region Visuals
        p.spriteRenderer.sprite = sprite;
        Material m = new Material(Resources.Load <Material>("Basic Material"));
        m.SetTexture("_MainText", sprite.texture);
        m.SetColor("_Color", new Vector4(1, 1, 1, 1) * (glow + 1));

        p.spriteRenderer.material         = m;
        p.spriteRenderer.sortingLayerName = "Effects";
        #endregion

        return(p);
    }