// transmission.log

Data Feed

> Intercepted signals from across the network — tech, engineering, and dispatches from the void.

1695 transmissions indexed — page 51 of 85

[ 2023 ]

20 entries
1001|blog.unity.com

Made with Unity Monthly: April 2023 roundup

The world is a better place with more creators in it, and this roundup is proof. Keep reading to discover the latest news about games made with Unity and find out how the community is using Unity.April saw no short of activity from games created with Unity.To start, Free Lives brought some fresh air with Terra Nil’s release, and Endnight Games’s terrifying Sons of the Forestearly access launch has us hungry for the full release. Next, Riot Forge launched the highly anticipated The Mageseeker: A League of Legends Story, and Sankari Studios released KATOA, a game leading to real-world ocean conservation efforts, for Earth Day.Rounding out creator milestones for the month were RavazSydney, who put out the official announcement for The Explorator, and Black Salt Games’s fishing horror DREDGE, which was released to rave reviews. Finally, a whole new batch of mystery cases came to players’ doors with ColePowered Games’s early access launch of Shadows of Doubt.On our end, we were thrilled to announce the 2023 Unity for Humanity Grant winners this month. We were also honored to have been chosen as “best” in three categories at this year’s PocketGamer awards.We share new game releases and milestone spotlights every Monday on the @UnityGames Twitter account. Be sure to give us a follow and support your fellow creators.Keeping the fun going, April showers bring… #UnityTips! Tuesdays are always dedicated to tips on Twitter, and last month was no exception. One great resource that was shared was @alexandermeye’s huge water shader tutorial (see below).Some additional highlights included @SunnyVStudio’s super useful tip to convert Screen space to World space, and @NickyBoccuzzi’s takeover of the @UnityGames Twitter to share some animation tips.Keep tagging us and using the #UnityTips hashtag to share your expertise with the community.We continue to be stunned by what Unity creators make week to week, and you certainly kept the amazing projects coming in April. If we missed something that you shared, be sure to use the #MadeWithUnity hashtag next time.On Twitter, @TinyDodoGames had a nice technique to keep the monsters at bay (see above), and @pointnsheep got us in the mood for a sword fight. We also took a peaceful vacation on @OneiraGames’s colorful coral island.On Instagram, @MajorMcDoom displayed some adorable penguin VR, and @Cyanilux showed us how to add milk to our tea. We also got to practice our mid-air combos with @DivineStudi0s and @DevFatigued had us jumping around.We’re so excited to continue the #MadeWithUnity love, so keep adding the hashtag to your posts to show us what you’ve been up to.Coming out of GDC, April was all about playing and making games on Twitch. To start, we kicked off a Scope Check Let’s Dev series – catch parts one, two, and three in the archives now. Next came a Let’s Play session with ColePowered Games’s just-released Shadows of Doubt (see above).Don’t forget to follow us on Twitch and hit the notification bell so you never miss a stream.Did you know that the Unity Asset Store has an Affiliate program? If you’re a content creator and love talking about assets, you might be a great fit. Check out this video from YouTube’s @samyam and learn how you can make income from the Asset Store without creating assets.Taking things to social media, here’s a roundup of some of our favorite creator showcases from Twitter in April:Sim-Cade Vehicle Physics | Ash DevSuper Chick | SURIYUNDon’t forget to tag the @AssetStore Twitter account and use the #AssetStore hashtag when posting your latest creations. And keep your eyes peeled for upcoming sales (hint: this month).Last but not least, here’s a non-exhaustive list of Made with Unity titles released in April. If you see any on the list that have already become favorites or think we’ve missed a title, share your thoughts in the forums.Wall World, Alawar Premium (April 5)MINDHACK, VODKAdemo? (April 5 – early access)Curse of the Sea Rats, Petoons Studio (April 6)The Voidness – Lidar Horror Survival Game, Steelkrill Studio (April 6 – early access)Blocky Dungeon, SquareAnon (April 6)Cynthia: Hidden in the Moonshadow, Catthia Games (April 10)Soundodger 2, Studio Bean (April 10)TRON: Identity, Bithell Games (April 11)Fabledom, Grenaa Games (April 13 – early access)Hunt the Night, Moonlight Games (April 13)MEATGRINDER, Vampire Squid (April 13)Trinity Fusion, Angry Mob Games (April 13 – early access)Beyond the Long Night, Noisy Head Games (April 17)Disney Speedstorm, Gameloft (April 18 – early access)The Mageseeker: A League of Legends Story™, Digital Sun (April 18)KATOA, Sankari Studios (April 22)Shadows of Doubt, ColePowered Games (April 24 – early access)Re:Fresh, Merge Conflict (April 24)The Last Case of Benedict Fox, Plot Twist (April 27)Unboxing the Cryptic Killer, Eleven Puzzles (April 27)If you’re creating with Unity and don’t see your project on the list, submit it here for the chance to be featured.That’s a wrap for April! Want more community news as it happens? Don’t forget to follow us on social media: Twitter, Facebook, LinkedIn, Instagram, YouTube, or Twitch.

>access_file_
1002|blog.unity.com

The top 5 rewarded video placements to boost your puzzle game’s revenue

According to data.ai, puzzle games have now racked up over 3 billion mobile game downloads and are the 5th largest genre in the mobile gaming space. Not to mention, they grow at a rate of 15% every year.This is for good reason - puzzle games appeal to a wide range of gamers because they’re relatively simple. Puzzle gamers get to test their problem-solving skills with short challenges they can easily play over and over again (think: solitaire, sudoku, hex puzzles, and more).Puzzle games are so straightforward that they tend to have a single currency. If a player wants to purchase anything in the game, they can’t rely on harder currency like rubies or gems - they just need soft currency like coins, and a lot of it. And that’s why ad placements offering extra currency are so valuable. In fact, according to Google, 73% of mobile puzzle players believe that ads have no effect, or even a positive effect, on their gameplay experience.To make sure you’re setting up your puzzle game’s placement strategy for success, Anna Popereko, Game Design Consultant at ironSource, walks through the most useful rewarded video placements and what makes them so effective. Let’s get started.1. Reward multipliersThe most popular rewarded video placement in puzzle games is a reward multiplier. It works like this: once players receive a reward (e.g. after completing a level), the next screen offers the chance to multiply the reward they just got - simply by watching a rewarded video. The amount may depend on the game, but you can offer anything from 2x to 20x the reward.This placement works for a few reasons. First, it allows players to easily capitalize on and exponentially increase the currency they just won. Second, these placements also create a sense of urgency - they have only one chance to engage, so if the user chooses to skip this page, they miss out on a major opportunity to boost their currency.Playsimple, for example, used this approach in their game Word Trip. Once users receive a reward, they simultaneously get the option to multiply it - all they need to do is watch a rewarded video.2. Extra currencyExtra currency is another strategic placement, and it has a similar purpose to reward multipliers: increasing currency. But instead of popping up, these placements sit on the home page or the shop, waiting to be engaged with. Unlike reward multipliers, you don’t need to be actively playing the game to access extra currency placement - in fact, many players just stumble upon them.These placements don’t offer unlimited currency - they’re paced and capped so players can usually only engage with them once or twice a day. Extra currency placements also use timing to their advantage - they’re usually accompanied by a countdown clock, letting the player know how much time is left until they can watch a new video and access another reward.For example, Lihuhu worked this placement into their hit Match Triple 3D: while players explore currency bundles in the shop, they can watch a rewarded video to get 10 coins free of charge. Players in the shop are already motivated to get more currency, so this kind of placement works well.3. RevivalPuzzle games tend to have pretty long levels, often several minutes - so revival is another critical placement. Usually, if a player fails in the middle of the level, they’d have to give up all the time they’ve invested in the level and start over. But with revival placements, they just watch a rewarded video and continue from the moment they left off.Players are naturally motivated to engage with revival placements - especially when the other option is losing their hard work and time spent progressing in the level. Generally, the longer the level, the more players are open to engaging with this placement.Lihuhu successfully uses this placement in Match Triple 3D - when players run out of lives, there are only two ways to continue playing: spend their currency, or watching a rewarded video. This placement is very effective because it catches players in a critical spot, where the rewarded video is literally life-saving.4. BoosterPuzzle games attract players who are motivated by mental challenges, and being able to solve any problem that comes their way. That’s why booster placements are popular. When a player gets stuck at any point in the level, they can just watch a rewarded video, get some assistance in solving the current challenge, then confidently move on to their next challenge.The booster shouldn’t solve the entire puzzle for players - doing that would take away from the sense of achievement players get from solving challenges themselves. Rather, the booster should offer just the right push to keep the player engaged in the game, and hopefully able to solve the puzzle themselves.In Pixel by Number, Wido Games’ color by numbers game, when players get tired of tapping on a group of numbers, they can just click on the paint can icon, watch a rewarded video, and get that area colored in for them. It’s a win-win - with the booster, the player gets the extra help and motivation they need to complete the puzzle.5. Extra life and mystery rewardsTwo other common and worthwhile placements to use are extra life and chests. In games with a life-based system, once gamers run out of lives, they have to wait to get a refill - so this can be an ideal spot for a rewarded video placement. By engaging with the extra life placement, players gain another lifeline and the boost of energy they need, simply by watching a rewarded video. These placements are an ideal way to motivate players to keep going, especially if they're burning through multiple lives in one sitting - not to mention, they increase session length.Mystery rewards, on the other hand, offer a nice and exciting alternative to extra currency placements. Once the player opens the mystery placement (e.g. a chest), they’ll get to spin a wheel with a mystery prize. Like extra currency placements, these are time-limited with a countdown clock, and pacing depends on the game.In Word Trip by Playsimple, for example, onceplayers engage with the mystery reward, they can watch a rewarded video to spin for their prize - but they only get a certain amount per day.Puzzle games continue to be a dominant genre in the mobile gaming sphere - and using placements like these only improves the puzzle game experience and keeps the genre booming. By understanding your players’ goals and motivations, and using ad placements to enrich and extend their playtime, you can boost their experience and, as a result, your revenue.

>access_file_
1003|blog.unity.com

