Unity

Unity Experience

Hired Programmer & Indie Developer

My experience in working with Unity comes as an Indie Developer and in working to build an interactive story app for a client.

I developed a 16 ‘page’ app based on the story of Oliver Twist. Interactive story app, clickable characters with sound and movement, text content on each page, start menu ‘page’ and a menu bar for the ‘page’ navigation.  

This app had previously been made for iOS.  Due to a change in specs for iOS, the app needed to be remade from the ground-up code wise, so this is where I stepped in.  The previous team consisted of two developers and an artist.  I developed this new version using Unity, for Android.  My client could publish on Google Play, then quickly port it to iOS  (& subsequently published on the Apple App Store).

As an indie developer, I have brought a number of apps to market.  I released a catalogue of apps under Bulgarian By A Brit.  From concept to design through to production, testing and publishing.  Apps include free and paid for, add-free and Google AdMobs integration.

Unity Experience Includes (but not limited to):

  • Working with an array of assets → Using a given set of assets to produce a completed working version of the app.  Assets included audio files, 3D models, design brief, Unity engine (& all the tools available within it).  Liaising with the artist to get updated or newly created files if needed
  • Animation → Working with .fbx assets (including pre-made animations), configure Unity animation controllers, cater for both script & GUI access to use animations, creating my own animations using Unity animation (i.e. lightning strikes)
  • Working with Unity in a 3D project, however giving the final product a 2D look → Considering both 3D and 2D best practice for event management i.e. physics raycast or a button to register a click event, etc. 
  • Sound → Singleton design of sound implementation.  A single Audio Manager that makes use of an array of sounds throughout the app when needed. 
  • App navigation → Menu bar consisting of buttons with image icons (Back Page | Home | Dickens | History | Refresh Page  | Next Page). Taking care of ‘housekeeping’ when the user navigates away from a ‘page’ i.e. save PlayerPrefs as needed, reset any other variables needed. 
  • Prefabs → Use of Unity Prefabs (reusable assets) → Cleaner design & makes best use of what Unity has to offer.  Used on History/ Dickens pop-up panels, and on the menu bar
  • Runtime generation of text content → ‘Page’ content (pop-up History & Dickens, page title and page story content ) generated at runtime using C# scripts, as opposed to being manually assigned in the project
  • Runtime access  & playing of audio 
  • Saving of data → PlayerPrefs (Player Preferences that can be stored and accessed between game sessions) utilised on app main menu screen to check if the narration sound was previously set as on/off, also to obtain the ‘continue reading’ page number
  • C# Scripts → Creating various scripts from scratch to get the functionality needed as per the design brief presented.  This design brief described what was on each ‘page’, what each characters would do and what the user would see. Utilised an external set of scripts for spline, moving objects (gruel bowl, rat) on a curve as needed
  • Use of Unity Physics Engine → Applying RigidBody to .fbx Game Objects or other Game Object types as needed.  Utilising variables as needed, such as Is Kinematic, Freeze Position, Freeze Rotation, etc.
  • Use of Unity Collider → Using Game Objects as markers to trigger events upon a collision.  Events such as moving a character, playing a sound, changing Character Object variables as needed, changing variables that are tracked so the scene plays out in the exact sequence needed, etc. Applying colliders to .fbx assets and implementing scripts to deal with the collision event, tweaking the collider to get the best fit based on the model shape and accuracy needed.
  • Particle effects → Utilising Unity Particle System to create particle effect from both a static point and particle effects on a moving Game Object. Creating my own material in addition to using Unity’s standard options
  • Debugging → Using Stacktrace (System.Diagnostics) and MethodBase (System.Reflection) to get metadata on the runtime processes.  Also using breakpoints within the code, then attaching Visual Studio to Unity to debug the app as it runs, stepping through code analysing variables and flow.     

Publishing on Google Play:

Store Presence → Writing app descriptions (full, short), assigning product details images (icon, screenshots, feature graphic), set price, distribution, developer page creation, etc.

Release Management → Closed track testing (assigning testers, managing .apk’s), obtaining feedback asking testers to test certain things, updating .apks based on feedback. 

Assessing pre-launch reports → provided by Google (crashes, Android compatibility, performance, security & privacy, Accessibility.  

Reporting → Generating & assessing reports (installs, revenue, customer ratings, crashes & ANR’s)

Unity & Google Play synchronicity:

> Being aware of Restrictions on non-SDK interfaces

> Google Play usage of Android Advertising ID policy and section 4.8 of the Developer Distribution Agreement policies

> 64 compatibility on Google play – starting August 1, 2019. Options available for Unity, making the project 64 bit compatible and the choice of an .apk or Android App Bundle