build-unity
Build Unity project (WebGL, Desktop, or PSG1)
mkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/solanabr/solana-ai-kit/HEAD/.claude/commands/build-unity.md -o ~/.claude/commands/build-unity.mdbuild-unity.md
You are building a Unity project for Solana game development. Follow these steps:
## Related Skills
- [unity.md](../skills/unity.md) - Unity SDK patterns
- [playsolana.md](../skills/playsolana.md) - PlaySolana/PSG1 specifics
## Step 1: Identify Project and Target
```bash
echo "🎮 Unity Build Process"
echo "====================="
# Check for Unity project
if [ ! -f "ProjectSettings/ProjectVersion.txt" ]; then
echo "❌ Not a Unity project (no ProjectSettings/ProjectVersion.txt)"
exit 1
fi
# Display Unity version
echo "📋 Unity Version:"
cat ProjectSettings/ProjectVersion.txt
# Check build targets
echo ""
echo "📋 Available Build Targets:"
echo " - WebGL (default)"
echo " - StandaloneWindows64"
echo " - StandaloneOSX"
echo " - Android (for PSG1/mobile)"
```
## Step 2: Pre-Build Checks
```bash
echo "🔍 Running pre-build checks..."
# Check for Solana.Unity-SDK
if grep -q "com.solana.unity-sdk" Packages/manifest.json 2>/dev/null; then
echo "✅ Solana.Unity-SDK found"
else
echo "⚠️ Solana.Unity-SDK not found in manifest.json"
fi
# Check for PlaySolana SDK (optional)
if grep -q "com.playsolana" Packages/manifest.json 2>/dev/null; then
echo "✅ PlaySolana SDK found - PSG1 target supported"
fi
# Check for compilation errors by refreshing assets
echo "📝 Checking for compilation errors..."
```
## Step 3: Build Commands
### WebGL Build (Browser)
```bash
echo "🌐 Building WebGL..."
# Standard WebGL build
unity-editor -quit -batchmode -nographics \
-projectPath . \
-buildTarget WebGL \
-executeMethod BuildScript.BuildWebGL \
-logFile build.log
# Check result
if [ $? -eq 0 ]; then
echo "✅ WebGL build successful!"
echo "📁 Output: Build/WebGL/"
else
echo "❌ Build failed. Check build.log for details"
tail -50 build.log
fi
```
### Windows Build (Desktop)
```bash
echo "🖥️ Building Windows Standalone..."
unity-editor -quit -batchmode -nographics \
-projectPath . \
-buildTarget Win64 \
-executeMethod BuildScript.BuildWindows \
-logFile build.log
if [ $? -eq 0 ]; then
echo "✅ Windows build successful!"
echo "📁 Output: Build/Windows/"
else
echo "❌ Build failed. Check build.log"
tail -50 build.log
fi
```
### macOS Build (Desktop)
```bash
echo "🍎 Building macOS..."
unity-editor -quit -batchmode -nographics \
-projectPath . \
-buildTarget OSXUniversal \
-executeMethod BuildScript.BuildMacOS \
-logFile build.log
if [ $? -eq 0 ]; then
echo "✅ macOS build successful!"
echo "📁 Output: Build/macOS/"
else
echo "❌ Build failed. Check build.log"
tail -50 build.log
fi
```
### Android Build (PSG1/Mobile)
```bash
echo "📱 Building Android..."
# Note: Requires Android SDK and NDK configured
unity-editor -quit -batchmode -nographics \
-projectPath . \
-buildTarget Android \
-executeMethod BuildScript.BuildAndroid \
-logFile build.log
if [ $? -eq 0 ]; then
echo "✅ Android build successful!"
echo "📁 Output: Build/Android/"
else
echo "❌ Build failed. Check build.log"
tail -50 build.log
fi
```
## Step 4: Build Script Template
If no build script exists, create one:
```csharp
// Assets/Editor/BuildScript.cs
using UnityEditor;
using UnityEditor.Build.Reporting;
using UnityEngine;
using System.Linq;
public static class BuildScript
{
private static readonly string[] Scenes = GetEnabledScenes();
private static string[] GetEnabledScenes()
{
return EditorBuildSettings.scenes
.Where(s => s.enabled)
.Select(s => s.path)
.ToArray();
}
[MenuItem("Build/WebGL")]
public static void BuildWebGL()
{
var options = new BuildPlayerOptions
{
scenes = Scenes,
locationPathName = "Build/WebGL",
target = BuildTarget.WebGL,
options = BuildOptions.None
};
Build(options);
}
[MenuItem("Build/Windows")]
public static void BuildWindows()
{
var options = new BuildPlayerOptions
{
scenes = Scenes,
locationPathName = "Build/Windows/Game.exe",
target = BuildTarget.StandaloneWindows64,
options = BuildOptions.None
};
Build(options);
}
[MenuItem("Build/macOS")]
public static void BuildMacOS()
{
var options = new BuildPlayerOptions
{
scenes = Scenes,
locationPathName = "Build/macOS/Game.app",
target = BuildTarget.StandaloneOSX,
options = BuildOptions.None
};
Build(options);
}
[MenuItem("Build/Android")]
public static void BuildAndroid()
{
var options = new BuildPlayerOptions
{
scenes = Scenes,
locationPathName = "Build/Android/Game.apk",
target = BuildTarget.Android,
options = BuildOptions.None
};
Build(options);
}
private static void Build(BuildPlayerOptions options)
{
Debug.Log($"Building for {options.target}...");
Debug.Log($"Scenes: {string.Join(", ", options.scenes)}");
var report = BuildPipeline.BuildPlayer(options);
if (report.summary.result == BuildResult.Succeeded)
{
Debug.Log($"Build succeeded: {report.summary.totalSize / 1024 / 1024} MB");
Debug.Log($"Output: {options.locationPathName}");
}
else
{
Debug.LogError($"Build failed with {report.summary.totalErrors} errors");
foreach (var step in report.steps)
{
foreach (var message in step.messages)
{
if (message.type == LogType.Error)
{
Debug.LogError(message.content);
}
}
}
EditorApplication.Exit(1);
}
}
}
```
## Step 5: Post-Build Verification
```bash
echo "🔍 Verifying build outpuAnchor framework specialist for rapid Solana program development. Use for building programs with Anchor macros, IDL generation, account validation, and standardized patterns. Prioritizes developer experience while maintaining security.\\n\\nUse when: Building new programs quickly, team projects needing standardization, projects requiring IDL for client generation, or when developer experience is prioritized over maximum CU optimization.
DeFi integration specialist for composing with Solana protocols including Jupiter, Drift, Kamino, Raydium, Orca, Meteora, Marginfi, and Sanctum. Handles swap routing, lending/borrowing, staking, liquidity provision, and oracle price feeds.\n\nUse when: Integrating DeFi protocols, building swap interfaces, implementing lending/borrowing, setting up yield strategies, working with Pyth/Switchboard oracles, or composing multi-protocol transactions.
CI/CD, infrastructure, and deployment specialist for Solana projects. Handles GitHub Actions, Docker, monitoring, RPC management, and Cloudflare Workers edge deployment.\n\nUse when: Setting up CI/CD pipelines, containerizing Solana validators or programs, configuring monitoring and alerting, managing RPC infrastructure, deploying edge workers, or automating build and deploy workflows.
Senior Solana game architect for game system design, Unity/C# architecture, on-chain game state, player progression, NFT integration, and PlaySolana ecosystem. Use for high-level game design decisions, architecture reviews, and planning complex game systems.\n\nUse when: Designing new Solana games from scratch, planning game state on-chain, Unity project architecture, integrating with PlaySolana/PSG1, or deciding between implementation approaches.
React Native and Expo specialist for building Solana mobile dApps. Handles mobile wallet adapter integration, transaction signing UX, deep linking, and mobile-specific performance optimization.\n\nUse when: Building React Native or Expo mobile apps with Solana integration, implementing mobile wallet adapter flows, setting up deep links for transaction signing, or optimizing mobile dApp performance.
CU optimization specialist using Pinocchio framework. Use for performance-critical programs requiring 80-95% CU reduction vs Anchor. Specializes in zero-copy access, manual validation, and minimal binary size.\\n\\nUse when: CU limits are being hit, transaction costs are significant at scale, binary size must be minimized, or maximum throughput is required.
Rust backend specialist for building async services that interact with Solana blockchain. Builds APIs, indexing services, and off-chain processing using Axum, Tokio, and modern async patterns.\n\nUse when: Building REST/WebSocket APIs for Solana dApps, implementing transaction indexers, creating webhook services, or any Rust backend that interacts with Solana.
Senior Solana program architect for system design, account structures, PDA schemes, token economics, and cross-program composability. Use for high-level design decisions, architecture reviews, and planning complex multi-program systems.\n\nUse when: Designing new programs from scratch, planning account structures, optimizing PDA schemes, reviewing architecture for security, or deciding between implementation approaches.