Search Unity

Pool Kit - The ultimate system for pooling, spawning and despawning

Discussion in 'Assets and Asset Store' started by melgeorgiou, Jun 20, 2018.

  1. MikhaskoS

    MikhaskoS

    Joined:
    Jun 24, 2018
    Posts:
    52
    I hope I don't have to send invoice ID for the third time.
     
  2. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @MikhaskoS,

    Thanks for sending the invoice ID. Please check your email! :)

    - Mel
     
  3. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi everyone,

    POOL KIT v2.0 IS NOW LIVE!

    PoolKit v2.0 is now LIVE on my site, and should hopefully be available on the Asset Store soon.

    IMPORTANT: ALWAYS BACKUP YOUR PROJECT BEFORE UPDATING!

    This is the biggest PoolKit update since release and includes loads of new features! Let's explore what's new:

    NEW SPAWNER FEATURES!

    The first thing to take a look at are the new Spawner features. Let's start on the main Spawner tab:

    Screenshot 2019-11-09 at 14.38.55.png

    Instances To Spawn

    Each spawn cycle can now spawn a random range of instances rather than a fixed value!

    Spawner Updates

    In the previous versions of PoolKit spawners, instances were updated to grab a new prefab, spawn point, rotation and scale every time they were spawned. These can now be independently controlled so they can be updated only at the start of each spawn cycle which allows for interesting setups!

    For example, you can easily have any number of instances spawning at the same spawn point by setting the "Update Spawn Point" field to "Per Cycle" ( thanks @MikhaskoS! :) ).

    Another example allows you to always use the same prefab on multiple spawn points by setting the "Update Prefab" field to "Per Cycle".

    This gives you super fine grain control to setup your spawners in pretty much any way you want! :)

    Randomized Offsets

    It is now possible to make spawn point locations easier to manage using the new "Randomized Offsets" feature which works with any Spawn Point mode:

    Screenshot 2019-11-09 at 14.49.30.png

    At the bottom of this inspector you can check a simple checkbox which brings up the randomized offset options. This allows you to add small positional offsets when spawning your instances. This functionality is similar to what already existed in chain-spawning but is now offered in the core spawner too!

    BTW: You can also independently update offsets per instance or per cycle in the main spawner tab! :)

    NEW DESPAWNER FEATURES!

    There are also some cool features added to the PoolKit despawners!

    Raycast Physics Events

    There are now 2 new despawner modes that allow despawning for both 2D and 3D Raycasts!

    Screenshot 2019-11-09 at 16.18.00.png

    These modes work in a similar way to the existing physics-based events with filtering for layers, tags and more. Two new example scenes showing how this works are also included! :)

    Random Range Of Chain-Spawned Instances

    Rather than a fixed value of instances to spawn, Chain spawning now has the option of using random range of instances for even more flexibility!

    These new features are extremely powerful and will open up even more possibilities. The best part is this huge update is 100% free to all existing PoolKit users.

    I'd like to thank everyone who has already purchased PoolKit. It is your support that allows me to keep improving the tool over time. If you're happy with PoolKit and appreciate free updates, please consider leaving a positive review in the asset store! :)

    I'll let everyone know when the Asset Store version has been approved! :)

    - Mel
     
  4. f1chris

    f1chris

    Joined:
    Sep 21, 2013
    Posts:
    335
    Thanks Mel for this nice free upgrade !!! :)

    I'm spawning ennemies when hitting a specific section in the map. Let say i'm spawning 10 soldiers and my objective is to eliminate them all from a certain area.

    When using the despawner, how do i know they're all killed ?

    I have more than one spawner, how i know the one i just killed was spawned from Spawner A and not Spawner B ?

    Poolkit have tons of features I'm not completely aware of yet but I'm sure you can achieve something like this pretty easily.

    thx
    - Chris
     
  5. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @f1chris,

    You're welcome! :)

    Fastest way is to use the delegates on the Despawner component to receive events every time your object is despawned ( OnDespawnerDespawn ) and then incrementing a global counter of some sort to count how many times the object is despawned.

    There's an example of how to get started with this on page 63 of the manual and I also think there is an example scene included in PoolKit which shows how to setup despawner events using either delegates or UnityEvents (delegates are more efficient but UnityEvents are easier lol).

    Hope this helps! :)

    - Mel
     
    f1chris likes this.
  6. Abnormalia_

    Abnormalia_

    Joined:
    Jul 23, 2013
    Posts:
    128
    Awesome Asset using it already in my next project. There are some limitations for my current use and already extended functionality.

    What I've added/changed:
    1. Its good to have random rotations and scales at spawn but sometimes it is needed to apply impulse on spawn (Example: gun shell cases), So added option which applies random force on spawn on rigibody.
    2. Its good having spawn points variety but I also need to have 1 pool for all shell cases and spawn for all guns that need to spawn them on shoot. So I've added "User Defined" and SpawnAt(Transform) method to be called.
    3. Sometimes when object hits another it is needed not to despawn and spawn other prefab, but keep object and despawn after some time. For example shell case hits floor -> spawn sound, hit another -> spawn sound and despawn in 5-7 sec. Added Only Chain event checkbox.


    Those might be very my project specific, but you and other may find it interesting and consider for next updates.
    If there are already way to do same functionality and I've missed them please let me know.

    p.s.
    Also there is a bug/typo in current asset store version in Despawner.cs, line 1040. It is always reverting to countdown instead of waiting audio to finish. ("!=" instead of "==")
     
    f1chris likes this.
  7. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @IkaBika,

    Thanks for your suggestions and reporting the typo - I'll look into building a hotfix for this asap! :)

    It's a little late over here in the UK but in the meantime, could you please send me a PM with your invoice ID? There's at least a few things here that could make the wish-list but I'll take a good look tomorrow morning ( when I'm a little more awake )! lol

    Thanks! :)

    - Mel

    PS - UPDATE: A New version (v2.0.1) has just been submitted to the Asset Store which addresses the AudioSource typo! :)
     
    Last edited: Dec 9, 2019
  8. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi everyone,

    POOL KIT v2.0.2 IS NOW LIVE!

    PoolKit v2.0.2 is now LIVE on my site, and should hopefully be available on the Asset Store soon.

    IMPORTANT: ALWAYS BACKUP YOUR PROJECT BEFORE UPDATING!

    This update brings compatibility to all the crazy new stuff happening in Unity 2019.3!

    Thanks to everyone who has purchased PoolKit so far! :)

    - Mel
     
  9. f1chris

    f1chris

    Joined:
    Sep 21, 2013
    Posts:
    335
    Hi Mel,

    I want to to Despawn all objects Spawned from let say Spawner_A but not objects from Spawner_B. Both sharing same Pool.

    Any clue ?

    thx
    Chris
     
  10. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi Chris,

    I've PM'd you a solution! :)

    - Mel
     
    f1chris likes this.
  11. NikoBay

    NikoBay

    Joined:
    Aug 15, 2018
    Posts:
    39
    Hi Mel,

    I've bought this asset recently solely based on the promise of Fast performance and I'm really impressed. I have following matters on which would love to hear your input:
    1. I'd love to use the Despawner to despawn bullets but I want it to delay a few second before despawn to run a Anim. Is that possible?
    2. Also the so called very fast Physic Overlap Event (used also in Despawner), is it really faster than collider? Is it trustworthy for fast moving bullets?

    Best regards,
    Niko
     
  12. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @NikoBay,

    Glad to hear you're happy with PoolKit so far! :)

    1) I would encourage you to split up your bullet animation into a different object. Then, when you despawn the bullet you can use chain-spawning to spawn the 'despawn' effect. This makes it possible to do complex effects without too much work :)

    2) It's better in the sense that it creates no memory allocations and Unity's own physics events do. If you find that the Physics Overlap Event works for you, I'd recommend always using that as a default :)

    Hope this helps!

    - Mel
     
    Last edited: Feb 26, 2020
  13. Censureret

    Censureret

    Joined:
    Jan 3, 2017
    Posts:
    363
    Hey guys is there a way to spawn at a dynamic position instead of the usual transform list or spawner position (through code)
     
  14. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Censureret,

    Sure can, just use the API :)

    You just need to grab the pool containing the instance you want (see page 51 of the docs.pdf) and when you want to spawn an instance from that pool, you'd call any of the spawn methods ( see page 54 of the docs.pdf ).

    This allows you to use any prefab that pool controls, as well as any position, rotation, scale, etc.

    Hope that helps! :)

    - Mel
     
  15. Censureret

    Censureret

    Joined:
    Jan 3, 2017
    Posts:
    363
    Thank you for the quick response but I am quite sure how exactly yet

    say I have a local pool with arrows called Arrow

    How would I spawn an arrow and modify it here is what my old code looks like:

    Code (CSharp):
    1.            
    2.  GameObject lProjectile = GameObject.Instantiate(ArrowPrefab) as GameObject;
    3.                 lProjectile.transform.parent =gameobject;
    4.                 lProjectile.transform.position = new Vector3(0,0,0);
    5.                 lProjectile.transform.rotation = gameObject.transform.rotation;
    6.  
    7. return lProjectile

    How would I convert this to use the pool/spawner?
     
  16. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Censureret,

    Using your template code as a starting point, this should work:

    Code (CSharp):
    1. // using HellTap.PoolKit;
    2.  
    3. // Cache Arrow Pool by Name ( it's best to cache this at start! )
    4. Pool myArrowPool = PoolKit.GetPool("Arrow");
    5.  
    6. // Using the Arrow Pool, spawn instance of ArrowPrefab at position (0,0,0),
    7. // The rotation is the same as this gameObject's transform and parented to
    8. // this gameObject. Instance is stored in GameObject variable 'IProjectile'.
    9. GameObject lProjectile = myArrowPool.SpawnGO (
    10.    ArrowPrefab,
    11.    new Vector3(0,0,0),
    12.    transform.rotation,
    13.    gameObject
    14. );

    Usually, it's easier to store the transform rather than the GameObject in a variable. If you'd rather have PoolKit return a Transform instead of a GameObject, use the Spawn() method instead of SpawnGO().

    Hope this helps! :)

    - Mel
     
  17. Censureret

    Censureret

    Joined:
    Jan 3, 2017
    Posts:
    363
    Thank you it really helps is there a way to spawn an object with a component type? like if my arrow has a custom component named ArrowCore
     
  18. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Censureret,

    if you're asking how to access a component on a spawned gameobject, you can do it the usual way with GetComponent. Following from the previous code snippet, you could do it like this:

    Code (CSharp):
    1. // Get the ArrowCore component from the GameObject 'lProjectile'
    2. var arrowCoreComponent = lProjectile.GetComponent<ArrowCore>();
    Hope that helps! :)

    - Mel
     
  19. Censureret

    Censureret

    Joined:
    Jan 3, 2017
    Posts:
    363
    @Mel
    Thanks mate :) i was hoping there was a way to get around the GetComponent call but i guess its ok :)
     
  20. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
  21. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    POOL KIT v3.0 IS NOW LIVE!

    PoolKit v3.0 is now LIVE on my site, and should hopefully be available on the Asset Store soon.

    This is a 100% free update to existing users and includes a big user-requested feature! I'm happy to announce that conditional chain spawning filters are now available for Physics-based events! :)


    Physics Event Filters

    This is the name of the new feature which allows you to choose what prefabs to chain spawn depending on what object was collided with. After checking the 'Use Physics Event Filters' checkbox, 3 new filter options will become available:

    PhysicsEventFilters.png

    Filter Layers: This allows you to setup a specific layer mask to test against the collided object. Only your chosen layers will allow the current prefab entry to be chain-spawned!

    Filter Tags: This allows you to setup a list of tags to test against the collided object. If the collided object matches any of your tags, the current prefab entry will be chain-spawned!

    Filter Names: For ultra fine-grain control, you can even filter objects by it's name. This allows you to chain spawn specific prefabs by checking the name of the collided object!


    What Can I Use Physics Event Filters To Do?

    Now you can setup a single despawner component to chain-spawn different objects based on what it collides with. For example, a 'bullet' can now chain-spawn a puff of dirt if it hits a wall, a bunch of leaves if it hits grass or a gush of blood if it hits a person. This is now possible by filtering the objects by layer, tags, name or a hybrid combination of all three! :)


    New Example Scene

    A brand new example scene is also included to show off the new physics event filters! :)


    UI Updates

    You may also notice that chain-spawned prefab entries now have a foldout button to hide and show them as needed. There are also more UI tweaks included for Unity 2019.3+.



    Please remember to backup your projects before updating. I'll let everyone know when the update is available on the Asset Store.

    Thanks to everyone who has purchased Pool Kit so far! :)

    - Mel
     
    Last edited: Apr 3, 2020
    NikoBay likes this.
  22. battman00

    battman00

    Joined:
    Mar 28, 2020
    Posts:
    10
    @melgeorgiou Do you have any recommendations on storing values in a prefab's script component?

    I have a script component attached to my prefab. I update the script's non-serialized property values before creating the pool and assigning the prefab (all via API). Later when I spawn the GameObject, the properties are lost.
     
  23. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @battman00,

    I might not have understood you correctly but I'm not sure how you could set a non-serialized value on an object that hasn't been created yet? If a value is non-serialized, I'm pretty sure that as soon as you instantiate it the default value will always be used so perhaps that's why you're seeing strange results. So basically, use serialized values if you want to save stuff, lol.

    Generally speaking, you'd be better off putting setup code in the Awake() method of a prefab script. That will only run once as soon as the gameobject is instantiated (or in this case, when the pool is first created). If you have a dynamic setup where you want to update the setup every time the instance is spawned, you'll want to put your code in the 'OnEnable' method. You can also use PoolKit interfaces which is a very fast alternative but requires a bit more coding on your part.

    Hope that helps! :)

    - Mel
     
  24. battman00

    battman00

    Joined:
    Mar 28, 2020
    Posts:
    10
    @melgeorgiouthat solved it. Thank you!
     
  25. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
  26. NikoBay

    NikoBay

    Joined:
    Aug 15, 2018
    Posts:
    39
    @melgeorgiou May I suggest a feature? Currently I have this problem: each enemies at spawned will call Pool to setup for ItemToPool. The thing is ItemToPool of many enemies are the same. So for example:
    1 enemy request to create a pool of 30 bullets. so 10 enemies will create 300 bullets. (300 seems a lot but 10 enemies shoots at the same time so 30 for each is reasonable)
    But for now we can't do that since request to create same ItemToPool will be denied.
    I made a workaround by adding an option to decide if this request is stackable or not. If yes, the pool will be increased, if not, do nothing.
    However, it messed with source code so any updates from you or a fresh import will require recoding this part.
    Could you please add this feature? Let us choose if a request is stackable in script (add more to pool size) or not.
     
  27. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @NikoBay,

    Firstly, thanks for the feedback! :)

    My first suggestion is why not just setup the pool in the first place to have the maximum number of bullets you'll need? You can figure out what you'll need pretty easily by using the statistics tab on the pool in question. Generally, this will always be better than creating new instances of a pool item at runtime because it will avoid game stutter when the new items are instantiated.

    I'm also a little confused by what you mean by stacking the same object... Wouldn't changing the Pool Type to Dynamic List mode allow you to just grow the pool if you need more instances on the fly?

    If I'm missing something, please send me a PM ( with your invoice ID ) and let me know! :)

    Thanks! =)

    - Mel
     
    NikoBay likes this.
  28. unity_Q73qNos66_f-HA

    unity_Q73qNos66_f-HA

    Joined:
    Jun 7, 2019
    Posts:
    2
    Hello Mel,

    Asset work well when I practice as you showed in the video "Tutorial 1 - Pools".

    I just have a problem when I added one more prefabs to the Local Pool and the Spawner.
    At the first and second cycle it appear 2 prefabs correctly at the same time,
    but from the third cycle it spawn only 1 prefab.
    Could you explain me? or i missed somthing?

    ** Default configuration
    just change as below:
    Pool > Recycle Spawned instance = true
    Spawner > Instances per cycle = 2


    Thanks you.
     
  29. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @unity_Q73qNos66_f-HA,

    This is likely just a setup issue. Could you please send me a PM with your invoice ID and a screenshot of your settings both of the pool and the spawner?

    Thanks! :)

    - Mel
     
  30. unity_Q73qNos66_f-HA

    unity_Q73qNos66_f-HA

    Joined:
    Jun 7, 2019
    Posts:
    2
    Thank Mel,
    I got package works perfectly.
     
    melgeorgiou likes this.
  31. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    You're welcome! :)

    - Mel
     
  32. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi everyone,

    POOL KIT v3.0.1 IS NOW LIVE!

    PoolKit v3.0.1 is now LIVE on my site and on the asset store!

    IMPORTANT: ALWAYS BACKUP YOUR PROJECT BEFORE UPDATING!

    This update fixes a small bug with instance recycling that could lead to certain instances not getting spawned.

    Thanks to everyone who has purchased PoolKit so far! :)

    - Mel
     
  33. Mattitiyahoo

    Mattitiyahoo

    Joined:
    Dec 15, 2018
    Posts:
    7
    In the Spawner, is it possible to Update Prefab only when the script says to?

    For example, if my Spawner has prefabs for both a Missile and a Bullet, and I want to spawn one or the other based on whatever input I get from the player, is this possible? Or am I abusing the spawner? :)

    Thanks!
     
  34. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Mattitiyahoo

    If I've understood you correctly, you'd be better off spawning your missile or bullet directly from the Pool via the API. Because you're testing for player input, it may make more sense doing it that way and doesn't require the spawner to act as a "middle-man" in this case! :)

    If you want to do it with the spawner because you've setup custom offsets or something along those lines, it would make more sense to create 2 spawners. One for the bullets and one for the missiles and then you can trigger the specific spawner you need depending on input.

    Hope this helps! :)

    - Mel
     
    Mattitiyahoo likes this.
  35. Mattitiyahoo

    Mattitiyahoo

    Joined:
    Dec 15, 2018
    Posts:
    7
    It is very helpful! I will go with your 2nd suggestion, because I do have custom spawnpoints.

    However, I cannot have two Spawners on the same GameObject, right? I would need to make another one.

    Seems good. Thanks for your help!
     
  36. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Mattitiyahoo,

    Yep, best to have 2 GameObjects for 2 spawners!

    You're welcome! :)

    - Mel
     
  37. escCalibahr

    escCalibahr

    Joined:
    Feb 3, 2020
    Posts:
    3
    Is there an integration with Opsive Character Controllers?
     
  38. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @escCalibahr,

    Firstly, thanks for your interest in PoolKit! :)

    I haven't tested with Opsive Character Controllers but I don't see why there would be any problems. If you can save your characters as prefabs then that's a pretty good sign that things will work fine!

    Hope this helps! :)

    - Mel
     
  39. knas01

    knas01

    Joined:
    Feb 24, 2018
    Posts:
    236
    Hi, I'm just wondering how many prefabs you should store in one pool? I have about 100 that I want to spawn several copies of each, so I figured I'd ask what's the best practice is.
     
  40. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @knas01,

    If you're using that many prefabs it's almost certainly better to use multiple pools :)

    There's no hard and fast rule but it makes sense to come up with a logical grouping for your pools and split them up that way. For example, "Projectiles", "Pickups", "Enemies", etc.

    If you really want to tweak, the other benefit is you can figure out any pools that don't need to change size and make sure they're "fixed" rather than "dynamic" for an extra performance boost as well!

    Hope that helps! :)

    - Mel
     
  41. knas01

    knas01

    Joined:
    Feb 24, 2018
    Posts:
    236
    @melgeorgiou Yea, that's what I do. I'm gonna end up with lots of pools as it is now but if you say nothing bad's gonna happen it should be fine. Thanks.
     
  42. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Yep, it’ll be fine! In fact, internal lookups will probably be much faster in your case :)

    Hope that helps!

    - Mel
     
  43. knas01

    knas01

    Joined:
    Feb 24, 2018
    Posts:
    236
    Very good. Thanks. :D
     
    melgeorgiou likes this.
  44. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    No worries! :)

    - Mel
     
  45. ahmed_decoy

    ahmed_decoy

    Joined:
    May 19, 2013
    Posts:
    58
    Hey @melgeorgiou

    Does this asset support Addressables? And if not, any plans to add support in the near future?

    Thanks!
     
  46. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @BrothaMan,

    Thanks for your interest in PoolKit!

    Addressables are already on the 'wish-list' for a future update. :)

    - Mel
     
  47. Razziel

    Razziel

    Joined:
    Nov 1, 2016
    Posts:
    7
    Any way to set
    Pool.OnCreateInstance
    before the pool items are instantiated by the
    PoolKit.CreatePool
    ?

    I am not able to add custom initialization behavior for the created gameobjects when creating a pool from script.
     
  48. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Razziel,

    Can you please PM / email me with your invoice ID and I'll be happy to help find a solution! :)

    Thanks!

    - Mel
     
  49. Vaidoras

    Vaidoras

    Joined:
    Sep 5, 2013
    Posts:
    21
    Hello,

    I am implementing your tool in my project and am very happy so far. Running into one snag thought, wonder if there is an easy solution for it.

    I have actors that are being spawned. The attributes of actors can change during runtime. For example actor may get +5 strength which means that all instances need to spawn with this change. Actor may also take damage which needs to be reset when it's reused. My solution for this is to modify the the pool item prefab for things like +5 strength and then whenever I spawn an object I would initialize it with a copy of attributes from the pool item instance. However, there is not way that an object can know which pool item it was spawned from, right?

    Just trying to avoid writing some sort of map/manager for this. My preferred solution for this would be for OnSpawn callback to have PoolItem parameter in addition to Pool. But perhaps there is another way to get at this?

    Thanks,
     
  50. melgeorgiou

    melgeorgiou

    Joined:
    Nov 3, 2012
    Posts:
    772
    Hi @Vaidoras,

    Firstly, thanks for purchasing Pool Kit! :)

    It sounds like PoolKit interfaces may be what you need in order to determine the pool of each instance and work from that point to figure out the rest. The good news is there are examples of how they work included in the demo scenes!

    EDITED - BTW: I wouldn't really recommend changing the main prefabs of a pool. Have you tried looking at the API for Pool.GetInstances( prefab ) in order to roll out your changes to the instances instead?

    If I've missed something or you need more specific help, please send me a PM / email with your invoice ID and I'll be happy to point you in the right direction! :)

    Hope this helps!

    - Mel
     
    Last edited: Jan 6, 2021