Getting started
On this page
Every Gully Studio game starts from gully-labs/gully-studio-unity-template, a Unity 6 LTS project with the studio's version-control, package and CI conventions already set.
Heads up
The template and every repo created from it are private. Gully Studio games use Unity Asset Store content, which may ship inside a built game but must never be redistributed as source. The template's hygiene CI fails if the repo is public. See Asset Store licence.
#1. Create the repo
On GitHub, open gully-labs/gully-studio-unity-template, choose Use this template, and create a private repository under the gully-labs organisation.
#2. Clone with Git LFS
Binaries (textures, models, audio, video, fonts, plugins, archives) are stored in Git LFS. Install LFS once per machine before you clone:
git lfs install
git clone https://github.com/gully-labs/<your-game>.git
cd <your-game>#3. Register UnityYAMLMerge
Scenes and prefabs are merged with Unity's Smart Merge tool, which understands Unity YAML. .gitattributes already marks them with merge=unityyamlmerge; each clone registers the merge driver once:
# macOS, Linux, Git Bash
./Tools~/setup-merge-tool.sh# Windows PowerShell
./Tools~/setup-merge-tool.ps1docs/unityyamlmerge.md in the repo explains the setup and how to resolve a conflict by hand.
#4. Open in Unity 6 LTS
Open the folder with Unity Hub, using exactly the editor version in ProjectSettings/ProjectVersion.txt. CI builds with the same version (unityci/editor image), so a different local editor causes needless diffs.
On first open, Unity generates the rest of ProjectSettings/ and Packages/packages-lock.json. Commit both:
git add ProjectSettings Packages/packages-lock.json
git commit -m "Unity first open: generated settings and package lock"The template enforces two settings and re-applies them if they drift (Assets/_Project/Scripts/Editor/ProjectRulesCheck.cs):
| Setting | Value | Why |
|---|---|---|
| Asset serialization | Force Text | scenes and prefabs diff and merge as text |
| Version control mode | Visible Meta Files | every asset carries its .meta in git |
#5. Name the game
In Project Settings > Player, set the product name and the bundle id xyz.gullystudio.<game>, then commit.
#6. Add the CI secrets
Open Settings > Secrets and variables > Actions in the repo and add these secrets. Nothing in the repo holds them, and they must never be committed.
| Secret | What |
|---|---|
UNITY_EMAIL, UNITY_PASSWORD |
the Unity account that owns the licence |
UNITY_SERIAL |
Unity Pro or Unity Industry serial, required for an organisation above the Personal revenue threshold |
UNITY_LICENSE |
contents of a Personal .ulf file, an alternative to the serial while prototyping |
ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASS, ANDROID_KEYALIAS_NAME, ANDROID_KEYALIAS_PASS |
Android release signing, optional until a store build |
Then set the repository variable UNITY_CI to true. Every Unity job in CI is gated on it, so a fresh repo does not use runner minutes before the licence exists.
#7. Push
Push to main. Two workflows run:
| Workflow | Needs a licence | What it does |
|---|---|---|
hygiene.yml |
No | checks the repo is private, settings match, binaries are in LFS, and no .unitypackage or .ulf file is committed |
unity.yml |
Yes (UNITY_CI=true) |
EditMode and PlayMode tests, then builds for Windows, Linux (dedicated server), Android and WebGL |
See Release and CI for targets, artifacts and runners.
#Folder layout
Assets/
_Project/ everything the studio writes (sorts first)
Scenes/ one scene per level or screen
Scripts/Runtime/ GullyStudio.Runtime.asmdef
Scripts/Editor/ GullyStudio.Editor.asmdef (editor tools, rule checks)
Prefabs/ Art/ Audio/ Settings/ Netcode/
ThirdParty/ Asset Store packages, one folder each, listed in its README
Tests/ EditMode and PlayMode test assemblies
Packages/manifest.json
ProjectSettings/
Tools~/ merge-tool setup, .meta generator (Unity ignores folders ending in ~)
docs/#Never commit
Unity's working folders are in .gitignore and stay out of git: Library/, Temp/, Obj/, Build/, Logs/, UserSettings/. Licence files (.ulf), keystores and API keys never go in the repo either.
#Next
- Add the Gully Game SDK. The template's
Packages/manifest.jsonalready references it. - Multiplayer if the game is online.