Website powered by

The Modified Files Backup Tool for Unity

General / 04 December 2023

Game development often involves extensive file management, which can become a daunting task, especially when dealing with a multitude of assets and scripts. To address this, I've developed a custom tool for Unity - the Modified Files Selector. This tool not only simplifies the process of managing game assets but also ensures that your workflow is more organized and efficient.

Get the tool: ArtStation - Backup Tool for Unity

What is the Modified Files Selector Tool?

The Modified Files Selector is a Unity Editor Window tool designed to identify and manage files modified after a specified date and time. It helps game developers and artists in various ways:

  1. Time-Saving File Selection: Quickly find all files modified after a chosen date and time, allowing for a streamlined process in identifying recent changes.

  2. Customizable Search Parameters: The tool allows you to include or exclude specific paths and file extensions, making the search more relevant to your current project needs.

  3. Automated Backups: With an option to set automated backup intervals, this tool ensures that your latest work is regularly saved, providing peace of mind and data security.

  4. Intuitive Interface: The user-friendly interface of the tool makes it easy for both beginners and experienced developers to use effectively.

How Does It Work?

The Modified Files Selector operates within the Unity Editor. Here's a step-by-step guide on how it functions:

  1. Set Date and Time: Choose the year, month, day, hour, and minute from which you want to start tracking changes.

  2. Define Paths and Extensions: Input the paths you want to exclude in your search, as well as the file extensions to be considered.

  3. Find and Select Modified Files: With a simple click, the tool scans your project and lists all the modified files. You can then select all these files with another click.

  4. Backup and Verify: Easily back up your selected files as Unity package file and verify the integrity of the backed-up data to ensure no file is missed or corrupted.

A Pivotal Tool for Unity Developers

The Modified Files Selector tool is essential for game developers working in Unity for several reasons:

  • Enhanced Productivity: By automating the tedious task of file management, developers can focus more on the creative aspects of game development.
  • Reduced Risk of Data Loss: The automated backup feature minimizes the risk of losing important work.
  • Customizable to Project Needs: Whether you’re working on a small indie game or a large-scale project, this tool adapts to your specific project requirements.

Integrating Into Your Workflow

Incorporating the Modified Files Selector into your Unity workflow is straightforward. Download the tool, import it into your Unity project, and access it from the Unity Editor under the 'Tools' menu. Customize the settings according to your project's needs, and you're set to streamline your asset management process.

Current Focus: Simple Local Backup

At its core, the Modified Files Selector emphasizes simplicity and efficiency in local backup solutions. It's designed to provide a straightforward and reliable method for backing up project files within Unity, reducing the risk of data loss and improving project security.

Future Improvements: Integration with Git

Looking ahead, there are plans to enhance the Modified Files Selector with Git integration. This future update aims to:

  • Enhance Version Control Capabilities: By connecting with Git, developers can leverage powerful version control features, making it easier to track changes and collaborate on projects.
  • Streamline Workflow with Repositories: Git integration will allow for seamless syncing with repositories, further automating the file management process within the Unity environment.

Conclusion

The Modified Files Selector for Unity is more than just a tool; it's a workflow enhancer for game developers. By integrating it into your Unity projects, you can significantly improve the efficiency and organization of your development process. Try it out and experience the difference it makes in managing your game’s assets and scripts.

Stay tuned for more insights and tools to optimize your game development journey. Happy developing! 🎮🛠️

Dynamic Clothing Swap Script for Unity

Article / 18 November 2023


In the realm of game development, enhancing player experience through customization is a key goal. I've developed a custom script for Unity to dynamically swap and rig clothing on characters, a feature not natively available in Unity. This approach is ideal for games where character customization is a focal point, such as RPGs or simulation games. Here's how it works:

  • Model Compatibility: The first step involves importing your character and clothing models into Unity. They should have compatible rig structures to integrate smoothly.
  • Rig Configuration: Set up your character model as a humanoid rig in Unity, ensuring all bones are correctly mapped in the model's 'Rig' tab within the import settings.
  • Custom Scripting: The core of this functionality lies in a custom C# script. This script is designed to instantiate clothing items and align their rigs with the character’s rig, allowing for seamless clothing changes.

