An Update

An Update

, ,

An update on the whole Unity situation for Carter Games.


Just a quick post to update y’all on the whole Unity thingy. So as you’ll have likely seen by now they have announced they were reverting pretty much every change with the runtime fee thingy. The news is pretty good actually. Had they announced that to start with everyone would’ve liked it for the most part. Sadly they didn’t and the damage in trust is done. The fact that the original plan was what they though was good, despite their insiders from the community & staff supposedly warning them it wasn’t, just shows what matters to Unity as a company. Money & greed.

I’ve never been a fan of public companies & shareholders etc. Being a shareholder should mean taking the risk of paying out when a company is doing bad as well as getting some extra money when its doing well. Not just free money which it seems to be treated as today. I could rant about that for ages, but you get the idea.

As for Carter Games and its future developments. I’ll still be working in Unity for now with the assets I’ve made. Sadly other engines don’t quite have the things I like about Unity in them in quite as nicer setup. I’ve given both Unreal & Godot a go over the last few weeks. Godot certainly has promise, but its missing some key things for me currently. Those being a more in-depth inspector for exposing data classes, world space UI & some 3D bits that are early days. I do like the whole node setup though, that is nice. As for Unreal, looks good, but like 0 docs for C++ code which is a bit annoying. Blueprint is good and all, but I’d prefer to do the C++ a little if I went that route.

So future plans. I do plan to keep with Unity development stuff for now. So Audio Manager 3.x is still on the books to be released this year with an update to Leaderboard Manager sometime early next year. Next year is still in the air for what I’m doing, I do have some active side projects I want to finish as well as a game idea or two to flesh out and maybe prototype. But more specifics will be posted in the year in review post for this year. As for porting asset and stuff to other engines, some of them may be portable in a slightly different setup to Godot. But I’d need to do a lot more research. I’m also not sure I’d be able to make the same quality of asset automation in other engines, but we’ll see, it’s not totally off the table in the future. Audio Manager 3.x will likely be a bit delayed again…..I know, its a pain, but I want to get it right. That and it just takes time to develop, just like how games take a long time to make. I’ll keep y’all up to date on how that’s going.

That’s all for now xD

~ J,

Common Library

Common Library

, ,

A new release of my personal code library that I’ve been using in some assets and had public for a while.

What is this?

The common library contains a load of useful scripts for game development in Unity. Previously known as Scarlet Library. I’ve been adding to it as and when I found a feature I needed, wrote a solution for and found that I could use in other projects. Some bits are complete systems to aid with a specific problems while others are just helpers to save writing loads of lines of code. The library is a work in progress and will have some scripts not written fully occasionally in the code. But features are tested before they are added so it should be stable enough to use in projects.

Used in assets

I’ve been using some of this library in the asset store updates I’ve been making recently. You’ll notice the events system & serializable dictionary are in the latest Save Manager updates for example. I also use the same settings setup for storing the settings for the library as I do with assets.

Get the library

Only on GitHub: https://github.com/CarterGames/Common

Key elements

Some of the key features of the library so far include:

Data Setup
A setup that allows you to reference a scriptable object at runtime without a direct inspector reference. Handy if you are working with a lot of data. You just inherit from a base class that is just a standard scriptable object and your good to go.

Events System
A well used system that essentially just handles unsubscribing from a standard system action when you subscribe to it, helping to avoid over-subscription by mistake. The system also allow you to add identifies to anonymous listeners so you can remove them as well when needed if you don’t want to match the method params for the event etc.

Runtime Timers
A handy setup to let you run logic after some time. Can be used even in static classes without any issues. Handy if you can’t write a coroutine or just want some logic to run after a short pause.

Game Ticks
A handy optimisation feature that lets you run logic on update but not every frame. By listening to the tick instead you get updates every x frames instead of every frame. Helping with performance. You can use a global tick or instantiate instances for different systems.

Custom Time
Make instances of time, instead of using delta time for everything, you can set systems to use a custom time setup. Making things like pausing your game trivial without needed to pause the global timescale for everything and running into further issues due to that.

Random
A system to help generate random numbers, with options to choose a provided from Unity Random.Range, System Random and Alea PRNG.

Referencing
A handy helper setup to reference object in a scene or all scenes. Also comes with a CacheRef class to help making properties that are ensuring a reference is made if one isn’t already. Saving some typing.

Static Instancing
Love it or hate it, its handy to have some things static. You can have a class have a static reference without the whole class being static, use a base singleton class or run coroutines from a static instead generated at runtime.

Hierarchy Headers
A small editor tool to add header/separators to your hierarchy. These are really clean and easy to setup, making it easy to organize your hierarchy.

