Skip to content
Back to skills

Csharp Unity Majo

ASecurity

C# and Unity development standards for Mark's projects.

  • 666 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added February 8, 2026
developmentjavascriptpythongojavac#testingdebugginggitapidocumentation

Works with

  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill csharp-unity-majo --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Csharp Unity Majo?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Csharp Unity Majo
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-csharp-unity-majo/badge)](https://www.skillsdirectory.com/skills/majiayu000-csharp-unity-majo)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: csharp-unity-majo
description: C# and Unity development standards for Mark's projects.
license: Unlicense OR 0BSD
metadata:
  author: Mark Joshwel <mark@joshwel.co>
  version: "2026.2.2"
---

# C# and Unity Standards (Mark)

**Goal**: Write consistent, well-documented C# code for Unity game development following specific naming conventions, XML documentation standards, and British spelling preferences.

## When to Use This Skill

- **Writing C# code for Unity**
- **Creating Unity MonoBehaviour scripts**
- **Writing C# class libraries for games**
- **Implementing Unity event systems**
- **Writing Firebase or external service integrations in Unity**
- **Documenting C# public APIs**
- **Setting up callback registration patterns**

## When NOT to Use This Skill

- **Writing C# for non-Unity projects** (use general C# standards)
- **Writing code for non-gaming contexts**
- **Contributing to external C# projects** with different conventions
- **Writing in other languages** (JavaScript, Python, etc.)

## Process

1. **Check project context** - Verify this is a Unity/C# project
2. **Apply naming conventions by access level**:
   - `public` → camelCase
   - `protected` → PascalCase
   - `private` → _camelCase
3. **Methods always use PascalCase** - Regardless of access level
4. **Add XML documentation** - For all public APIs with `<summary>`, `<param>`, `<returns>`
5. **Use British spellings** - In code identifiers and documentation
6. **Implement callback pattern** - Use List<Action<T>> with Register/Fire methods
7. **Format Debug.Log messages** - Lowercase, consistent with error format
8. **Preserve external naming** - When porting code, keep original naming with source comment
9. **Update AGENTS.md** - Document project-specific Unity/C# patterns

## Constraints

- **ALWAYS use British spellings** in code identifiers and documentation (colour, initialise, behaviour)
- **ALWAYS use PascalCase for methods** regardless of access level
- **ALWAYS use _camelCase for private fields** (prefix with underscore)
- **ALWAYS preserve external code naming** when porting with source attribution
- **NEVER use American spellings** except when interfacing with Unity/.NET APIs (Color, MonoBehaviour)
- **NEVER use lowercase for method names** (even private methods)
- **NEVER rename external ported code** - Preserve original naming for traceability
- **Exception for Unity/.NET APIs**: Use their American spelling when directly referencing (Color, MonoBehaviour, Initialize)

Standards for writing C# code, with Unity-specific patterns.

## Naming Conventions

### Field Naming by Access Level

```csharp
public double lightness;           // public: camelCase
protected Slider LightnessSlider;  // protected: PascalCase
private FirebaseAuth _auth;        // private: _camelCase
```

| Access Level | Convention | Example |
|-------------|------------|---------|
| `public` | camelCase | `lightness`, `userData`, `isReady` |
| `protected` | PascalCase | `LightnessSlider`, `UserData` |
| `private` | _camelCase | `_auth`, `_userData`, `_isInitialised` |

### Method Naming

Methods use **PascalCase** regardless of access level:

```csharp
public void CalculateSimilarity() { }
private void _initialiseAuth() { }  // ❌ WRONG
private void InitialiseAuth() { }   // ✅ CORRECT
```

### Preserved External Code

When porting code from external sources, **preserve the original naming** for traceability:

```csharp
// https://bottosson.github.io/posts/oklab/ (public domain)
public static Lab linear_srgb_to_oklab(RGB c)  // snake_case preserved
{
    // implementation...
}
```

Add a comment linking to the original source.

## XML Documentation

Use XML documentation for public APIs:

```csharp
/// <summary>
///     calculate a similarity percentage from a colour distance
/// </summary>
/// <param name="delta">the delta object returned by CalculateDistance</param>
/// <param name="chromaMax">maximum chroma value, defaults to 1.0f</param>
/// <returns>a similarity percentage (0-100)</returns>
public static float CalculateSimilarity(DeltaLabChE delta, float chromaMax = 1.0f)
{
    // implementation...
}
```

Key points:
- Use lowercase in documentation text (sentence case)
- Indent content within `<summary>` tags
- Include `<param>` for all parameters
- Include `<returns>` for non-void methods
- Use British spellings (colour, initialise, behaviour)

## Callback Registration Pattern

Use List-based callback registration for event systems:

```csharp
private readonly List<Action<FirebaseUser>> _onSignInCallbacks = new();

public void RegisterOnSignInCallback(Action<FirebaseUser> callback)
{
    _onSignInCallbacks.Add(callback);
    Debug.Log($"registering OnSignInCallback ({_onSignInCallbacks.Count})");
}

private void FireOnSignInCallbacks()
{
    foreach (var callback in _onSignInCallbacks)
    {
        try
        {
            callback.Invoke(_user);
        }
        catch (Exception e)
        {
            Debug.LogError($"error invoking callback: {e.Message}");
        }
    }
}
```

Pattern elements:
- Private `List<Action<T>>` for storing callbacks
- Public `Register*Callback` method
- Private `Fire*Callbacks` method with try-catch
- Log registration count for debugging

## Debug.Log Formatting

Use lowercase messages consistent with error message format:

```csharp
Debug.Log($"initialising authentication service");
Debug.Log($"registering OnSignInCallback ({_onSignInCallbacks.Count})");
Debug.LogWarning($"user not authenticated, skipping sync");
Debug.LogError($"error invoking callback: {e.Message}");
```

For errors, follow the standard format:
```csharp
Debug.LogError($"authservice: error: failed to sign in: {e.Message}");
```

## British Spellings

Use British spellings in code identifiers and documentation. See `dev-standards-majo` for the complete list.

Common C# examples:
- `Initialise()` not `Initialize()`
- `colour` not `color`
- `behaviour` not `behavior`
- `Serialise()` not `Serialize()`
- `Normalise()` not `Normalize()`

**Exception**: When interfacing with Unity or .NET APIs that use American spellings (e.g., `MonoBehaviour`, `Color`), use the API's spelling for that specific reference.

## Testing Skills

- **Naming convention check**: Verify field naming by access level (public camelCase, protected PascalCase, private _camelCase)
- **Method naming test**: All methods use PascalCase, never lowercase or _camelCase
- **XML documentation validation**: Public APIs have `<summary>`, `<param>`, `<returns>` tags
- **British spelling verification**: Check colour, initialise, behaviour (not color, initialize, behavior)
- **Callback pattern test**: List<Action<T>> with Register/Fire methods and try-catch
- **Debug.Log format**: Lowercase messages with consistent format
- **External code preservation**: Ported code keeps original naming with source attribution
- **Unity API exception**: Color, MonoBehaviour use American spelling as required by Unity

## Integration

This skill extends `dev-standards-majo`. Always ensure `dev-standards-majo` is loaded for:
- British English spellings
- Error message format
- AGENTS.md maintenance
- Universal code principles

Works alongside:
- `git-majo` — For committing C# changes
- `writing-docs-majo` — For writing C#/Unity documentation
- `task-planning-majo` — For planning Unity projects

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.