我正在尝试在一个 Photon Fusion 2 房间中将多个用户连接在一起。连接后,我希望任何用户都能够选择代表要启动的另一个应用程序的按钮。一旦他们选择了一个应用程序,我希望每个人都被重定向到该应用程序。我有下面的代码,它对于选择该应用程序的人来说非常有效,但是,它对其他人没有任何作用。我在这里缺少什么?我不确定我是否理解 RPC 如何真正适用于 Fusion 2.TIA。
应用程序使用 Unity 3D 和 C# Photon Fusion 2 的操作 通过 VR 耳机上的 APK 执行
public void LaunchApp(string packageName)
{
RPC_LaunchApp(packageName);
}
[Rpc (RpcSources.All, RpcTargets.StateAuthority)]
public void RPC_LaunchApp(string packageName)
{
Debug.Log("We are in the Launch App Method");
bool fail = false;
string bundleId = (string.IsNullOrEmpty(packageName) || packageName.ToUpper() == "TEST" ? Application.identifier : packageName).Trim();
AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject packageManager = ca.Call<AndroidJavaObject>("getPackageManager");
AndroidJavaObject launchIntent = null;
try
{
launchIntent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", bundleId);
}
catch (System.Exception e)
{
Debug.Log(e);
fail = true;
}
if (fail)
{
//open app in store
Application.OpenURL("https://google.com");
}
else
{
//open the app
ca.Call("startActivity", launchIntent);
}
up.Dispose();
ca.Dispose();
packageManager.Dispose();
launchIntent.Dispose();
}
到目前为止,我已经尝试了上面的代码和几个不同版本的 RPC 属性。
您确定需要 RPC 吗? 您的脚本附加到 NetworkObject,因此其中一个玩家(或服务器)对其具有权限。并且您的 RPC 将 RpcTarget 设置为 StateAuthority,因此基本上无论哪个玩家使用 LaunchApp 方法,它都会在对该对象拥有权限的玩家上调用 RPC_LaunchApp。我想您可能希望 Authority/Host 玩家为所有玩家启动应用程序,在这种情况下,我会在 RPC Sources.StateAuthority Targets.All 中以相反的方式设置 Source 和 Target。