-
🔖Game Dev Tools🎮
- Game Jam
- Game Engine
- Game Framework & Library
- Native Game Engines Repos
- Web Engine Repos
- Web Other Tool Repos
- Native Archived or Stopped Repos
- Web Archived or Stopped Repos
- UI Inspiration for Games
- 3d Modeling APP
- Online 3d Modeling APP
- Image to 3D AI
- 3d Animation APP
- 2d Art APP
- Online 2d Art APP
- 2D Animation APP
- Tile Editor
- Online Sprite Editor
- 3D Model
- Texture Material Shader
- 2d Assets
- Logo maker
- Video Editor
- Game Dev AI Tools
- Game Audio App
- Game Audio App Online
- Fonts
- Godot Tools
- Blender Tools
- Unreal Tools
- Unity Tools
- Other Tools
- Websites for Blender User
- Other Game Dev Links
- Unity Snippet
-
- Unreal Engine - Godot | Redot | Blazium - RenPy - Unity
- Unigine - Cry Engine - O3DE - Ultra Engine - Evergine - Cocos Creator
- Stride - Defold - Flax Engine - Falco Engine - Cave Engine - coppercube
- Wonderland Engine - GameMaker - Construct - GDevelop - ct.js
- Rogue Engine - nunustudio - microStudio - Galacean - LayaAir 3
- Scratch - Scrap - microbit - MakeCode Arcade - Blockly Games
- Stencyl - RPG Maker - rpginabox - buildbox
-
- C++ Raylib - SDL - SFML - GLFW - bgfx - Orx - Allegro
- C# MonoGame - FNA
- JS Babylon JS - Three JS - Theatre JS - PlayCanvas - aframe - Phaser - Pixi JS - Excalibur - kaplayjs
- Python Ursina - PyGame - Pyglet - Panda3d
- Lua love2d - lovr - Solar2D - Gideros
- Rust bevy - Bevy Tauri Example - Fyrox Game Engine
-
- O3DE - DagorEngine - Godot - the-mirror - Redot - Blazium - Renpy - FlaxEngine - defold - stride - cocos-engine - cocos2d-x
- MonoGame - FNA - ursina - pygame - pygame-ce - pyglet - panda3d - Bevy - love2d - lovr - flixel
- C/C++ Lib: Raylib - SFML - SDL - imgui - PhysX - JoltPhysics - Rapier - bullet3 - Box2D - The-Forge - glfw - bgfx - glm - openal-soft - sol2 - entt - Kha - stb -/- MTuner - cr - backward-cpp - rapidjson - emscripten - filesystem - watchman - SPIRV-Cross - allegro5 - nCine - steam-audio
- Mach - Zig-Gamedev - UPBGE - armory - goo-engine - heaps - flixel - kohi - Hazel - Razix
- Nu - OpenRA - MoltenEngine - murder - opentk - Nez - bepuphysics2 - osu-framework - Urho.Net
- SpartanEngine - ogre - ogre-next - ArcGameEngine - WickedEngine - BabylonCpp - FlexEngine - Lumos - IDKEngine
- Atlas-Engine - Castor3D - nebula - LinaEngine - OxylusEngine - ezEngine - LumixEngine - harfang3d
- Yave - Fyrox - BlueshiftEngine - Overload - erhe - RealEngine - EtherealEngine - eepp - skylicht-engine
- CatDogEngine - supernova - Nexus - MxEngine - ETEngine - Nuake - Torque3D - xray-16 - KlayGE
- FlatRedBall - pyxel - solarus-games - OpenRCT2 - thunder - corona
- openage - spring - stratagus - AbyssEngine - Piccolo - EsenthelEngine - GameGuruMAX
- Cotton - ObEngine - pixel - ebiten - G3N - korge - libgdx - LWJGL - jmonkeyengine - playn - Terasology
- turso3d - GlistEngine - limonEngine - minetest - potato - Arcane-Engine - orx- Hork-Source
- anki-3d-engine - pmtech - HandmadeMath - jngl - Starling-Framework - cerberus - gosu
- FlingEngine - tdme2 - rbfx - U3D - peredvizhnikov-engine- NazaraEngine- ags - qfusion
- RPG-Paper-Maker - ShapeEngine
-
- GDevelop - ct-js - nunuStudio - microstudio
- Babylon.js - playcanvas - aframe - react-xr
- phaser - Excalibur - pixijs - kaplay | kaboom
- three.js - react-three-fiber - theatre
- melonJS - LittleJS - ige - ir-engine - stage.js
-
- Blender - Blender Repo
- Vroid
- Blockbench - blockbench
- MagicaVoxel
- Rocket 3f
- Meshmixer
- Meshmolder
- Bforartists
- Daz Studio
- Dust3d
- Wings 3d
- Make Human
- Nomad Sculpt
- Clavicula
- Goxel
- Plasticity
- Material Maker
- Armor Paint
- Game Texture Viewer
- lil-ladds
- Sculptris
- Sweet Home 3D
- OpenSCAD
- MeshLab
- FreeCAD
- character-creator
-
- godot-jolt
- godot-box2d
- script-ide
- Pocket-Godot
- imgui-godot
- GodotJS
- beehave
- J.E.N.O.V.A
- godot-block-coding
- Godot-Orchestrator
- phantom-camera
- pixelpen
- godot-multiplayer-input
- godot_dialogue_manager
- Lorien
- GodotOS
- Godot Dynamic Inventory System
- Godello
- Godot RL Agents
- Auto Layout
- Scene Manager
- SignalVisualizer
- cyclopsLevelBuilder
- gdTree3D
- TerraBrush
- godot-admob-plugin
- SmartShape2D
- Card3D
- material-maker
- sprite-painter
- godot_little_camera_preview
- godot-script-dock
- Godot Instance Dock
- godot-filesystem-drawer
- AnimatedButton
- GodotLabelFontAutoSizer
- Asset-Drawer
- Godot-Simple-TODO
- TODO_Manager
- limboai
- CSG_Toolkit
- Shaker
- delta-rollback
- godot-globalize-plugins
- godot-zig - GDExtension example (gdext)
- Pixelorama
- godot-minimal-theme
- hoodie
- GodotEzDialoguePlugin
- 3D-Characters-Repository
- godot_heightmap_plugin
- ufbx
- FBX2glTF
- nobody
- godot_spatial_gardener
- Terrain3D
- Gaea
- dialogic
- dialogic 2
- grider
- godot-open-rpg
- unidot_importer
- unitypackage_godot
- godot4-demo-desert-light
- Godot-4-Overgrown-Subway-Demo
- enu
- gdext-nim
- Node Referencer
- Waterways
- godot-sfxr
- Godot_RegularPolygon2D
-
- awesome-opensource-unity
- Easy-Text-Effects-for-Unity
- NaughtyCharacter
- Unity-Editor-Toolbox
- Smart-Inspector
- ColorfulHierarchy
- UIEffect
- ink-unity-integration
- WaveFunctionCollapse
- ml-agents
- crest
- ET
- MeshSync
- Entitas
- unity-frosted-glass
- FastScriptReload
- FancyScrollView
- AICommand
- AIShader
- unity-tailwindcss
- ThumbCreator
- Easy-Icon-Maker
- games.noio.planter
- MegacityMultiplayer
- Animation-Sequencer
- Unity-DeveloperConsole
- ExtendingLWRP
- unity-stylized-water
- DeBroglie
- Unity3DCrossSectionShader
- Unity3d-BeastConsole
- Unity-UI-Rounded-Corners
- Moments
- odin-serializer
- Unified-Universal-Blur
- UnityFx.Outline
- Post-Processing-Scan
-
- character-animation-combiner
- ink
- dust3d
- 3DWorld
- bitmapflow
- NoahGameFrame
- c2nim
- Capsaicin
- f3d
- Noesis
- DeluxePaint
- flecs
- EveryRay-Rendering-Engine
- VQEngine
- motion-canvas
- freetype - freetype
- openal-soft
- volk
- cgltf
- nannou
- ozz-animation
- instead
- gideros
- Ray-Tracing-Gems-II
- boardgame.io
- magnum
- ubisoft-laforge-ZeroEGGS
- cubzh
- kbengine
- Vulkan-Headers
- cocos
- ClanLib
- fs2open.github.com
- Horde3D
- DOOM - DOOM-3-BFG
- Quake - Quake-2 - Quake-III-Arena
- moai-dev
- stepmania
-
using System.Collections; using System.Collections.Generic; using UnityEngine; // interface name always start with I and then an meaningful name in -> PascalCase interface IConvention{ string Convention1 { get; } string Convention2 { get; } string Convention3 { get; } } // enum name -> PascalCase enum ConventionLevel{ Easy, Normal, Hard } // Class name in our case "ConventionClass" -> PascalCase public class ConventionClass : MonoBehavior { // Classes Local static variable in our case "ConventionStaticVariable" -> PascalCase and always written at the top public static int ConventionStaticVariable; // Classes Local public and protected variable in our case "PublicConventionMember and ProtectedConventionMember" -> PascalCase public int PublicConventionMember; protected int ProtectedConventionMember; // Classes Local private variable in our case "_conventionPrivateMember" -> camelCase with an underscore before private int _conventionPrivateMember; // Hungarian notation private int m_conventionPrivateMember; // Methods and Functions name -> PascalCase void Start() {} void Update() {} // Parameter type in our case "ConventionClass"-> PascalCase // Parameter name in our case "conventionClass" -> camelCase void ConventionMethod(ConventionClass conventionClass) { // Method's Local variable in our case "conventionVariable" -> camelCase float conventionVariable = 1.5f; } }
-
using UnityEngine; // to use this utility you will need a text file with names like the following example: /*name.txt Loui Navarro Habiba Conway Thea Donaldson Xavier Rivers Tabitha Barker Rupert Lloyd Carolyn Merritt Alyssia Cisneros Fabio Chambers David Brennan*/ // now just drag the file in the _file field in the inspector public class People : MonoBehavior { [Header("Dependencies")] [SerializeField,Required] TextAsset _file; [SerializeField] string[] _names; void OnValidate() { _names = _file? _file.text.Split(new [] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries):null; } }
-
using UnityEngine; // to use this utility you will need a text file with data like the following example: /*item.txt table,15,#942e2e chair,20,#942e2e lamp,30,#942e2e */ // now just drag the file in the _file field in the inspector public class Item { public string Name; public int Price; public Color Color; } public class Items : MonoBehavior { [Header("Dependencies")] [SerializeField,Required] TextAsset _file; [SerializeField] Item[] _items; void OnValidate() { _names = _file? _file.text.Split(new [] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries):null; } Item ConvertToItem(string line) { var parts = line.split(","); return new Item { name = parts[0], price = int.TryPrase(parts[1],out var p) ? p : 0, color = ColorUtility.TryParseHtmlString(parts[2],out var c) } } }
-
private void Awake() { /* Called when the script is being loaded */ } private void OnEnable() { /* Called every time the object is enabled */ } private void Start() { /* Called on the frame when the script is enabled */ } private void Update() { /* Called once per frame */ } private void LateUpdate() { /* Called every frame after Update */ } private void FixedUpdate() { /* Called every Fixed Timestep */ } private void OnBecameVisible() { /* Called when the renderer is visible by any Camera */ } private void OnBecameInvisible() { /* Called when the renderer is no longer visible by any Camera */ } private void OnDrawGizmos() { /* Allows you to draw Gizmos in the Scene View */ } private void OnGUI() { /* Called multiple times per frame in response to GUI events */ } private void OnApplicationPause() { /* Called at the end of a frame when a pause is detected */ } private void OnDisable() { /* Called every time the object is disabled */ } private void OnDestroy() { /* Only called on previously active GameObjects that have been destroyed */ }
-
/* Create a GameObject */ Instantiate(GameObject prefab); Instantiate(GameObject prefab, Transform parent); Instantiate(GameObject prefab, Vector3 position, Quaternion rotation); /* In Practice */ Instantiate(bullet); Instantiate(bullet, bulletSpawn.transform); Instantiate(bullet, Vector3.zero, Quaternion.identity); Instantiate(bullet, new Vector3(0, 0, 10), bullet.transform.rotation); /* Destroy a GameObject */ Destroy(gameObject); /* Finding GameObjects */ GameObject myObj = GameObject.Find("NAME IN HIERARCHY"); GameObject myObj = GameObject.FindWithTag("TAG"); /* Accessing Components */ Example myComponent = GetComponent<Example>(); AudioSource audioSource = GetComponent<AudioSource>(); Rigidbody rgbd = GetComponent<Rigidbody>();
-
// X = Left/Right Y = Up/Down Z = Forward/Back Vector3.right /* (1, 0, 0) */ Vector2.right /* (1, 0) */ Vector3.left /* (-1, 0, 0) */ Vector2.left /* (-1, 0) */ Vector3.up /* (0, 1, 0) */ Vector2.up /* (0, 1) */ Vector3.down /* (0, -1, 0) */ Vector2.down /* (0, -1) */ Vector3.forward /* (0, 0, 1) */ Vector3.back /* (0, 0, -1) */ Vector3.zero /* (0, 0, 0) */ Vector2.zero /* (0, 0) */ Vector3.one /* (1, 1, 1) */ Vector2.one /* (1, 1) */ float length = myVector.magnitude /* Length of this Vector */ myVector.normalized /* Keeps direction, but reduces length to 1 */
-
/* The time in seconds since the start of the game */ float timeSinceStartOfGame = Time.time; /* The scale at which the time is passing */ float currentTimeScale = Time.timeScale; /* Pause time */ Time.timeScale = 0; /* The time in seconds it took to complete the last frame */ /* Use with Update() and LateUpdate() */ float timePassedSinceLastFrame = Time.deltaTime; /* The interval in seconds at which physics and fixed frame rate updates are performed */ /* Use with FixedUpdate() */ float physicsInterval = Time.fixedDeltaTime;
-
/* Both objects have to have a Collider and one object has to have a Rigidbody for these Events to work */ private void OnCollisionEnter(Collision hit) { Debug.Log(gameObject.name + " just hit " + hit.gameObject.name); } private void OnCollisionStay(Collision hit) { Debug.Log(gameObject.name + " is hitting " + hit.gameObject.name); } private void OnCollisionExit(Collision hit) { Debug.Log(gameObject.name + " stopped hitting " + hit.gameObject.name); } /* Trigger must be checked on one of the Colliders */ private void OnTriggerEnter(Collider hit) { Debug.Log(gameObject.name + " just hit " + hit.name); } private void OnTriggerStay(Collider hit) { Debug.Log(gameObject.name + " is hitting " + hit.name); } private void OnTriggerExit(Collider hit) { Debug.Log(gameObject.name + " stopped hitting " + hit.name); } /* For 2D Colliders just add 2D to the Method name and the Parameter Type */ private void OnCollisionEnter2D(Collision2D hit) { } private void OnCollisionStay2D(Collision2D hit) { } private void OnCollisionExit2D(Collision2D hit) { } private void OnTriggerEnter2D(Collider2D hit) { } private void OnTriggerStay2D(Collider2D hit) { } private void OnTriggerExit2D(Collider2D hit) { }
-
/* Create a Coroutine */ private IEnumerator CountSeconds(int count = 10) { for (int i = 0; i <= count; i++) { Debug.Log(i + " second(s) have passed"); yield return new WaitForSeconds(1.0f); } } /* Call a Coroutine */ StartCoroutine(CountSeconds()); StartCoroutine(CountSeconds(10)); /* Call a Coroutine that may need to be stopped */ StartCoroutine("CountSeconds"); StartCoroutine("CountSeconds", 10); /* Stop a Coroutine */ StopCoroutine("CountSeconds"); StopAllCoroutines(); /* Store and call a Coroutine from a variable */ private IEnumerator countSecondsCoroutine; countSecondsCoroutine = CountSeconds(); StartCoroutine(countSecondsCoroutine); /* Stop a stored Coroutine */ StopCoroutine(countSecondsCoroutine); /* Coroutine Return Types */ yield return null; // Waits until the next Update() call yield return new WaitForFixedUpdate(); // Waits until the next FixedUpdate() call yield return new WaitForEndOfFrame(); // Waits until everything this frame has executed yield return new WaitForSeconds(float seconds); // Waits for game time in seconds yield return new WaitUntil(() => MY_CONDITION); // Waits until a custom condition is met yield return new WWW("MY/WEB/REQUEST"); // Waits for a web request yield return StartCoroutine("MY_COROUTINE"); // Waits until another Coroutine is completed
-
if (Input.GetKeyDown(KeyCode.Space)) { Debug.Log("Space key was Pressed"); } if (Input.GetKeyUp(KeyCode.W)) { Debug.Log("W key was Released"); } if (Input.GetKey(KeyCode.UpArrow)) { Debug.Log("Up Arrow key is being held down"); } /* Button Input located under Edit >> Project Settings >> Input */ if (Input.GetButtonDown("ButtonName")) { Debug.Log("Button was pressed"); } if (Input.GetButtonUp("ButtonName")) { Debug.Log("Button was released"); } if (Input.GetButton("ButtonName")) { Debug.Log("Button is being held down"); }