Customization Guide
Overview
This guide shows you how to customize BlocKIT without deep programming knowledge. Most changes are in Inspector!
Visual Customization
Color Scheme
Board Colors
NewMatrix Inspector:
├── Cell Color Empty: #FFFFFF
├── Cell Color Filled: #4A90E2
├── Cell Color Highlight: #FFD700
└── Grid Line Color: #333333
Pre-made Themes:
Neon:
Pastel:
Dark Mode:
Shape Colors
In ShapeData assets:
Color Tips: - Use 5-7 distinct colors - High contrast for visibility - Consider colorblind mode
Cell Size & Spacing
NewMatrix Inspector:
├── Cell Size: 60 ← Pixel size
├── Spacing: 5 ← Gap between cells
└── Border Width: 2 ← Grid line thickness
Presets:
Compact (mobile):
Large (tablet):
Minimal:
Gameplay Customization
Board Size
Variations:
Classic 8×8:
Easy 6×6:
Hard 10×10:
Rectangle:
⚠️ Important: Changing board size requires UI layout adjustments!
Number of Shapes Per Turn
// In NewBlockBlastLogic.cs
private const int SHAPES_PER_TURN = 3;
// Change to:
private const int SHAPES_PER_TURN = 4; // Easier (more choice)
private const int SHAPES_PER_TURN = 2; // Harder (less choice)
Score Multipliers
NewScoreManager Inspector:
├── Line Clear Base: 100 ← Points per line
└── Combo Multipliers:
[1.0, 1.5, 2.0, 2.5, 3.0]
Aggressive Scoring:
Conservative Scoring:
Difficulty Settings
NewBrain Inspector:
├── Easy Threshold: 0.3
├── Normal Threshold: 0.6
├── Hard Threshold: 0.8
└── Adjustment Speed: 0.1
For Casual Players:
Easy Threshold: 0.5 (stay easy longer)
Normal Threshold: 0.75
Hard Threshold: 0.9
Adjustment Speed: 0.05 (slower changes)
For Hardcore Players:
Easy Threshold: 0.2 (get hard fast)
Normal Threshold: 0.5
Hard Threshold: 0.7
Adjustment Speed: 0.2 (rapid changes)
Shape Pool Customization
Creating Custom Shapes
-
Create new ShapeData:
-
Design your shape:
-
Add to game:
Pre-made Shape Collections
Beginner Set (easy):
Standard Set:
Expert Set (hard):
Tetris Mode:
Animation Customization
Speed Settings
// In respective scripts:
// Shape dragging
DRAG_SCALE_DURATION = 0.2f // Faster: 0.1f
// Slower: 0.4f
// Line clearing
CLEAR_DURATION = 0.5f // Faster: 0.3f
// Slower: 0.8f
// Popups
POPUP_DURATION = 0.3f // Faster: 0.2f
// Slower: 0.5f
Animation Styles
// In animation scripts, change Ease types:
// Bouncy feel
.SetEase(Ease.OutElastic)
// Smooth feel
.SetEase(Ease.InOutQuad)
// Snappy feel
.SetEase(Ease.OutBack)
// Linear (no easing)
.SetEase(Ease.Linear)
UI Customization
Font & Text
In Canvas UI elements:
├── Score Text
│ ├── Font: Your font
│ ├── Size: 48
│ └── Color: #FFFFFF
│
└── Combo Text
├── Font: Bold font
├── Size: 36
└── Outline: 2px black
Button Styles
Button Inspector:
├── Normal Color: #4A90E2
├── Highlighted Color: #357ABD
├── Pressed Color: #2E5F8F
└── Transition: Color Tint
Layout
Adjust positions in Canvas:
Canvas → GameBoard
├── Anchor: Center
├── Position: (0, 100)
└── Scale: 1.0
Canvas → ShapesPanel
├── Anchor: Bottom
├── Position: (0, 50)
└── Scale: 0.8
Sound Customization
Replacing Audio Clips
SoundManager Inspector:
├── Grab Sound: [Your .ogg file]
├── Place Sound: [Your .ogg file]
├── Clear Sound: [Your .ogg file]
└── etc...
Audio Tips: - Use OGG format - Keep SFX under 0.5 seconds - Normalize volume levels
Volume Defaults
// In SoundManager.cs
private const float DEFAULT_MUSIC_VOLUME = 0.7f;
private const float DEFAULT_SFX_VOLUME = 1.0f;
Power-ups & Features
Add Undo Feature
public class UndoManager : MonoBehaviour
{
private Stack<BoardState> history = new();
public void RecordState()
{
history.Push(SaveCurrentState());
}
public void Undo()
{
if (history.Count > 0)
{
RestoreState(history.Pop());
}
}
}
Add Hints
public class HintSystem : MonoBehaviour
{
public void ShowHint()
{
var best = FindBestPlacement();
if (best != null)
{
HighlightPosition(best.row, best.col);
}
}
}
Add Rotation
// In NewDraggableShape.cs
void Update()
{
if (Input.GetKeyDown(KeyCode.R) && isDragging)
{
RotateShape90Degrees();
}
}
Game Modes
Time Attack
public class TimeAttackMode : MonoBehaviour
{
private float timeRemaining = 120f; // 2 minutes
void Update()
{
timeRemaining -= Time.deltaTime;
if (timeRemaining <= 0)
GameOver();
}
}
Target Score
public class TargetMode : MonoBehaviour
{
private int targetScore = 5000;
void CheckWin()
{
if (ScoreManager.CurrentScore >= targetScore)
Victory();
}
}
Endless Mode
// This is default! Just disable game over:
public class EndlessMode : MonoBehaviour
{
void OnNoMovesLeft()
{
// Instead of game over, refresh board
ClearLowestLine();
GenerateNewShapes();
}
}
Platform-Specific
Mobile Optimizations
#if UNITY_ANDROID || UNITY_IOS
// Smaller cells for mobile
cellSize = 50;
// Larger touch targets
minTouchSize = 60;
// Disable fancy effects
particlesEnabled = false;
#endif
Desktop Enhancements
#if UNITY_STANDALONE
// Add keyboard shortcuts
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
RotateShape();
if (Input.GetKeyDown(KeyCode.Z))
Undo();
}
#endif
Performance Tuning
Low-end Devices
Reduce:
├── Cell Size (smaller board = less draw calls)
├── Animation Duration (faster = less time active)
├── Particle Effects (disable completely)
└── Shadow Quality (use simple sprites)
High-end Devices
Increase:
├── Animation Smoothness
├── Particle Counts
├── Shadow/Glow Effects
└── Screen Shake Intensity
Monetization Setup
Ad Placement
// Show ad every 3 games
int gamesCount = 0;
void OnGameOver()
{
gamesCount++;
if (gamesCount % 3 == 0)
AdsManager.Instance.ShowInterstitial();
}
IAP Integration
public class IAPManager : MonoBehaviour
{
public void OnPurchaseNoAds()
{
PlayerPrefs.SetInt("NoAds", 1);
AdsManager.Instance.DisableAds();
}
public void OnPurchaseUndos()
{
PlayerPrefs.SetInt("UndoCount", 10);
}
}
Testing Configurations
public class DebugMenu : MonoBehaviour
{
[SerializeField] private bool enableDebug;
void OnGUI()
{
if (!enableDebug) return;
if (GUILayout.Button("Easy Mode"))
SetDifficulty(0.2f);
if (GUILayout.Button("Add 1000 Points"))
ScoreManager.AddPoints(1000);
if (GUILayout.Button("Clear Board"))
Matrix.ClearAll();
}
}
What's Next?
- 📖 FAQ - common questions
- 🧠 AI System - difficulty tuning
- 🎮 Game Components - core systems
Start Simple
Start with Inspector changes (colors, values). Only modify code when you're comfortable!