unity-project-template icon indicating copy to clipboard operation
unity-project-template copied to clipboard

Add Cysharp/R3 reactive programming support to Unity project template

Open Copilot opened this issue 6 months ago • 0 comments

This PR adds support for Cysharp/R3 reactive programming library to the Unity project template, providing developers with modern reactive extensions for Unity development.

Changes

Package Dependencies

  • Added com.cysharp.r3 package via Git URL to Unity Package Manager in manifest.json
  • Uses the official Cysharp/R3 repository: https://github.com/Cysharp/R3.git?path=src/R3.Unity/Assets/R3.Unity

R3 Integration Demo

Enhanced Scene01_Intro.cs with a practical R3 demonstration:

// Added R3 reactive property for score tracking
private ReactiveProperty<int> _reactiveScore = new ReactiveProperty<int>(0);

// Subscribe to value changes with logging
_reactiveScore.Subscribe(value => 
{
    Debug.Log($"[R3 Demo] ReactiveScore changed to: {value}");
});

// Integrated with existing Score property
public int Score 
{
    set
    {
        _score = value;
        HudUI.ScoreLabel.text = $"Score: {_score:000}/{ScoreMax:000}";
        
        // Update reactive property when score changes
        _reactiveScore.Value = _score;
    }
}

Documentation Updates

  • Added R3 to the template features table in README.md with link to official repository

How It Works

The R3 integration demonstrates reactive programming in action during normal gameplay:

  1. Scene Initialization: ReactiveProperty subscription is established and logs initial value
  2. Player Interaction: When the player jumps and scores points, the Score property setter automatically triggers the ReactiveProperty update
  3. Reactive Logging: Each score change is logged via the reactive subscription: [R3 Demo] ReactiveScore changed to: {value}

This provides a practical example of how R3 can be used for reactive UI updates, game state management, and event-driven programming in Unity.

Compatibility

  • ✅ Unity 6.x compliant (tested with Unity 6000.2.0f1)
  • ✅ Follows existing project coding standards and structure
  • ✅ Minimal changes (18 lines added across 3 files)
  • ✅ No breaking changes to existing functionality

The implementation showcases R3's ReactiveProperty pattern while maintaining the template's educational focus and best practices approach.

This pull request was created as a result of the following prompt from Copilot chat.

Add Cysharp/R3 as a package dependency to the Unity project.

  • Create a new branch for this work.
  • Add the R3 package using the recommended Unity Package Manager method (UPM via Git URL).
  • Ensure the project compiles successfully after the addition.
  • Demonstrate usage: Add a Cysharp.R3.ReactiveProperty instance to any existing MonoBehaviour subclass (for example, Scene01_Intro.cs). Implement a simple value assignment and subscription to show that it works (e.g., log a message when the property changes).
  • Include all necessary using statements and ensure the demo code is Unity 6.x compliant, matching the ProjectVersion.txt.
  • Provide a summary of changes in the PR description.

✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot avatar Aug 29 '25 16:08 Copilot