Here’s a snippet of the script:

using UnityEngine;
public class ClothesSwapper : MonoBehaviour
{
    public GameObject avatarPrefab; // Prefab of the avatar
    public GameObject[] hairOptions; // Array of hair options
    public GameObject[] outfitTops; // Array of outfit tops
    public GameObject[] outfitBottoms; // Array of outfit bottoms
    public GameObject[] footwears; // Array of footwear options
    public GameObject[] glassesOptions; // Array of glasses options
    private GameObject currentAvatarInstance; // Reference to the current avatar instance
    private GameObject[] currentClothingItems; // Array to keep track of the current clothing items
    void Start()
    {
        RandomizeOutfit(); // Randomize outfit on start
    }
    GameObject GetRandomItem(GameObject[] items)
    {
        if (items == null || items.Length == 0)
        {
            Debug.LogError("Items array is empty or null.");
            return null;
        }
        int randomIndex = Random.Range(0, items.Length);
        return items[randomIndex];
    }
    GameObject InstantiateClothingItem(GameObject itemPrefab, Transform parent)
    {
        if (itemPrefab == null) return null;
        GameObject itemInstance = Instantiate(itemPrefab, parent);
        itemInstance.transform.localPosition = Vector3.zero;
        itemInstance.transform.localRotation = Quaternion.identity;
        itemInstance.transform.localScale = Vector3.one;
        // Search for mesh object in the file
        MeshRenderer itemMeshRenderer = itemInstance.GetComponentInChildren();
        if (itemMeshRenderer != null)
        {
            // Additional logic to handle mesh objects can be added here
        }
        else
        {
            Debug.LogError("No MeshRenderer found on the instantiated item.");
        }
        return itemInstance; // Return the instantiated item
    }
    public void RandomizeOutfit()
    {
        if (avatarPrefab == null)
        {
            Debug.LogError("Avatar prefab not assigned!");
            return;
        }
        // Destroy the current avatar and its clothing if they exist
        if (currentAvatarInstance != null)
        {
            // Remove existing clothing items
            if (currentClothingItems != null)
            {
                foreach (var item in currentClothingItems)
                {
                    if (item != null)
                    {
                        Destroy(item);
                    }
                }
            }
            Destroy(currentAvatarInstance);
        }
        // Instantiate a new avatar
        currentAvatarInstance = Instantiate(avatarPrefab, transform.position, Quaternion.identity);
        // Instantiate new clothing items and keep track of them
        currentClothingItems = new GameObject[]
        {
            InstantiateClothingItem(GetRandomItem(hairOptions), currentAvatarInstance.transform),
            InstantiateClothingItem(GetRandomItem(outfitTops), currentAvatarInstance.transform),
            InstantiateClothingItem(GetRandomItem(outfitBottoms), currentAvatarInstance.transform),
            InstantiateClothingItem(GetRandomItem(footwears), currentAvatarInstance.transform),
            InstantiateClothingItem(GetRandomItem(glassesOptions), currentAvatarInstance.transform) // Include glasses in the outfit
        };
    }
}


  • 4. Testing and Refinement: After implementing the script, rigorous testing with various clothing items and animations is essential. This helps identify and rectify any errors or unexpected behaviors.


This script was created as an experiment to push the boundaries of character customization in Unity. It showcases how a bit of creativity and coding can significantly enhance the interactive elements of a game, offering a more personalized and immersive player experience.

Note: The character models downloaded from www.readyplayer.me 

Psych 2 - Game Environment Creation Log

Making Of / 27 October 2023

Hello with the second post for the Psych project! Previously I posted the discovery phase of the base layout. You can check it: Psych 1 - Game Environment Creation Log

