• Devlog #9: A Little Bit of Polish

    Devlog #9: A Little Bit of Polish

    posted in Sword and Quill Devlog

    Published May 26, 2025

    Advertisement

    Hi, wonderful humans! It's time for another devlog.The Creature Collector Fest is over but the Next Fest is right around the corner! Juggling priorities gets harder and harder between improving the demo, working on the main game, making sure the Twitch integration works, adding Animons, capturing fixing wild bugs, marketing. I'm trying to use Codecks more consistently which definitely helps. Did you know I have an open board? You can check what I'm working on or what I have planned and even up-vote features you like to see most. You can find it here.With another upcoming event, the Access-Ability showcase, I've been prioritizing accessibility features like optimizing the UI for scaling to reduce cases where elements get pushed out of the screen. Next, I'm trying to tackle adding more options for photosensitivity. You can already disable screenshake but there's currently no option for reducing flashing lights. Time for PolishWith a little bit of time opening up, I managed to dedicate some of it to polish which felt incredibly good after weeks of very technical tasks. I improved the win screen that shows when you beat either the demo or the alpha and added animations to it. Honestly, the win screen was all over the place before that with elements overlapping each other, text being cut off, and more abominations. Oof...At the end of last week,  I started working on preventing the UI getting pushed around when you or the enemy had too many dice. I added dynamic spacing between the dice that takes the amount and the width of the container into account and added a nice bouncy hover effect to make it easier to see when they are close together. Again, using Tweens, I scale the node up and down accordingly with the "elastic" curve for that nice swing effect at the end.I hope to find time to add more battle effects to tricks which are also in need of a lot of polish. Many attacks just reuse the tackle or jump attack effect but they deserve their own little identity. This might lead to refactoring the entire battle effect system which I implemented a while ago before I learned how to write better code. I'm currently creating a scene for each effect with the battle effect resource which has a drop-down for all sorts of effect types like animation, tween, particles, and so on. I can assign a target control and tell it what to do from self-defined presets, if the effect should target the player or opponent, and so on. I probably want to rework it to be similar to how I create tricks now, where I can add trick features as a sub-resource indefinitely to customize it however I want because – like with the old tricks – I cannot combine effects like tween and particles with the current battle effect system.A few smaller tweaks are the run menu on the map collapsing when not needed and the starter selection screen which now shows the Animon's quirk when hovering/focusing on it.RoadmapPlanning the next months is blehbut it's gotta be done. I already moved some feature back into the early access period to make sure I get the base game loop solid and working before that. Currently, I'm eyeing end of July for early access which is after the Summer Sale but before the gamescom. Until then, I want all three regions to have roughly the same amount of Animons and the difficulty curve more or less balanced. There's also a story-cinematic I have planned as an intro to give you a little bit of narrative context but we'll see if I get around drawing all that.A few features I have planned for the ea period are:Soulblaze mechanic: We all want it, we all love it: Evolution, transformation, digitize, super sayjan form, and what not. Soulblaze forms have been on the list since the beginning but I didn't want to add it until I was sure I have settled on the dice mechanics because they will be a big part of triggering it.Nuzlocke-mode: Adding the popular self-imposed difficulty challenge from Pokémon to the game. If you don't know it, it means that if one of your creatures gets defeated, you have to release it and you get to only capture one creature per region. The mode would take care of these restrictions for you, of course.  Co-op mode: I love co-op and there's not nearly enough games with it. Since Soulblaze is turn-based, it's possible to insert a 2-player mode but I'd have to figure out how to handle displaying 2 Animons per side and how to handle turns then. Do the player both plan their turn and they play out together or do they go one after the other? Maybe alternating with the enemy? Will think about this.Unlockable comic pages: Story is always important to me and I literally can't create a game without having a story in mind. While Soulblaze might be my least story-focused game so far, I still want it to contain lore and especially character stories. In that regard, I want players to be able to unlock comic pages while they play which they can read in the collection and don't worry, I'll add visual descriptions to those as well, of course!Keep in mind that those are features I wish to implement and not guaranteed. I don't know if I will have the time to implement all of these or that I don't run into serious technical issues that I can't solve. Solo dev means that your time is so split between everything that every mid to large hurdle can mean it has to be put on hold indefinitely. But I'll do my best and it also helps that I really, really want those features.Lore Sneak-PeekOver a decade ago the Observer arrived on Earth, a huge crystalline lifeform that appeared to be peaceful. A few years later, for unknown reasons, it shattered and fragments of it grew to became the Animons we know today. Bindshards are made from the outer shell of the Observer and are used to capture Animons because they naturally want to return to their original form, therefore binding easily with the material of the Observer.When exactly the Soulblaze was discovered is unclear but the first Animancers experienced alteration of the Animons' physical shape when they got really excited, scared, or angry. It happens when the soul literally ignites in a surge of energy. Humans, as they do, saw the power and tried to trigger the Soulblaze within themselves which did not go so great...  the results are, well, you have met some of the bosses, haven't you...?

    Previous Entry
    Accessibility in Games - Where do I start?

    Comments

    You must log in to join the conversation.
    Don't have a GameDev.net account? Sign up!
    #devlog #little #bit #polish
    Devlog #9: A Little Bit of Polish
    Devlog #9: A Little Bit of Polish posted in Sword and Quill Devlog Published May 26, 2025 Advertisement Hi, wonderful humans! It's time for another devlog.The Creature Collector Fest is over but the Next Fest is right around the corner! Juggling priorities gets harder and harder between improving the demo, working on the main game, making sure the Twitch integration works, adding Animons, capturing fixing wild bugs, marketing. I'm trying to use Codecks more consistently which definitely helps. Did you know I have an open board? You can check what I'm working on or what I have planned and even up-vote features you like to see most. You can find it here.With another upcoming event, the Access-Ability showcase, I've been prioritizing accessibility features like optimizing the UI for scaling to reduce cases where elements get pushed out of the screen. Next, I'm trying to tackle adding more options for photosensitivity. You can already disable screenshake but there's currently no option for reducing flashing lights. Time for PolishWith a little bit of time opening up, I managed to dedicate some of it to polish which felt incredibly good after weeks of very technical tasks. I improved the win screen that shows when you beat either the demo or the alpha and added animations to it. Honestly, the win screen was all over the place before that with elements overlapping each other, text being cut off, and more abominations. Oof...At the end of last week,  I started working on preventing the UI getting pushed around when you or the enemy had too many dice. I added dynamic spacing between the dice that takes the amount and the width of the container into account and added a nice bouncy hover effect to make it easier to see when they are close together. Again, using Tweens, I scale the node up and down accordingly with the "elastic" curve for that nice swing effect at the end.I hope to find time to add more battle effects to tricks which are also in need of a lot of polish. Many attacks just reuse the tackle or jump attack effect but they deserve their own little identity. This might lead to refactoring the entire battle effect system which I implemented a while ago before I learned how to write better code. I'm currently creating a scene for each effect with the battle effect resource which has a drop-down for all sorts of effect types like animation, tween, particles, and so on. I can assign a target control and tell it what to do from self-defined presets, if the effect should target the player or opponent, and so on. I probably want to rework it to be similar to how I create tricks now, where I can add trick features as a sub-resource indefinitely to customize it however I want because – like with the old tricks – I cannot combine effects like tween and particles with the current battle effect system.A few smaller tweaks are the run menu on the map collapsing when not needed and the starter selection screen which now shows the Animon's quirk when hovering/focusing on it.RoadmapPlanning the next months is blehbut it's gotta be done. I already moved some feature back into the early access period to make sure I get the base game loop solid and working before that. Currently, I'm eyeing end of July for early access which is after the Summer Sale but before the gamescom. Until then, I want all three regions to have roughly the same amount of Animons and the difficulty curve more or less balanced. There's also a story-cinematic I have planned as an intro to give you a little bit of narrative context but we'll see if I get around drawing all that.A few features I have planned for the ea period are:Soulblaze mechanic: We all want it, we all love it: Evolution, transformation, digitize, super sayjan form, and what not. Soulblaze forms have been on the list since the beginning but I didn't want to add it until I was sure I have settled on the dice mechanics because they will be a big part of triggering it.Nuzlocke-mode: Adding the popular self-imposed difficulty challenge from Pokémon to the game. If you don't know it, it means that if one of your creatures gets defeated, you have to release it and you get to only capture one creature per region. The mode would take care of these restrictions for you, of course.  Co-op mode: I love co-op and there's not nearly enough games with it. Since Soulblaze is turn-based, it's possible to insert a 2-player mode but I'd have to figure out how to handle displaying 2 Animons per side and how to handle turns then. Do the player both plan their turn and they play out together or do they go one after the other? Maybe alternating with the enemy? Will think about this.Unlockable comic pages: Story is always important to me and I literally can't create a game without having a story in mind. While Soulblaze might be my least story-focused game so far, I still want it to contain lore and especially character stories. In that regard, I want players to be able to unlock comic pages while they play which they can read in the collection and don't worry, I'll add visual descriptions to those as well, of course!Keep in mind that those are features I wish to implement and not guaranteed. I don't know if I will have the time to implement all of these or that I don't run into serious technical issues that I can't solve. Solo dev means that your time is so split between everything that every mid to large hurdle can mean it has to be put on hold indefinitely. But I'll do my best and it also helps that I really, really want those features.Lore Sneak-PeekOver a decade ago the Observer arrived on Earth, a huge crystalline lifeform that appeared to be peaceful. A few years later, for unknown reasons, it shattered and fragments of it grew to became the Animons we know today. Bindshards are made from the outer shell of the Observer and are used to capture Animons because they naturally want to return to their original form, therefore binding easily with the material of the Observer.When exactly the Soulblaze was discovered is unclear but the first Animancers experienced alteration of the Animons' physical shape when they got really excited, scared, or angry. It happens when the soul literally ignites in a surge of energy. Humans, as they do, saw the power and tried to trigger the Soulblaze within themselves which did not go so great...  the results are, well, you have met some of the bosses, haven't you...? Previous Entry Accessibility in Games - Where do I start? Comments You must log in to join the conversation. Don't have a GameDev.net account? Sign up! #devlog #little #bit #polish
    GAMEDEV.NET
    Devlog #9: A Little Bit of Polish
    Devlog #9: A Little Bit of Polish posted in Sword and Quill Devlog Published May 26, 2025 Advertisement Hi, wonderful humans! It's time for another devlog.The Creature Collector Fest is over but the Next Fest is right around the corner! Juggling priorities gets harder and harder between improving the demo, working on the main game, making sure the Twitch integration works, adding Animons, capturing fixing wild bugs, marketing. I'm trying to use Codecks more consistently which definitely helps. Did you know I have an open board? You can check what I'm working on or what I have planned and even up-vote features you like to see most. You can find it here.With another upcoming event, the Access-Ability showcase, I've been prioritizing accessibility features like optimizing the UI for scaling to reduce cases where elements get pushed out of the screen. Next, I'm trying to tackle adding more options for photosensitivity. You can already disable screenshake but there's currently no option for reducing flashing lights. Time for PolishWith a little bit of time opening up, I managed to dedicate some of it to polish which felt incredibly good after weeks of very technical tasks. I improved the win screen that shows when you beat either the demo or the alpha and added animations to it (loving Tweens y'all!). Honestly, the win screen was all over the place before that with elements overlapping each other, text being cut off, and more abominations. Oof...At the end of last week,  I started working on preventing the UI getting pushed around when you or the enemy had too many dice. I added dynamic spacing between the dice that takes the amount and the width of the container into account and added a nice bouncy hover effect to make it easier to see when they are close together. Again, using Tweens, I scale the node up and down accordingly with the "elastic" curve for that nice swing effect at the end.I hope to find time to add more battle effects to tricks which are also in need of a lot of polish. Many attacks just reuse the tackle or jump attack effect but they deserve their own little identity. This might lead to refactoring the entire battle effect system which I implemented a while ago before I learned how to write better code. I'm currently creating a scene for each effect with the battle effect resource which has a drop-down for all sorts of effect types like animation, tween, particles, and so on. I can assign a target control and tell it what to do from self-defined presets, if the effect should target the player or opponent, and so on. I probably want to rework it to be similar to how I create tricks now, where I can add trick features as a sub-resource indefinitely to customize it however I want because – like with the old tricks – I cannot combine effects like tween and particles with the current battle effect system.A few smaller tweaks are the run menu on the map collapsing when not needed and the starter selection screen which now shows the Animon's quirk when hovering/focusing on it.Roadmap(?)Planning the next months is bleh (I hate planning!) but it's gotta be done. I already moved some feature back into the early access period to make sure I get the base game loop solid and working before that. Currently, I'm eyeing end of July for early access which is after the Summer Sale but before the gamescom. Until then, I want all three regions to have roughly the same amount of Animons and the difficulty curve more or less balanced (and of course zero bugs and full optimization which is a reasonable and realistic expectation). There's also a story-cinematic I have planned as an intro to give you a little bit of narrative context but we'll see if I get around drawing all that.A few features I have planned for the ea period are:Soulblaze mechanic: We all want it, we all love it: Evolution, transformation, digitize, super sayjan form, and what not. Soulblaze forms have been on the list since the beginning but I didn't want to add it until I was sure I have settled on the dice mechanics because they will be a big part of triggering it.Nuzlocke-mode: Adding the popular self-imposed difficulty challenge from Pokémon to the game. If you don't know it, it means that if one of your creatures gets defeated, you have to release it and you get to only capture one creature per region. The mode would take care of these restrictions for you, of course.  Co-op mode: I love co-op and there's not nearly enough games with it. Since Soulblaze is turn-based, it's possible to insert a 2-player mode but I'd have to figure out how to handle displaying 2 Animons per side and how to handle turns then. Do the player both plan their turn and they play out together or do they go one after the other? Maybe alternating with the enemy? Will think about this.Unlockable comic pages: Story is always important to me and I literally can't create a game without having a story in mind. While Soulblaze might be my least story-focused game so far, I still want it to contain lore and especially character stories. In that regard, I want players to be able to unlock comic pages while they play which they can read in the collection and don't worry, I'll add visual descriptions to those as well, of course!Keep in mind that those are features I wish to implement and not guaranteed (well, except for Soulblaze forms which... kinda have to be in there, y'know?). I don't know if I will have the time to implement all of these or that I don't run into serious technical issues that I can't solve. Solo dev means that your time is so split between everything that every mid to large hurdle can mean it has to be put on hold indefinitely. But I'll do my best and it also helps that I really, really want those features.Lore Sneak-PeekOver a decade ago the Observer arrived on Earth, a huge crystalline lifeform that appeared to be peaceful. A few years later, for unknown reasons, it shattered and fragments of it grew to became the Animons we know today. Bindshards are made from the outer shell of the Observer and are used to capture Animons because they naturally want to return to their original form, therefore binding easily with the material of the Observer.When exactly the Soulblaze was discovered is unclear but the first Animancers experienced alteration of the Animons' physical shape when they got really excited, scared, or angry. It happens when the soul literally ignites in a surge of energy. Humans, as they do, saw the power and tried to trigger the Soulblaze within themselves which did not go so great...  the results are, well, you have met some of the bosses, haven't you...? Previous Entry Accessibility in Games - Where do I start? Comments You must log in to join the conversation. Don't have a GameDev.net account? Sign up!
    0 Comentários 0 Compartilhamentos
  • Devlog #2 | Itch.io Repost

    Devlog #2 | Itch.io Repost

    posted in Cancel Me! - Devlog #2 | Itch.io Repost
    for project Cancel Me!

    Published May 19, 2025

    Advertisement

    It's now been 4 weeks since I began working on my card game, Cancel Me!, themed around influencers and social media, and I have finished the 9 response cards for my upcoming prototype for playtesting sessions with friends and family. I still remember to update the image files available for download, too.Let me skim through a few of the cards:Arguable the most simple card, where the player being targeted with a Drama card gets to pass on it, and players vote on what happens next- the Drama card works or not. A common excuse, the "I got hacked!" card uses the phrase to block the Drama card being used against you.Another common excuse, except this time, it doesn't do a great job of blocking the Drama card.Very true, and it allows you to play a Drama card from your hand to play against the one who targeted you.I'm now switching focus to the Chaos cards which might have a purple theme, and it switches up the game like I told you in the last log.Thanks for reading! Stay alert for the devlog, consider giving this post a like or maybe even becoming a follower, and consider checking out my website.Cancel Me!:

    Comments

    Nobody has left a comment. You can be the first!

    You must log in to join the conversation.
    Don't have a GameDev.net account? Sign up!
    #devlog #itchio #repost
    Devlog #2 | Itch.io Repost
    Devlog #2 | Itch.io Repost posted in Cancel Me! - Devlog #2 | Itch.io Repost for project Cancel Me! Published May 19, 2025 Advertisement It's now been 4 weeks since I began working on my card game, Cancel Me!, themed around influencers and social media, and I have finished the 9 response cards for my upcoming prototype for playtesting sessions with friends and family. I still remember to update the image files available for download, too.Let me skim through a few of the cards:Arguable the most simple card, where the player being targeted with a Drama card gets to pass on it, and players vote on what happens next- the Drama card works or not. A common excuse, the "I got hacked!" card uses the phrase to block the Drama card being used against you.Another common excuse, except this time, it doesn't do a great job of blocking the Drama card.Very true, and it allows you to play a Drama card from your hand to play against the one who targeted you.I'm now switching focus to the Chaos cards which might have a purple theme, and it switches up the game like I told you in the last log.Thanks for reading! Stay alert for the devlog, consider giving this post a like or maybe even becoming a follower, and consider checking out my website.Cancel Me!: Comments Nobody has left a comment. You can be the first! You must log in to join the conversation. Don't have a GameDev.net account? Sign up! #devlog #itchio #repost
    Devlog #2 | Itch.io Repost
    Devlog #2 | Itch.io Repost posted in Cancel Me! - Devlog #2 | Itch.io Repost for project Cancel Me! Published May 19, 2025 Advertisement It's now been 4 weeks since I began working on my card game, Cancel Me!, themed around influencers and social media, and I have finished the 9 response cards for my upcoming prototype for playtesting sessions with friends and family. I still remember to update the image files available for download, too.Let me skim through a few of the cards:Arguable the most simple card, where the player being targeted with a Drama card gets to pass on it, and players vote on what happens next- the Drama card works or not. A common excuse, the "I got hacked!" card uses the phrase to block the Drama card being used against you.Another common excuse, except this time, it doesn't do a great job of blocking the Drama card.Very true, and it allows you to play a Drama card from your hand to play against the one who targeted you.I'm now switching focus to the Chaos cards which might have a purple theme (but you can comment design ideas), and it switches up the game like I told you in the last log.Thanks for reading! Stay alert for the devlog, consider giving this post a like or maybe even becoming a follower, and consider checking out my website.Cancel Me!: https://maven-builds.itch.io/cancel-me Comments Nobody has left a comment. You can be the first! You must log in to join the conversation. Don't have a GameDev.net account? Sign up!
    0 Comentários 0 Compartilhamentos
  • Devlog 0

    Devlog 0

    posted in Smithing Game Devlogs
    for project Smithing Game

    Published May 19, 2025

    Advertisement

    This is the initial devlog of my game that I am working on called Smithing Game. So, let's get into it!What is this game?This game has been my main project for the past six months. It's about the player going through the process of mining materials, then taking those materials picking what blade, guard, and handle you want for your sword. Then you go on to melt the materials, pour them into the molds, hammer them into shape before finally cooling them down and assembling the parts into one sword before going to your shop to put the sword on sale.Mining:The mining section will have the player mine out some ores which will be randomly generated. You also will be able to buy new mining areas for more rare and valuable ores to spawn.Templates:You will be able to choose from among five different blades, 5 different guards, and 5 different handles that will make up your sword. You will start off with but as you progress you can buy more and more templates.Melting:You will be pumping the forge to make sure the heat of the forge stays just right to melt the metal without damaging it in any way.Hammering:You take the parts of your sword to the anvil and with your hammer and you will hammer them into the proper shape.Cooling:After the parts are in the right shape you dip them in a bucket of water to cool them fully.Assembling:You now put the sword together to make into one whole object.Shop:Here you will put your swords up for sale and customers will randomly come and buy the swords from you gaining you a profit. You also will be able to buy expansions to your shop to gain more attention and to be able to have more swords up for sale.The development started about 6 months ago during the start of the new school semester after winter break. I started working with my mentor and with her guidance I formed the idea for this game. Once I had the concept for what I wanted the game to be I got started working immediately beginning with the mining system.While the game doesn’t look very pretty I have made the core mechanicsand I am hoping to finish out the game before the end of the summer.I will be posting more devlogs documenting my progress on the game monthly so make sure you keep sure you don’t miss any!

    Comments

    You must log in to join the conversation.
    Don't have a GameDev.net account? Sign up!
    #devlog
    Devlog 0
    Devlog 0 posted in Smithing Game Devlogs for project Smithing Game Published May 19, 2025 Advertisement This is the initial devlog of my game that I am working on called Smithing Game. So, let's get into it!What is this game?This game has been my main project for the past six months. It's about the player going through the process of mining materials, then taking those materials picking what blade, guard, and handle you want for your sword. Then you go on to melt the materials, pour them into the molds, hammer them into shape before finally cooling them down and assembling the parts into one sword before going to your shop to put the sword on sale.Mining:The mining section will have the player mine out some ores which will be randomly generated. You also will be able to buy new mining areas for more rare and valuable ores to spawn.Templates:You will be able to choose from among five different blades, 5 different guards, and 5 different handles that will make up your sword. You will start off with but as you progress you can buy more and more templates.Melting:You will be pumping the forge to make sure the heat of the forge stays just right to melt the metal without damaging it in any way.Hammering:You take the parts of your sword to the anvil and with your hammer and you will hammer them into the proper shape.Cooling:After the parts are in the right shape you dip them in a bucket of water to cool them fully.Assembling:You now put the sword together to make into one whole object.Shop:Here you will put your swords up for sale and customers will randomly come and buy the swords from you gaining you a profit. You also will be able to buy expansions to your shop to gain more attention and to be able to have more swords up for sale.The development started about 6 months ago during the start of the new school semester after winter break. I started working with my mentor and with her guidance I formed the idea for this game. Once I had the concept for what I wanted the game to be I got started working immediately beginning with the mining system.While the game doesn’t look very pretty I have made the core mechanicsand I am hoping to finish out the game before the end of the summer.I will be posting more devlogs documenting my progress on the game monthly so make sure you keep sure you don’t miss any! Comments You must log in to join the conversation. Don't have a GameDev.net account? Sign up! #devlog
    Devlog 0
    Devlog 0 posted in Smithing Game Devlogs for project Smithing Game Published May 19, 2025 Advertisement This is the initial devlog of my game that I am working on called Smithing Game (The name is a work in progress). So, let's get into it!What is this game?This game has been my main project for the past six months. It's about the player going through the process of mining materials, then taking those materials picking what blade, guard, and handle you want for your sword. Then you go on to melt the materials, pour them into the molds, hammer them into shape before finally cooling them down and assembling the parts into one sword before going to your shop to put the sword on sale.Mining:The mining section will have the player mine out some ores which will be randomly generated. You also will be able to buy new mining areas for more rare and valuable ores to spawn.Templates:You will be able to choose from among five different blades, 5 different guards, and 5 different handles that will make up your sword. You will start off with but as you progress you can buy more and more templates.Melting:You will be pumping the forge to make sure the heat of the forge stays just right to melt the metal without damaging it in any way.Hammering:You take the parts of your sword to the anvil and with your hammer and you will hammer them into the proper shape.Cooling:After the parts are in the right shape you dip them in a bucket of water to cool them fully.Assembling:You now put the sword together to make into one whole object.Shop:Here you will put your swords up for sale and customers will randomly come and buy the swords from you gaining you a profit. You also will be able to buy expansions to your shop to gain more attention and to be able to have more swords up for sale.The development started about 6 months ago during the start of the new school semester after winter break. I started working with my mentor and with her guidance I formed the idea for this game. Once I had the concept for what I wanted the game to be I got started working immediately beginning with the mining system.While the game doesn’t look very pretty I have made the core mechanics (Excluding the shop which is what I am currently working on) and I am hoping to finish out the game before the end of the summer.I will be posting more devlogs documenting my progress on the game monthly so make sure you keep sure you don’t miss any! Comments You must log in to join the conversation. Don't have a GameDev.net account? Sign up!
    0 Comentários 0 Compartilhamentos
  • Addressables: Planning and best practices

    Games today are bigger than ever. As they continue to explore the limits of modern device hardware, it becomes increasingly critical for developers to manage content efficiently at runtime. And, as publishers look to optimize their games’ retention and monetization metrics, a small game client and dynamic over-the-air content updates have become baseline requirements for many successful games.Unity provides an end-to-end pipeline to help developers and publishers succeed in today’s gaming marketplace. That pipeline starts and ends with Addressables, a Unity package that launched in 2019 and now powers thousands of successful live games and tens of thousands more in development.The Addressables package provides a user interfaceand API for organizing Unity assets to be built into AssetBundles and loaded and unloaded dynamically at runtime. Whether AssetBundles are shipped with your base game or hosted and delivered from a remote content delivery networklike Cloud Content Delivery, Addressables helps you load the assets you need, only when you need them.While the Addressables system can simplify many aspects of content management, it’s not a “set it and forget it” feature. The choices you make about how to organize, build, load, and unload addressable assets have significant implications for your game’s size and performance.This guide explores some of the most important factors to consider so that you can get the most out of the Addressables system. At the end of this blog, you’ll find helpful “cheat sheets” that provide general settings and strategy recommendations based on common Addressables use cases.Of course, the best strategy will depend on the game you’re building and your goals. Treat this guide as a reference to be used together with Unity Learn materials, Unity Manual documentation, and the community-driven forum for Addressables.At its core, Addressables is a tool for building and working with AssetBundles. Before diving into the Addressables UI and API, it’s important to get familiar with the AssetBundles archive file format and some of the runtime implications.You can think of AssetBundles as containers – they are archive files built for your target platforms that can contain assets like models, textures, prefabs, ScriptableObjects, audio clips, and even entire scenes that Unity can load at runtime.A key feature of AssetBundles is that they can express dependencies between one another. For example, AssetBundle 1 might contain a prefab that depends on a texture in AssetBundle 2. When you use Addressables to load the prefab at runtime, the Addressables system will automatically load AssetBundle 2 and the dependent texture into memory. And, if AssetBundle 1 has another asset that depends on an asset in AssetBundle 3, AssetBundle 3 will also be loaded into memory, and so on.When your game is running, the Addressables system tracks active references for all assets – including dependent assets like the texture discussed above – to determine which ones need to be in memory. An asset loaded from an AssetBundle cannot be released from memory until both its reference count and all other asset reference counts in the same AssetBundle are at 0. The AssetBundle itself can be released from memory only when all asset reference counts in the AssetBundle are at 0.Keeping in mind this tight relationship between Addressables and AssetBundles, the most important rule when organizing your Addressables content is to create AssetBundles that contain discrete sets of assets that you expect to be loaded and unloaded together.The most important decision you’ll likely make while using Addressables is how to organize your assets into Addressables groups. Here are a few questions to consider:Should you create many small groups or a smaller number of large groups?For each group, how many AssetBundles should you aim to generate?Should you use labels?Should you give your groups local or remote load paths?While we would love to give a single answer, the best Addressables grouping strategy will depend on several factors that are specific to your game.Remember: Addressables groups provide the organizational structure for your addressable assets that determines how those assets will be built into AssetBundles. So the best organizational strategy will be the one that packs, loads, and unloads your AssetBundles most effectively based on your game’s unique structure, goals, and limitations.Before you start organizing your Addressables content, make sure you have a solid grasp on the following:1. Your game’s structure and roadmap2. Your game’s platform strengths and limitations3. Your primary goalin using Addressables to optimize your game’s performanceWe’ll tackle each of these factors below.The first factor to consider is your game’s structure and roadmap.By “structure,” we mean the actual architecture of your game. Is your game a linear, single-player journey where the player will progress through a predictable set of levels or environments? Is it a multiplatform PvP game with thousands of vanity items that could be instantiated at unpredictable times? Your game’s structure will determine when you will need to have assets loaded and ready to use, and when you’ll be able to unload assets and AssetBundles from memory.Remember, try to create AssetBundles that contain only the assets that need to be loaded together and can be unloaded together. If your game is a linear journey with distinct break points, consider organizing Addressables groups into larger subsets of content associated with each section of your game. That way, those assets can be loaded and unloaded together.If your game is non-linear and more unpredictable, opt for smaller groups that will generate smaller AssetBundles, allowing you to load and unload more dynamically. Always aim to use logical and meaningful names for your groups to help you quickly locate assets and optimize your layout.“Roadmap” refers to how your game will evolve over time. Once your game ships to players, will it remain mostly unchanged aside from occasional bug fixes or game balance patches? Or do you expect to add new content on a regular basis without requiring your players to install a large client update?Your content roadmap helps inform your grouping strategy. If your game’s content will be self-contained and not updated after launch, focus your grouping strategy around the structural considerations discussed above. If your game will require frequent content updates, group your content in a way that will allow players to download exactly what they need, when they need it.Consider using labels to help identify content from distinct bundles that will be needed together at runtime, such as a set of cosmetic items that will grow over time as your game matures. You can also use the “Pack Together By Label” Bundle Mode in your Groups Settings to subdivide content you’ve logically grouped together.For example, perhaps you plan to launch a new “Halloween 2023” event with some cosmetic items for players to collect. Your “Halloween 2023 Outfits” group might contain assets with the labels “Hats,” “Shoes,” and “Masks.” You could then add a “Halloween 2023” label to all the assets in this group. Using the “Pack Together By Label” Bundle Mode for this group will create three AssetBundles at build time.At runtime, you could then load all addressable assets with the Label “Hats” in your character customization screen to ensure all assets with that label are downloaded, loaded into memory, and ready for players to view. Or you could load all addressable assets with the label “Halloween 2023” on your promotional page for your event, ensuring they are ready to be displayed to your players.Having a deep understanding of your game’s structure and roadmap will help you make informed decisions about your content organization that will be beneficial throughout your game’s lifecycle.Next, we’ll tackle your platforms’ specific strengths and limitations and what they mean for your content strategy.The next factor to consider is the strengths and limitations of the platforms you’re targeting for distribution. In this section, we’ve outlined common platform targets for Addressables users, as well as some key considerations for each.Mobile and VRFor mobile and VR platforms, the most important considerations to keep in mind are app size, bundled content size, and download speeds.For your groups, consider the sets of content that your players will need immediately after install. Ensure this content is organized into groups with local load paths so that it will be included with your base game. Organize all other content into groups with remote load paths so that you can deliver this content over the air to your players.Opt for a group strategy that will build relatively small AssetBundles. The exact balance will depend on your game. Avoid extremely large bundles that will consume a substantial amount of memory and will be difficult to release once loaded. Similarly, avoid a huge number of tiny bundles that may create a very large Addressables catalog file that will be downloaded for every content update. Many tiny bundles can also have an impact on the speed at which your players can download the content they need, so be mindful of these pros and cons when determining the right balance for your game.Desktop and ConsolesFor desktop and consoles, the most important consideration is performance. Compared to mobile devices and wireless VR hardware, desktop and console hardware typically has fewer constraints around memory and disk storage. With this in mind, consider a group setting that will build uncompressed AssetBundles. This will provide the fastest possible loading time and can even provide for efficient patching on certain platforms.When developing for consoles specifically, pay close attention to any platform-specific caching restrictions that may apply. While mobile platforms allow you to take advantage of Unity’s AssetBundle Cache for downloaded content, this functionality is disabled by default at the Unity engine level for certain consoles and WebGL. Consider updating your base game with the new content on those platforms rather than attempting to deliver remote content over the air. Otherwise, you will need to create your own custom AssetBundle caching system and determine whether your solution complies with those platforms’ terms of service.After evaluating the strengths and limitations of your target platforms, identify one or two primary goals you’re trying to achieve by using the Addressables system. For example: Are you mainly aiming to reduce your base game’s size, or are you planning to deliver over-the-air content updates to players? To demonstrate, let’s discuss these options, and more, in detail below.Minimizing base game sizeIf your primary goal is to minimize your base game’s size, and you aren’t as concerned about memory limitations or large downloads after install, then your primary focus should be migrating as many assets as possible from scenes and Resources into one or more Addressables groups with remote load paths.Consider making the scenes in your project addressable and determine which, if any, must be included with the main player build. For those that can be delivered to players after install, include those scenes in groups with remote load paths. You can even build a player with one almost-empty scene, and load the rest of your game dynamically from there, as explained in this Open Projects Devlog video.If you make any scenes addressable, it’s best to make all of them addressable to reduce the chance and volume of unnecessary asset duplication.For groups that will generate AssetBundles to be hosted remotely, be sure to enable the AssetBundle Cache. This setting will ensure that downloaded AssetBundles will be cached on your players’ devices, preventing them from having to redownload each session.While it’s always good to keep in mind the runtime implications of many small bundles versus few large bundles, these considerations become more relevant when considering other goals you may have.Efficiently delivering remote content to playersIf your primary goal is the efficient delivery of remote content, your group structure should reflect how you aim to split content between “local”and “remote” content. Again, be sure to enable the AssetBundle Cache to cache downloaded content on players’ devices.The size, number, and Bundle Mode of these groups will depend on when you expect to deliver remote content to your players and how long you’re willing to let them wait for downloads to complete. For example, if your game’s structure will allow for delivery of all remote content shortly after they install the base game, you can opt for larger groups with Pack Together or Pack Together By Label, which will result in a small number of large downloads.If you expect to deliver smaller sets of remote content to players throughout their sessions that will be less disruptive to the experience, you can opt for smaller groups and/or a Bundle Mode setting that will generate smaller AssetBundles that will download much more quickly.In most cases, for groups containing remote content, consider Enabled, Excluding Cached for your AssetBundle Cyclic Redundancy Checkoption. This will provide additional assurances of your remote content’s integrity as it’s being cached to players’ devices, while avoiding the additional overhead of performing a CRC for loading content that’s already on player devices.Optimizing runtime memory usage and performanceIf your primary goal is optimizing the game’s runtime performance and memory usage, remember the most important rule of Addressables groups organization: Assets that you plan to load and unload at the same time should be grouped together.Generally speaking, this will mean creating smaller AssetBundles. You can achieve this in several ways, including creating smaller groups and/or avoiding the “Pack Together” Bundle Mode in your Group Settings for large groups that contain assets that won’t always be needed at the same time in your game.You should also keep an eye on runtime performance to help you spot potential issues or areas of optimization. Take advantage of official Unity tools like the Unity Profiler, the Memory Profiler package, or the Addressables Event Viewer, which can all help optimize your game’s performance.Be on the lookout for the upcoming Addressables Profiler Module, which will replace the Addressables Event Viewer. This new tool will provide even more in-depth information about how your code is loading and unloading addressable assets and AssetBundles, including detailed information about dependencies among your assets and AssetBundles.Multiple goalsOf course, most projects will have a number of goals associated with Addressables. In this case, there is truly no one-size-fits-all approach. You will need to evaluate the tradeoffs outlined above and find the group structure and settings that will best achieve the success you’ve defined.We recommend that you take advantage of the Addressables Build Report and the Addressables Profiler Module, available soon in Addressables 1.21.3. The Addressables Build Report will provide you with detailed information about the AssetBundles that were generated from your Addressables builds, including file size, potential duplicates, and in-depth dependency information. The Addressables Profiler Module is a new runtime analysis tool that takes advantage of this new dependency data, providing precise information about what was loaded by your Addressables code and why it was loaded.Below we’ve provided some handy “cheat sheets” for our recommended Addressables settings and strategies based on some of the most common use cases. Of course, these are just suggestions – it’s up to you to determine whether a suggestion aligns with your project’s unique structure and your specific goals.A mobile game with frequent content updatesA standalone, self-contained desktop or console gameA VR game built for Meta Quest 2If you have questions or want to learn more about the Addressables package, visit us in the Addressables forum. You can also connect with me directly on Twitter at @Unity_Jeff. Be sure to watch for new technical blogs from other Unity developers as part of the ongoing Tech from the Trenches series.
    #addressables #planning #best #practices
    Addressables: Planning and best practices
    Games today are bigger than ever. As they continue to explore the limits of modern device hardware, it becomes increasingly critical for developers to manage content efficiently at runtime. And, as publishers look to optimize their games’ retention and monetization metrics, a small game client and dynamic over-the-air content updates have become baseline requirements for many successful games.Unity provides an end-to-end pipeline to help developers and publishers succeed in today’s gaming marketplace. That pipeline starts and ends with Addressables, a Unity package that launched in 2019 and now powers thousands of successful live games and tens of thousands more in development.The Addressables package provides a user interfaceand API for organizing Unity assets to be built into AssetBundles and loaded and unloaded dynamically at runtime. Whether AssetBundles are shipped with your base game or hosted and delivered from a remote content delivery networklike Cloud Content Delivery, Addressables helps you load the assets you need, only when you need them.While the Addressables system can simplify many aspects of content management, it’s not a “set it and forget it” feature. The choices you make about how to organize, build, load, and unload addressable assets have significant implications for your game’s size and performance.This guide explores some of the most important factors to consider so that you can get the most out of the Addressables system. At the end of this blog, you’ll find helpful “cheat sheets” that provide general settings and strategy recommendations based on common Addressables use cases.Of course, the best strategy will depend on the game you’re building and your goals. Treat this guide as a reference to be used together with Unity Learn materials, Unity Manual documentation, and the community-driven forum for Addressables.At its core, Addressables is a tool for building and working with AssetBundles. Before diving into the Addressables UI and API, it’s important to get familiar with the AssetBundles archive file format and some of the runtime implications.You can think of AssetBundles as containers – they are archive files built for your target platforms that can contain assets like models, textures, prefabs, ScriptableObjects, audio clips, and even entire scenes that Unity can load at runtime.A key feature of AssetBundles is that they can express dependencies between one another. For example, AssetBundle 1 might contain a prefab that depends on a texture in AssetBundle 2. When you use Addressables to load the prefab at runtime, the Addressables system will automatically load AssetBundle 2 and the dependent texture into memory. And, if AssetBundle 1 has another asset that depends on an asset in AssetBundle 3, AssetBundle 3 will also be loaded into memory, and so on.When your game is running, the Addressables system tracks active references for all assets – including dependent assets like the texture discussed above – to determine which ones need to be in memory. An asset loaded from an AssetBundle cannot be released from memory until both its reference count and all other asset reference counts in the same AssetBundle are at 0. The AssetBundle itself can be released from memory only when all asset reference counts in the AssetBundle are at 0.Keeping in mind this tight relationship between Addressables and AssetBundles, the most important rule when organizing your Addressables content is to create AssetBundles that contain discrete sets of assets that you expect to be loaded and unloaded together.The most important decision you’ll likely make while using Addressables is how to organize your assets into Addressables groups. Here are a few questions to consider:Should you create many small groups or a smaller number of large groups?For each group, how many AssetBundles should you aim to generate?Should you use labels?Should you give your groups local or remote load paths?While we would love to give a single answer, the best Addressables grouping strategy will depend on several factors that are specific to your game.Remember: Addressables groups provide the organizational structure for your addressable assets that determines how those assets will be built into AssetBundles. So the best organizational strategy will be the one that packs, loads, and unloads your AssetBundles most effectively based on your game’s unique structure, goals, and limitations.Before you start organizing your Addressables content, make sure you have a solid grasp on the following:1. Your game’s structure and roadmap2. Your game’s platform strengths and limitations3. Your primary goalin using Addressables to optimize your game’s performanceWe’ll tackle each of these factors below.The first factor to consider is your game’s structure and roadmap.By “structure,” we mean the actual architecture of your game. Is your game a linear, single-player journey where the player will progress through a predictable set of levels or environments? Is it a multiplatform PvP game with thousands of vanity items that could be instantiated at unpredictable times? Your game’s structure will determine when you will need to have assets loaded and ready to use, and when you’ll be able to unload assets and AssetBundles from memory.Remember, try to create AssetBundles that contain only the assets that need to be loaded together and can be unloaded together. If your game is a linear journey with distinct break points, consider organizing Addressables groups into larger subsets of content associated with each section of your game. That way, those assets can be loaded and unloaded together.If your game is non-linear and more unpredictable, opt for smaller groups that will generate smaller AssetBundles, allowing you to load and unload more dynamically. Always aim to use logical and meaningful names for your groups to help you quickly locate assets and optimize your layout.“Roadmap” refers to how your game will evolve over time. Once your game ships to players, will it remain mostly unchanged aside from occasional bug fixes or game balance patches? Or do you expect to add new content on a regular basis without requiring your players to install a large client update?Your content roadmap helps inform your grouping strategy. If your game’s content will be self-contained and not updated after launch, focus your grouping strategy around the structural considerations discussed above. If your game will require frequent content updates, group your content in a way that will allow players to download exactly what they need, when they need it.Consider using labels to help identify content from distinct bundles that will be needed together at runtime, such as a set of cosmetic items that will grow over time as your game matures. You can also use the “Pack Together By Label” Bundle Mode in your Groups Settings to subdivide content you’ve logically grouped together.For example, perhaps you plan to launch a new “Halloween 2023” event with some cosmetic items for players to collect. Your “Halloween 2023 Outfits” group might contain assets with the labels “Hats,” “Shoes,” and “Masks.” You could then add a “Halloween 2023” label to all the assets in this group. Using the “Pack Together By Label” Bundle Mode for this group will create three AssetBundles at build time.At runtime, you could then load all addressable assets with the Label “Hats” in your character customization screen to ensure all assets with that label are downloaded, loaded into memory, and ready for players to view. Or you could load all addressable assets with the label “Halloween 2023” on your promotional page for your event, ensuring they are ready to be displayed to your players.Having a deep understanding of your game’s structure and roadmap will help you make informed decisions about your content organization that will be beneficial throughout your game’s lifecycle.Next, we’ll tackle your platforms’ specific strengths and limitations and what they mean for your content strategy.The next factor to consider is the strengths and limitations of the platforms you’re targeting for distribution. In this section, we’ve outlined common platform targets for Addressables users, as well as some key considerations for each.Mobile and VRFor mobile and VR platforms, the most important considerations to keep in mind are app size, bundled content size, and download speeds.For your groups, consider the sets of content that your players will need immediately after install. Ensure this content is organized into groups with local load paths so that it will be included with your base game. Organize all other content into groups with remote load paths so that you can deliver this content over the air to your players.Opt for a group strategy that will build relatively small AssetBundles. The exact balance will depend on your game. Avoid extremely large bundles that will consume a substantial amount of memory and will be difficult to release once loaded. Similarly, avoid a huge number of tiny bundles that may create a very large Addressables catalog file that will be downloaded for every content update. Many tiny bundles can also have an impact on the speed at which your players can download the content they need, so be mindful of these pros and cons when determining the right balance for your game.Desktop and ConsolesFor desktop and consoles, the most important consideration is performance. Compared to mobile devices and wireless VR hardware, desktop and console hardware typically has fewer constraints around memory and disk storage. With this in mind, consider a group setting that will build uncompressed AssetBundles. This will provide the fastest possible loading time and can even provide for efficient patching on certain platforms.When developing for consoles specifically, pay close attention to any platform-specific caching restrictions that may apply. While mobile platforms allow you to take advantage of Unity’s AssetBundle Cache for downloaded content, this functionality is disabled by default at the Unity engine level for certain consoles and WebGL. Consider updating your base game with the new content on those platforms rather than attempting to deliver remote content over the air. Otherwise, you will need to create your own custom AssetBundle caching system and determine whether your solution complies with those platforms’ terms of service.After evaluating the strengths and limitations of your target platforms, identify one or two primary goals you’re trying to achieve by using the Addressables system. For example: Are you mainly aiming to reduce your base game’s size, or are you planning to deliver over-the-air content updates to players? To demonstrate, let’s discuss these options, and more, in detail below.Minimizing base game sizeIf your primary goal is to minimize your base game’s size, and you aren’t as concerned about memory limitations or large downloads after install, then your primary focus should be migrating as many assets as possible from scenes and Resources into one or more Addressables groups with remote load paths.Consider making the scenes in your project addressable and determine which, if any, must be included with the main player build. For those that can be delivered to players after install, include those scenes in groups with remote load paths. You can even build a player with one almost-empty scene, and load the rest of your game dynamically from there, as explained in this Open Projects Devlog video.If you make any scenes addressable, it’s best to make all of them addressable to reduce the chance and volume of unnecessary asset duplication.For groups that will generate AssetBundles to be hosted remotely, be sure to enable the AssetBundle Cache. This setting will ensure that downloaded AssetBundles will be cached on your players’ devices, preventing them from having to redownload each session.While it’s always good to keep in mind the runtime implications of many small bundles versus few large bundles, these considerations become more relevant when considering other goals you may have.Efficiently delivering remote content to playersIf your primary goal is the efficient delivery of remote content, your group structure should reflect how you aim to split content between “local”and “remote” content. Again, be sure to enable the AssetBundle Cache to cache downloaded content on players’ devices.The size, number, and Bundle Mode of these groups will depend on when you expect to deliver remote content to your players and how long you’re willing to let them wait for downloads to complete. For example, if your game’s structure will allow for delivery of all remote content shortly after they install the base game, you can opt for larger groups with Pack Together or Pack Together By Label, which will result in a small number of large downloads.If you expect to deliver smaller sets of remote content to players throughout their sessions that will be less disruptive to the experience, you can opt for smaller groups and/or a Bundle Mode setting that will generate smaller AssetBundles that will download much more quickly.In most cases, for groups containing remote content, consider Enabled, Excluding Cached for your AssetBundle Cyclic Redundancy Checkoption. This will provide additional assurances of your remote content’s integrity as it’s being cached to players’ devices, while avoiding the additional overhead of performing a CRC for loading content that’s already on player devices.Optimizing runtime memory usage and performanceIf your primary goal is optimizing the game’s runtime performance and memory usage, remember the most important rule of Addressables groups organization: Assets that you plan to load and unload at the same time should be grouped together.Generally speaking, this will mean creating smaller AssetBundles. You can achieve this in several ways, including creating smaller groups and/or avoiding the “Pack Together” Bundle Mode in your Group Settings for large groups that contain assets that won’t always be needed at the same time in your game.You should also keep an eye on runtime performance to help you spot potential issues or areas of optimization. Take advantage of official Unity tools like the Unity Profiler, the Memory Profiler package, or the Addressables Event Viewer, which can all help optimize your game’s performance.Be on the lookout for the upcoming Addressables Profiler Module, which will replace the Addressables Event Viewer. This new tool will provide even more in-depth information about how your code is loading and unloading addressable assets and AssetBundles, including detailed information about dependencies among your assets and AssetBundles.Multiple goalsOf course, most projects will have a number of goals associated with Addressables. In this case, there is truly no one-size-fits-all approach. You will need to evaluate the tradeoffs outlined above and find the group structure and settings that will best achieve the success you’ve defined.We recommend that you take advantage of the Addressables Build Report and the Addressables Profiler Module, available soon in Addressables 1.21.3. The Addressables Build Report will provide you with detailed information about the AssetBundles that were generated from your Addressables builds, including file size, potential duplicates, and in-depth dependency information. The Addressables Profiler Module is a new runtime analysis tool that takes advantage of this new dependency data, providing precise information about what was loaded by your Addressables code and why it was loaded.Below we’ve provided some handy “cheat sheets” for our recommended Addressables settings and strategies based on some of the most common use cases. Of course, these are just suggestions – it’s up to you to determine whether a suggestion aligns with your project’s unique structure and your specific goals.A mobile game with frequent content updatesA standalone, self-contained desktop or console gameA VR game built for Meta Quest 2If you have questions or want to learn more about the Addressables package, visit us in the Addressables forum. You can also connect with me directly on Twitter at @Unity_Jeff. Be sure to watch for new technical blogs from other Unity developers as part of the ongoing Tech from the Trenches series. #addressables #planning #best #practices
    UNITY.COM
    Addressables: Planning and best practices
    Games today are bigger than ever. As they continue to explore the limits of modern device hardware, it becomes increasingly critical for developers to manage content efficiently at runtime. And, as publishers look to optimize their games’ retention and monetization metrics, a small game client and dynamic over-the-air content updates have become baseline requirements for many successful games.Unity provides an end-to-end pipeline to help developers and publishers succeed in today’s gaming marketplace. That pipeline starts and ends with Addressables, a Unity package that launched in 2019 and now powers thousands of successful live games and tens of thousands more in development.The Addressables package provides a user interface (UI) and API for organizing Unity assets to be built into AssetBundles and loaded and unloaded dynamically at runtime. Whether AssetBundles are shipped with your base game or hosted and delivered from a remote content delivery network (CDN) like Cloud Content Delivery, Addressables helps you load the assets you need, only when you need them.While the Addressables system can simplify many aspects of content management, it’s not a “set it and forget it” feature. The choices you make about how to organize, build, load, and unload addressable assets have significant implications for your game’s size and performance.This guide explores some of the most important factors to consider so that you can get the most out of the Addressables system. At the end of this blog, you’ll find helpful “cheat sheets” that provide general settings and strategy recommendations based on common Addressables use cases.Of course, the best strategy will depend on the game you’re building and your goals. Treat this guide as a reference to be used together with Unity Learn materials, Unity Manual documentation, and the community-driven forum for Addressables.At its core, Addressables is a tool for building and working with AssetBundles. Before diving into the Addressables UI and API, it’s important to get familiar with the AssetBundles archive file format and some of the runtime implications.You can think of AssetBundles as containers – they are archive files built for your target platforms that can contain assets like models, textures, prefabs, ScriptableObjects, audio clips, and even entire scenes that Unity can load at runtime.A key feature of AssetBundles is that they can express dependencies between one another. For example, AssetBundle 1 might contain a prefab that depends on a texture in AssetBundle 2. When you use Addressables to load the prefab at runtime, the Addressables system will automatically load AssetBundle 2 and the dependent texture into memory. And, if AssetBundle 1 has another asset that depends on an asset in AssetBundle 3, AssetBundle 3 will also be loaded into memory, and so on.When your game is running, the Addressables system tracks active references for all assets – including dependent assets like the texture discussed above – to determine which ones need to be in memory. An asset loaded from an AssetBundle cannot be released from memory until both its reference count and all other asset reference counts in the same AssetBundle are at 0. The AssetBundle itself can be released from memory only when all asset reference counts in the AssetBundle are at 0.Keeping in mind this tight relationship between Addressables and AssetBundles, the most important rule when organizing your Addressables content is to create AssetBundles that contain discrete sets of assets that you expect to be loaded and unloaded together.The most important decision you’ll likely make while using Addressables is how to organize your assets into Addressables groups. Here are a few questions to consider:Should you create many small groups or a smaller number of large groups?For each group, how many AssetBundles should you aim to generate (i.e., should you pack the assets in that group together, separately, or by label)?Should you use labels?Should you give your groups local or remote load paths?While we would love to give a single answer, the best Addressables grouping strategy will depend on several factors that are specific to your game.Remember: Addressables groups provide the organizational structure for your addressable assets that determines how those assets will be built into AssetBundles. So the best organizational strategy will be the one that packs, loads, and unloads your AssetBundles most effectively based on your game’s unique structure, goals, and limitations.Before you start organizing your Addressables content, make sure you have a solid grasp on the following:1. Your game’s structure and roadmap2. Your game’s platform strengths and limitations3. Your primary goal(s) in using Addressables to optimize your game’s performanceWe’ll tackle each of these factors below.The first factor to consider is your game’s structure and roadmap.By “structure,” we mean the actual architecture of your game. Is your game a linear, single-player journey where the player will progress through a predictable set of levels or environments? Is it a multiplatform PvP game with thousands of vanity items that could be instantiated at unpredictable times? Your game’s structure will determine when you will need to have assets loaded and ready to use, and when you’ll be able to unload assets and AssetBundles from memory.Remember, try to create AssetBundles that contain only the assets that need to be loaded together and can be unloaded together. If your game is a linear journey with distinct break points, consider organizing Addressables groups into larger subsets of content associated with each section of your game. That way, those assets can be loaded and unloaded together.If your game is non-linear and more unpredictable, opt for smaller groups that will generate smaller AssetBundles, allowing you to load and unload more dynamically. Always aim to use logical and meaningful names for your groups to help you quickly locate assets and optimize your layout.“Roadmap” refers to how your game will evolve over time. Once your game ships to players, will it remain mostly unchanged aside from occasional bug fixes or game balance patches? Or do you expect to add new content on a regular basis without requiring your players to install a large client update?Your content roadmap helps inform your grouping strategy. If your game’s content will be self-contained and not updated after launch, focus your grouping strategy around the structural considerations discussed above. If your game will require frequent content updates, group your content in a way that will allow players to download exactly what they need, when they need it.Consider using labels to help identify content from distinct bundles that will be needed together at runtime, such as a set of cosmetic items that will grow over time as your game matures. You can also use the “Pack Together By Label” Bundle Mode in your Groups Settings to subdivide content you’ve logically grouped together.For example, perhaps you plan to launch a new “Halloween 2023” event with some cosmetic items for players to collect. Your “Halloween 2023 Outfits” group might contain assets with the labels “Hats,” “Shoes,” and “Masks.” You could then add a “Halloween 2023” label to all the assets in this group. Using the “Pack Together By Label” Bundle Mode for this group will create three AssetBundles at build time.At runtime, you could then load all addressable assets with the Label “Hats” in your character customization screen to ensure all assets with that label are downloaded, loaded into memory, and ready for players to view. Or you could load all addressable assets with the label “Halloween 2023” on your promotional page for your event, ensuring they are ready to be displayed to your players.Having a deep understanding of your game’s structure and roadmap will help you make informed decisions about your content organization that will be beneficial throughout your game’s lifecycle.Next, we’ll tackle your platforms’ specific strengths and limitations and what they mean for your content strategy.The next factor to consider is the strengths and limitations of the platforms you’re targeting for distribution. In this section, we’ve outlined common platform targets for Addressables users, as well as some key considerations for each.Mobile and VRFor mobile and VR platforms, the most important considerations to keep in mind are app size, bundled content size, and download speeds.For your groups, consider the sets of content that your players will need immediately after install (e.g., to be able to complete your tutorial). Ensure this content is organized into groups with local load paths so that it will be included with your base game. Organize all other content into groups with remote load paths so that you can deliver this content over the air to your players.Opt for a group strategy that will build relatively small AssetBundles. The exact balance will depend on your game. Avoid extremely large bundles that will consume a substantial amount of memory and will be difficult to release once loaded. Similarly, avoid a huge number of tiny bundles that may create a very large Addressables catalog file that will be downloaded for every content update. Many tiny bundles can also have an impact on the speed at which your players can download the content they need, so be mindful of these pros and cons when determining the right balance for your game.Desktop and ConsolesFor desktop and consoles, the most important consideration is performance. Compared to mobile devices and wireless VR hardware, desktop and console hardware typically has fewer constraints around memory and disk storage. With this in mind, consider a group setting that will build uncompressed AssetBundles. This will provide the fastest possible loading time and can even provide for efficient patching on certain platforms.When developing for consoles specifically, pay close attention to any platform-specific caching restrictions that may apply. While mobile platforms allow you to take advantage of Unity’s AssetBundle Cache for downloaded content, this functionality is disabled by default at the Unity engine level for certain consoles and WebGL. Consider updating your base game with the new content on those platforms rather than attempting to deliver remote content over the air. Otherwise, you will need to create your own custom AssetBundle caching system and determine whether your solution complies with those platforms’ terms of service.After evaluating the strengths and limitations of your target platforms, identify one or two primary goals you’re trying to achieve by using the Addressables system. For example: Are you mainly aiming to reduce your base game’s size, or are you planning to deliver over-the-air content updates to players? To demonstrate, let’s discuss these options, and more, in detail below.Minimizing base game sizeIf your primary goal is to minimize your base game’s size, and you aren’t as concerned about memory limitations or large downloads after install, then your primary focus should be migrating as many assets as possible from scenes and Resources into one or more Addressables groups with remote load paths.Consider making the scenes in your project addressable and determine which, if any, must be included with the main player build. For those that can be delivered to players after install, include those scenes in groups with remote load paths. You can even build a player with one almost-empty scene, and load the rest of your game dynamically from there, as explained in this Open Projects Devlog video.If you make any scenes addressable, it’s best to make all of them addressable to reduce the chance and volume of unnecessary asset duplication.For groups that will generate AssetBundles to be hosted remotely, be sure to enable the AssetBundle Cache. This setting will ensure that downloaded AssetBundles will be cached on your players’ devices, preventing them from having to redownload each session.While it’s always good to keep in mind the runtime implications of many small bundles versus few large bundles, these considerations become more relevant when considering other goals you may have.Efficiently delivering remote content to playersIf your primary goal is the efficient delivery of remote content, your group structure should reflect how you aim to split content between “local” (i.e., assets included with your player build) and “remote” content (i.e., assets hosted on an external content delivery network). Again, be sure to enable the AssetBundle Cache to cache downloaded content on players’ devices.The size, number, and Bundle Mode of these groups will depend on when you expect to deliver remote content to your players and how long you’re willing to let them wait for downloads to complete. For example, if your game’s structure will allow for delivery of all remote content shortly after they install the base game, you can opt for larger groups with Pack Together or Pack Together By Label, which will result in a small number of large downloads.If you expect to deliver smaller sets of remote content to players throughout their sessions that will be less disruptive to the experience, you can opt for smaller groups and/or a Bundle Mode setting that will generate smaller AssetBundles that will download much more quickly.In most cases, for groups containing remote content, consider Enabled, Excluding Cached for your AssetBundle Cyclic Redundancy Check (CRC) option. This will provide additional assurances of your remote content’s integrity as it’s being cached to players’ devices, while avoiding the additional overhead of performing a CRC for loading content that’s already on player devices.Optimizing runtime memory usage and performanceIf your primary goal is optimizing the game’s runtime performance and memory usage, remember the most important rule of Addressables groups organization: Assets that you plan to load and unload at the same time should be grouped together.Generally speaking, this will mean creating smaller AssetBundles. You can achieve this in several ways, including creating smaller groups and/or avoiding the “Pack Together” Bundle Mode in your Group Settings for large groups that contain assets that won’t always be needed at the same time in your game.You should also keep an eye on runtime performance to help you spot potential issues or areas of optimization. Take advantage of official Unity tools like the Unity Profiler, the Memory Profiler package, or the Addressables Event Viewer, which can all help optimize your game’s performance.Be on the lookout for the upcoming Addressables Profiler Module, which will replace the Addressables Event Viewer. This new tool will provide even more in-depth information about how your code is loading and unloading addressable assets and AssetBundles, including detailed information about dependencies among your assets and AssetBundles.Multiple goalsOf course, most projects will have a number of goals associated with Addressables. In this case, there is truly no one-size-fits-all approach. You will need to evaluate the tradeoffs outlined above and find the group structure and settings that will best achieve the success you’ve defined.We recommend that you take advantage of the Addressables Build Report and the Addressables Profiler Module, available soon in Addressables 1.21.3. The Addressables Build Report will provide you with detailed information about the AssetBundles that were generated from your Addressables builds, including file size, potential duplicates, and in-depth dependency information. The Addressables Profiler Module is a new runtime analysis tool that takes advantage of this new dependency data, providing precise information about what was loaded by your Addressables code and why it was loaded.Below we’ve provided some handy “cheat sheets” for our recommended Addressables settings and strategies based on some of the most common use cases. Of course, these are just suggestions – it’s up to you to determine whether a suggestion aligns with your project’s unique structure and your specific goals.A mobile game with frequent content updatesA standalone, self-contained desktop or console gameA VR game built for Meta Quest 2If you have questions or want to learn more about the Addressables package, visit us in the Addressables forum. You can also connect with me directly on Twitter at @Unity_Jeff. Be sure to watch for new technical blogs from other Unity developers as part of the ongoing Tech from the Trenches series.
    0 Comentários 0 Compartilhamentos
  • Hexborn: Roguelike

    Hi IndieDB,
    I'm thrilled to introduce Hexborn, a roguelite retro FPS inspired by 90s classics like Blood and Doom. You play as Lucian Cross, a demon-bound mercenary descending into the ever-shifting Bloodstone Labyrinth to stop the Cult of Shadows from resurrecting a forgotten god.
    This game blends fast-paced gunplay with procedural generation and character progression systems. It's been in development for a while and already has a Steam page and devlog series.I'll be posting regular updates here as we move toward our next major milestone. In the meantime, feel free to wishlist the game or check out gameplay previews:
    Steam Page: Store.steampowered.comItch Page: Caspianinteractive.itch.io
    Thanks for reading — and stay tuned!– Caspian Interactive
    #hexborn #roguelike
    Hexborn: Roguelike
    Hi IndieDB, I'm thrilled to introduce Hexborn, a roguelite retro FPS inspired by 90s classics like Blood and Doom. You play as Lucian Cross, a demon-bound mercenary descending into the ever-shifting Bloodstone Labyrinth to stop the Cult of Shadows from resurrecting a forgotten god. This game blends fast-paced gunplay with procedural generation and character progression systems. It's been in development for a while and already has a Steam page and devlog series.I'll be posting regular updates here as we move toward our next major milestone. In the meantime, feel free to wishlist the game or check out gameplay previews: Steam Page: Store.steampowered.comItch Page: Caspianinteractive.itch.io Thanks for reading — and stay tuned!– Caspian Interactive #hexborn #roguelike
    WWW.INDIEDB.COM
    Hexborn: Roguelike
    Hi IndieDB, I'm thrilled to introduce Hexborn, a roguelite retro FPS inspired by 90s classics like Blood and Doom. You play as Lucian Cross, a demon-bound mercenary descending into the ever-shifting Bloodstone Labyrinth to stop the Cult of Shadows from resurrecting a forgotten god. This game blends fast-paced gunplay with procedural generation and character progression systems. It's been in development for a while and already has a Steam page and devlog series.I'll be posting regular updates here as we move toward our next major milestone. In the meantime, feel free to wishlist the game or check out gameplay previews: Steam Page: Store.steampowered.comItch Page: Caspianinteractive.itch.io Thanks for reading — and stay tuned!– Caspian Interactive
    0 Comentários 0 Compartilhamentos