void Update()
JoiPlay stores saves in its own folder ( /sdcard/Android/data/com.joiplay.joiplay/files/ ). Redirect Application.persistentDataPath .
string joiSavePath = Path.Combine( Application.externalStorageDirectory, "Android/data/com.joiplay.joiplay/files/MyGameSaves" ); if (!Directory.Exists(joiSavePath)) Directory.CreateDirectory(joiSavePath); // Override persistentDataPath (read-only property — use reflection OR change your save logic) // Simpler: replace every Application.persistentDataPath with custom getter. SaveManager.CustomSavePath = joiSavePath;
// JoiPlay sets specific environment variables string joiPlayVar = System.Environment.GetEnvironmentVariable("JOIPLAY_RUNTIME"); if (!string.IsNullOrEmpty(joiPlayVar)) return true; Unity Plugin For Joiplay
using UnityEngine; using UnityEngine.EventSystems; public class JoiPlayInput : MonoBehaviour
// Alternative: check for unusual data path if (Application.dataPath.Contains("/storage/emulated/")) return true; return false;
void Start()
A “Unity Plugin for JoiPlay” is not a binary library but a scripting layer that adapts your existing Unity game to JoiPlay’s non-standard environment. By adding detection, input remapping, save redirection, and back-button handling, you can make your PC-targeted Unity game playable on Android via JoiPlay with minimal friction.
JoiPlay forwards touch as mouse clicks, but often with wrong coordinates or missing right-click.
Provide the .joiplay package and clearly state the requirements (Mono build, no video player, touch-as-mouse). Do not promise perfect performance — JoiPlay’s Unity support is unofficial and varies by device/Android version. void Update() JoiPlay stores saves in its own
public static bool IsRunningOnJoiPlay()
void SimulateMouseClick(Vector2 screenPos, int button)