photon服务端(PUN)教程之一 简述
开始前的准备
学过Unity自带的Unet(教程)以后,正好趁热打铁学习下photon,都是尽量为开发者提供简便功能的好东西,而且都是服务端的,内容有一定的关联性,如果对比起来学习应该效果更好。
首先看到的是维京教程 不过官方都说太老了,那怎么办?看到提示有新的教程啦,哇塞!那还先提维京干嘛!官方也可以把维京的修改下嘛......
好吧,开始新的一趟学习,一步一步来搞定它。
首先是官方的介绍:
PUN基础教程是一个基于Unity3D的教程。它将向您展示如何开发一个由Photon Cloud提供支持的多人游戏的应用程序,以及如何使用Animator为角色制作角色动画。我们将学习许多重要的功能,技巧和窍门,以便全面了解和使用PUN进行网络游戏开发的方法。
概述
我觉得吧,教程项目应该都是从一个新的项目开始,进行整个创建,就怕弄个残局让你慢慢悟,太浪费感情!在这个教程的学习过程中,将会对官方原文中, 涉及到的相关概念、陷阱、设计等进行解释。
为了别太无聊,而且不让角色只是傻傻地站着,我们将制作一个基本的射击游戏,并加上玩家的生命值管理,这将有助于我们支持在整个网络中进行同步的相关解释。(不明白现在怎么都爱从射击游戏讲起,记得UNET的教程也是嘛?
我们也会根据房间里玩家的数量来使用一个自定义大小的竞技场,根据当前玩的玩家数量来调整竞技场的大小。这将涉及到几个概念如自动同步场景啊什么的,并提示如何在加载不同的场景时处理玩家的同步(嗯,这个也挺实用的),以及在这种情况下可能出的错误:) (居然笑了,难道后面有坑?)
最终完成的游戏目标:
当游戏启动时,玩家将见到连接协议运行,并使用UI的形式来显示。当加入或创建一个房间时,玩家进入一个可调整的竞技场,一次最多可以有4个玩家控制的角色。玩家可以控制它跑,转,还有射击。每个玩家的角色发射的子弹会在击中其他玩家的角色时降低其生命值。当某个玩家的角色生命值为0时,游戏结束,离开竞技场。可以根据相关的信息选择是否再加入一个游戏。
哪个基础知识你应该是知道的?
本教程仅涉及使用Unity编辑器和编程的基础知识。肯定新手才来看你的教程呢是吧?老手都有自己的套路的,更有喜欢自己造轮子的,何必看这个呢?当然也不排除有老手感兴趣的。教程里面的代码肯定都是c#写的,各位也知道以后的新版本,别的语言应该i就没了......
好了,让我们开始吧,开始进入制作游戏阶段啦:)
1.创建一个新的unity工程(名字自己取呗,我就叫PUNDEMO了,你随便,如果你有起名恐惧症那就照抄我的吧)
官方推荐的的是Unity 4.7或Unity 5的任何版本。我做这个Demo使用的Unity2017,看看新版本有没有坑。之所以创建一个新的项目,这因为一般是在开始教程时让大家在同一个起跑线上。当然,一旦掌握了这些概念和功能,就可以马上具有生产力啦。不错吧,不过目前天朝的政策对我们这些小伙伴真是有弊无益,国人的技术路线是世界上最难的......就不多说了。
2. 导入 pun 并安装
打开unity资源商店并找到PUN资源并下载/安装它。(这里说的是免费版pun)让Unity重新编译导入所有的Pun资源,(如果遇到提示 就GO AHEAD !)PUN安装向导可以帮助您进行设置,并提供一个便捷的方式来开始Photon Cloud

Photon 云?是的。这是提供给我们用于网络游戏的一大堆Photon服务器。稍后来解释它。
使用Photon云的“免费计划”不但是免费的而且不会产生其它的隐形条款。(不像脸书的React还有某种附加条款,最后被打脸,再改),所以现在我们只要输入我们的邮件地址,pun就会开始开始魔幻般的工作啦。(这有点吹了吧!)