Extended Q&A: Optimizing memory and build size with Addressables

In February, as part of my role as a senior software development consultant for Unity Accelerate Solutions, I led a technical webinar about the Addressables Asset System. During the live session, I demonstrated various profiling tools that you can use to optimize a project’s runtime memory and build size. The webinar ended with a Q&A, and our team received more questions than we had time to answer.The following is an extension of that closing Q&A, so we can answer more of your questions.Q: Is the Addressables system needed for light games – like casual, arcade, or puzzle games – if I don’t have memory issues? A: Maybe not, but it’s good to keep in mind that the Addressables system doesn’t only improve memory performance. Having the ability to choose when you load content can improve loading times. Building content in Addressables enables you to have iterative builds that don’t take as long. For example, if you make a small script change, you may not have to rebuild all of your bundles.Q: Are loaded assets released when the scene switches? A: Potentially. Loaded assets from Addressables that are ready to be released because they have a ref count of zero might be unloaded from memory during a scene transition. When transitioning from scenes non-additively, call Resources.UnloadUnusedAssets(). This is expensive on the CPU, but allows you to partially unload AssetBundles.Q: Do object pooling and Addressables work well together? A: Yes. You can load your object once from Addressables and then instantiate multiple copies of it to create your pool. When you are done with the pool, destroy all the objects and release the AsyncOperationHandle that was used to load the asset.Q: Are groups and bundles loaded into memory all at once? A: Addressables groups are an Editor-only concept. At runtime, you only deal with bundles. Bundles are loaded into memory only when they are needed and only the desired content is loaded.Example: You have one bundle with 10 characters in it. You ask Addressables to load three characters. The bundle’s metadata and the three characters will be loaded.Q: If I want to release an asset, do I need to keep the AsyncOperationHandle or the AssetReference? A: We recommend keeping the handle and using it, since you’re responsible for releasing content when you are done using it.As an example, members of our team will often go the handle route in order to avoid calling Instantiate/Release directly on the AssetReference.Q: What are the disadvantages of many small bundles? A: This documentation lists several disadvantages of too many bundles.Q: When an asset in a bundle is needed, what overhead do the other assets in the same bundle have? If it’s a remote bundle it must be downloaded, but is there really no memory overhead from unused assets in the bundle? A: Correct, a remote bundle will be fully downloaded before you can use it.Unloaded assets in a loaded asset bundle have minimal overhead at runtime. Whenever you load assets from a bundle, you need to load the bundle’s metadata. Part of this metadata includes a table of contents that lists all the assets in the bundle. More assets in a bundle equates to larger metadata.You can view this memory overhead by taking a capture with the Unity Memory Profiler. In the “All Of Memory” tab, there’s a list of all the “SerializedFile” objects in memory, one for each bundle. These objects are your bundles’ metadata.Learn more about this metadata in our documentation.Q: When working in an open-world setting, what bundling strategies can I use to unload individual assets without half unloading a bundle and relying on Resources.UnloadUnusedAssets() to clean it up, without the overhead of having every asset in its own bundle? A: The key thing to remember is that content should be bundled together if you expect to unload it at the same time. If your game world has “static” content, like trees and rocks for a certain biome that will not be moved by the player, that content should be bundled together. Any “dynamic” content, like items the player can pick up, should be bundled separately.This blog post and linked GitHub repo covers splitting bundles for an open-world game. It also features a way to deduplicate bundles to reduce the memory overhead of each bundle. Stages 4 and 5 are particularly relevant to open worlds.Q: When should I leave “AssetBundle CRC” enabled? A: The recommended practice is to have this enabled, excluding cached AssetBundles for Remote groups, and disabled for Local groups. The check is only meant to make sure the data wasn’t corrupted on download. There’s almost no reason to do the check for local AssetBundles.Q: When is it not worth it to use Addressables due to CPU performance concerns when loading and unloading assets? A: The Addressables system has a positive impact on CPU loading performance due to not needing to load all content up front.If you don’t use Addressables when loading a scene, you’d have to load all content and references. If you move the content to Addressables, you can choose when to load which content.For example, say you have an Inventory Manager in a scene that has a reference to 1,000 inventory items. If you don’t use Addressables, you’ll have to load every mesh, texture, audio clip, etc., for all these inventory items. If you wait to load this content, loading the scene will be faster.Q: Do all dependencies of an addressable asset also need to be Addressables, or is that only necessary if they are shared? A: Dependencies do not need to be marked addressable. Dependencies will be pulled into Addressables during the build process if necessary.As an example, if you make a player prefab an addressable, you don’t have to manually mark the player’s mesh, textures, or audio as addressable, too. When the bundle is built, all the dependencies that don’t yet exist in Addressables will be automatically included in the player prefab bundle.Q: If I forgot to release an asset and change scenes, what happens to this asset? A: Changing scenes does not inherently interact poorly with handles. But if you load an asset and forget to release its handle, the asset will persist in memory.Addressables has an internal reference-counting system. Handles are how we interact with this system. Loading an asset increments the reference count, and releasing decrements the reference count.Creators are responsible for keeping this reference count up to date. The asset will be in memory as long as the reference count is greater than one.Q: Related to the webinar example, suppose I’m making an open-world game. The boss is present somewhere in the open world. When the player heads to the boss, how do I use Addressables here? Do I send the command to load the sword async, via a trigger, at a certain distance from the enemy, or something else? A: It can be a fine line to choose when to load and unload content. You want to be sure the boss is ready when the player needs to see it, but might not want to load it too early when the player is still able to turn around and avoid the boss.The good thing is that you can iterate on when to load and unload content – you don’t have to get it perfectly optimized on the first try.To get started, we suggest loading all content for a particular “zone” when the player gets near (e.g., the player approaches a dungeon entrance which causes everything inside the dungeon to load). If this causes unnecessary memory pressure, you can add more fine-grained loading and unloading.If the sword is not loading soon enough, consider moving the loading trigger to start earlier, improving the load time of the sword assets by using Unity Profiler’s CPU module to see what is being loaded, or using Addressables synchronously to ensure the load is finished.This documentation includes more details and a code snippet for synchronous Addressables.Q: If I load an addressable when a scene starts, do I need to have a loading screen for it? A: Loading from Addressables is typically done in an asynchronous way, like with Addressables.LoadAssetAsync().There may be some content you don’t want to load before leaving a loading screen. You can collect these AsyncOperationHandles and wait for the necessary ones to complete before leaving.Q: What is the memory footprint of the addressables metadata at runtime (before loading any of its data)? A: During Addressables initialization, the catalog file is loaded so that Addressables knows how to map labels and addresses to assets on disk or in remote locations. A larger catalog equates to a larger memory overhead at runtime.Catalog size can be reduced by stripping unnecessary data, like not including labels or GUIDs in groups that don’t need them, or by reducing the size of existing data. For example, by setting a group’s Internal Asset Naming Mode to GUID instead of filename or full path (which can be longer). You can view the runtime memory size of the catalog in Unity Memory Profiler.Q: What is the Unity Editor doing in the time it spends building Addressables? A: A build report log is output in the /Library folder. This log shows each step of the build process. To add additional details to the log, follow this path to select “Use Detailed Build Log”: Enabling Edit > Preferences > Scriptable Build Pipeline > Use Detailed Build Log.Check out visuals and documentation on how to view the log.Q: Does Resources.Load() also have a duplication problem? A: Yes. It can be useful to think of Addressables content and Resources content as different “worlds.” If you have a texture in /Resources, one copy of that texture is included in the Resources file. If bundles in Addressables depend on that texture, each bundle includes an implicit copy of it. You end up with multiple copies of the texture on disk and potentially multiple copies in memory.To avoid this duplication, move the texture out of /Resources and add it to an Addressables group.Q: Do you get similar size on disk issues that are resolved by removing duplicate bundles when you don’t use Addressables? A: Yes. In the webinar and slides we show how deduplicating the two water racing scenes significantly reduced build size.Q: How can I prevent shader variant duplicates? A: Shaders can be deduplicated in the same process as any other asset – explicitly declare them in a group.If an asset is explicitly declared in an Addressables group that is going into your build, that asset will not be duplicated across multiple bundles.For shaders specifically, it is common practice for projects to use a “Shared shaders” group to contain shaders that you expect to need in memory for the lifespan of your app, and that are shared across many assets.Q: Do two Unity scenes sharing the same prefab duplicate build size? A: This depends on if the prefab the scenes depend on has been explicitly included in Addressables, and if the scenes are in the same or different bundles.See the visual explanation of how duplication occurs in the webinar slides and in this blog post under Stage 4.The key to remember is that all content going into a bundle needs to be able to access all of its dependencies. If you put a scene into a bundle, all of its dependencies need to either be:Explicitly included somewhere in AddressablesImplicitly included in the same bundleQ: Is it possible to compare duplicates in given groups to prevent having all the game assets packed together into an isolated group? A: Yes. You can run the built-in deduplication rule and then sort the assets in the Addressables Groups window into better groupings.Or, a more scalable approach is to write your own Addressables AnalyzeRules, which will appear in the Analyze window. The built-in rules are delivered as C# in the Addressables package and can serve as a baseline.For example, you may want to find every duplicate across all of your groups that start with “Character-”. Any implicit duplicates can be placed in a “Shared-Character” group.Q: Are you going to cover remote builds and local paths? A: We did not cover remote and local paths, which are called “Addressables Profiles” in the webinar. However, we do describe what Addressables Profiles are and how to use them in this documentation.Q: How does Addressables work with Cloud Content Delivery (CCD)? A: CCD integration is discussed in this documentation.Q: Can you please give pointers on best practices to implement low- and high-resolution Addressables variations? A: You can find an example in the Addressables Sample on GitHub.Q: What if bundle content is encrypted? Does the UnityDataTool also decrypt the content? A: No. The data will need to be decrypted before UnityDataTool can analyze the content.Q: Is it a supported use case to build bundles from one Unity project and load the bundles at runtime from an app built from a different project? A: Yes. This is covered by using multiple catalogs at the same time.Q: Are there drawbacks to using InstantiateAsync, or situations where it is better to use LoadAsync + manual Instantiate? A: It is recommended to use Addressables.LoadAssetAsync() and call Object.Instantiate(). Addressables.InstantiateAsync() has a larger performance cost.Q: I have a lot of ScriptableObjects with at least 1–2 sprites referenced as variables. If I want to change the sprites to Addressables, do I have to change the references to Addressables one by one, or is there any trick to do this? A: An Editor script is probably the way to go to convert these references.You can add the AssetReference fields to your ScriptableObject (and temporarily keep the Sprite fields). Then, you can write an Editor script that iterates through your ScriptableObjects, looks up the Sprite asset in Addressables to find the associated AddressableAssetEntry, and stores the address or creates an AssetReference to be stored on the ScriptableObject.Lastly, you can remove the direct Sprite references and swap any related code to use the AssetReference.Q: Can I use addressables for WebGL games? If yes, are there any specific things to look for? A: Yes, and yes. Two things to note: First, WebGL does not support threading, so don’t use Tasks. Second, caching works differently on WebGL – we’ve seen issues with caching remote AssetBundles before.Q: If I use Shader.Find(“ShaderName”), is this coming from the build or Addressables? A: These are coming from the build of the Unity Player, not Addressables. Shader.Find() does not return results from AssetBundles.Q: How can I organize the Addressables Groups window when I have many similarly-named groups? A: For organizing the Addressables Groups UI, you can enable Group Hierarchy with Dashes. This will group similarly-named groups together. For example, “Character-person” and “Character-person2” will appear in the UI under the “Character” grouping.This does not affect how bundles are created. This is only a UI organizational change.Share your feedback with us in the Addressables forum. Be sure to watch for new technical blogs from other Unity developers as part of the ongoing Tech from the Trenches series.