Also, you can check the full recorded process on this playlist: Psych YouTube Playlist


My focus has now gracefully transitioned toward researching the art style for objects within our envisioned environment. It's not merely about creating models, but painting them with a touch of realism intertwined with a unique style, ensuring they resonate with the thematic essence of the AAA world I am crafting.

Model Creation and Painting:

The journey on the road of artistic creation has commenced with modeling, followed by painting each model, cherishing the transformation they undergo with each stroke. With a plan to create a range of 30-50 objects initially, I am on a quest to see how they amalgamate to belong to the same world, embodying a realistic yet unique style.

Employing Technological Aid:

Of late, the utilization of DALL-E 3 for generating concept images has been a boon, making the conceptualization phase considerably more straightforward. This technological companion has been instrumental in streamlining the creative process, at least for the time being.

Narrative Development:

Simultaneously, the narrative aspect of the project is also brewing. I am nurturing the story, with plans to soon share the process in a distinct blog series, linking it here for a seamless narrative experience.

Iterative Process:

This endeavor is indeed an iterative one, especially given the solo venture of being the creator and director. Post developing a coherent style on the primary objects gracing the environment, the voyage will advance towards polishing and adding finer details to the space, enriching the environment's aesthetic and thematic essence.

Conclusion:

The expedition of creating an interactive space laden with a narrative is an exhilarating one. With each model crafted, painted, and placed within the environment, alongside the narrative slowly unfolding, the envisioned world is inching closer to reality. The excitement burgeons with each passing day, and sharing this creative journey through subsequent posts is something I look forward to. The process, though meticulous, is highly rewarding.

 Stay tuned for more updates as we delve deeper into the realms of environment modeling, object styling, and narrative development. Your engagement is the fuel to this creative endeavor. Much love and anticipation for the chapters yet to unfold.


Material Tracker: A Unity Editor Tool Adventure - 1

Making Of / 26 October 2023

Once upon a chilly morning, as I navigated through the labyrinth of my Unity project, a thought sparked in my mind. My scenes were bustling with materials and shaders, each contributing to the aesthetic appeal of the game. However, tracking them had become akin to finding a needle in a haystack. It was then that I envisioned a tool, a trusty companion in my editor that could list all materials, the game objects they adorned, and the shaders they employed. LOL, what a story.

With a goal etched in my mind, I embarked on a quest to create a Unity editor tool. Below is the fruit borne of my endeavor:

I'm honored to share this with you guys: 

.cs file on Google Drive

You can also get it free at the Artstation shop: Material Lister for Unity

The inception was simple; a button to list all materials used in the open scene. However, as the list grew, it was a mere text dump, bland to look at. I decided it needed a touch of elegance. Introducing sections and boxes added a structured layout, making it visually more appealing and organized.

The first draft of my tool was functional but primitive. It could list materials but finding them in the project or inspecting them was a manual chore. "Why not add a 'Find' and a 'Select' button next to each material?" I thought. And so, with a few lines of code, I made it possible to find a material in the Project window or select it for a closer inspection in the Inspector.

However, the plot thickened when I realized that materials with identical names but residing in different folders could wreak havoc. It was crucial to use the path to distinguish between these materials. Instead of adding that feature for now, I tested it with well-named materials and added a note as "Works with proper naming and no duplicated materials in the project." which is clean enough for now.

 As I beheld the tool, I realized it could do more. A small addition allowed me to view statistics at the top, like the total count of materials, shaders, and renderers in the scene. It was not just a lister anymore; it was a dashboard providing a glimpse into the material landscape of my scene.

With each iteration, the tool became more than just a lister. It was a reflection of my growing understanding of Unity's editor scripting. It's fascinating how a small spark of thought can lead to a tool that stands as a sentinel, overseeing the materials in my Unity scenes. And as I gazed upon the neatly listed materials, a sense of satisfaction enveloped me. The tool was a modest yet significant step towards a more organized and efficient workflow. And who knows? The morrow might bring forth new ideas to further refine this humble companion of mine.