(注:
上图里面 ,主要是谢谢使用和pun登陆窗口,相关介绍如下:
使用你的photon云已经创建的程序的APPID 。
没有的话就看看是不是注册过 没有的话就去注册账号,然后再账号里面新建一个工程就会产生APPID了。
使用云的预制模式(也可以理解为本地部署)您啊就 直接跳过,以后再劳这神。
)
注册新账号,然后在账号页面里面新建工程,会得到一个“AppId”。如果您的邮件地址已被注册,则会要求您打开信息中心面板。登录并获取“AppId”以将其粘贴到输入字段中。(见下图)

当appID 保存后 ,我们就完成了这步。
你肯定会问,那么,这个“Photon Cloud”究竟是啥玩意啊,这么神叨叨的?
实际上,这是一群组组运行Photon服务的电脑。这个组群服务器的“云”由Exit Games维护,并为您的多人游戏提供全方位的服务。按实际的需求(负荷)进行服务器数量的添加,因此可以处理任意数量的玩家。(我也不理解的:难道是0至无穷?没说自动减少?这里你得小心是不是有坑啊!)
尽管Photon Cloud并不是完全免费的,但实际使用成本很低,特别是与常规托管的主机相比。这个是国内代理的价格页面(全球应该是一样的)。国内据说需要申请。国内互联网的大佬搞游戏的哪个不是发了大财?某讯,某易,某大等等,请你们别发了财,还想垄断,让我们这些小公司,个人开发者连游戏都不能在国内发行,好么!
Photon Unity Networking将会为你处理Photon Cloud,这就是内部发生了什么的简单介绍:
每个玩家都首先要连接到"Name Server"。它会检查你的客户端(包括使用的AppId号)以及客户端所在的区域。然后它将客户端的请求转发到主服务器。主服务器是一堆组组地区服务器的中心。它知道所有注册和创建的游戏。任何游戏运行的时候,就会创建或加入游戏(房间),客户端从“游戏服务器”上取得数据。在PUN中的设置是超级的简单,你不必担心托管成本,性能或维护。从来不用.....担心......(好吧,作为非游戏服务器开发专业人士或者新手或者服务端经验匮乏者,这些介绍还是挺让人振奋的,对吧?)
3.Rooms 房间
Photon Cloud是以“基于房间的游戏”为基础构建的,意味着每次匹配到的玩家人数有限(假设少于10人),并与其他玩家分开。通常情况下:在一个房间的每个人都会收到别人发送的信息。在房间外面的玩家是不能沟通的,所以我们总是希望他们尽快进入房间,开始游戏。
进入房间的最好方法是使用随机匹配。我们当然可以查找服务器看看有没有空的房间或有特定属性的房间。
房间名字是所有房间单独具有的一个标识符。除非房间已满或关闭,否则我们可以通过名字加入房间。主服务器可以方便地提供给我们游戏的房间列表。
4.Lobby 大厅
主服务器上运行您的游戏的大厅,并列出您游戏的房间。在我们的例子中,我们不会利用大厅,只要有可用房间,就随机加入这些空房间里,或者如果没有房间可以加入,就创建一个新房间(房间一般都有最大玩家数量,所以他们可能会满了)。
5.Application IDs & Game Version 应用程序ID 和 游戏版本
如果每个人连接到相同的服务器,必须有一种方法来分离你的玩家与其他人的玩家。每个游戏(应用程序)在云中都有自己的“AppId”。玩家遇到的只能是在具有相同appId的客户端的玩家。当然使用“游戏版本”设置,可以用来将老玩家和新玩家分开。
6.Regions 地区
Photon Cloud的服务器被分布在全球不同的地区,以防止与玩家之间的网络通信延迟太大高。理解这个概念是非常重要的,特别是在与不同地区的远程团队合作时。由于地区不同,与你的队友一起游戏可能非常困难。所以要尽量确保你的这个区域对于所有想要一起玩的玩家是同一个。(这里顺便提下天朝网络更是不同,后面会有详细的补充介绍)
7.Development 下面是本教程的步骤
每步都涵盖了项目开发阶段的一个非常具体的部分,重要的是要按顺序进行。跟着一起做完这些教程,PUN的那些基本概念和方法你就能掌握的差不多了,你可以反复练习,最终运用到项目中去。预计需要下面的九步就完成啦:)
1.Creating the basic Lobby Scene.
2.Improving the Lobby Scene with a User Interface (UI).
4.Implementing Levels loading.
5.Creating the basic Player Prefab.
6.Making the camera follow your player.
7.Modifying the Player Prefab to add network features.