Panels
An easy way to have a popup in your game. Just inherit from panel and you’ll have ways to listen to when the panel is opened/closed and be able to track all open panels in your game.

And lots more!


There is a lot more to the library including extension methods galore, string formatting help and more. But if was to cover every script I’d be hear like all day writing this post. There is documentation some systems, but as this library is still in development, only some sections have links to documentation. When the library hits 1.x all setups will have docs, but its takes a while to write it so bare with as it gets written.

I am still working on Audio Manager 3.x as well. Currently testing to core logic as I refactored how it worked to accommodate different playing options for groups. I have also got some life admin to do over the next week or so as my car broke down… A bit stressful to deal with so I’ve been taking it easy the last week or so. But Still hoping to reach that end of September deadline if I can….

I’ll update you’ll soon on the progress of the Audio Manager update when I have more the share. Speak to y’all soon

J,

Audio Manager 3.x Progress

Audio Manager 3.x Progress

,

Its been a while since I updated you all on the progress so far. So far the progress has been good. So here’s how things are shaping up:

Library Editor

Library Tab

The main library tab of the library editor has had a few changes to it. The main layout hasn’t changed much since I last showed it, but there are some subtle changes.

  • Update clips struct button, lets you update the Clip.??? struct with the latest data. You can edit the keys for the clips in this version so the entries in the struct need updating often. This is one feature I’ve yet to work out a good way to automate. So for now it and any other struct will have manual updates with the exception of when a new clip is scanned where it will happen automatically.
  • Clip Dynamic time preview. I’ve managed to actually draw on the waveform the time currently set for the dynamic start time. This system still needs work to make it more user friendly, but visually its where I wanted it to be.
  • Hints, these are on each main button and can be toggled in the asset settings. They are just to aid with new users to help them understand what important buttons do.

Groups Tab

The groups tab has been updated with some extra buttons and has been fixed up. Previously editing any clip would only edit the last one in the list and there were some issues with keeping the data in sync with the library asset in the project. This tab has the same struct generation button which you’ll see in all the tabs and will update the Group.??? struct.

Mixer Tab

The mixer tab is legit just a button to update the Mixer.??? struct & a button to access the mixer in the project. I have attempted to add the inspector of the mixer to the tab. However it didn’t really play ball. So for now its just a link to the asset in the project with room to extended it down the line.

Music Tab

This is still in development as I’ve only just started the music side of the new version as of writing. So it has the music struct button for Track.??? but nothing else at the moment as I work out how its all going to work xD

Music Management

Like with the audio manager in 3.x, the music setup is going to work mostly if not entirely static. The idea is to allow for a modular setup with the option to transition between tracks. Setup layed tracks which you can sync & transition between as well as playlists etc. Still need to work out the particulars, but it should be good if it all comes out as planned. I may also have a component for use in scenes to set some of this up. But its likely to be mostly a code based solution this time around for the flexibility.


That’s about it for now, so far its on track for end of August, but we’ll see how I do over the next month or so. I’ll post another update when its near release.

Website Updates & Releases Soon

This is just a post to update you all on what I’ve been up to over the last few weeks with both the website & some of the asset store assets. Its not been too long since my last post but I did want to update you one the website changes and the progress of the Save Manager mainly.

Website Changes

The biggest and change that you would’ve seen is the new navigation menu setup. I’ve gone ahead and expanded it to have links to all major products currently active. The reason for this was to help indicate to visitors that there were extra pages for assets / games etc. As the homepage doesn’t illude to this too well. The sub menus also include Scarlet Library under the resources section. This being a code library I’m slowly working on for Unity which houses scripts I use between projects. It is well overdue an update when I get the main goals for this year done.