>access_file_
1005|blog.unity.com

6 ways ScriptableObjects can benefit your team and your code

We’re happy to announce that we’ve launched a new technical e-book, Create modular game architecture in Unity with ScriptableObjects, which provides best practices from professional developers for deploying ScriptableObjects in production.Along with the e-book, you can download a demo project from GitHub inspired by classic ball and paddle arcade game mechanics. The demo shows how ScriptableObjects can help you create components that are testable and scalable, while also being designer-friendly. Although a game like this could be built with far fewer lines of code, this demo shows ScriptableObjects in action.This post explains the benefits of ScriptableObjects, but doesn’t cover the basics or general coding in Unity. If you’re new to programming in Unity, head over to Unity Learn, which offers helpful introductory tutorials. The first chapter in the e-book also offers a solid primer.Let’s look at six ways you can benefit from using ScriptableObjects in your projects. Want to know more? All of these examples are explored further in the e-book and demo project.Although many of the techniques shared here can also be achieved using C# classes, one of the main benefits of ScriptableObjects is the accessibility to artists and designers. They can use ScriptableObjects to configure and apply game logic in a project without having to edit the code.The Editor makes it convenient to view and edit ScriptableObjects, enabling designers to set up gameplay data without heavy support from the developer team. This also applies to game logic, such as applying behavior to an NPC by adding a ScriptableObject (explained in the patterns below).Storing data and logic on a single MonoBehaviour can result in time-consuming merge conflicts if two people change different parts of the same Prefab or scene. By breaking up shared data into smaller files and assets with ScriptableObjects, designers can build gameplay in parallel with developers, instead of having to wait for the latter to finish setting up the gameplay in code before testing it.Issues can arise when colleagues with different roles access the game code and assets at the same time. With ScriptableObjects, the programmer can control what part of the project is editable in the Editor. Additionally, using ScriptableObjects to organize your code leads naturally to a codebase that’s more modular and efficient to test.Christo Nobbs, a senior technical game designer who specializes in systems game design and Unity (C#), contributed to The Unity game designer playbook, and is the main author of a blog post series on designing game systems in Unity. His posts, “Systems that create ecosystems: Emergent game design” and “Unpredictably fun: The value of randomization in game design” provide interesting examples of how designers can use ScriptableObjects.Modularity is a general software principle which can be implemented in C# without using ScriptableObjects. But, as mentioned above, ScriptableObjects help promote clean coding practices by separating data from logic, which is a first step toward modular game code. This separation means it’s easier to make changes without causing unintended side effects, and improves testability.ScriptableObjects excel at storing static data, making them handy for configuring static gameplay values like items or NPC stats, character dialogue, and much more. Because ScriptableObjects are saved as an asset, they persist outside of game mode, making it possible to use them for loading in a static configuration that dynamically changes at runtime.While changes to ScriptableObject data do persist in the Editor, it’s important to note that they are not designed for saving game data. In that case, it’s better to use a serialization system, such as JSON, XML, or a binary solution if performance is critical.MonoBehaviours carry extra overhead since they require a GameObject – and by default a Transform – to act as a host. This means you need to create a lot of unused data before storing a single value. A ScriptableObject slims down this memory footprint and drops the GameObject and Transform. It also stores data at the project level, which is helpful if you need to access the same data from multiple scenes.It’s common to have many GameObjects which rely on duplicate data that does not need to change at runtime. Rather than having this duplicate local data on each GameObject, you can funnel it into a ScriptableObject. Each of the objects stores a reference to the shared data asset, rather than copying the data itself. This can provide significant performance improvements in projects with thousands of objects.In software design, this is an optimization known as the flyweight pattern. Restructuring your code in this way using ScriptableObjects avoids copying values and reduces your memory footprint. Check out our e-book, Level up your code with game programming patterns to learn more about using design patterns in Unity.A good example of how ScriptableObjects can simplify your code is to use them as enums for comparison operations. The ScriptableObject can represent a category or item type, such as a special damage effect – cold, heat, electrical, magic, etc.If your application requires an inventory system to equip gameplay items, ScriptableObjects can represent item types or weapon slots. The fields in the Inspector then function as a drag-and-drop interface for setting them up.Using ScriptableObjects as enums becomes more interesting when you want to extend them and add more data. Unlike normal enums, ScriptableObjects can have extra fields and methods. There’s no need to have a separate lookup table or correlate with a new array of data.While traditional enums have a fixed set of values, ScriptableObject enums can be created and modified at runtime, allowing you to add or remove values as needed.If you have a long list of enum values without explicit numbering, inserting or removing an enum can change their order. This reordering can introduce subtle bugs or unintended behavior. ScriptableObject-based enums don’t have these issues. You can delete or add to your project without having to change the code every time.Suppose you want to make an item equippable in an RPG. You could append an extra boolean field to the ScriptableObject to do that. Are certain characters not allowed to hold certain items? Are some items magical or do they have special abilities? ScriptableObject-based enums can do that.Because you can create methods on a ScriptableObject, they are as useful for containing logic or actions as they are for holding data. Moving logic from your MonoBehaviour into a ScriptableObject enables you to use the latter as a delegate object, making the behavior more modular.If you need to perform specific tasks, you can encapsulate their algorithms into their own objects. The original Gang of Four refers to this general design as the strategy pattern. The example below shows how to make the strategy pattern more useful by using an abstract class to implement EnemyAI. The result is several derived ScriptableObjects with different behavior, which then becomes a pluggable behavior since each asset is interchangeable. You just drag and drop the ScriptableObject of choice into the MonoBehaviour.For a detailed example showing how to use ScriptableObjects to drive behavior, watch the video series Pluggable AI with ScriptableObjects. These sessions demonstrate a finite state machine-based AI system that can be configured using ScriptableObjects for states, actions, and transitions between those states.A common challenge in larger projects is when multiple GameObjects need to share data or states by avoiding direct references between these objects. Managing these dependencies at scale can require significant effort and is often a source of bugs. Many developers use singletons – one global instance of a class that survives scene loading. However, singletons introduce global states and make unit testing difficult. If you’re working with a Prefab that references a singleton, you’ll end up importing all of its dependencies just to test an isolated function. This makes your code less modular and efficient to debug.One solution is to use ScriptableObject-based events to help your GameObjects communicate. In this case, you are using ScriptableObjects to implement a form of the observer design pattern, where a subject broadcasts a message to one or more loosely decoupled observers. Each observing object can react independently from the subject but is unaware of the other observers. The subject can also be referred to as the “publisher” or “broadcaster” and the observers as “subscribers” or “listeners.”You can implement the observer pattern with MonoBehaviours or C# objects. While this is already common practice in Unity development, a script-only approach means your designers will rely on the programming team for every event needed during gameplay.At first glance, it appears that you’ve added a layer of overhead to the observer pattern, but this structure offers some advantages. Since ScriptableObjects are assets, they are accessible to all objects in your hierarchy and don’t disappear on scene loading.Easy, persistent access to certain resources is why many developers use singletons. ScriptableObjects can often provide the same benefits without introducing as many unnecessary dependencies.In ScriptableObject-based events, any object can serve as publisher (which broadcasts the event), and any object can serve as a subscriber (which listens for the event). The ScriptableObject sits in the middle and helps relay the signal, acting like a centralized intermediary between the two.One way to think about this is as an “event channel.” Imagine the ScriptableObject as a radio tower that has any number of objects listening for its signals. An interested MonoBehaviour can subscribe to the event channel and respond when something happens.The demo shows how the observer pattern helps you set up game events for UI, sounds, and scoring.At runtime, you’ll often need to track a list of GameObjects or components in your scene. For example, a list of enemies is something you’d need to frequently access, but it’s also a dynamic list that changes as more enemies are spawned or defeated. The singleton offers easy global access, but it has several drawbacks. Instead of using a singleton, consider storing data on a ScriptableObject as a “Runtime Set.” The ScriptableObject instance appears at the project level, which means it can store data that’s available to any object from any scene, offering similar global access. Since the data is located on an asset, its public list of items is accessible at any time.In this use case, you get a specialized data container that maintains a public collection of elements but also provides basic methods to add to and remove from the collection. This can reduce the need for singletons and improve testability and modularity.Reading data directly from a ScriptableObject is also more optimal than searching the Scene Hierarchy with a find operation like Object.FindObjectOfType or GameObject.FindWithTag. Depending on your use case and the size of your hierarchy, these are relatively expensive methods that can be inefficient for per-frame updates.There are several ScriptableObjects frameworks which offer more use cases than these six scenarios. Some teams decide to use ScriptableObjects extensively, while others limit their use to loading in static data and separating logic from data. Ultimately, the needs of your project will determine how you use them.Create modular game architecture in Unity with ScriptableObjects is the third guide in our series for intermediate to advanced Unity programmers. Each guide, authored by experienced programmers, provides best practices for topics that are important to development teams.Create a C# style guide: Write cleaner code that scales assists you with developing a style guide to help unify your approach to creating a more cohesive codebase.Level up your code with game programming patternshighlights best practices for using the SOLID principles and common programming patterns to create scalable game code architecture in your Unity project.We created this series to provide actionable tips and inspiration to our experienced creators, but they aren’t rule books. There are many ways to structure your Unity project and what might seem like a natural fit for one application may not be for another. Evaluate the advantages and disadvantages of each recommendation, tip, and pattern with your colleagues before deploying it.Find more advanced guides and articles on the Unity best practices hub.

