C# Unity Game Development Cursor Guidelines

C# Unity Game Development Cursor Guidelines

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

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

csharp
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.