The other main change is more subtle unless you’ve tried to access some of the assets documentation. As the documentation for some assets have been ported to the website, instead of being an embed of a html export from Notion which it was before. The biggest upside to this is the ability to search the documentation! The solution isn’t perfect, as I’d like the option to add a landing page for each docs but otherwise this is much better than the other idea I was trying and mentioned in my last post. Below is a screenshot of the Mutli-Scene docs as they appear on the site now (https://carter.games/docs/multiscene/):

The only other website changes are in the backend, which should improve the sites performance a tad. The site isn’t on an expensive dedicated web hosting provider so it will be a little slower due to that, but its cheap and works which is ideal for me now.

Save Manager

I have good news in regards to the Save Manager, I’ve finally hit a release candidate for the assets version 2.0.0 release. I’ve been spending the last few weeks working out the bugs as best as I can and automating where possible. It’s a good thing I did this as a large chunk of the asset was not working as intended or was fundamentally flawed. Using my side project to test it, I have managed to get it initializing correctly when imported and updating when new save assets are added. On top of this I had to do a lot of trial and error to get the web builds working, but it does thankfully work.

I expect that asset will be out by the end of the month (ish). I’ve still got the write the documentation and check over the code one more time to remove any redundant logic and improve the API for usage where possible. But I should be on track to roughly hit that goal if I keep at it over the next few weeks when I get time.

Build Versions

Some of you may have noticed some minor releases to Build Versions over last week. This was just to fix up some issues the asset was having with getting assets in the resources folder mainly. There is another update coming this week which changes up the date field in the information asset to use a custom class instead of a string, which should help with regional differences with the date. An example of how it looks now:

That’s it for this update. Hopefully more around the end of the month with the Save Manager release!

March General Progress Update

March General Progress Update

So its been about a month since my last update. So its about time I updated y’all on where things are at.

Save Manager

The main progress has been on the save manager, with the code base now being pretty close to being production ready. I’m currently working out some bugs on builds which are been a bit annoying. The editor side of the asset is ready though, with just a few stress tests to do to make sure it works.

I have a few feature changes to the asset, mostly due the amount of work for the amount of use it will get. So the create tab has been removed as the creation of save data is a more modular in this version and should be easy enough to follow without a tool. I may add it again in a future update if its requested or really needed, but for the initial release making data manually will be fine with documentation and videos to aid with that.

Speaking of documentation, I’ve been looking into solutions for that. Annoying there isn’t really any solution I’m 100% happy with, most either are paid which I can’t afford given everything I release is free or doesn’t quite do everything I need it to. I’ve ended up trialling an idea using a website builder & either GitHub pages or similar to host the site on. An example below that I trailed using the Multi Scene docs

I’ve also changed up the path remapping in the asset to be different dependant on the target platform. You can define the path still but using some pre-defined strings rather than selecting the path yourself. There are some caveats such as having the update the path for each platform if you want it to be different etc. But it should work out fine for the first version. You can also press a button to open the directory where the save will be if targeting a standalone platform (PC/Mac/Linux).

I think I’m still good for the April release, but things may crop up that interfere with that, well see.

Audio Manager

The advantage of not doing the Audio Manager before the Save Manager is that I can use what I learn from it in the new version. I’ve recently been testing the early versions for bugs (which there are many) and researching some ideas. This week I was able to make a method chain solution that will change up most of the API I’ve written so far. Currently the setup is similar to 2.x with loads of methods for each use case which gets very hard to maintain. If I went about the chaining solution which I’m planning to now it works, I’d be able to reduce that and make the asset much easier to manage from my end without compromising on features. If you’ve used Linq, String methods or some tween libraries then you’ll know the syntax. An example below of what I’m thinking of doing and what it’ll do:

// Example
AudioManager.Play(Clip.Click01).SetVolume(.5f).SetDelay(.1f);

// What it does:
// Your normal play this clip, clip being the struct system I already have in place.
AudioManager.Play(Clip.Click01) 

// Sets the volume of the clip to play at .5f volume (range 0-1)
.SetVolume(.5f)

// Sets the clip to play with a delay of .1f
.SetDelay(.1f);

Now this is still quite a while off as I’ve only just got my head around how to make this work. I also won’t be working on the Audio Manger 3.x until I’ve finished & published Save Manager 2.x. But this will certainly give me a lot to work on. I do still plan to keep a modular method for the more traditional calls should people wish to use that syntax over this setup.

Personal Project

While I’m working on Carter Games stuff, I’m also taking on a personal project at the same time to give me some variety. Mostly to avoid burnout on one project which I’ve had in the past. In this case I’m making a passion/portfolio project where I attempt to replicate the Person 5 Royal (P5R) combat system & to an extent the look as well. I played the game over the Christmas break and really enjoyed it. So decided to make a project out of it.

The end goal is to at-least have a small custom boss battle which a full party of 4 vs something. With the user being able to use a mini velvet room system to make a persona with the skills available to then use in the fight. I don’t plan on replicating the AI or anything for the players party so it will be direct commands for all party members. The party members will also be custom and not related to the actual P5R ones. At the end of the day I’d like to make a mini-experience out of it, but it will always just be for portfolio, I obviously cannot release it commercially due to copyright etc.

Below is a little video below of how that’s going so far on the UI side, but its still very early days:

If you want to see more on the project then you can see the full project page on my portfolio here:

Its a long project so I’m posting update posts which you can view on that page. The up side of doing a project like this is that I learn even more doing it. I’ve now got a custom UI shape system as well as a basic Google sheets downloader working as well will come in handy in future projects.

That’s about it for this update, I’ll see you in the next one.