>access_file_
1006|blog.unity.com

more8bit’s Bleak Sword showcases a minimalist approach to mobile game design

Bleak Sword takes the challenging combat of games like Dark Souls and distills it down to the essentials for a compelling adventure on iOS, macOS, and Apple TV. Learn how Unity developer more8bit kept streamlined the project with a clear vision and smart prototyping to launch this Apple Arcade hit.Mobile developer Luis Moreno Jimenez (more8bit) has worked in the games industry for more than 20 years. “I started pretty early doing little 3D models and crude animations, and fantasizing about the games I would like to make,” he says.At 17 years old, he joined Enigma Software, where he spent three years working on different prototypes and the RTS-RPG hybrid Excalibug. His next role was at MercurySteam, first as an animator on games like Scrapland and Clive Barker’s Jericho, and then as lead in-game animator on Castlevania: Lords of Shadow and its sequel, Castlevania: Lords of Shadow 2.“Years working closely with gameplay programmers and gameplay designers has been very beneficial for me in the long run,” he says. “I got to see how they tackle gameplay specific problems from different points of view, understand what works and what doesn’t, and pick up little gameplay tricks here and there. I’ve also learned how to finish and close projects, which is something very important if you’re working solo.”Inspired by the growing number of indie innovators finding success outside large studios, Luis decided to pursue the dream of making his own game. He experimented with a couple of different engines before choosing Unity. “I felt that if I was going to learn a programming language, it would be better to learn a more established and general one like C#.”From the outset, Luis knew he wanted to make a mobile game, and he had a clear idea of what Bleak Sword would look like. The game features 2D sprites rendered in a 3D environment. All game assets use minimalistic pixel art, brought to life in a lo-fi, monochrome style.“The first thing I came up with was this aesthetic,” he explains. “From the very beginning, the main character was as you see in the final game. I thought this minimalistic style would look cool on a handheld or mobile screen, so I chose mobile as my first target platform.”Gameplay took several rounds of prototyping. “The first version of Bleak Sword was 2D,” says Luis. “Another was open world, like a mini-Witcher 3, but that idea soon proved to be too big for one person to do in reasonable time, even with minimalist graphics.”Eventually, Luis landed on the concept of “diorama-based arenas,” where each level is confined to a small square. “This was the structure I was looking for – the two ideas matched perfectly as both have a minimalistic design approach,” he says. “The great thing about Unity is how quickly you can put together a few assets and try out different ideas. It definitely saved me months of work in the experimental phase.”Bleak Sword’s base game contains nine different chapters, each containing 10 diorama-based arenas. Every chapter has new enemies to conquer and culminates in a unique boss encounter.“I knew from the start that I wanted to have very different settings. Because the game loop in the original game was designed specifically for short, quick, intense sessions, if the settings were too similar, it could bore the player,” says Luis.To keep the experience fresh, Luis created different types of terrain, obstacles, enemy types, and gameplay elements. “You have chapters with water, environmental traps, weather conditions that can affect gameplay, and so on,” says Luis. “Players can also hide behind trees or other objects when enemies throw projectiles at them. I tried to balance each arena together with the enemies, so each level is a little different and has the potential to create memorable moments.”One of the game’s most memorable chapters is the Northern Passage, where combat happens on horseback in a perpetually scrolling environment. Luis used Shader Graph to prevent enemies and objects from coming into view beyond the bounds of the scrolling diorama.“Enemies on that level have a script that changes their material. When they spawn, they are created outside the arena using the shader that hides pixels. When they enter the arena, the script changes the material and uses a normal shader, making them visible.”Going mobile gave Luis the opportunity to experiment with control schemes and create a uniquely challenging Soulslike, a genre not often seen on handheld devices. “I wanted to make an action game playable with one hand – no onscreen joysticks or buttons,” he says. “When people play mobile games on their commute, they’re usually holding onto the bar with one hand and playing with the other.”The controls are simple but effective: Players swipe to roll in a direction for movement, tap once to attack, and tap and hold to charge an attack or counter a blow from an enemy.In early prototypes, Luis used Unity’s built-in Input System because it was easy to set up and implement, but switched to Rewired from the Unity Asset Store later in production. “I was very happy in general with the plug-in – it helped a lot with the original Bleak Sword’s development, especially with the Apple TV controls.”more8bit’s publisher, Devolver Digital, pitched Bleak Sword to Apple, who added it to their library of Apple Arcade exclusives in 2019. The game was a hit, receiving praise for its fluid and responsive gameplay.“I’m very happy with how things went,” says Luis. “It definitely allowed me to continue on this indie adventure.”So, what’s next for Bleak Sword? This year, Devolver Digital announced Bleak Sword DX, an expanded and improved version of Bleak Sword for PC and Nintendo Switch™ with updated controls, visuals, and a brand-new campaign.“I can’t wait for players to try the new DX campaign mode, which I think is a lot of fun and pretty challenging, especially with the addition of two more difficult modes,” says Luis. “I’m also excited for players to try their hand at the new Boss Rush mode or see if anyone can get a crazy high number of rounds in Endless Arena. I put a lot of work into this game, and I hope players enjoy their time with it!”Check out the Bleak Sword DX case study to learn how more8bit brought his debut game as a solo developer to more platforms.*Nintendo Switch is a registered trademark of Nintendo.

>access_file_
1007|blog.unity.com

Rapid design iteration in Breachers using AssetPostprocessor and Blender

