此篇教学中,我们会讲解PUN中的MasterClient / Client要如何跟Photon Cloud连线,玩家角色的生成建立(Spawn Tank)。
程式开始连线时,须注意的事
如上图,在使用PhotonNetwork连接Photon Cloud / Server时,PUN只是会做一些初始动作,所以我们要等待至少已确定连上MasterServer后,才可以加入Room或做其他网路后续动作,否则PUN会告诉我们无法连线或是加入游戏室。
所以我们会须要覆写OnConnectedToMaster后,再把Join Room Button的UI显示出来,等待用户点击后再执行Join Room的动作。
- 迷你评论:对还是错?
- 如何与两个人组成的团队一起制作零预算的手机游戏,并在Google Play上大放异彩
- 游戏开发人员– Eye Motion亚美尼亚办事处
- 在线临场的十诫
- 如何在AppStore上成功 Ryan McLeod的技巧—黑盒
公共重写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项目,最近整理好就会放连结在此,记得回来看唷〜💕
这,就是多人即时连线游戏了,够简单吧?!
未来已掌握在你的手上了,
快把你脑海中所想像的游戏做出来吧〜
我们期待着! 😬👏🏻👻🎮