C# Scripting Tutorials
for the Unity Engine
- Unity, C#, logic, mathematics.
- Insight, control, results.
These tutorials teach you about C# scripting for Unity. The tutorials build on one another, introducing new programming concepts, math, algorithms, and Unity features. They will be useful to you, whether you're brand new to scripting or an experienced developer.
The tutorials are all written, not videos. They are enhanced with plenty of screenshots and diagrams. Recent tutorials also contain short animations.
The tutorials are written by me, Jasper Flick from Catlike Coding.
Tutorials
Become My Patron
Your support makes these tutorials possible! If you like them and want to see more, please become my patron. Or make a one-time donation.
Basics
These tutorials provide an introduction to working with C# in Unity.
Clock
Build a clock that shows the current time. While doing so, become familiar with the basics of writing C# scripts in Unity.
Constructing a Fractal
Recursively add chilren to a game object, add some randomization, and you get your own 3D fractal. Use a coroutine to see it grow.
Frames Per Second
Design a test scene to tank your FPS, then measure it with your own counter.
Object Pools
Create a fountain of stuff, then feed it with your own object pools.
Curves and Splines
Start with a line segment, then work your way up to quadratic Beziér curves and splines. All fully editable in the scene view.
Mesh Basics
An introduction to procedural meshes. From a simple grid to deformable balls.
Procedural Grid
Create a simple grid of vertices and triangles.
Rounded Cube
Use your knowledge of grids to build a rounded cube.
Cube Sphere
Turn a cube mesh into a sphere, then use mathematical reasoning to improve it.
Mesh Deformation
Take any mesh and turn it into a deformable stress ball.
Rendering
A series about understanding Unity's rendering pipeline. How a mesh turns into pixels that look like real objects.
Matrices
Use matrices to transform space.
Shader Fundamentals
Write your first shader, from scratch.
Combining Textures
Mix multiple textures to add details and variety.
The First Light
Go from a single dot product all the way to physically-based shading.
Multiple Lights
Support complex lighting with pixel, vertex, and spherical harmonics lights.
Bumpiness
Make surfaces look bumpy, by using height fields, normal maps, and tangent space.
Shadows
Make objects both cast and receive shadows.
Reflections
Use reflection probes to turn surfaces into mirrors.
Complex Materials
Create a custom shader GUI and support metallic, smoothness, and emission maps.
More Complexity
Use occlusion maps and details masks. Also support multi-material editing.
Transparency
Make parts of your surfaces disappear.
Semitransparent Shadows
Support shadows with holes in them.
Deferred Shading
Add support for the deferred rendering path.
Hex Map
A series about hexagon maps. Lots of strategy games use them.
Creating a Hexagonal Grid
Generate a simple hex grid and support in-game editing of cell colors.
Blending Cell Colors
Connect cell with each other and blend their colors.
Elevation and Terraces
Give cells different elevation levels and connect them with terraces.
Irregularity
Perturb cell edges and elevations to produce a more natural map.
Larger Maps
Make large maps possible, and provide the tools to edit them.
Rivers
Draw rivers across the terrain, and animate them.
Roads
Add roads to the map, and make them play nice with rivers.
Water
Create bodies of water at various elevations, and flow rivers in and out of them.
Terrain Features
Add detail objects to the terrain to represent plants, farmland, and urban development.
Walls
Segregate cells by placing walls along their edges.
More Features
Support wall towers, bridges, and larger features.
Saving and Loading
Write maps to a file, and read them back.
Managing Maps
Make it possible to work with multiple maps of various sizes.
Terrain Textures
Cover the terrain with textures.
Noise
Procedural noise is useful for lots of things. The series shows how to make your own.
Noise
Create a prodedural texture, then fill it with pseudorandom noise. Go from 1D to 3D, generating both Value and Perlin noise.
Noise Derivatives
Create a procedural mesh, using noise to turn it into a terrain. Then compute analytical noise derivatives and create Curl noise.
Simplex Noise
Discover how to create alternatives for Perlin and Value noise, based on a simplex grid.
Marching Squares
A series about drawing and reconstructing shapes using a 2D grid. Why not Marching Cubes? Because the concepts are the same for both 2D and 3D, and dealing with two dimensions is already complex enough.
Partitioning Space
Build an editable 2D voxel grid, then triangulate it with the Marching Squares algorithm.
Sharing and Crossing
Add vertex sharing and flexible edge crossings to Marching Squares.
Staying Sharp
Enhance Marching Squares with Hermite data, then reconstruct sharp features and resolve ambiguous cases.
Erecting Walls
Refactor Marching Squares a bit, then add walls to give it some depth.
Being Colorful
Make Marching Squares more colorful by adding support for multiple materials.
Games
Tutorials that can be considered small games.
Swirly Pipe
Create a prototype racing game where you move through endlessly twisting pipes.
Maze
Procedurally fill a rectangular area with a random walk. Add walls, doors, rooms, and other details. Then navigate the maze you have created.
Older Tutorials
These tutorials are old. They work for Unity 4. I won't update them to Unity 5. They still have value, but you'll likely have to make adjustments yourself.
Graphs
Visualize mathematical functions using particle systems, and even animate them. Show a 1D line, a 2D grid, and a small 3D voxel system.
Runner
Create an endless runner game with different platform types and a power-up. Use physics, particle systems, managers, events, and queues.
Octahedron Sphere
Create an approximation of a sphere by subdividing the faces of an octahedron. This tutorial was commissioned by Binpress.
Custom Data
Create a custom data type for a colored point, then make it easier to edit by giving it a custom property drawer.
Custom List
Build an alternative visualization for arrays and list. Then give it a few configuration options.
Star
Using a list of colored points, create a simple star object by means of a dynamic mesh, which exists in edit mode and is editable in the scene view.
Questions & Answers
Have a question? Here are a few common ones. Click or touch the questions to see the answers. You can also contact me in various ways.