我在官方的Photon Server论坛上问过这个问题,但它不如这个网站那么活跃,所以可能会有人理解我在说什么,所以,如果你有时间和知识,请分享.谢谢!
来这里......
所以,我在Photon上有一个非常好的服务器工作原型和一个与服务器对话的基本Unity3D客户端.它是根据cjrgaming上的示例构建的.
客户端可以:连接,发送请求,建立和发送加密请求服务器可以:创建对等,接收操作请求,向客户端发送操作响应或事件,以及我的小增加是:如果游戏有很多操作,你不必使用一个巨大的switch case语句,而是我将操作划分为类别(Classes),并通过使用委托和字典来调用它们.
当我觉得它已经准备好发布时,我会发布一个有效的例子,但是现在,我的实际问题......(对不起,很长的帖子,我不得不解释我所知道的和迄今为止的内容):
什么是从客户端发送到服务器的实际操作?或者服务器向客户端提出的事件(所有客户端一次性?)?
起初,我认为每个操作都是游戏中特定的用户流程.例如,操作代码"1"表示玩家X想要射击玩家Y,做某事.但是,我意识到,根据字节限制,您不能将所有游戏逻辑仅放在255个操作中,而不会将其扩展为short int或其他内容.
然后我发现还有一个channelID,它可以在同一个操作代码请求上有所不同......这对我来说,操作代码不是用户流,而是客户端之间相同/类似操作的数据流和服务器,channelID可用于区分要在服务器上计算的请求操作.
然后...!我意识到(哦,假我),从客户端发送到服务器的参数,反之亦然在字典中,这增加了另一层可能的用户流.
所以..现在我想要了解一些事情,但他们只是让我更加困惑.
任何人都可以简单解释一下操作/事件/ channelID的目的吗?例如,如果你做一个小型多人游戏,你会用什么来制作用户(游戏)流,比如 - >玩家击中目标,玩家拿起世界上的物品,玩家发送消息.您是否会为每个流使用唯一的操作代码,或者您通过意义分组操作并使用通道来区分请求,或者甚至在这里,您对许多用户流使用相同的channelID,并将它们与参数中的某些ID区分开来?
希望我有任何意义.
非常感谢,至少,如果有的话,请多多帮助!
我正在试图了解Photon Networking Master Client究竟是什么.文档给出如下因素对这个词的使用场景:
在没有服务器的情况下,它可以负责处理只应由房间中的一个客户端执行的逻辑(例如,当每个人都准备好时开始匹配).
为什么我要将某些服务器功能委托给其中一个客户端?Photon Server应该始终可用吗?
例如,在这个 Photon教程中,他们使用引用"非常方便的功能":
PhotonNetwork.automaticallySyncScene = true
如果是这样,MasterClient可以调用PhotonNetwork.LoadLevel(),所有连接的播放器将自动加载相同的级别.
为什么让其中一个客户专用同步所有人,如果他们有光子服务器呢?
总结一下,我有两个问题:
1)什么是主客户端?
2)什么是典型的使用场景?
非常感谢你!
我刚刚接触 Unity 中的多人游戏功能,并且想要进行匹配,目前只是 1 对 1 比赛。我有点困惑的是,有些人似乎表示他们同时使用 PlayFab 和 Photon,有些人使用其中之一,等等。
PlayFab 似乎对数千个并发用户开放,除非我误读了他们的文档,而 Photon 的价格约为 100 美元/月,适用于 100 个 CCU。这似乎很奇怪,如果它们相距那么远,那么任何人都会首先使用 Photon。
据我了解,CCU 是指在任何给定时间可以通过网络玩游戏的玩家数量。因此,如果只允许 100 个 CCU,那就意味着 50 场 1v1 比赛,对吗?这对我来说似乎有点低。
如果您不介意分享有关这些技术的任何想法或经验,我们将不胜感激。
谢谢,
G
我基本上试图将离线游戏转换为在线游戏,游戏使用VArmory作为枪支系统,使用Photon Network作为在线解决方案。所以基本上我有一个正常的统一实例化函数,它似乎可以工作,但是当我尝试光子网络的实例化函数时,它不起作用。我怎样才能解决这个问题?
搜索类似的问题但似乎找不到任何问题。
Bullet bullet = PhotonNetwork.Instantiate(bulletClone.name, transform.position, transform.rotation); // This is the code I am trying to use.
Run Code Online (Sandbox Code Playgroud)
说“无法将类型‘UnityEngine.GameObject’隐式转换为‘VArmory.Bullet’”。
Bullet bullet = Instantiate(bulletClone, transform.position, transform.rotation); // Default code that was working.
Run Code Online (Sandbox Code Playgroud)
所以基本上我试图在网络上产生子弹。
我希望使用 Photon Fusion 制作一款在线多人棋盘游戏。基本的游戏玩法包括人们点击商店按钮购买东西,然后点击下一个回合按钮将回合传递给下一个玩家。我还想只向当前轮到的人显示某些文本框。
然而,我真的很难找到一个关于如何完成这项工作的教程。抱歉,如果这是一个愚蠢的问题,任何指点将不胜感激。网络是我的弱点之一。
我曾尝试对此进行研究(Photon 文档、Youtube、reddit 等),但我发现的几乎所有内容都使用 Photon 的预测运动和用于 fps 或跑酷游戏的键盘按钮。
作为网络方面的新手,我正在努力弄清楚如何制作一个场景,该场景在每个回合中使用由不同人控制的按钮,并为每个人移动游戏对象。
这是一个愚蠢的问题,但我无法弄清楚,我尝试查看它,但没有什么是我想要的,所以我认为询问可能是一个好方法。在我的游戏中,我希望客户端能够向房间中的每个人发送消息(不是为用户发送的消息,如果不是为其他客户端解释为代码):
“(用户1):每个人有多少分?”
“(用户 2):嘿,我得了 5 分”
“(用户 3):嘿,我得了 10 分”
“(用户1):时间到了,说说你的观点:”
“(用户 2):嘿,我得了 20 分”
“(用户 3):嘿,我得了 30 分”
“(用户 1):用户 3 赢了”
当然,这更像是一个图形示例,我想要的是能够向所有客户端(在房间内)发送消息,以便其他客户端可以处理 tjem。我想知道怎么做,以及这是否是一个可能的低谷 PUN(Unity Photon Network)。或者,如果有其他方法可以通过 UnityNetworking 执行此操作。此外,这将通过 LAN 而不是通过 Internet。
先谢谢了。
我无法理解 Photo Engine CCU 的含义以及如何在我的多人游戏中计算它。
谁能解释一下光子如何计数 CCU。