Triangle Factory is a fast-growing Belgian gaming company that uses Unity to create high-quality multiplayer VR titles like Hyper Dash and their latest game, Breachers. Triangle Factory leverages tools like Cinemachine, Unity Profiler, Game Server Hosting, Matchmaker, Voice Chat (Vivox), and Friends in creating an immersive experience for players. In this blog, Jel Sadones, lead level design/tech art, and lead developer Pieter Vantorre walk us through their Blender-to-Unity pipeline and how they brought their VR tactical FPS title Breachers to life.Unity has been our go-to engine and development environment for over a decade, and we have gone through many workflows over the years for environment modeling and design. That includes using in-engine modeling tools like ProBuilder (which we still use and love for rapid prototyping) and assembling scenes from Prefabs created in other modeling packages. For our current projects though, we’ve landed on a workflow where we model and organize our levels in Blender, and rely on Unity’s AssetPostprocessor to integrate them into our Unity project.In this article, we’ll share with you how we ended up with this workflow and how it supports the kind of rapid design iteration we need for our games.In 2021, we released our first big VR title, Hyper Dash, a fast-paced 5v5 arena shooter. When we started development on the game in 2019, we had a basic Blender-to-Unity workflow that probably looks familiar to many: We simply modeled geometry in Blender, exported our assets as FBX files and manually integrated them into Unity. The manual integration involved several steps:Setting up dynamic objects in the scene such as weapon pickups, spawn doors, capture pointsPlacing colliders to prevent players from walking or teleporting in certain areasSetting up invisible guides to allow bots to behave properlyEtc.This process can work well for smaller projects, but quickly becomes cumbersome as a project scales and evolves. When we started planning the development of our next title, we knew we were going to need a drastically improved workflow.Breachers is a competitive shooter with complex level layouts, subtler gameplay mechanics, more technical systems at play, and a higher level of graphical polish targeting the newest generation of standalone VR hardware. In terms of complexity, it goes several steps further than Hyper Dash, and we quickly felt the effects of this on our workflow.In the prototyping phase, we still relied heavily on Prefabs for dynamic objects, like window barricades for example. These are objects that we place inside window frames to block line of sight between interiors and the outside to prevent teams from seeing each other during the warm-up phase of the game.While testing our prototype, we were constantly moving around windows to improve gameplay, which meant changing geometry in Blender and re-exporting to Unity and then manually moving the barricade objects to match our changes. Many hours were spent flying around Unity’s Scene view, manually checking and fixing these kinds of things. Still, we had more than one playtest where we only noticed during gameplay that something had been overlooked.Obviously, this workflow was not going to give us the ability to quickly iterate on our map designs as we playtested, both internally and as part of our open alpha, where we planned to make one map available for free to get feedback from the community. We were looking forward to all that feedback, but not looking forward at all to the manual effort involved in applying it to our maps.Another potential downside to a Prefab-based design workflow is performance. We mainly target mobile, standalone VR headsets for our games. We want to push the visuals as far as we can, so we need to squeeze every last drop of performance out of our workflow.Assembling levels from Prefabs can be less efficient than creating a watertight mesh in a modeling program. If you snap two modular wall pieces together, you always have an unmerged loop of geometry in between them. With Prefabs, it’s also easy to end up placing a lot of geometry in your scene that isn’t visible (because it’s on the underside of an object, or placed against a wall) but still taking up valuable lightmap space. Over an entire level, those small inefficiencies can add up to wasted performance and diminished visuals.The final issue with Prefabs we want to mention is that it can be easy to break things by applying seemingly innocent changes to the source model in Blender, like renaming an object. As a game or level evolves, you often want to reorganize your assets and give them improved or more consistent names. But renaming an object in Blender and re-exporting it can easily (and without warning) break the overrides and additions made to the object in Unity, leading to regressions.In this simplified example, we have a ventilation grate Prefab and want smoke coming out of it. After importing the mesh into Unity, our artist has added the smoke particle system as a child object and added a surface type component to the Prefab to mark it as being a metal object.Here you can see what happens if we rename our mesh in Blender:When reimporting the mesh with the updated name, Unity can no longer find the old mesh by name, so it removes the object from the model Prefab. Children of this removed object are moved to the root of the Prefab and existing scripts are removed, again leading to manual cleanup work we’d rather avoid.As the prototyping phase for Breachers wrapped up and we prepared to go into full production mode in early 2022, our art and dev teams sat down together and investigated what we could do to remedy these problems. We defined clear goals for our ideal asset pipeline, one that would support the rapid and flexible iteration required for Breachers:All creation and modification of level geometry should happen in Blender.WYSIWYG: What a designer creates in Blender should match the result in Unity as closely as possible.When something is updated in Blender, importing the changes into Unity should happen automatically and not require any manual effort.As mentioned above, our main goal was to have an accurate visualization of the game in Blender – not only properly reflecting how the end result will look in Unity but also how the gameplay mechanics are set up. Gameplay in Breachers not only depends on a level’s layout, but also on dynamic objects (like breachable walls) and invisible elements (like sound volumes and colliders). We want to have all this information visible at the design stage and carried over precisely to Unity.Custom properties are critical to our workflow, and we assign these to objects in Blender. These are then carried over in Unity by the FBX format, so we can read them and run custom logic when our assets are imported into Unity.This gives us a great amount of flexibility, as well as stability. These properties stay connected to objects throughout the pipeline, so we can reorganize and rename things in our levels as much as we want without worrying about things breaking or getting out of sync.Unity has a powerful class called AssetPostprocessor, which allows modifications of assets while they are being imported. This is what we use at import time to parse those custom properties and act on them.Prefab linksWe have a custom property named PrefabLink, which tells Unity the object imported from Blender should be replaced by a Prefab already in the Unity project, while preserving the imported model’s transform. This allows us to place these dynamic objects in Blender while retaining the advantages of Prefabs once they are imported into Unity. The window barricades in the Blender scene above are a good example of this.Surface typesSurface definition is extremely important in Breachers. Walking on a metal staircase sounds different from walking on a concrete floor. Bullet penetration through wood is a lot different than through steel. And each surface type has its own impact effects. Going over each prop in Unity and tagging it as the correct surface type would be extremely time consuming, so we also tackle this at the design stage in Blender by setting custom properties on our geometry colliders.Static flagsAnother important setting for optimization are Unity’s static flags. Setting these correctly can have a profound impact on things like visibility culling, light baking, and batching. Using custom properties in Blender, we can set these on any part of the level, including reusable props, and have that information carry over into Unity across our levels.CollidersLastly, we’d like to share how we set up colliders. Unity has a simple but effective system that automatically detects level-of-detail variants for models when you postfix a model asset name with _LOD0, _LOD1, etc. We were inspired by this and created a similar system for colliders: By simply having geometry with _BoxCollider or _NoCollision in the name, we replace the meshes from Blender with colliders in Unity.As a concrete example, here is a snippet of our LevelSetupPostprocessor that reads custom properties and assigns the right static flags on each imported object:For all of this to work smoothly, we did have to do some work on the Blender side as well.Custom properties are a bit hidden in Blender’s UI and would require artists to manually type out the custom properties each time, which is not a great user experience. Relying on manual text entry would also be very error-prone, undoing much of the advantage of setting things up in Blender in the first place. Moving from a Prefab-based workflow into Blender also made us miss some of the advantages of Prefabs, like having a nice library of objects to browse through and pick from. Luckily, Blender, like Unity, is very flexible and easily extensible.The answer to the Prefab organization problem came in Blender 3.2 with Asset Libraries. This system acts a bit like the Prefab system in Unity: It allows you to create assets in a separate file and then import those into your Blender scene, while changes in the asset file reflect automatically in the Blender scene. Additionally, it ensures that any custom properties or colliders are correctly applied to each instance of this asset in Blender.For Blender, we wrote an in-house add-on to help set up the custom properties in a more clear user interface. This simplifies setting custom properties by just selecting the relevant Blender objects and hitting a button, instead of typing out each property manually.The Bundle Exporter add-on is an open source add-on that we’re using to export all of our FBX files in one click. We modified it to also work with custom properties and updated the UI to have faster exports for our specific needs.Setting up our level design workflow for Breachers took a large time investment initially, but we believe it was the right choice for the project. Also, it was kind of fun!As we’ve built out the game from initial blockouts through alpha testing and the months leading up to the final release, iterating on our levels has been quick and painless. We’ve been able to eliminate overhead and busywork for our designers and artists, while also transferring responsibilities to them that they previously would have needed a developer for.We have been impressed at both Unity and Blender for their ability to integrate with each other this smoothly, and we strongly believe this integration was critical to making Breachers a game we’re happy with and proud to share with the world.Thanks for reading, and enjoy the game!Triangle Factory’s Breachers is now available. Check out more blogs from Made with Unity developers here.

>access_file_
1008|blog.unity.com

Prepare future creators for in-demand careers with the Unity Workforce Grant

Real-time 3D (RT3D) technology is transforming the way we work, learn, and socialize. Amid this transformation, the real-time 3D job market is growing rapidly, driven largely by increasing demand for immersive technologies in areas such as health care, gaming, architecture, and education.The growth of the real-time 3D industry has created a demand for talent, leading to a challenge for institutions and training providers to adequately prepare learners for future careers in this field. For example, there are still gaps in access and equity, particularly for those in underrepresented and low socioeconomic backgrounds. Factors such as training costs can make it difficult for learners to gain the skills needed for real-time 3D jobs, creating a demand for programs that can address these challenges.To support this, Unity Social Impact has partnered with Jobs for the Future (JFF), a leading nonprofit organization that works to create economic opportunities for underserved populations through innovative education and workforce development initiatives.Unity Social Impact and JFF are excited to announce the Unity Workforce Grant: Preparing future creators for in-demand careers. This open call for proposals will award funding to a limited number of higher education institutions, nonprofit organizations, and companies running workforce development programs to support the next generation of real-time 3D creators in accordance with the terms, conditions, and eligibility requirements described.If your organization does one or more of the following, then we encourage you to apply:Runs programs, courses, and offerings to equip learners with the skills needed to enter the real-time 3D job marketDiversifies and increases the global talent pool for real-time 3D jobsDrives training programs or designs educational content serving underrepresented, low-income, and/or underserved learner populations“3D artist. Avatar designer. Extended reality (XR) simulation developer. Technologies like virtual and augmented reality are opening exciting new pathways to quality jobs and careers – and effective workforce training will be essential for learners and workers to seize opportunities that lead to economic advancement,” says Kristina Francis, executive director of JFFLabs. “We’re delighted to partner with Unity to support innovative organizations, ensuring that the potential of training in XR/real-time development skills is truly accessible to all.”“We’re delighted to partner with Unity to support innovative organizations, ensuring that the potential of training in XR/real-time development skills is truly accessible to all.”The Unity Workforce Grant will reward up to US$200,000 to organizations training learners for the purpose of job readiness and career placement in the realm of immersive technologies and real-time 3D.“Rapidly upskilling into high-demand jobs, like real-time 3D, is crucial to building a thriving economy and society,” adds Jessica Lindl, vice president of Unity Social Impact. “It’s our responsibility to ensure that everyone, regardless of their background, has access to economic opportunities. The Unity Workforce Grant, in partnership with Jobs for the Future, is an important step in making this happen.”Grant applications will be accepted from April 17 to June 2, 2023 at 11:59 PM Pacific Time. Learn more about the grant and eligibility requirements.This grant initiative is part of the Unity Charitable Fund, which previously funded efforts such as the Higher Ed XR Innovation Open Call and EdTech Creator Challenge.Still have questions that you’d like answered live? Register to join us for a one-hour webinar on Monday, April 24 or one of two live Q&A sessions on either May 15 or May 22.

>access_file_
1010|blog.unity.com

Changing the world with RT3D: Meet the 2023 Unity for Humanity Grant winners

