坦克,带PUN的多人游戏! (第2部分)

本篇文章介绍在Unity中,我们将会如何与Photon Cloud建立连线,以及加入网路化的游戏场景的首要作业的操作步骤。

与Photon Cloud Service建立连线

我们已在上一篇教学中建立好Photon Server的资讯了,现在我们直接建立一个空的游戏场景,先叫它“ StartScene”就好。 并且保存在Asset→TanksPUN底下,方便往后的游戏专案管理。

主照相机我们选用纯色就好。 所以目前的设定应该会像下面:

建立游戏会话(使用Photon Cloud)

我们在场景中建立一个空的GameObject ,叫PhotonManager ,可以做为这个游戏场景的游戏管理者,因为它只会也只能有一个 ,所以我们将其设置成SingleObject的型式。 (这里先做最简单的处理,详细的Singleton适当不在此系列之中〜)

现在,在TanksPUN底下建立个Scripts,此处方便以后放置我们这个专案的程序,并在其中建一个新的C#脚本称为“ PhotonManager”,初始内容如下:

 使用UnityEngine; 
使用System.Collections;

公共类PhotonManager:Photon.PunBehaviour {
公共静态PhotonManager实例;

无效Awake()
{
if(instance!= null)
{
DestroyImmediate(gameObject);
返回;
}
DontDestroyOnLoad(gameObject);
实例=这个;
}
}

把这个PhotonManager.cs拉到Scene中的PhotonManager(GameObject)里; 注意看唷,它不是继承MonoBehaviour,而是Photon.PunBehaviour,因为这个元件之后是用来跟Photon Cloud / Server沟通用的,而PUN已经帮我们在PunBehaviour里面的设定了有很多方便使用以及必要用的事件,回叫功能让我们运用,所以之后我们将会在它里面覆盖一些适用于我们开发的游戏网路功能。

处理好Awake()后,接下来是要跟Photon Cloud建立连线了,最简单的方式就是直接在GameManager中的Start()使用下面的脚本。

 无效开始(){ 
PhotonNetwork.ConnectUsingSettings(“ TanksPUN_v1.0”);
}

这个ConnectUsingSettings会自动使用我们之前已设置好的Photon Services Setting的值(AppID,托管,协议…)作为信息传到Photon Cloud里。 (上一篇连结:坦克,带PUN的多人游戏!Prt1)

并且,我们加上了一组单词串资讯TanksPUN_v1.0 ,这主要是用来让Photon Server知道我们虽然连上的是同款游戏(AppID是一样的),但可能是不同的版本,所以我们以后就可以处理新旧程序版本的相容性问题,对不同版本可以有不同的连线或是资料处理方式。

建立或加入游戏室

在PhotonNetwork中建立游戏室(Game Room)时应要一些简单的设置,像是最大多少人能玩,这个游戏室是不是隐藏的,或是它是不是关闭的状态等;
再来是,在PUN中使用JoinOrCreateRoom时,如果这个游戏室还没有建立与初始化 ,那PhotonNetwork就会帮我们先建立游戏室,以后要加入此游戏室的人就可以直接用游戏室的名称,并且并且用同样的呼叫方式就可以找到已经建立好的游戏室并直接进入。
现在,我们先来设定一个游戏室中的最大可接受玩家为四人就好,就像下面:

 公共无效JoinGameRoom() 
{
RoomOptions选项=新的RoomOptions();
options.MaxPlayers = 4;
PhotonNetwork.JoinOrCreateRoom(“ Fighting Room”,options,null);
}

紧接着,我们在StartScene里设置一个UI Button,叫它JoinRoomButton好了,并且在它的OnClick()里面指定调用PhotonManager刚刚已写好的功能JoinGameRoom()。 参考画面如下:

那么,当我们点击JoinRoomButton后,我们怎么知道已经进入Game Room了呢? 此时PUNBehaviour就发挥作用了,我们可以覆盖一个叫OnJoinedRoom的功能,就可以在其中设置一些机制,例如,识别是不是本机玩家? 是不是要给予特殊道具? 是否要载入其他的游戏场景,或者可以准备开始游戏的消息显示之类的〜

 公共重写void OnJoinedRoom() 
{
Debug.Log(“您已进入游戏室!!”);
  //如果是Master Client,即可建立/初始化,与载入游戏场景 
如果(PhotonNetwork.isMasterClient)
{
PhotonNetwork.LoadLevel(“ GameRoomScene”);
}
}

到此,如果我们试着执行游戏,播放,我们会在console看到一行“ 您已进入游戏室!! ”的字串。

是不是感觉好像有点空虚? 但实际上看到这串字,表示我们的起始场景跟Photon Cloud / Server之间已经正常开始连线运作了! 😁👻🤖👏💕

如果连这行字都没有…嗯,没关系,失败为成功之母!
欢迎光临Photon Cloud TW的脸书粉砖发问唷〜

https://www.facebook.com/photoncloudtw/

下一篇,我们会载入游戏场景(Game Room Scene),以及建立一个玩家角色(玩家角色)并控制它的行动。 让我们来约会Unity的范例 玩玩吧〜

下次见〜😁👻🤖👏💕