Further Development Ideas

For the next version of the tool, I have an idea for now to sell them in the shop by increasing price with the each valuable feature. Let's see how it evolves.

Psych 1 - Game Environment Creation Log

Making Of / 18 October 2023

About the project

Lately, the absence of engaging in environment modeling due to various assignments sparked an initiative within me. I decided to craft a segment of the AAA world in a new project. On one hand, I yearned to experience artwork creation over an extended period, documenting the journey effortlessly, which will act as a rich log for future reflections. This somewhat mirrors the years-long endeavors of Renaissance artists. Though, I'm not chasing a years-long mission; a three-month project sounds thrilling enough. Given my daily dedication of a maximum of two hours, that totals around 180 hours—equivalent to a month's production in a full-time job. This time frame will be a cornerstone as I delineate my vision for the project.

It's a Game Environment Project

Now, let’s saunter into the game development realm. I'm keen on not only crafting artwork but also ensuring it adheres to technical norms. Hence, I foresee myself delving into level setups and optimizations within Unreal Engine, enriching my repertoire. You're probably already familiar with the pipeline among Blender, Substance Painter, and Unreal from previous endeavors.

Throughout the process, whether it's through discoveries or resolute progression, I'm documenting live logs, aggregating them in a playlist.

In essence, my objective is to create an interactive space. I'm inclined to intertwine it with a narrative. As a user, while scavenging for loot in a game, I decided to craft a level piece resembling a psycho doctor's office. By solving puzzles or exploring the level, you can stumble upon various loots and a mini-story. The primary criterion was to tell a story—an aspiration rooted in the past. Despite its compact spatial structure, I aim for a content-rich environment. The ambiance aims to evoke a mysterious vibe, insinuating dark undertakings.

Production Log

The initial narrative, visuals, and process videos unfolded as follows:

- Here's the short video for the 2D layout and story concepts. 

In this research, I aim to find a bunch of good compositions in terms of art and storytelling. There are some camera spots that aren't visible on the following sketch yet. Here is the initial discovery on based the timeline and quality target.


Project Full Logs will be collected on the YouTube playlist: Psych Work Log Playlist

- I'll make shorter videos share them here and update the post. This is such an optimistic wish. I hope I can find a time to do that. 

Story Development:

A 'Sanity Room,' the haven where the doc alleviates minds from the shackles of insanity. Besides work-centric props, personal belongings also lay scattered.

Upon a crucial discovery on the map sprawled on the floor, the doc hastily vacated the room. The carpet was shoved aside to accommodate the map and slightly pulled back later.

A portion of the map is absent—either taken by the Doc or perhaps the doc was abducted, leaving behind a problem.

It’s a gloomy, maniacal place where the doctor administered illicit treatments—erasing memories or implanting false ones. Before the treatment, a ghastly liquidation of the brain takes place through nano chemicals, a horrific spectacle indelibly etched in every patient's memory.

The doc's personal touch is evident—a picture with his child, a red hat similar to the one worn by the boy in the picture, and an official accolade from when his practice was lawful.

The scene hints at a possible abduction, with unfinished meals and a chaotic sprawl of cargo, chemicals, and other items.

The heating system, running through pipes across rooms, the collectible objects tucked in various corners, and a locked door with its key concealed somewhere in the room, add layers to the environment.




In subsequent posts, I'll delve into design decisions. Live broadcasts and recordings have already leapfrogged this blog post series. Should you wish to witness the ensuing phases, do check out the playlist.

Stay tuned, and much love.

VR Interaction Design Case: Slingshot

Work In Progress / 02 July 2023

Introduction

Imagine a world where you can interact with objects in ways that transcend the ordinary. This is the magic of virtual reality (VR) - a domain where the boundaries of interaction design are constantly being pushed. In our quest to develop an immersive gaming experience, we've been grappling with intriguing complexities in human ergonomics, user experience (UX), and VR technology. One of our most exciting challenges? Creating a human-sized slingshot that players can control with ease and precision. This post takes you behind the scenes of our iterative journey to perfect this unique element.