After reviewing almost 500 projects, we’re excited to share the winners of the 2023 Unity for Humanity Grant. All of the social impact creators receiving funding this year are using real-time 3D to drive change in truly innovative ways.Projects were judged based on vision, impact, inclusion, and viability. Winners will receive a bespoke grant from a pool of $500,000 USD, plus mentorship and technical support to help bring their projects to life. If you have a project you’d like to submit in the future, sign up to the Social Impact mailing list for updates about when next year’s grant will open.What’s the project?X-Ray Fashion is a VR documentary by Denmark-based XR studio MANND that uses immersive storytelling to educate audiences about issues within the fashion industry. The project combines virtual reality with corresponding physical elements (for example, when walking through water in the documentary, you walk through shallow water in the real world) to create a truly sensory experience that takes viewers through the various stages of a typical garment’s production process, from the sweat shop all the way to the catwalk.What’s the purpose?The fashion industry is the second-largest polluter in the world. It accounts for 10% of all global carbon emissions, and a huge 60% of textiles are thrown away within one year of being made. On top of that, a single pair of denim jeans requires 10,000 liters of water to make.The creators of X-Ray Fashion recognize that our habit of constantly changing our wardrobes and disposing of clothes we no longer like is having a big impact. Their goal is to use this immersive experience to change consumer behavior by helping viewers understand the impact that their wardrobes have on the environment and people working in the industry. Ultimately, the project encourages lifestyle changes such as buying second-hand garments, taking better care of what we already own, and minimizing our overall fashion consumption.What’s the project?Trying to put how you’re feeling into words when experiencing complex emotions and mental health issues can often be difficult. Sarah Ticho encountered this challenge when trying to describe her grief and mental state to a doctor during a time when she needed help. The experience led her to collaborate with experience designer Niki Smit to develop SoulPaint, a VR project in which participants create artwork on an avatar that expresses their inner world using color, shapes, movement, and imagery.What’s the purpose?According to Harvard Medical School, miscommunication is at the heart of most medical errors. SoulPaint is a unique experience that aims to transform the way we communicate our emotions with others, remove the stigma around mental health, and trigger impactful conversations by creating a shared exhibition experience in public spaces worldwide. It will also ultimately provide a tool that allows patients to improve communication with health care professionals.What’s the project?Quantum’s Pursuit is a game by Limbitless Solutions that lets children with bionic limbs play the limb-different grandchildren of Dr. Quantum, a tech genius and wizard who has developed renewable energy. Dr. Quantum has been kidnapped by evil Galacdorks trying to steal his invention, and it’s the player’s goal to journey through the levels, defeat the boss, and save Dr. Quantum.The game allows hospitals to teach children how to use their new bionic limbs in a fun, engaging, and stress-free way, while also gaining insight into the needs of each child based on their muscle strength – information that is usually difficult to ascertain.What’s the purpose?Limbitless Solutions provides free bionic arms, training, and even covers travel costs for patients and their families. This incredible project can vastly improve the quality of life of children with limb differences and ease the transition to a bionic limb during an otherwise difficult time.What’s the project?Using VR, Follow the Investigation: Inside the ICC shows International Criminal Court (ICC) cases at various stages of the judicial process. The experience provides valuable insight into how the ICC system works to bring those responsible for crimes against humanity – including war crimes and genocide – to justice.Viewers witness testimonies from survivors of past ICC cases, visit field investigation sites, process evidence in ICC forensic labs, and sit in on courtroom proceedings drawn from a variety of infamous global cases.What’s the purpose?This project serves as a somber reminder of and education about the work of the ICC and the process of seeking justice, helping to raise awareness of atrocities and the experiences of survivors to ensure continued global support for their recovery and the work of the ICC. The project also offers an impactful way for victims of horrific crimes to better understand the legal processes that relate to their own cases.What’s the project?In World Reborn, the world’s first activism adventure game, your goal is to save the world after a cataclysmic event fractures it into multiple realities. The mobile game uses AR to combine actions in the real world with choices in the virtual world, encouraging players to make a difference in both. Real-world actions that help you progress through the game include donating money, picking up trash, completing breathing exercises, and more.What’s the purpose?90% of the 72 million teenagers in the U.S. play video games. Having grown up with an awareness of pressing global issues – including climate change, mental health, and racial injustice – they want to make a difference, but often feel powerless to do so. The founders of Wicked Saints, creators of World Reborn, worked for the world’s largest peacebuilding organization and trained young movement leaders all over the world. They saw how many lives were transformed using an approach called Common Ground Activism – attacking the problem, not the person. Now, they’re building World Reborn to empower young people with CGA skills and drive change through incremental steps in the real world. Join their Discord community to get special access and be part of building the game.What’s the project?“What would the children of the future think about the mistakes of our past?” is the question that Team Gramps sought to answer with A Week at Belisamas Lake. This narrative-based mobile fishing game follows young Lotus and their grandmother Pearl as they recover 21st-century trash from a local lake in a future where humanity has overcome the climate crisis – and profoundly changed in the process. Using gyroscopic controls, you fish for items, inspect them, and listen as Pearl sheds light on relics of the past.What’s the purpose?Through a wholesome, optimistic narrative, A Week at Belisamas Lake shines a light on the possibility of a future society in a post-climate change world. Weaving together intergenerational relationships and items of the present day, the story examines just how drastically things might change if we don’t take action now, and how meaningful climate action will ultimately change us.Trigger warning: griefWhat’s the project?Drawing on the 17-year life cycle and symbolism of the Brood X cicadas, this virtual reality experience follows a mother’s journey to find meaning after the loss of her son. Using personal audio files, music, and images, the player is taken on a journey through the mother’s narrative, interacting with the experiences of passing time and grief.What’s the purpose?Year of the Cicadas is a mother’s reflection on the power of finding meaning in the most tragic of stories, and how that meaning transforms over time. The goal of this experience is to provide a window into the life-long journey of meaning-making after child loss for those who may know or work with bereaved parents and family members.Trigger warning: sexual assault, child abuseWhat’s the project?This mobile game is designed for parents who suspect their child may be the victim of sexual abuse or who want to talk to their children about topics like consent. Patito uses minigames to show a young character realizing he is a victim, providing a sensitive approach to educating children and parents on these difficult topics.What’s the purpose?According to the Organization for Economic Co-operation and Development (OECD), over 4.5 million children are victims of sexual abuse every year in Mexico. Pink Bear Games have created Patito to raise awareness of this issue and help give parents an effective way to communicate about sexual abuse and consent with their children. Their goal is to provide the app for free in an effort to help prevent future cases.Congratulations to all of this year’s winners – we can’t wait to share more of their projects with you. If you’re a social impact creator, join the Unity for Humanity Community Discord to meet like-minded creators.

>access_file_
1012|blog.unity.com

Build a production-ready multiplayer game with Netcode for GameObjects

Are you building a cooperative multiplayer game with Unity? We’ve got the perfect on-demand resource for you: A four-part webinar series from the Multiplayer team – now available on YouTube. This series dives into the Boss Room sample game to explore how you can build a production-ready multiplayer game with Unity and Netcode for GameObjects.Creating multiplayer games isn’t just about using the right APIs. The first episode in the series covers best practices and provides advice when introducing a chaotic tech like the internet between your players when developing a multiplayer game.In the first episode, we cover:What is Netcode for GameObjects (NGO) and Unity Gaming Services (UGS)?NetworkVariables vs RPCs and reasons to choose which for each featureAuthority and why we chose server authority for most of our gameplayMovements and alternative models like Client Authority for dealing with lag, and optimization tricks for pathfinding-based movementsBasic game implementation and how we used State (netvar, network list) and RPCsEpisode two covers the implementation of character abilities in Boss Room and how to approach ability implementation in your game.We dive into:The general flow of implementing server-driven abilitiesReliability and what it means for RPCs to be unreliableMelee attacks and the anticipation of animation issuesTank shield functionality and interaction with the environmentArcher powershots and Area of Effect (AOE), which require tracking inputs over time on the client side onlyMage firebolt and bandwidth useThe general architecture of our ability systemWe also look at:Dynamically spawned objectsSpawning static in-scene placed objectsSpawning destroyable in-scene placed objectsLessons learned around zombie imps when late joiningCustom spawning logic like pools and how to integrate them with NGOIn the third session, we cover a few more game implementation details before diving into making your multiplayer game resilient to players.We explore:Physics interactions, objects and parenting, scenes and scene managementUsing Relay and Lobby to take your game online and why you can’t use NGO for joining playersCharacter selection screen syncing between players using NGO and custom serializationMaking your game resilient to players coming and going, and reconnection flows, late join support, disconnection, and timeoutsHandling race conditions and various tests to performIn the fourth and final session of the series, we explore game development best practices for multiplayer games.This episode covers:Bandwidth optimizations and tools to profile, optimizing NetworkTransforms, and other tipsDebugging tools like network condition simulators, stats monitoring, and custom debug flowsProject architecture (action system, player architecture, etc.)The future of Boss RoomWatch the series? Share your feedback so we can plan even better sessions in the future.If you’re ready to dive into your next multiplayer project with Unity and Netcode for GameObjects, here are some helpful resources to get you started:Learn more about Netcode for GameObjectsExplore our samples: 3D Boss Room, 2D Galactic Kittens, Bitesize SamplesRead the documentationGot questions or feedback about multiplayer game development in Unity? Feel free to join the discussion on Discord or in the forums.

>access_file_
1013|blog.unity.com

Made with Unity Monthly: March 2023 roundup

