High-level Firebase systems for Unity - Authentication, Leaderboards, Save System, Profiles, and more.
-
Email/Password Authentication
- User registration with validation
- Sign in/Sign out functionality
- Password reset capability
- User profile management
-
Authenticated Leaderboards
- Submit scores (authenticated users only)
- Get top scores with rankings
- User profile integration
- Real-time database sync
-
Cloud Save System ๐
- Save game state to cloud
- Load from any device
- Multiple save slots
- Auto-save functionality
- Save metadata for quick loading
- Cross-device synchronization
-
Complete UI System
- Login/Register panels
- Profile management
- Leaderboard display
- Save slot management
- Game integration examples
- Unity 2020.3 or higher
- Firebase SDK for Unity
- Download from: https://firebase.google.com/download/unity
- Import these packages:
- FirebaseAuth.unitypackage
- FirebaseDatabase.unitypackage
- Import Firebase SDK packages
- Add
google-services.jsontoAssets/folder - Copy Firebase Toolkit to your project
- Follow the setup guide in
Examples/AuthLeaderboardDemo/SETUP_GUIDE.md
// FirebaseManager initializes automatically
// Access anywhere via singleton:
FirebaseManager.Instanceusing FirebaseToolkit.Auth;
AuthSystem auth = new AuthSystem();
// Register new user
auth.RegisterUser(email, password, (success, message) => {
if (success) {
Debug.Log("Registration successful!");
}
});
// Sign in
auth.SignInUser(email, password, (success, message) => {
if (success) {
Debug.Log("Signed in!");
}
});
// Sign out
auth.SignOut();using FirebaseToolkit.Leaderboard;
LeaderboardSystem leaderboard = new LeaderboardSystem("global");
// Submit score (requires authentication)
leaderboard.SubmitScore(score, (success, message) => {
if (success) {
Debug.Log("Score submitted!");
}
});
// Get top scores
leaderboard.GetTopScores(10, entries => {
foreach (var entry in entries) {
Debug.Log($"#{entry.rank} {entry.displayName}: {entry.score}");
}
});using FirebaseToolkit.SaveSystem;
SaveSystem.SaveSystem saveSystem = new SaveSystem.SaveSystem();
// Save game state
SaveSystem.SaveData data = new SaveSystem.SaveData
{
playerLevel = 5,
coins = 1000,
health = 80,
playtime = 3600f
};
saveSystem.SaveGame(data, "slot1", (success, message) => {
if (success) {
Debug.Log("Game saved to cloud!");
}
});
// Load game state
saveSystem.LoadGame("slot1", (data, success) => {
if (success) {
// Restore your game state
playerLevel = data.playerLevel;
coins = data.coins;
Debug.Log("Game loaded from cloud!");
}
});
// Get all saves
saveSystem.GetAllSaves((saves) => {
foreach (var save in saves) {
Debug.Log($"{save.slotName}: Level {save.playerLevel}");
}
});
// Enable auto-save
AutoSave autoSave = gameObject.AddComponent<AutoSave>();
autoSave.SetAutoSaveEnabled(true);
autoSave.SetSaveInterval(30f); // Save every 30 secondsCentral singleton for Firebase initialization and configuration.
Properties:
IsReady- Firebase initialization statusIsSignedIn- User authentication statusCurrentUser- Current Firebase userDatabase- Firebase Realtime Database referenceAuth- Firebase Authentication reference
Events:
OnFirebaseReady- Fired when Firebase is initializedOnUserSignedIn- Fired when user signs inOnUserSignedOut- Fired when user signs out
Handles all authentication operations.
Methods:
RegisterUser(email, password, callback)SignInUser(email, password, callback)SignOut()SendPasswordResetEmail(email, callback)UpdateDisplayName(name, callback)
Manages leaderboard data and rankings.
Methods:
SubmitScore(playerName, score, callback)GetTopScores(count, callback)
Located in: Examples/AuthLeaderboardDemo/
Features:
- Full authentication flow
- Score submission
- Leaderboard display
- User profiles
Setup Guide: See Examples/AuthLeaderboardDemo/SETUP_GUIDE.md
Located in: Examples/LeaderboardDemo/
Basic leaderboard implementation without authentication.
IMPORTANT: Configure your Firebase Realtime Database rules:
{
"rules": {
"leaderboards": {
"$leaderboardId": {
".read": "auth != null",
"$userId": {
".write": "auth != null && auth.uid == $userId"
}
}
},
"users": {
"$userId": {
".read": "auth != null",
".write": "auth != null && auth.uid == $userId"
}
}
}
}leaderboards/
{leaderboardId}/
{userId}/
playerName: string
email: string
score: number
timestamp: timestamp
users/
{userId}/
email: string
displayName: string
createdAt: timestamp
totalScore: number
gamesPlayed: number
// Subscribe to Firebase ready event
FirebaseManager.Instance.OnFirebaseReady += () => {
Debug.Log("Firebase is ready!");
};
// Subscribe to sign in event
FirebaseManager.Instance.OnUserSignedIn += (user) => {
Debug.Log($"User signed in: {user.Email}");
};
// Subscribe to sign out event
FirebaseManager.Instance.OnUserSignedOut += () => {
Debug.Log("User signed out");
};// Complete authentication example
AuthSystem auth = new AuthSystem();
// Register
auth.RegisterUser("user@example.com", "password123", (success, message) => {
Debug.Log(message);
});
// Sign in
auth.SignInUser("user@example.com", "password123", (success, message) => {
if (success) {
// User is now signed in
string userId = FirebaseManager.Instance.GetUserId();
string email = FirebaseManager.Instance.GetUserEmail();
}
});
// Update profile
auth.UpdateDisplayName("PlayerName", (success, message) => {
Debug.Log(message);
});
// Sign out
auth.SignOut();// Create leaderboard
LeaderboardSystem leaderboard = new LeaderboardSystem("global");
// Submit score
string playerName = FirebaseManager.Instance.GetUserDisplayName();
leaderboard.SubmitScore(playerName, 1000, success => {
if (success) {
// Score submitted
}
});
// Get top 10 scores
leaderboard.GetTopScores(10, entries => {
foreach (var entry in entries) {
Debug.Log($"#{entry.rank} - {entry.playerName}: {entry.score}");
}
});Firebase not initializing:
- Verify
google-services.jsonis inAssets/folder - Check Package Name matches Firebase console
- Ensure Firebase SDK is properly imported
Authentication errors:
- Enable Email/Password auth in Firebase Console
- Check network connectivity
- Verify Firebase API key is valid
Leaderboard not working:
- User must be signed in to submit scores
- Check Firebase security rules
- Verify database URL is correct
Enable debug logs in FirebaseManager Inspector:
- Check "Enable Debug Logs"
- Cloud Save System
- Advanced Profile System
- Social Authentication (Google, Facebook)
- Multiple leaderboards management
- Real-time leaderboard updates
- Offline support
- Cloud Functions integration
- Analytics integration
- Push notifications
See CHANGELOG.md for version history.
[Your License Here]
Contributions are welcome! Please feel free to submit issues and pull requests.
For issues and questions:
- Check the documentation
- Review example scenes
- Submit an issue on GitHub
Built with โค๏ธ for Unity developers