Skip to content

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:

Empty: #000000 (black)
Filled: #00FF00 (bright green)
Highlight: #FF00FF (magenta)

Pastel:

Empty: #FFF5E1 (cream)
Filled: #FFB6C1 (light pink)
Highlight: #98D8C8 (mint)

Dark Mode:

Empty: #1E1E1E (dark gray)
Filled: #BB86FC (purple)
Highlight: #03DAC6 (teal)

Shape Colors

In ShapeData assets:

Assets/BlocKIT/Data/ShapeData/
└── Each shape → Color property

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):

Cell Size: 50
Spacing: 3

Large (tablet):

Cell Size: 80
Spacing: 8

Minimal:

Cell Size: 60
Spacing: 0
Border Width: 1

Gameplay Customization

Board Size

NewMatrix Inspector:
├── Rows: 8      ← Height
└── Columns: 8   ← Width

Variations:

Classic 8×8:

Rows: 8, Columns: 8
Difficulty: Medium

Easy 6×6:

Rows: 6, Columns: 6
Difficulty: Lower (more space)

Hard 10×10:

Rows: 10, Columns: 10
Difficulty: Higher (more to manage)

Rectangle:

Rows: 6, Columns: 10
Unique gameplay feel!

⚠️ 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:

Line Clear Base: 200
Combo Multipliers: [1.0, 2.0, 4.0, 8.0, 16.0]

Conservative Scoring:

Line Clear Base: 50
Combo Multipliers: [1.0, 1.2, 1.4, 1.6, 1.8]

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

  1. Create new ShapeData:

    Assets/BlocKIT/Data/ → Right Click
    → Create → BlocKIT → Shape Data
    

  2. Design your shape:

    In Inspector:
    ├── Name: "My Cool Shape"
    ├── Color: Choose color
    ├── Grid Size: 4×4
    └── Click cells to design
    

  3. Add to game:

    NewManager Inspector:
    → Shape Data Assets
    → Add element
    → Drag your shape
    

Pre-made Shape Collections

Beginner Set (easy):

Only include:
- Single cells ■
- 2-cell lines ■ ■
- Small squares ■ ■
               ■ ■

Standard Set:

All sizes, all types
(This is default)

Expert Set (hard):

Only include:
- Large pieces (5+ cells)
- Awkward L/T/Z shapes
- No singles or lines

Tetris Mode:

Only classic Tetris pieces:
I, O, T, L, J, S, Z

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?


Start Simple

Start with Inspector changes (colors, values). Only modify code when you're comfortable!