Interested in seeing how fellow creators are using Unity? Look no further than this roundup of the latest made with Unity news and discover what the Unity community has been up to – including even more highlights out of GDC 2023.Games created in Unity reached some extra exciting milestones in March.To start, Sabotage Studio revealed that Sea of Starswould release in August this year, getting us pretty excited. Looking to fight for the title of mightiest of them all? Mighty DOOM by Bethesda Softworks may be the action-packed game you need.Awards season kept the milestones coming throughout the month, with congratulations in order for a handful of Unity-made projects:Academy Awards (winners list)Avatar: The Way of Water, Best Visual EffectsBAFTA Games Awards (winners list) IMMORTALITY, NarrativeRollerdrome, British GameTUNIC, Artistic Achievement and Debut GameGame Developers Choice Awards (winners list) Citizen Sleeper, Social Impact AwardIMMORTALITY, Innovation AwardPentiment, Best NarrativeIGF Awards (winners list) Betrayal at Club Low, Nuovo Award and Seumas McNally Grand PrizeThe Forest Quartet, Excellence in AudioIMMORTALITY, Excellence in NarrativeRPG Time: The Legend of Wright, Excellence in Visual ArtsSlider, Best Student GameWe share new game releases and milestone spotlights every Monday on the @UnityGames Twitter account. Be sure to give us a follow and support your fellow creators.Tuesdays are dedicated to #UnityTips on Twitter. We especially loved this one from @TheMirzaBeig featuring a quick tutorial for a great 2D outline effect:At the very end of March, we also had our friends from @BinaryImpactG take over the channel to share some of the best tips they’ve used over the years. A few notable ones include:Having an AudioSource play backwardsA convenience feature to make your components easy to useHow to randomize sprite animations so they’re not too uniformYou can find their other tips on our Twitter channel, or all of them on Binary Impact’s website. Keep tagging us and using the #UnityTips hashtag to share your expertise with the community.We’re stunned by what you all create every week, and you certainly kept the amazing projects coming in March. If we missed something from you, be sure to use the #MadeWithUnity hashtag next time you share.Twitter’s @AnderssonKev inspired us with a progress update on his adorable game (pictured above), and @JuhanaMyllys shared one of the best spots to catch a nice view in their gameworld. Then, @_josueor had some cool rug animations to show, while @AlexKentDixon took us to admire some breathtaking scenery. Last but not least, @DonXugloGames’s enemy was feeling quite sleepy and in need of a good nap.On Instagram, even more happened: @canopy_design was fighting alongside ruins, and @tails_of_fate’s fox explored dungeons. We also highlighted plenty of #MadeWithUnity creators who joined us for GDC. Find an inspiring reel of them on our YouTube channel.We’re so excited to continue the #MadeWithUnity love, so keep adding the hashtag to your posts to show us what you’ve been up to.At GDC and on Twitch this month, it was all about the creators. To start, we sat down with Fika Productions to discuss Ship of Fools for March’s first Creator Spotlight stream. (Catch a clip from the stream above.) Next came two additional Creator Spotlight streams, covering Schell Games’s Among Us VRand Team Miaozi’s Cygnus Enterprises. Finally, we continued posting throwbacks with part two of the Let’s Dev 101 sessions on VFX Graph – from July 2022 – on YouTube.Don’t forget to follow us on Twitch and hit the notification bell so you never miss a stream.On March 30, we hosted the third Dev Blitz Day of 2023 and covered all things performance profiling. The event was held in both the forums and on the Discord server. Throughout the day, we had more than 36 threads and would like to thank everyone who participated.Keep an eye on our forum announcements and Discord for updates about future Dev Blitz Days, and don’t forget to bookmark the archive of past Dev Blitz Days.For GDC 2023, in order to bring the event to those who were unable to attend in person, the team set up a hub for the event on Discord. We created specific channels to share pictures and videos from the week, a place to discuss the event itself, and our first-ever use of Discord Stage, which brought 30 speakers online to provide overviews of in-booth sessions.We created over 40 posts, featuring 75 pictures and 22 videos, to help our community feel like they were at the event. Unity speakers also received more than 200 questions during the 14 hours we were live from the Discord Stage.Members of the Unity Insiders program were active during March, talking about the latest news on our Unity Gaming Services solutions and out of GDC. Check out some highlights:Did you know that studios that use the Unity Asset Store ship games approximately 20% faster? Don’t take it from us, hear it directly from the creators surveyed as part of the 2023 Unity Gaming Report.Taking to social media, here’s a roundup of some of our favorite creator showcases from Twitter in March:Low-Poly Big Environment Pack | Philipp SchmidtLightning Wall effect | Archanor VFXGlobal Snow 2 | KronnectDon’t forget to tag the @AssetStore Twitter account and use the #AssetStore hashtag when posting your latest creations.Last but not least, here’s a non-exhaustive list of Made with Unity titles released in March. If you see any on the list that have already become favorites or notice that something’s missing, share your thoughts in the forums. Creating with Unity and not seeing your project on the list? Submit it here for a chance to be featured.One Military Camp, Abylight Barcelona(March 2)Star Survivor, SpaceOwl Games (March 2)Figment 2: Creed Valley, Bedtime Digital Games (March 9)MiLE HiGH TAXi, Cassius John-Adams (March 13)The Wreck, The Pixel Hunt (March 14)Storyteller, Daniel Benmergui (March 23)Monster Racing League, Flightless (March 23)Resident Evil 4, CAPCOM Co., Ltd. (March 23)Innchanted, DragonBear Studios (March 28)Terra Nil, Free Lives (March 28)The Last Worker, Oiffy, Wolf & Wood Interactive Ltd (March 30)DREDGE, Black Salt Games (March 30)That’s a wrap for March! Want more community news as it happens? Don’t forget to follow us on social media: Twitter, Facebook, LinkedIn, Instagram, YouTube, or Twitch.

>access_file_
1014|blog.unity.com

Introducing Unity Industry: Create and scale your real-time 3D vision

As the demand for real-time 3D continues to surge across industries like automotive, manufacturing, government, architecture, energy, retail, and more, we’ve been listening closely to what our industry customers need. We heard loud and clear that this world is different from that of game developers and requires tailored solutions. Industry creators need more support to onboard growing teams, face time-to-market pressure to deliver differentiated experiences, and need to integrate cutting edge technologies, standards, sensors, and other real-world data into experiences to stay ahead of the competition.We’re excited to announce the release of Unity Industry, a suite of products and services designed just for industry creators.Unity Industry enables developers, artists, and engineers across industries to build and deliver custom real-time 3D experiences for augmented reality (AR), virtual reality (VR), mobile, desktop, and web. Unity Industry includes:Unity Enterprise: Manage complex real-time 3D projects across teams using built-in support and creation tools that scale. Includes three-year Long Term Support (LTS) and read-only source code access.Industry Success: Exclusive to Unity Industry, Industry Success helps you overcome challenges faster with dedicated advisors, professional training and onboarding, and rapid response support.Pixyz Plugin: Import more than 40 3D, CAD, and BIM file types to bring source data into Unity’s real-time 3D platform.Unity Mars: Efficiently create AR apps with better workflows and purpose-built authoring tools.Unity Build Server: Utilize on-premises solutions for faster project build testing as you scale, on dedicated network hardware.Unity Industry addresses developers’ needs from the early stages of discovery to building and scaling complex industry applications. From product visualization, marketing content, and sales configurators to smart factories, digital twins, and simulations, Unity Industry enables customers to turn every touchpoint into an immersive and interactive real-time 3D experience anywhere, on a wide range of devices.Building complex solutions requires a dedicated team at your side. Industry Success – an exclusive support offering for Unity Industry – helps teams solve critical onboarding challenges, accelerate time-to-market, optimize resources, and achieve business goals. Industry Success includes:Mitigate risk and get your project off the ground with access to Unity’s ticketing system which provides a 48-hour guaranteed response time.For each Unity Industry seat purchased, customers get access to more than 300 hours of On-Demand Training, covering topics from Unity basics to lighting, optimization, and deploying projects. The extensive self-serve training catalog is designed to help your team members develop their skills further.Every account is assigned a dedicated Partner Relations Manager to act as an internal advocate and strategic advisor, handling issues from submission to resolution. Partner Relations Managers act as the bridge between customer teams and Unity to help onboard new products, perform regular check-ins to ensure teams are meeting their goals, and guide customers to resources for new projects.Get one month of product activation support through documentation, training videos, and a technical point of contact to ensure you’re set up to start your Unity journey.Get access to 90 days of customer onboarding engagement. Dedicated advisors provide guidance on how best to leverage support and resources, so you can get started quickly and access help faster.With the release of Unity Industry, there are some upcoming changes to the Unity Industrial Collection (UIC) and Unity’s Terms of Service.UIC is being deprecated, which means that Unity Industry will now be the default path for industry customers to access the Unity Editor. To ease the transition, existing UIC customers have until October 3, 2023 to renew their UIC subscription or purchase additional seats for one extra year at the current price. You can also choose to upgrade to Unity Industry.For details and migration paths, visit the FAQ or contact your Unity sales representative.Starting April 3, 2023, new industry customers who make more than $1 million per year in total finances will be required to purchase Unity Industry. This requirement also applies to renewals done after October 3, 2023. If an industry customer makes less than $1 million per year, they can use Unity Pro, Unity Enterprise, or Unity Industry.Industry is identified as a non-games, non-entertainment customer. Users of Educational Versions are also excluded. Industry customers include, but are not limited to, automotive, aerospace, manufacturing, government, architecture, engineering, construction, energy, and retail sectors.To learn more, visit the FAQ.Talk to our team to learn how Unity Industry can help your business build without constraints.

>access_file_
1015|blog.unity.com

Analyzing your application’s physical memory footprint using Memory Profiler

