Photon | PUN基礎(chǔ)教程

從本章開始,系統(tǒng)學(xué)習(xí)Photon的網(wǎng)絡(luò)編程。PUN作為Photon對Unity定制化的網(wǎng)絡(luò)編程方案,得到了開發(fā)者的一致好評,因此,根據(jù)官方教程系統(tǒng)學(xué)習(xí)PUN是必要的,這樣可以加深對Unity網(wǎng)絡(luò)編程的理解,從而使用起來游刃有余。

文 / 丁建雄
圖 /

小白是單純?yōu)榕d趣而寫作的獨立創(chuàng)作人,如果您喜歡小白的文章,歡迎關(guān)注、交流、分享(引用請鏈接到本文)。

  1. 創(chuàng)建AppId,可以通過官網(wǎng)免費申請。這樣,我們就得到了一個可以同時容納20人的云應(yīng)用服務(wù)空間。

  2. 連接服務(wù)器、房間訪問和創(chuàng)建。這是聯(lián)網(wǎng)的基礎(chǔ)內(nèi)容,可以通過一個空對象掛載Launcher腳本實現(xiàn)。其中,Launcher腳本包含了版本、鏈接、回調(diào)函數(shù)等基礎(chǔ)內(nèi)容,可以作為標(biāo)準(zhǔn)化的對象嵌入到任何新的網(wǎng)絡(luò)應(yīng)用中。

  3. 創(chuàng)建UI系統(tǒng),從簡單的UI系統(tǒng)中,學(xué)會用戶交互,通過用戶輸入控制網(wǎng)絡(luò)。

  4. 使用簡單數(shù)據(jù)存儲PlayerPrefs系統(tǒng),通過UI控件,對玩家的基本信息進行存儲交互。

  5. 通過LoadScene()可以進行多場景之間的調(diào)用,這種調(diào)用可以通過場景號碼或者場景名稱來調(diào)用。

  6. 場景管理器:用于管理場景之間的連接、切換、交互等功能,是一個比較通用的模塊,可以作為一個預(yù)制件處理。

  7. 自定義的腳本可以看成一個自定義的組件,通過組件掛靠到具體的實例(Object)的方法,可以將腳本發(fā)揮作用;有些單純的腳本發(fā)揮作用的可以通過掛載在空對象上實現(xiàn)功能。

  8. 網(wǎng)絡(luò)編程需要對各種網(wǎng)絡(luò)操作流程有較深的理解,比如一個簡單的流程:連接服務(wù)器 - 將本機作為主機設(shè)置游戲空間網(wǎng)絡(luò) - 在網(wǎng)絡(luò)建好之后的回調(diào)函數(shù)中執(zhí)行創(chuàng)建并進入房間的方法 - 在進入房間之后的回調(diào)函數(shù)中加載游戲場景 - 游戲場景切換邏輯與進出房間的腳本掛靠。這樣以后,就完成了單純的基本網(wǎng)絡(luò)架構(gòu)。

  9. 建立玩家系統(tǒng):首先考慮的是模型,然后是動畫邏輯,然后是控制語句,接著是場景優(yōu)化(包括相機跟隨,姿態(tài)優(yōu)化等),后面還有對戰(zhàn)交互系統(tǒng)等更復(fù)雜邏輯的構(gòu)建。

  10. 這里面都是很深入的部分,學(xué)習(xí)的基本思路是先在本地實現(xiàn),然后加入網(wǎng)絡(luò)編程,這樣可以快速定位bug,提高效率。

代碼注意點1

  1. 習(xí)慣于用log來確保每一個可能的錯誤都被提取到,雖然很枯燥,但是卻有利于長遠打算。
  2. Time.deltaTime是使得FixedUpdate真正活起來的幕后方法,如果要脫離幀率存在,可以在Update中使用這個方法定制新功能。
  3. Trigger與Collision的區(qū)別與聯(lián)系:都可以檢測碰撞,只不過Trigger方法不發(fā)生物理行為,而Collision方法可以實現(xiàn)全部的物理屬性。
  4. 聯(lián)網(wǎng)同步:變換同步組件+動畫同步組件,同時可以設(shè)置同步幀率特性(與本機幀率不同)。
  5. 加上PhotonNetwork.Connected == true作為判斷條件,可以允許用戶本地測試而不影響聯(lián)網(wǎng)效果。

代碼注意點2

  1. 使用IpunObservable.OnPhotonSerializeView重構(gòu)方法可以實現(xiàn)對本地 / 網(wǎng)絡(luò)玩家實時數(shù)據(jù)的分離、同步等功能。
  2. 所有Application的內(nèi)容都過時了,使用SceneManager新方法可以管理,具體查找Standard Events的示例。
  3. 使用Static方法可以保證本地玩家的唯一性,同時需要使用this指針將實例連接到static變量中。
  4. DontDestroyOnLoad(this.gameObject)方法可以保證有玩家退出時不對場景內(nèi)其他玩家造成銷毀的影響。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,236評論 3 119
  • This article is a record of my journey to learn Game Deve...
    蔡子聰閱讀 4,129評論 0 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • 2016, 還有25個小時,就成為了歷史。對于一個念舊的人來說,忍不住回想這一年,咂摸著時光的味道。 如果你問我,...
    某天雨天閱讀 395評論 0 0
  • 我總認(rèn)為在內(nèi)地的音樂里面,做的最出色,最有成績的是民謠。 很多歌曲都有中國的味道在里面,已經(jīng)可以自成風(fēng)格而區(qū)別于像...
    青檸左岸閱讀 769評論 1 5

友情鏈接更多精彩內(nèi)容