After 7 years my project is ready for launch on Xbox, runs great on my dev kit, and when downloaded from the Xbox store it immediately crashes on the splash screen with no error messages in the log whatsoever. I cannot get any support on this from anyone because my project is still in Unity 5.6. It takes an hour to push it to the test store to find out my latest stab in the dark has achieved nothing.
Cool I’ll give up on life and use the Free version of Unity so I can advertise their logo on my game because I’m a big fan now and have no money for a $400 a year subscription
Exhausted from hitting my head against this brick wall and typing that header, I attempted to update to the latest version of Unity. I anticipated this would introduce problems so the first thing I did was make a Windows restore point.
Once everything was installed I braced myself for untold changes, deprecations and the most doubleyou of tee effs I could imagine, and I was not disappointed. But first, the expected deprecated changes:
It started out innocently enough, some deprecated things here, some changes there. I dutifully corrected them all. Then this started popping up:
There is very little help to be found on this matter online. Some Unity forum post suggested running Unity as an Administrator, this did not work. Killing Unity and restarting it works, at least for a short time. Another suggestion was to move the entire project to the C drive for some reason. I didn’t get that far because
Suddenly the equality checks on my loaded assets simply fail. I can’t figure out why, so I had to rewrite the whole block of code into big messy loops to achieve what should have been working fine. Finally passing this troubling roadblock I am greeted with an invisible logo and my fabulous title screen:
It’s actually worse than it appears: All sprites in the game fail to render in game view or the scene view. They just don’t exist, except on disk and in the project, defined as they ever have been. There are no reports I can locate online of this misbehavior.
Choose your own hellventure
A) Abandon the latest version and spend the next untold months doing everything under the sun to try to get the Unity 5.6 game not crashing on the splash screen under the unique circumstance of being on the Xbox store?
B) Abandon the latest version and spend the next untold months attempting to update Unity one version number at a time, testing each one and finding every game breaking change they’ve introduced over the past 4 years?
C) Keep this version and spend the next untold months completely rebuilding the game, redefining all the sprites, scenes, prefabs and everything else that might go sideways in a totally new project built for the latest version of Unity?
D) Calm the hell down and find out what is the oldest version of Unity still supported, and try that.
D == Diploma
Let’s try option D. The one question I can get answered on the Unity forums is what the oldest supported version is, so I uninstalled the newer version and went with the not-quite-as-out-of-date Unity 2019.4. Reimporting the project looked a little different this time around, with this prompt asking me a question I don’t understand or have time/desire to look into:
Before the Unity editor appeared, I got a prompt telling me it’s out of date. Well yeah. Oddly, I can’t click anything on this window including “Skip new version” or uncheck the box. I decided to hide it off the edge of my monitor. A sign of things to come?
The Unity Editor window appeared with a huge pile of warnings and errors as usual. The warnings had something to do with GUID conflicts of assets, so I cleared them all and was left with the “GUIText is obsolete” and “Application.CaptureScreenshot is obsolete” problems from before. Easy enough to change to UI.Text and ScreenCapture.CaptureScreenshot. At this point there were 100s of unknown weird probably not real errors in Visual Studio (slightly more on this later), so I continued importing the project. A bunch more confusing warnings and nonsense errors in the Console, I cleared them without any complaints from the Unity Error. Time to hit RUN.
Maybe they weren’t all nonsense errors. This was a real error but the cause is nonsense. There is no line number associated with it and no clue what to do. All I can find about it is this post which just reports it as an issue. I tried reimporting everything and noticed update window still can’t be closed, and the pile of errors were back, including this one:
Running the game, not only was the weird profiler error still present, my loaded asset check was broken the same way it was with the latest Unity. So I pasted back in my long loop version. Visual Studio still can’t build the project, returning hundreds of nonsense errors:
Sweet Merciful Spaghetti
For whatever reason, these VS nonsense errors don’t stop the editor from running the game, the Unity Editor errors disappeared, and lo!
Oddly the game seemed to run at about 15 fps. I ran the CPU-v-CPU mode to check it out and the gameplay seems good from first glance. I also noticed a pile of warnings in the editor:
It was tempting to ignore this, the game seemed fine. But at a minimum it’s obnoxious console spam and at worst it might be something hard to notice that goofs the game up. According to this Unity thread it seems to be the former, so it was time to dig into some ancient code and look at every time I’m setting isKinematic to true while the collision detection is set to “Continuous”, and restore it afterwards. Fortunately after looking at all the places this was done, only the characters needed this attention. Other objects were set for “Dynamic” collision detection. Unfortunately, there are several colliders on the character prefabs, one for the ground one for attacking, one for getting hit and one for the ball. Since the prefab was what was setting these to “Continuous” I changed it to “Continuous Speculative”. Everything seems fine? I love modifying fundamental physics components I don’t really grasp.
Upon further testing, I noticed the “mesh” ball types (football, hockey puck, anything other than a normal sphere) were falling through the floor. One of the “nonsense errors” from above was Unity complaining that Blender wasn’t installed. It didn’t need to be installed in my last version of Unity but apparently now it does? I’m confused, legitly, as I’m sure the computer I have been developing on recently has never had it installed. So, I installed Blender, a program I haven’t used in years and I had to run “reimport all assets” again. This seemed to work!
On the transition screen there is music to amp you up for the match but it was now stuttering part way through. This seemed to happen the instant the scene loaded in the background. The sound was playing on my Transition prefab, but oddly it turns out I had never put an audio listener there. It must have been picked up by the audio listener on the title screen and then picked up by the game play scene’s audio listener and I never noticed because there wasn’t a gap before. I added an audio listener to the prefab and the gap disappeared.
I also saw a warning that Rewired was out of date so I went to grab the latest from the Asset Store. But for some reason, some parts of Rewired wouldn’t update. I got a yellow exclamation mark telling me something about a GUID not matching. I followed the developer’s recommendation for a clean install. Unfortunately I kept having issues. I ended up deleting the entire Unity Library folder as I couldn’t redownload the Rewired asset, and it kept installing some incorrect version. This meant, reimporting all assets. Again.
Vexingly, this still did not allow me to redownload from the asset store, only “import” which was still not working. I found online that you have to delete the folder in C:\Users\<YourUser>\AppData\Roaming\Unity\Asset Store-5.x\ in order to get Unity to redownload it.
With that done it seemed to get rid of the Rewired version warning, but now I had all these new errors:
It turns out the project randomly decided not to be an Xbox One build. No problem. Time to reimport everything again again, then delete Rewired and restart Unity again again.
After removing a dozen “flare” layers from cameras that I never understood the purpose for in the first place, my warnings were back to what I expected and no errors in the console. What’s more, the game ran at a decent rate. Probably all the console error logging?
Xback to Xbox
Without testing the whole frickin game again, it was time to see if I could A) get it running on Xbox One and B) get it on the test store and C) if it would still crash during the splash screen.
Step A: Build and Run
Since I’m now on the “officially supported” version of Unity, I can take my problems to the forums. Step B will have to wait for another day.
On the forums, Unity advised me to slightly update the version of Unity I was using. So I did, and that some how broke rewired again again (again). So after yet another clean install, Rewired started complaining that the “DataFiles” are missing or corrupted. No clue why, but solving this was as simple as selecting ControllerDataFiles on the Rewired Input Manager in the inspector.
Of course, somewhere along the way all my Rewired settings got nuked. I think this has to do with how I instantiate the Rewired prefab (against the recommendations that it live in the start script for some reason I’m sure made sense at the time). I tried to copy the parts of the prefab that made sense with Beyond Compare from my last backup.
Running the game again gave me more problems. Now my tutorial box prefab couldn’t find it’s sprites. The ones that are set in the prefab.
After pulling literally every hair follicle out of my body I decided to start all over with this slightly more updated version of Unity that still doesn’t work and re-import the project yet again.
D == Dear God Someone Do This For Me
Starting again from the old project and importing to 2019.4.28f1.
Then I fixed the deprecated code again. Guess what? Rewired error. Except I actually looked it up this time and it says to ignore it, this is actually another Unity error.
The game was finally running again, at least well enough to try yet another Build & Run.
Xback to Xbox 2
Back to the Unity forums, and they say to uninstall literally everything, including every version of Visual Studio, and use Visual Studio 2015 because Unity 2019 apparently came out back in time before Visual Studio 2017 or something? I wasn’t paying attention.
After a horrible year for everyone including arcade owners, I was ecstatic to learn The Detour was reopening and I finally got to see the cabinet. I also received a ping from a potential buyer of the SSDT Arcade Edition cabinet, so I spent some time updating Arcade Edition with the newer code. This included new improvements going into the Xbox One version: AI work, player tweaks and improvements and other fixes across the board. Some of the highlights:
The basketball player’s aiming is improved with physicsy math!
The soccer player’s steal has a better recovery if it connects, and a worse recovery if it doesn’t.
The Football player’s penalty for missing a tackle is increased.
The hockey player no longer auto-attacks in turbo (it was a confusing difference from the other players that wasn’t explained in the game)
There is now a frozen “reaction” time after you are hit. It is a very short pause but lets your brain better register the hit.
Updating Arcade Edition also highlighted some AI issues that showed up in the Arcade Demonstration Mode. Updating this and cleaning up the bugs from the last year of development was a great distraction from the inability to work on the Xbox version.
See you in August?
I have no confidence I can figure out the weird edgecase Xbox/Unity build issue I’m living any time soon but I’ll keep at it and send word out when it’s got a release date. Until then, there’s not much to say.