Initial Design

Our story begins with a simple, real-world-inspired slingshot. Just like its traditional counterpart, players could pull back the slingshot and release to launch the projectile. A straightforward concept, but it soon revealed some unforeseen hurdles.

Problem Identification

Through intensive testing, we identified three main issues with our initial design:

  • Ergonomic problems: Players often felt the need to physically step back to pull the slingshot further, an action that wasn't always comfortable or feasible. (We want them can play while sitting.)
  • Peripheral vision issues: Players had difficulty seeing their target while aiming, a key aspect of the gameplay.
  • Directional control challenges: Players struggled to control the slingshot's aiming direction.


In the face of our identified challenges, we turned to industry leaders and peers for inspiration. After all, innovation often builds on the shoulders of existing ideas. Two games stood out to us in their creative approaches to slingshot design: Valve's Slingshot in 'The Lab' and 'Space Slingshot VR'.

To better understand, what we're talking about you can check the videos:

The Lab [Slingshot] - YouTube

Space Slingshot VR - YouTube

In 'The Lab', the developers tackled the issue of aiming direction with a unique solution. The slingshot rotates from its floor connection points, enabling players to aim left and right more comfortably. For vertical aiming, they introduced a mechanism that allows the slingshot to rotate around its pad's Y position. This seemingly simple alteration significantly improved the user's control over the slingshot's direction.

'Space Slingshot VR' took a slightly different approach. Recognizing the importance of ergonomic aiming, they incorporated an option to adjust the slingshot's height based on the player's head position. The player could manually increase or decrease the height of the slingshot using the thumbstick, creating a more personalized and comfortable experience.

These innovative solutions resonated with us and sparked ideas for our own redesign.

Redesign

Drawing from the insights we gleaned from 'The Lab' and 'Space Slingshot VR', we embarked on an ambitious redesign of our own slingshot mechanism.

We introduced a standing platform. It operates on rails and moves in sync with the player's actions. When the player pulls back the slingshot, the standing platform moves back as well. This innovative approach maintained the intuitive nature of the slingshot mechanism while eliminating the need for players to physically move back.

We also implemented an auto-height adjustment feature. This feature gauges the player's head position and automatically adjusts the height of the slingshot. By adapting to each player's unique height and stance, we were able to further enhance the ergonomic comfort of interacting with the slingshot.

This redesign marked a significant step forward in our quest to create an immersive, user-friendly VR experience.

Current Design

Our current design has proven to be more inclusive and adaptable. However, we understand that one size does not fit all. As we continue testing our design with different players, we are aware that the moving platform can potentially cause motion sickness. This has prompted us to consider alternative mechanisms such as moving the slingshot forward instead of moving the platform back.

Future Plans

Our journey is far from over, as we continue to explore improvements in ergonomics and UX. We plan to enhance the head tracking system and experiment with alternate mechanisms such as moving the slingshot forward instead of moving the player while pulling the strings.

This is the first in a series of posts documenting our design process. Future posts will detail other aspects of our development journey, including the 3D design challenges we've encountered. We'll continue to share our progress until we build the most comfortable and engaging system possible.

Stay tuned for more insights and updates from our team as we continue to push the boundaries of VR interaction design.

Check for further info: https://www.visionaryspaces.studio

Autumn Lake: An Environment Design Journey - Chapter 2

Work In Progress / 02 July 2023

The Environment Layout

As our journey progresses, we are meticulously designing four distinct zones and a central game zone in our VR environment, each crafted to augment the tranquility of the Autumn Lake setting.

Zone 1: The Stone Platform

The first zone introduces a peaceful retreat on a stone platform, crowned with a unique tree. It offers an unparalleled view, creating a serene ambiance.

Zone 2: The Fishing Pier

