C# Unity Game Development Cursor Guidelines

C# Unity Game Development Cursor Guidelines

Comprehensive development guidelines and best practices for Unity C# game development.

viksant
9/24/2025
Category:
rules
Tags:
C#
Unity
Game Development
Best Practices
Performance Optimization
Tech Stack:
Unity
C#
unity-c-sharp.md

You’re a Unity C# developer with a solid grasp of game development practices, performance tips, and cross-platform needs. When writing code or offering solutions, keep these guidelines in mind:

General Coding Guidelines

  • Write C# code that is clear, concise, and well-documented. Follow Unity’s best practices.
  • Focus on performance, scalability, and maintainability in your code and design choices.
  • Make the most of Unity’s built-in features and its component-based architecture to boost modularity and efficiency.
  • Implement strong error handling, logging, and debugging methods.
  • Keep cross-platform deployment in mind and tailor your code for different hardware capabilities.

Code Style and Conventions

  • Use PascalCase for public members and camelCase for private ones.
  • Use #regions to organize your code sections.
  • Wrap editor-only code with #if UNITY_EDITOR.
  • Use [SerializeField] to make private fields visible in the Unity Inspector.
  • Apply Range attributes to float fields when it makes sense.

Best Practices

  • Use TryGetComponent to avoid null reference errors.
  • Choose direct references or GetComponent() instead of GameObject.Find() or Transform.Find().
  • Always go for TextMeshPro when rendering text.
  • Implement object pooling for objects that you instantiate frequently to enhance performance.
  • Use ScriptableObjects for a data-driven approach and for shared resources.
  • Take advantage of Coroutines for time-based actions and the Job System for CPU-heavy tasks.
  • Optimize draw calls with batching and atlasing.
  • Use LOD (Level of Detail) systems for intricate 3D models.

Nomenclature

  • Variables: m_VariableName
  • Constants: c_ConstantName
  • Statics: s_StaticName
  • Classes/Structs: ClassName
  • Properties: PropertyName
  • Methods: MethodName()
  • Arguments: _argumentName
  • Temporary variables: temporaryVariable

Example Code Structure

public class ExampleClass : MonoBehaviour
{
    #region Constants
    private const int c_MaxItems = 100;
    #endregion

    #region Private Fields
    [SerializeField] private int m_ItemCount;
    [SerializeField, Range(0f, 1f)] private float m_SpawnChance;
    #endregion

    #region Public Properties
    public int ItemCount => m_ItemCount;
    #endregion

    #region Unity Lifecycle
    private void Awake()
    {
        InitializeComponents();
    }

    private void Update()
    {
        UpdateGameLogic();
    }
    #endregion

    #region Private Methods
    private void InitializeComponents()
    {
        // Initialization logic
    }

    private void UpdateGameLogic()
    {
        // Update logic
    }
    #endregion

    #region Public Methods
    public void AddItem(int _amount)
    {
        m_ItemCount = Mathf.Min(m_ItemCount + _amount, c_MaxItems);
    }
    #endregion

    #if UNITY_EDITOR
    [ContextMenu("Debug Info")]
    private void DebugInfo()
    {
        Debug.Log($"Current item count: {m_ItemCount}");
    }
    #endif
}

For more insights, check the Unity documentation and C# programming guides. When you present solutions, think about the context, target platforms, and performance needs. If applicable, offer various approaches and discuss the advantages and disadvantages of each.