Photon | PUN基础教程

从本章开始,系统学习Photon的网络编程。PUN作为Photon对Unity定制化的网络编程方案,得到了开发者的一致好评,因此,根据官方教程系统学习PUN是必要的,这样可以加深对Unity网络编程的理解,从而使用起来游刃有余。

文 / 丁建雄
图 /

小白是单纯为兴趣而写作的独立创作人,如果您喜欢小白的文章,欢迎关注、交流、分享(引用请链接到本文)。

  1. 创建AppId,可以通过官网免费申请。这样,我们就得到了一个可以同时容纳20人的云应用服务空间。

  2. 连接服务器、房间访问和创建。这是联网的基础内容,可以通过一个空对象挂载Launcher脚本实现。其中,Launcher脚本包含了版本、链接、回调函数等基础内容,可以作为标准化的对象嵌入到任何新的网络应用中。

  3. 创建UI系统,从简单的UI系统中,学会用户交互,通过用户输入控制网络。

  4. 使用简单数据存储PlayerPrefs系统,通过UI控件,对玩家的基本信息进行存储交互。

  5. 通过LoadScene()可以进行多场景之间的调用,这种调用可以通过场景号码或者场景名称来调用。

  6. 场景管理器:用于管理场景之间的连接、切换、交互等功能,是一个比较通用的模块,可以作为一个预制件处理。

  7. 自定义的脚本可以看成一个自定义的组件,通过组件挂靠到具体的实例(Object)的方法,可以将脚本发挥作用;有些单纯的脚本发挥作用的可以通过挂载在空对象上实现功能。

  8. 网络编程需要对各种网络操作流程有较深的理解,比如一个简单的流程:连接服务器 - 将本机作为主机设置游戏空间网络 - 在网络建好之后的回调函数中执行创建并进入房间的方法 - 在进入房间之后的回调函数中加载游戏场景 - 游戏场景切换逻辑与进出房间的脚本挂靠。这样以后,就完成了单纯的基本网络架构。

  9. 建立玩家系统:首先考虑的是模型,然后是动画逻辑,然后是控制语句,接着是场景优化(包括相机跟随,姿态优化等),后面还有对战交互系统等更复杂逻辑的构建。

  10. 这里面都是很深入的部分,学习的基本思路是先在本地实现,然后加入网络编程,这样可以快速定位bug,提高效率。

代码注意点1

  1. 习惯于用log来确保每一个可能的错误都被提取到,虽然很枯燥,但是却有利于长远打算。
  2. Time.deltaTime是使得FixedUpdate真正活起来的幕后方法,如果要脱离帧率存在,可以在Update中使用这个方法定制新功能。
  3. Trigger与Collision的区别与联系:都可以检测碰撞,只不过Trigger方法不发生物理行为,而Collision方法可以实现全部的物理属性。
  4. 联网同步:变换同步组件+动画同步组件,同时可以设置同步帧率特性(与本机帧率不同)。
  5. 加上PhotonNetwork.Connected == true作为判断条件,可以允许用户本地测试而不影响联网效果。

代码注意点2

  1. 使用IpunObservable.OnPhotonSerializeView重构方法可以实现对本地 / 网络玩家实时数据的分离、同步等功能。
  2. 所有Application的内容都过时了,使用SceneManager新方法可以管理,具体查找Standard Events的示例。
  3. 使用Static方法可以保证本地玩家的唯一性,同时需要使用this指针将实例连接到static变量中。
  4. DontDestroyOnLoad(this.gameObject)方法可以保证有玩家退出时不对场景内其他玩家造成销毁的影响。

你可能感兴趣的:(Photon | PUN基础教程)