在Unity中使用Photon(网络多人联机)

Posted 我是新手人机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Unity中使用Photon(网络多人联机)相关的知识,希望对你有一定的参考价值。

在Unity中使用Photon

1. 申请中国区免费PHOTON光子引擎

photon官网地址

1-1. 申请账号

  1. 进入官网,点击右上角的 Sign in

  1. 登录

1-2. 申请APP

  1. 点击 CREATE A NEW APP

  1. 填写信息

1-3. 申请中国区免费光子云

申请中国区免费光子引擎官网地址

进去填写一下信息,1-2个工作日就会审核通过(一般都能审核通过的)。

2. 在Unity中使用Photon

2-1. 下载插件 PUN2

  1. 在资源商店下载 PUN2

  1. 导入到Unity,会弹出 PUN Setup 界面,点击跳过(等一下填)

  1. 找到 PhotonServerSettings

  1. 点击 PhotonServerSettingsInspector 面板填写信息

a. 在 Photon 个人主页里面找到申请的APP,填写到 App Id PUN


b. 勾选 Use Name Server
c. Fixed Region 填 cn
d. Server 填 ns.photonengine.cn

  1. 填写完后的信息

3. 打开demo场景查看能否联机

3-1. 将场景添加到 Build Settings 里

3-2. 打包(Build)出来,开两个窗口进行联机

4. 最后效果

如何在 Unity Photon 多人游戏中更改其他客户端变量?

【中文标题】如何在 Unity Photon 多人游戏中更改其他客户端变量?【英文标题】:How can I change other clients variable in Unity Photon multiplayer? 【发布时间】:2016-09-27 13:34:45 【问题描述】:

我对 PunRpc 调用有点困惑,我尝试了 PhotonTarget.Others 看看它是否会健康——;在其他客户端上,但它没有工作。

此刻我想知道我怎样才能做到健康——;当我按空格键时在其他客户端上。

这是我尝试过的: 这是命令:

photonView.RPC("healthReduction", PhotonTargets.Others, null);

这就是 RPC

    [PunRPC]
void healthReduction()

    health--;
    Debug.Log("Health--");

但还是不行。

【问题讨论】:

你有播放器脚本的代码吗? 您的日志中有任何内容吗?如果方法不存在或参数不匹配,PUN 会输出错误。您不记录 RPC 调用。你确定它会被调用吗?有关 RPC 使用示例,请参阅 PUN 演示。 问题是通过 RPC 调用,我不能减少 ENEMYS 的生命值,我只能减少我的生命值。因此,当我调用 PhotonTargets.Others 时,它将在我的播放器上执行代码,但只有其他人可以看到我的播放器的更新健康状况,而我不能。我想在 ENEMY 的播放器上执行此代码,但现在我相信 RPC 调用不可能,只能更新您自己的变量,以便其他人可以看到它们,但要获取敌人的变量并修改它是不可能的我相信:/ . 【参考方案1】:

我通过使用一个实例并使用 2 个不同的命名脚本解决了这个问题,例如,如果我想从 PlayerManager 访问 PlayerManager1 脚本,我这样做PlayerManager1.Instance.photonView.RPC("reduceMyHealth",PhotonTargets.All,null)

这将调用 PlayerManager1 中的 reduceMyHealth() PunRpc。

为此,您必须将此代码添加到您要访问的脚本中: static public PlayerManager1 Instance; 和 start()Instance = this;

【讨论】:

【参考方案2】:

我认为这很容易解决。 源代码如上。

public class TestPhoton : Photon.PunBehaviour

    public PhotonView gameView;

    void Start()
    
        gameView = this.GetComponent<PhotonView>();
    

    public void OnClickTest()
    
        photonView.RPC("HealthReduction", PhotonTargets.Others);
    

    [PunRPC]
    public void HealthReduction()
    
        health--;
    

【讨论】:

以上是关于在Unity中使用Photon(网络多人联机)的主要内容,如果未能解决你的问题,请参考以下文章

Unity 2D多人连接网络学习

如何在 Unity Photon 多人游戏中更改其他客户端变量?

Unity Gun Ammo 在多人游戏中没有减少问题(可能与我的多人游戏系统:光子有关)

请问用unity3d来制作MMO类型网络游戏,服务端该如何制作?听说用Photon网络引擎可以制作,有详细的教程吗?

Photon多人游戏开发教程

Unity联网插件(PUN)