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

此篇教学中,我们会讲解PUN中的MasterClient / Client要如何跟Photon Cloud连线,玩家角色的生成建立(Spawn Tank)。

程式开始连线时,须注意的事

如上图,在使用PhotonNetwork连接Photon Cloud / Server时,PUN只是会做一些初始动作,所以我们要等待至少已确定连上MasterServer后,才可以加入Room或做其他网路后续动作,否则PUN会告诉我们无法连线或是加入游戏室。
所以我们会须要覆写OnConnectedToMaster后,再把Join Room Button的UI显示出来,等待用户点击后再执行Join Room的动作。

 公共重写void OnConnectedToMaster() 
{
//连上MasterServer后,Button(UI)就可以显示或执行其他后续动作。
Debug.Log(“已连上主服务器”);
}
  //游戏场景载入时触发 
void OnLevelWasLoaded(int levelNumber)
{
如果(!PhotonNetwork.inRoom)返回;

Debug.Log(“已加载游戏场景/已在游戏室内”);
}

执行后,输出步骤会像下面〜

游戏场景

接着,找到GameManager.cs的SpawnAllTanks,这是产生玩家角色(Tank)的地方,我们将其中其中的单机版实例化成PhotonNetwork。实例化网路版的,这样PhotonNetwork才可以在每个客户端的游戏场景中,看到所产生出来的游戏物件(GameObject)。

  //原本的SpawnAllTanks先不用修改 
 私人无效SpawnAllTanks() 
{
//对于所有战车...
对于(int i = 0; i <m_Tanks.Length; i ++)
{
m_Tanks [i] .m_Instance =实例化(m_TankPrefab,m_Tanks [i] .m_SpawnPoint.position,m_Tanks [i] .m_SpawnPoint.rotation)作为GameObject;
m_Tanks [i] .m_PlayerNumber = i + 1;
m_Tanks [i] .Setup();
}
}

我们把各别建立Tank先拆出来,像是SpawnMasterTank,SpawnTank2之类的,之后好分类生成。

  //创建一个坦克,设置其玩家编号和控制所需的参考。 
私人无效SpawnMasterTank()
{
int i = 0;
GameObject坦克= PhotonNetwork.Instantiate(
“ CompleteTank”,
m_Tanks [i] .m_SpawnPoint.position,
m_Tanks [i] .m_SpawnPoint.rotation,
0)作为GameObject;

tank.name =“ MasterTank”;
m_Tanks [i] .m_Instance =坦克;
m_Tanks [i] .m_PlayerNumber = i + 1;
m_Tanks [i] .Setup();

Debug.Log(“ SpawnMasterTank”);
}
 私人无效SpawnTank2() 
{
int i = 1;
GameObject坦克= PhotonNetwork.Instantiate(
“ CompleteTank”,
m_Tanks [i] .m_SpawnPoint.position,
m_Tanks [i] .m_SpawnPoint.rotation,
0)作为GameObject;

tank.name =“ Tank2”;
m_Tanks [i] .m_Instance =坦克;
m_Tanks [i] .m_PlayerNumber = i + 1;
m_Tanks [i] .Setup();

Debug.Log(“ SpawnTank2”);
}

对了,在GameManager.cs里的Start()也要跟着变动,初始化我们刚拆出来的建立坦克的功能。 如下程式码:

 私有void Start() 
{
//创建延迟,因此只需执行一次即可。
m_StartWait =新的WaitForSeconds(m_StartDelay);
m_EndWait =新的WaitForSeconds(m_EndDelay);

如果(!PhotonNetwork.inRoom)
返回;

if(PhotonNetwork.isMasterClient){
SpawnMasterTank();
}其他{
SpawnTank2();
Invoke(“ EnterGameLoop”,3);
}
}

奔跑玩!

之后,用Unity的PlayMode执行看看〜另外一个Client可以使用Build&Run看到执行效果。

在上面的画面中,我们可以看到游戏场景内的角色已经可以动起来了,或许各位以为这没什么,单机上的Local Network本来不就是可以这么搞吗??

实际上,确实是在Unity的播放模式或像上面的画面(跑在Mac的Client)中,其内部的资料讯息传送已经是用Photon Cloud的连线机制在服务了,也就是我们可以跟全球的朋友一起玩这个小游戏了,而不是单纯的在家里或是办公室里跟朋友同事用 👾🎮

到目前总体的Unity项目,最近整理好就会放连结在此,记得回来看唷〜💕

这,就是多人即时连线游戏了,够简单吧?!
未来已掌握在你的手上了,
快把你脑海中所想像的游戏做出来吧〜
我们期待着! 😬👏🏻👻🎮