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

Add Cysharp/R3 reactive extensions package and demonstrate ReactiveProperty usage

Open Copilot opened this issue 6 months ago • 0 comments

This PR integrates Cysharp/R3, a modern reactive extensions library, into the Unity project template and demonstrates its usage with a practical example.

Changes Made

Package Integration

Added R3 to the Unity Package Manager via Git URL in manifest.json:

"com.cysharp.r3": "https://github.com/Cysharp/R3.git?path=src/R3.Unity/Assets/R3.Unity"

The package is compatible with Unity 6.x (requires Unity 2021.3+) and follows the recommended UPM installation method for R3's Unity-specific package.

Code Demonstration

Enhanced Scene01_Intro.cs to showcase ReactiveProperty functionality:

Before:

private int _score = 0;

public int Score 
{
    get { return _score; }
    set 
    {
        _score = value;
        HudUI.ScoreLabel.text = $"Score: {_score:000}/{ScoreMax:000}";
    }
}

After:

private readonly ReactiveProperty<int> _reactiveScore = new ReactiveProperty<int>(0);

public int Score 
{
    get { return _reactiveScore.Value; }
    set 
    {
        _reactiveScore.Value = value;
        HudUI.ScoreLabel.text = $"Score: {_reactiveScore.Value:000}/{ScoreMax:000}";
    }
}

// In Start() method:
_reactiveScore.Subscribe(newScore => 
{
    Debug.Log($"[R3 Demo] Score changed to: {newScore}");
}).AddTo(this);

Reactive Behavior

The implementation demonstrates core R3 concepts:

  • ReactiveProperty: Type-safe observable value container
  • Subscribe: Automatic notification when values change
  • AddTo(): Proper disposal management tied to MonoBehaviour lifecycle
  • Unity 6.x compatibility: Uses modern R3 syntax and patterns

When players jump and score points, the console will now log: [R3 Demo] Score changed to: {newScore}, providing a clear demonstration of reactive programming in action.

Benefits

  • Adds modern reactive programming capabilities to the template
  • Demonstrates best practices for R3 integration in Unity
  • Maintains existing functionality while showcasing new reactive features
  • Provides foundation for more complex reactive patterns in future development

[!WARNING]

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/repos/Cysharp/R3/contents
    • Triggering command: curl -s REDACTED (http block)
  • https://api.github.com/repos/Cysharp/R3/contents/src/R3.Unity/Assets/R3.Unity/Runtime
    • Triggering command: curl -s REDACTED (http block)

If you need me to access, download, or install something from one of these locations, you can either:

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 19:08 Copilot