Copyright (c) 2020 Me First LLC
Peek into the life of an indie game developer.
📌 I do most of the game development in the early morning before anyone else is up and before I have to start my contract work.
📌 I am solo developing this game, meaning I'm creating all the assets, code, sound effects, and VFX. However I will not be creating the music.
📌 This game is inspired by Metroid, Tron, and other great 2d games with large maps. Exploration and discovery is a big part of the gameplay.
📌 This game has the largest scope of any previous games I've self published. I spent a lot of time developing smaller games, but feel I'm ready to swing for the fences.
📌 Extremely story driven, there is another main character I have yet to reveal.
❤️ I love making games.
✅ YOU may love it too.
💀 Making a great video game is not easy to do, it is hard.
💻 It requires skill, thoughtfulness, and a dedication to perfecting your craft.
🎨 I and other small developers are pouring their artistic energy and soul into their games.
🕹 It can be a draining process, but also extremely rewarding.
🍊 The juice is worth the squeeze.
👾 It is a special experience when you bring your idea to life using the most powerful medium we have: video games.
🎮 It is also a process of discovery, finding out what this game really is.
🙏 If you want to make games, play games, or are just simply curious about the process, I invite you to learn more.
⭐️ Follow @mefirstgames for more game dev tips and a peek into the life of an independent game developer.
💬 Drop a question in the comments, I will answer 👍
👊 Melee Attack animation in Progress.
💬 What do you think? What weapons do you want to see?
💻 Keep reading for the Developer Breakdown.
✅ Powered by an Animator, each swing is an individual animation.
✅ Each swing has configurable damage and knockback power.
✅ Bit spins with each attack (done through tweens).
✅ Swings must be chained together quickly for the combo to continue.
✅ Combos can easily be swapped out, allowing for multiple melee weapons, each with different animations, range, damage, and knockback power.
✅ A trigger is activated for a short amount of time to detect collisions.
✅ I may switch to BoxCasts in the future if there are any timing issues.
✅ Swings can also change the velocity of the player, this is how the last swing pushes the player upward.
⭐️ Follow @mefirstgames for more exclusive content.
I need some feedback!
💬 What do you think about the background?
📌 I've been painstakingly working on the background for my next game.
📌 After many failures, I finally have it moving in the right direction.
📌 It's incomplete and rough around the edges, but I need some feedback.
💻 The background is an actual mesh, so it parallaxes out of the box.
💻 It's also using a custom shader to give it the curved effect.
👩🎨 I'm trying to make it appear like you're in a digital world.
🎨 I plan on having some primitive shapes called "Transporters" flying left and right in the background.
👾 I really need some feedback on the colors.
👾 I want to make sure the background appears far away, and not up close.
⬇️ How to release your game on Steam Everyone can upload a game to Steam. All you need is a Steam account, $100 bucks, and a video game.
📌 Sign up to Steamworks, the online dashboard for developers. It's here you'll manage your games and see all your stats.
📌 On Steamworks, create a new Game, this is where you'll spend your $100. It can be difficult to find specific buttons on the dashboard, but this is easily solved with a google search and some patience.
📌 Integrate the Steamworks .NET API into your game. This will require you to have Steam installed on your computer and help prevent pirating. You can also integrate achievements, leaderboards, and player stats.
📌 Upload your game to Steam. This requires you to learn the SteamPipe Content System, where you will set up config files and upload them via the command line. This can take some time to understand
📌 Set your game settings and set up the Store Page. You'll need to configure supported platforms, descriptions, art, and screenshots to make sure your game performs well on the Steam Store.
📌 Publish your store page. Make sure your release date is set correctly so when you publish, players can view your store page but not yet buy the game.
📌 Market your game. Interact with your community and gain wishlists prior to launch.
🏆 Release your game and prepare to release several bug fix updates.
LIMITED TIME FREE UNITY3D TOOL
Here are some Unity3d tips that commonly slip through the radar.
📌 Scale your project correctly. It's important to have gravity and physics respond realistically when you have rigid bodies colliding or falling with gravity.
📌 Scale your 3d assets correctly. Chaos emerges if every 3d model imported needs to be scaled to a custom size in Unity. Ideally, assets should be scaled to 1, but with exceptions of course.
📌 Avoid Reflection. GetComponent, SendMessage, and Invoke are handy but not performant. Cache the result of GetComponent and avoid the latter.
📌 Lock your Inspector. Some actions require to keep an inspector window open while selecting other game objects, this can be accomplished by tapping the padlock in the upper right corner.
📌 Expose variables in your scripts using SerializedField instead of making everything public.
📌 Reverse an animation by setting the speed to -1 in the AnimationController state.
📌 Write your Gizmos inside your custom scripts. This may display the field of view and range for an AI-controlled enemy.
📌 SerializeField List<> will show in the inspector. I still recommend arrays for the default case, but if your container is going to change size over time, try using a List<>.
📌 Create your own class to manage time. Whether it's pausing, resuming, or slow motion, having a single class that controls Time.timeScale changes will make everything easier.
📌 Master the difference between Awake() and Start(). Awake() is invoked before Instantiate() returns and Start() will be called later during the frame after Awake() is called on everything else.
⭐️ Follow @mefirstgames for more #gamedev tips.
Unity is extremely flexible and things can be accomplished in multiple ways. One downside is that your inspector can become very messy if your prefabs and scripts don't adhere to a standard.
Here are some tips:
🚀 Always place your script at the top of the inspector and on the root of your Prefab. Digging through game objects and discovering multiple scripts controlling a single prefab is not fun. It's also fun scrolling down the inspector looking for something important.
🚀 Use the attribute Header to mark the beginning of a section. I don't recommend grouping your variables into a class or struct unless your code architecture demands it. Header does not require any extra heap allocations and allows quick moving of variables. Do not create data structures just for editor appearance.
🚀 Clearly define what serialized variables should be touched by designers vs developers. If you have non-programmers on your team that will tweak prefabs, come up with a clear naming standard so they know they can tweak the settings without breaking the prefab. e.g. Anything with the name "Settings" can be touched by designers.
🚀 Use attribute Tooltip on all variables that will be touched by designers. Comments in code will be hidden from designers and placing a Header on each variable will eat up much space in the small Inspector window. In the perfect scenario, a designer knows that with any setting they can tweak, they can also hover the mouse to learn more details.
🚀 Use OnValidate to sanitize values and verify your serialized variables are correct. It's much better to get logged errors before runtime, and this will help prevent wasted time and confusion.
➡️ Follow @mefirstgames
#gamedev #indiegamedev #indiegame #games #gamer #coder #coding #programmerlife #unity3d #webdev #codinglife #programmer #coding #fun #softwareengineer #software #coder #programmer #unity #indiegamedev #webdev #gamer #stem #learn #learn2code
Unity LTS (Long Term Support) does not always have the latest and greatest features, but all Unity developers should seriously consider using LTS over the latest release.
I've talked about what LTS is in a prior post, but now I want to list the reasons why I'm personally sticking with 2019 LTS and won't upgrade until 2020 LTS is released.
📌 I early adopted 2019 in multiple projects, and it resulted in more headaches than good.
📌 It is common for bugs to arise in versions prior to LTS, e.g. 2019.[1-3].x
📌 New editor bugs can slow your development and unexpectedly break features.
📌 I found myself upgrading Unity often to get the latest bug fixes, but sometimes a new version would introduce another bug.
📌 In retrospect, the frequent upgrades were a huge waste of time. A smarter strategy is to simply wait and upgrade between proven stable versions.
📌 Packages also had to be constantly upgraded, and this led to even more unknowns.
📌 I used the SRP package in a VR project, and it had many runtime bugs. This specific package had so many issues and changed so much that Unity eventually rebranded it to URP.
📌 Features in the latest Unity, like 2020 make it very tempting to upgrade. However, make no mistake, these features will likely not be stable until late 2020.3.10+ or 2020.4.x LTS versions.
📌 Before you write off 2019 as a special case, many devs are having similar issues with 2020.
📌 Even Unity themselves, recommends releasing games on LTS.
⭐️ As a game developer, it's without a doubt that time is your most valuable asset. Early adopters will lose much time dealing with upgrade issues and bugs.
⭐️ For games released with a decent player base, I highly recommend sticking to Unity LTS unless you absolutely need to upgrade for specific features.
⭐️ For early adopters, plan and schedule accordingly to account for extra upgrade time. Also, bring a machete because you're blazing a trail.
🚀 Zenject, now known as Extenject is a dependency injection framework built specifically for Unity. Check out my previous post on dependency injection if you don't what know it is.
🧠 Completely free under the MIT license, Zenject allows you to loosely couple code and increase the flexibility of your code.
📌 Inject variables directly into MonoBehaviors and C# classes.
📌 Conditionally bind variables by type, name, parent, and more.
📌 Dynamically create objects via factories.
📌 Setup memory pools for object pooling.
📌 Unit test support and framework for easily testing your scenes and prefabs.
😃 My Experience
📌 Zenject makes it easy to swap out dependencies for different instances, making it easier to change feature requirements on the fly.
📌 It can be a pain integrating external assets and hooking them up to the dependency tree.
📌 There have been some strange show-stopping bugs, but the framework has greatly improved stability.
📌 Performance overhead exists, and diving into the Zenject source code will cause headaches.
📌 Onboarding a new developer takes longer, especially if they have no experience with Zenject.
📌 Once you get rolling with Zenject, it becomes extremely powerful, flexible, and can definitely help game developers in rapid agile development.
🤞 Features I want
📌 The ability to visualize the dependency graph anywhere and anytime.
📌 More internal optimizations: bye-bye FindObjectsOfType for ZenjectComponent.
✅ Conclusion If you're doing a lot of OOP, then dependency injection is awesome. It does take time to wrap your head around Zenject and how a certain project is using it. I think it's a good option, but an option I'm not going to use in my current solo games. In a project with loose ever-changing requirements, using Zenject will definitely pay off. Just know that it's not yet widely adopted, and the average Unity Developer will need extra time to learn.
⭐️ Follow https://twitter.com/mefirstgames
Unity is a great game engine, but it's not perfect.
📌 Unity is limited to C#, thus it's harder to optimize code and memory allocations.
📌 It's not suited for a large open world, AAA games.
📌 Unity is a CPU hog on mobile devices, thus drains the battery quickly.
📌 The code is not open source and you can't make custom engine modifications.
📌 Garbage collection can slow down your game and many engine methods allocate on the heap.
📌 Asset Store is saturated with poorly designed assets.
📌 It still has many performance "gotchas."
📌 Terrain editor and other tools aren't as powerful as competitors, e.g. Unreal engine.
📌 Asset import and reimport times are long (this is a tad better now with asset database v2).
📌 Large projects are slow to open, modify, and compile.
📌 It can be expensive compared to some of the competitors, Unreal and Godot.
⚰️ Prefab conflicts will destroy your soul.
🚀 After many years of professional development with Unity, it is still my preferred engine for most mobile and indie games. I long for more optimization control in code, ❤️ C++, but the toolset for Unity is perfect for rapidly building my mobile and indie games.
🔥 Unity is not perfect, but has improved greatly and will continue to improve in the future.
Me First Games is an independent game studio dedicated to creating unique and bizarre video games.
Star Impact is an upcoming adventure platformer coming to PC, Mac, and Linux.
Copyright (c) 2020 Me First LLC