开启左侧

[教程] VR多人联机坦克开发系列二

本帖最后由 安弟 于 2017-11-30 20:32 编辑
本篇介绍在Unity中,我们将会如何与Photon Cloud建立联机,以及加入网络化的游戏场景的前置作业的操作步骤.

与Photon Cloud Service 建立联机               
我们已在上一篇教学中建立好Photon Server的信息了,现在我们直接建立一个空的游戏场景,先叫它“StartScene”就好.并且保存在Asset→TanksPUN底下,方便往后的游戏项目管理.  

Main Camera我们选用Solid Color就好.所以目前的设定应该会像下面:
2.0.png

建立Game Session(with Photon Cloud)              
我们在场景中建立一个空的GameObject,叫PhotonManager,可以做为这个游戏场景的游戏管理者,因为它只会也只能有一个,所以我们将其设定成Singleton Object的型式.(这里先做最简单的处理,详细的Singleton用法不在此系列之中~)

现在,在TanksPUN底下建立个Scripts ,这里方便以后存放我们这个项目的程序,并在其中建一个新的C# script叫“PhotonManager”,初始内容如下:

  1. using UnityEngine;
  2. using System.Collections;

  3. public class PhotonManager : Photon.PunBehaviour {
  4.     public static PhotonManager instance;

  5.     void Awake()
  6.     {
  7.         if(instance != null)
  8.         {
  9.             DestroyImmediate(gameObject);
  10.             return;
  11.         }
  12.         DontDestroyOnLoad(gameObject);
  13.         instance = this;
  14.     }
  15. }
复制代码
把这个PhotonManager.cs拉到Scene中的PhotonManager(GameObject)里;注意看唷,它不是继承MonoBehaviour,而是Photon.PunBehaviour ,因为这个元件之后是用来跟Photon Cloud/Server沟通用的,而PUN已经帮我们在PunBehaviour里面设定了有很多方便使用以及必要用的Events,CallBack Functions让我们运用,所以之后我们还会在它里面override一些适用于我们开发的游戏网络功能.   

处理好Awake()后,接下来是要跟Photon Cloud建立联机了,最简单的方式就是直接在GameManager中的Start()使用下面的script.

  1. void Start () {
  2.         PhotonNetwork.ConnectUsingSettings("TanksPUN_v1.0");
  3. }
复制代码
这个ConnectUsingSettings会自动使用我们之前已设定好的Photon Services Setting的值(AppID,Hosting,Protocol…)作为信息传到Photon Cloud里.

并且,我们加上了一组字串信息TanksPUN_v1.0 ,这主要是用来让Photon Server知道我们虽然连上的是同款游戏(AppID是一样的),但可能是不同的版本,这样我们以后就可以处理新旧程序版本的兼容性问题,对不同版本可以有不同的联机或是数据处理方式.

Create or Join Game Room               
在PhotonNetwork中建立游戏室(Game Room)时须要一些简单的设定,像是最大多少人能玩,这个游戏室是不是隐藏的,或是它是不是关闭的状态等;               
再来是,在PUN中使用JoinOrCreateRoom时,如果这个游戏室还没有建立与初始化,那PhotonNetwork就会帮我们先建立游戏室,以后要加入此游戏室的人就可以直接用游戏室的名称,并且用同样的呼叫方式就可以找到已经建立好的游戏室并直接进入.               
现在,我们先来设定一个游戏室中的最大容许玩家为四人就好,就像下面:
  1. public void JoinGameRoom()
  2. {
  3.     RoomOptions options = new RoomOptions();
  4.     options.MaxPlayers = 4;
  5.     PhotonNetwork.JoinOrCreateRoom("Fighting Room", options, null);
  6. }
复制代码
紧接着,我们在StartScene里设置一个UI Button,叫它JoinRoomButton好了,并且在它的OnClick()里面指定呼叫PhotonManager刚刚已写好的功能JoinGameRoom().参考画面如下:
2.1.png
Join Room Button → OnClick() → PhotonManager.JoinGameRoom()


那么,当我们按下JoinRoomButton后,我们怎么知道已经进入Game Room了呢?此时PUNBehaviour就发挥作用了,我们可以Override一个叫OnJoinedRoom的功能,就可以在其中设定一些机制,例如,识别是不是本机玩家?是不是要给予特殊道具?是否要加载其它的游戏场景,或是可以准备开始游戏的信息显示之类的~
  1. public override void OnJoinedRoom()
  2. {
  3.     Debug.Log("您已進入遊戲室!!");
  4.     // 如果是Master Client, 即可建立/初始化,與載入遊戲場景
  5.     if (PhotonNetwork.isMasterClient)
  6.     {
  7.         PhotonNetwork.LoadLevel("GameRoomScene");
  8.     }
  9. }
复制代码
到此,如果我们试着执行游戏,Play ,我们会在console看到一行“您已进入游戏室!!”的字串.               
是不是感觉好像有点空虚?但其实看到这串字,表示我们的起始场景跟Photon Cloud/Server之间已经正常开始联机运作了!!
回复

发表于 2017-11-30 17:13:46 使用道具 举报

精彩评论2

话说楼主帖子的背景怎么搞的?好骚包的感觉。
回复

发表于 2017-12-4 01:00:13 使用道具 举报

夜舞的精灵 发表于 2017-12-4 01:00
话说楼主帖子的背景怎么搞的?好骚包的感觉。

抹布背景 在高级里
回复

发表于 2017-12-4 21:37:19 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

威望28

懵币4620

帖子75

发布主题
阅读排行

下载盗梦APP

关注盗梦极客
一起玩转VR

© 2015 盗梦极客 | VR虚拟现实达人社区 | VR资源及VR眼镜教程 黑ICP备15006149号 VR新手指引 联系我们