The second zone echoes the charm of a tranquil lakeside fishing spot, equipped with a cozy pier and fishing-related props to establish a realistic lakeside atmosphere.

Zone 3: The Mystery Path

Adding an intriguing twist, the third zone presents a blocked, enigmatic path. Though currently inaccessible to players, it teases future exploration opportunities.

Zone 4: The Backyard

The fourth zone encapsulates the essence of a quaint village backyard, offering a calming retreat. It invites exploration and relaxation, enhancing the game's overall lived-in feel.


The Game Zone: The Heart of Autumn Lake

At the core of our design, the game zone sits harmoniously amidst the surrounding zones. This central area where players can interact with game mechanics is thoughtfully crafted to offer a seamless transition between zones, ensuring an engaging and immersive setting.


An overview of the tree shader used in the game:

A standout feature of our design is the custom-made tree shader. It imbues the environment with a dynamic touch by varying the tree's colors based on its position. With an option for a base color and variations range, the shader is designed to lend a realistic feel to the game, enhancing the atmosphere of the tranquil Autumn Lake setting.

As our design continues to evolve, we're a step closer to our goal: creating a tranquil VR environment that immerses players in the peaceful embrace of nature.

Join us as we venture further into the asset creation phase in our next chapter, an essential part of shaping the lifelike world of Autumn Lake.

To be continued in Chapter 3: "Bringing Life to the Environment: Asset Creation"

Read the previous chapter Autumn Lake: A Game Environment Design Journey - Chapter 1:  

Check for further info: https://www.visionaryspaces.studio


Autumn Lake: A Game Environment Design Journey - Chapter 1

Work In Progress / 25 June 2023

Chapter 1: Discovering Design

Our journey begins with a simple but engaging goal: to create an immersive, Zen-like VR environment for a casual game. Picture a setting so calm, so peaceful that you can almost hear the rustling leaves and feel the cool breeze. A place where your worries would disappear, replaced by a tranquil moment in time.

The setting? An idyllic lakeside view during the autumn season - the heart of our project. The plan? To construct a beautiful and immersive environment featuring a myriad of assets including an intricately crafted terrain, a range of diverse foliage and trees, modular wooden platforms, a quaint pier, assorted rocks, and simple props for embellishment.

My role in this project encompasses various skills - level and environment design, storytelling, asset creation, lighting and shader work, particle effects, and creating fauna. Each of these aspects contributes towards building a cohesive, visually stunning environment that genuinely encapsulates the essence of serenity.

The game zone is the epicenter of this natural environment, framed by the harmonious sounds of chirping birds. At its heart lies a greenish lake, a captivating contrast against the earthy reddish terrain. Above, a light blue sky casts its hue over the scene, contrasting with the red and yellow tones of the surrounding trees and foliage.

Initial sketches of the environment.

Mid-journey references to bring our vision to life.

The process began with a basic blockout and gradually evolved, one piece at a time. The game zone was established as the central point, with the rest of the environment being meticulously designed around it.

To the left of the lake, there is a towering tree that adds a touch of tranquillity to the setting. It's placed slightly higher than the rest of the terrain, creating a secluded space accessed by stone pavements and steps.

To the right, a charming pier extends into the lake, with a boat gently bobbing at its side. It's a picture-perfect spot that enhances the overall ambiance of tranquility.

As we continue to navigate our way through this design journey, we are still in the process of experimenting with various colors and shapes to further define the environment. But rest assured, the base design for our next stage is underway and set to amplify the immersive experience.












Stay tuned to see the evolution of our VR environment as we proceed to the next stage, moving from the exploration of our base design to defining the final details. In the end, our hope is to create a virtual space that provides an unforgettable experience of calm and tranquility to all who visit.

Stay with us on this journey as we continue to discover, design, and delve deeper into the creation of Autumn Lake.

Continue to read Chapter 2: ArtStation - Autumn Lake: An Environment Design Journey - Chapter 2

Check for further info: https://www.visionaryspaces.studio