When it comes to efficiently detecting memory issues and optimizing performance, the information shown on the Memory Profiler, as well as the information’s precision, is key. We’re investing significant effort in this area. In two recent blogs, members of my team introduced Memory Profiler 1.0.0 and shared five key workflows to diagnose and examine memory-related issues in your game.Soon, we will be releasing Memory Profiler 1.1 (an experimental version is available now), which includes updated labels and descriptions to explain how memory works and how application memory footprint is calculated.Since memory footprint continues to be a hot topic in our conversations with developers, I’m here to answer your frequently asked questions – specifically, to cover these three topics:What resident memory isHow application memory footprint is calculatedHow to analyze memory footprintLet’s drill into memory allocation in Unity. When the engine allocates memory, it first reserves multiple memory pages in the virtual address space that can fit the requested allocation. Pages are the smallest units of memory management. Virtual address space and physical storage are each organized into pages, and the page size depends on the platform used. For example, on x86 computers a page size is 4 KB.After the engine has reserved enough pages, it asks the operating system (OS) to “commit” physical storage to memory. This is why allocated memory is often referred to as “committed.” Next, the OS registers that the pages now have physical storage assigned and they can be accessed. Your application-reported “total committed memory” will then increase. However, the physical memory footprint of your application stays the same.The footprint stays the same because, even though you’ve committed your region to physical storage, most OSs are lazy and thrifty, so there’s no assignment of a specific physical storage location. As an example, let’s say you decide to write something in the committed region. There is not yet any physical memory underneath the region, so accessing it will incur a page fault. In response, the OS’s memory manager will allocate a previously available physical page in order to complete your operation. Because all operations are performed with page-size granularity, unaccessed pages of the region will remain empty and without physical memory assigned. Similarly, your application’s resident memory size will increase by the total size of all physical memory pages allocated to complete your operation.If a page has not been accessed for a while or demand for physical memory is high, an OS might offload some pages from your allocated region either to compressed memory or a page swap file, depending on what is supported on your platform.In this case, your application’s reported allocated memory will stay the same but resident memory size will decrease.As you might have already realized, if you only look at allocated memory you may be misled by which allocation consumes your physical memory, which can trick you into optimizing something that isn’t a problem. Not only does this waste your valuable time, you don’t see any difference in your application performance and stability.Overall, your application memory state can be described by this diagram:In summary, here’s how the memory footprint is calculated:Physical memory footprint = Application resident memory + Application compressed memory pagesIn Memory Profiler 1.1, the Summary, Unity Objects, and All Of Memory views will not only show Allocated memory size but also provide information about Resident memory. However, this information will only be shown if the Memory Profiler snapshot is made with Unity 2023.1 or newer. With older snapshots, you’ll still see updated UI and breakdown views, but without information on Resident memory.TheSummary view provides a general overview and an essential metric: Total Resident on Device. If your application needs to run on a platform with limited memory, Total Resident on Device is critical for reviewing low memory warnings and out-of-memory evictions. As a rule of thumb, you shouldn’t go over 70% of the total physical memory available on a device.For detailed analysis, you can use Unity Objects andAll of Memory views. You’ll need to select Resident on Device or Allocated and Resident on Device from the dropdown menu and sort by Resident size to see objects that contribute most to the total physical memory used.When analyzing resident memory usage, remember:Managed memory will be dominantly resident. Mono Heap and Boehm Garbage Collector regularly access objects and make them resident.Graphics memory (estimated) is shown as estimated. On most platforms, we don’t have access to information on the exact whereabouts of the graphics resources, so we estimate size based on available information like width, height, depth, pixel format, and so on. This also means we don’t have information about graphics resources’ residency status. For usability reasons, all graphics objects are shown only in the Allocated view mode.Untracked is all memory reported by the OS as allocated by the application, but which lacks solid information on the source of the allocation. It could be native plugins, OS libraries, thread stacks, etc. On some platforms, we provide additional insights into who might have allocated that memory in the group breakdown.When analyzing Native memory, which contains all Unity non-managed allocations used by objects, you’ll see the Reserved memory item. This is memory allocated by Unity Memory Manager but not used by any Unity object during capture. Here’s some helpful information:Reserved memory can be resident, which means that there might have been an object that was recently deleted.You can access additional information about Reserved breakdown by going to the Memory Profiler settings and enabling the “Show reserved memory breakdown” checkbox. By default, this is disabled, as Reserved breakdown doesn’t always contain enough actionable information and requires a deep understanding of how Unity Memory Manager works.You can learn more about Unity Memory Manager and allocation strategies in the allocators setup documentation.On some platforms, we show additional platform-specific groups if they’re of significant size, like Android Runtime on Android. Here are some notes on Android Runtime:On some versions, Android Runtime tends to preallocate a significant amount of memory but never use it. In that case, allocated memory doesn’t add to the application memory footprint and only the resident part of it needs to be considered.If the Android Runtime resident part is taking up a significant amount of the application memory footprint, use the Android Studio profiler to analyze allocations done in Java.Although Android doesn’t have a page file or memory compression by default, the Linux kernel allows applications to overcommit and allocate more memory than is physically available.When capturing, make sure you understand the device you’re using. Some vendors supply the Android Linux kernel with memory compression (zRAM) or vendor-custom page swap file tools.We hope this overview of what to expect in Memory Profiler 1.1 (experimental version available now) and exploration of various topics around memory footprint have been helpful.My team and I plan to continue improving the Memory Profiler to provide more precise and targeted information, as well as warn you about potential out-of-memory situations and how close they might be. Follow the progress on our product roadmap and tell us what you think.Share your feedback with us in the forums. Be sure to watch for new technical blogs from other Unity developers as part of the ongoing Tech from the Trenches series.

>access_file_
1018|blog.unity.com

Developing for blindness and low vision in VR with Cosmonious High

In this guest post, Owlchemy Labs Accessibility Product Manager II Jazmin Cano dives deep into how the team used Unity to develop an all-new vision accessibility update for Cosmonious High in virtual reality (VR).At Owlchemy Labs, we have made a dedication in our Accessibility Statement to the pursuit of creating VR games for everyone. Historically, our team has prioritized making significant strides in unsolved areas of accessibility in VR including subtitles, physical accessibility, and height accessibility. We encourage every developer to create with accessibility in mind, and actively incorporate accessibility into our games at launch and through post-launch updates.For our last accessibility update to Cosmonious High, we added a range of gameplay options, including one-handed controller mode, seated player mode, subtitling, and more. If a game can only be played by an audience with no disabilities, it is a sign of an unfinished product. We take pride in forging new paths through research, testing, and partnerships to ensure gaming is available to the widest possible audience.When we started our research in developing for blind and low-vision players, we found that the main issue was the inability to follow a storyline or in-game directions.Oftentimes, there is no subtext available for all of the scenes in a game, and different scenes are used to advance the story. A storyline could be complex and challenging to follow without context or subtext. Other aspects of a game, like completing a puzzle or a task, become difficult when not all pieces are clearly visible for players or when vital clues are given without any text or visual queues.From our research, we found it was important to create a way for players to receive game information through audio descriptions using Text To Speech (TTS). Most people who are blind or have low vision use assistive technology called screen readers, which allows them to navigate screens with a keyboard, and their computer or phone will read out the text. Our game features are similar in the sense that they allow players to navigate virtual spaces using their hands or a joystick as methods for reading out objects and descriptions. Each feature is built to follow expectations regarding screen-reader standards, such as ducking non-TTS audio and allowing the user to cancel TTS mid-description.We haven’t seen narration or TTS in other released VR games before, so we knew launching our approach for accessibility in this area – after researching best practices and playtesting with those who are legally blind or have low vision – would benefit the industry.Developing for blind and low-vision players isn’t just adding audio cues and options. Blindness is a spectrum, and creating gameplay in a way that is fully inclusive of blind and low-vision players also includes feeling and seeing.To accomplish this, we developed more haptic feedback as a method to identify an object when a player highlights it. This is particularly important when a player is completing a puzzle. Players can identify an object and feel it when they have selected it.We’ve also added high-contrast object highlighting, which outlines key objects in the environment, making it easier for players to see the object and understand their selection with haptic feedback.To bring this all together, we incorporated a Grab-and-Release confirmation. Using this, players will receive haptic feedback when highlighting an object that is shown through high-contrast object highlighting, and audio will play to inform them when an object has been grabbed and released.When we started developing this update, we anticipated a few challenges, ranging from design decisions to playtesting. Thankfully, we had a great start to the project after meeting with Steve Saylor, a video game accessibility consultant who is blind. Consulting with Steve, we were able to identify the features we would need and what expectations someone with low vision would have. We did a lot of research, experimentation, and testing to determine what worked best and what we could execute successfully.For the vision accessibility update, we knew we needed to branch out when finding playtesters with low vision to help provide valuable feedback and help with our design. We teamed up with VROxygen to find a group of playtesters with blindness and low vision to provide feedback on our iterations and help us prioritize improvements we needed to make, which worked out well. Opening testing to remote players from anywhere in the world allowed us to get a wide range of perspectives on the project, with feedback coming from people with varying levels of vision.The path to creating this update offered some challenges to consider. Sometimes, what seems like the most obvious answer is not always the best one, especially when developing for accessibility. We took the time to work through each aspect of this update to make sure the features we were adding worked well for those who needed it most.When we enabled TTS early in the project, we started with automatic narration. This meant that any object a player’s hands waved over would be described, even if that meant speaking on top of a previous description that may still be going. For audio descriptions to be valuable, they need to be heard without other audio fighting for priority.This resulted in a few changes that worked well in playtesting. For example, we decided to add a button press to activate descriptions instead of having them read automatically, which led to a more comfortable experience. This gives players agency when deciding if a description is read to them when their hand is placed over an object or pointing at something in the distance. It also prevents accidental TTS from happening if a player moves their hand over objects they didn’t mean to have read.While TTS describes the name of the object and a visual description, it doesn’t take very long. Even with short descriptions, though, we know people would want behavior similar to a screen reader (i.e., the ability to cancel audio while it’s being read).Another thing we learned with regards to audio is the importance of lowering it so that the lower volume allows the TTS audio descriptions to have priority. We ran into a problem where TTS can be triggered during an interaction with an NPC, making the NPC’s dialog quieter and easy to miss. At this time, players are not able to “rewind” or “retrigger” the same audio to play; however, players can wave their hands and NPCs will respond back to help.But one of the hardest parts about building features like these is making sure they will actually help users who need them. The best way of determining usefulness for new accessibility features is through testing. Of course, being able to quickly make new builds for all of our platforms after each round of feedback and development was essential to making this update the best it could be. One unlikely tool we found useful for fast iteration on our designs was Unity's Post-Processing Stack.Before sending builds to playtesters, our developers wanted to test the effectiveness of features internally. Since many of our developers are sighted, we used the Post-Processing Stack and created entries in our debug menu that allowed us modify the visual clarity of what we were seeing in the headset. This helped our developers simulate roughly what it is like to have different levels of reduced vision while playing the game. Since we could now rapidly identify and tackle the most obvious issues, we were able to iterate on designs more quickly and make sure we were getting the most out of the external playtest sessions with blind and low-vision testers.In developing this update, we learned good design practices for blind and low-vision accessibility that we’ll use in future games. One of those learnings comes from an approach that started long before this update.Our developers create with accessibility in mind, and we’ve learned from each accessibility update that starting a project with this approach makes developing future accessible features much easier. For example, making sure objects have proper names and descriptions that are useful as alt text on images requires less effort and saves time.Having large objects and large text with good contrast makes a lot of a VR game’s world easier to see and read. Many players who described their vision as highly blurry could lean in and read much of the game’s text. Players who couldn’t fully make out text would then use the assist button to hear the words as needed.The text in Cosmonious High is stationary, so players don’t need to worry about it being at a fixed distance from their face, moving away from them as they continue to lean forward. One player commented that we made the game accessible before even thinking about vision accessibility as he described the size and colors in the world not specific to this update. While we appreciate the compliment, the design practice of making things larger and easier to distinguish is part of our development process – it’s in our developer documentation.Specific to this update, allowing players to decide when to get audio descriptions, allowing players to cancel audio, and keeping descriptions short with valuable information is key to giving players agency.Developing for blind and low-vision players has added to our arsenal of development tools. We hope to build upon our learnings in all areas of accessibility and plan to launch future titles with more accessibility included. We’re excited to share this update of Cosmonious High as a continuation of our mission to make VR for everyone.Owlchemy Labs’ Cosmonious High is available on multiple platforms. Check out more blogs from Made with Unity developers here.

>access_file_