国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))

這篇具有很好參考價(jià)值的文章主要介紹了項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

加載場(chǎng)景的代碼

本地加載

有許多方法,舉幾個(gè)例子:
本地加載

//本地跳轉(zhuǎn)
using UnityEngine.SceneManagement;
//這個(gè)0是Build Settings面板中場(chǎng)景的順序。(Unity基礎(chǔ)知識(shí))
SceneManager.LoadScene(0);//也有其他方法

本地異步加載(場(chǎng)景內(nèi)容過多時(shí),防止卡頓異步加載)

//本地異步加載(場(chǎng)景內(nèi)容過多,防止卡頓異步加載)
	StartCoroutine("LoadLevel1");
	IEnumerator LoadLevel1()
    {
        loadPanel.SetActive(true);

        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("SampleScene");
        //AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("SampleScene", LoadSceneMode.Additive);
        asyncOperation.allowSceneActivation = false;

        while (!asyncOperation.isDone)
        {
            slider.value = asyncOperation.progress;
            valueText.text = asyncOperation.progress * 100 + "%";
			
			//asyncOperation.progress在0.9時(shí)就已經(jīng)加載完成
            if (asyncOperation.progress >= 0.9f)
            {
                slider.value = 1;
                valueText.text = "按任意鍵開始";

                if (Input.anyKeyDown)
                {
                    asyncOperation.allowSceneActivation = true;
                }
            }
            yield return null;
        }

    }

多人游戲加載場(chǎng)景

pun2插件加載

//PUN2加載
//房主執(zhí)行:
PhotonNetwork.LoadLevel("SceneName");
//其他玩家在開啟自動(dòng)同步場(chǎng)景時(shí)會(huì)跟隨加載
PhotonNetwork.AutomaticallySyncScene = true;

這個(gè)異步加載起初是覺得場(chǎng)景內(nèi)容如果過多會(huì)引起卡頓。所以把這個(gè)應(yīng)用在了單機(jī)模式上。
至于多人游戲加載場(chǎng)景,可能用不到而且也沒法使用這個(gè)異步加載,可以通過pun插件的SetCustomProperties()OnPlayerPropertiesUpdate回調(diào)確保所有人加載完成再開始。


場(chǎng)景內(nèi)容多端同步(真正的游戲多人化)

PUN文檔提到的幾點(diǎn)重要信息

想要做一個(gè)多人游戲,在使用PUN2插件時(shí),完全可以先做好一個(gè)單機(jī)游戲,再對(duì)其進(jìn)行修改。修改時(shí)對(duì)于預(yù)制體不要忘記放在pun規(guī)定的文件夾里。

官方文檔提到的兩個(gè)重要技巧以及其他幾點(diǎn):
在場(chǎng)景中修改實(shí)例后不要忘記apply預(yù)置體。
Time.deltatime保證平滑顯示及多客戶端一致性、不會(huì)因?yàn)槟骋慌_(tái)電腦好幀數(shù)高就會(huì)出現(xiàn)掉血多的情況。
PhotonView組件。是連接多個(gè)客戶端的組件,決定物體的哪些組件需要同步、以及如何同步。
開火狀態(tài)設(shè)置一個(gè)bool isFiring,可以配合gameobject.activeInHierarchy進(jìn)行開火顯示。
發(fā)生碰撞,若需要時(shí)一定判斷photonView.IsMine。判斷collider來源。

官方對(duì)于photonView.IsMine的解釋,通俗易懂。
擁有權(quán)的概念實(shí)現(xiàn)分端控制各自的物體如玩家對(duì)象。公共物體由主客戶端控制。
        /// <summary>
        /// True if the PhotonView is "mine" and can be controlled by this client.
        /// </summary>
        /// <remarks>
        /// PUN has an ownership concept that defines who can control and destroy each PhotonView.
        /// True in case the controller matches the local Player.
        /// True if this is a scene photonview (null owner and ownerId == 0) on the Master client.
        /// </remarks>

場(chǎng)景內(nèi)容多端同步

本篇接下來記錄實(shí)際開發(fā)。
把第一個(gè)游戲(2D向下跑)進(jìn)行多人化。
項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))
相信大家看到這個(gè)界面就知道是怎么個(gè)玩法了。(素材以及源碼參考b站)

保證同時(shí)開始游戲

首先通過Start回調(diào)更改本地玩家的customProperties,把“是否加載完場(chǎng)景”的鍵值對(duì)的值改為true。

        public void Start()//“通知其他人”:我加載好了
        {
            Hashtable props = new Hashtable
            {
                {Const.PLAYER_LOADED_LEVEL, true}
            };
            PhotonNetwork.LocalPlayer.SetCustomProperties(props);//“通知其他人”我加載好了場(chǎng)景
        }

其他玩家會(huì)自動(dòng)執(zhí)行回調(diào)OnPlayerPropertiesUpdate來判斷是否加載完成。

        public override void OnPlayerPropertiesUpdate(Photon.Realtime.Player targetPlayer, Hashtable changedProps)//判斷游戲結(jié)束(通過生命數(shù))||全員加載進(jìn)來(然后開始倒計(jì)時(shí))
        {
            if (changedProps.ContainsKey(Const.PLAYER_LIVES))
            {
                CheckEndOfGame();
                return;
            }

            if (!PhotonNetwork.IsMasterClient)
            {
                return;
            }

            // if there was no countdown yet, the master client (this one) waits until everyone loaded the level and sets a timer start
            int startTimestamp;
            bool startTimeIsSet = CountdownTimer.TryGetStartTime(out startTimestamp);

            if (!isGameStart && changedProps.ContainsKey(Const.PLAYER_LOADED_LEVEL))//有人加載進(jìn)來了
            {
                if (CheckAllPlayerLoadedLevel())//判斷是不是都加載進(jìn)來了
                {
                    if (!startTimeIsSet)//如果沒有設(shè)置時(shí)間,設(shè)置開始計(jì)時(shí)時(shí)間為當(dāng)前時(shí)間
                    {
                        CountdownTimer.SetStartTime();
                    }
                }
                else
                {
                    // not all players loaded yet. wait:
                    Debug.Log("setting text waiting for players! ", this.InfoText);
                    InfoText.text = "等待其他玩家...";
                }
            }

        }

其中CountdownTimer.SetStartTime();是pun官方的計(jì)時(shí)器代碼。
當(dāng)所有玩家全部加載完成后,會(huì)從此刻倒計(jì)時(shí)5s,有GUI提示哦。
5s倒計(jì)時(shí)后則會(huì)觸發(fā)事件,官方demo用的委托設(shè)計(jì)模式。
OnCountdownTimerHasExpired是倒計(jì)時(shí)結(jié)束事件。倒計(jì)時(shí)結(jié)束自然會(huì)執(zhí)行委托中的OnCountdownTimerIsExpired方法。
OnCountdownTimerIsExpired方法中會(huì)啟動(dòng)游戲,生成玩家。

        public override void OnEnable()//添加計(jì)時(shí)委托
        {
            base.OnEnable();
            CountdownTimer.OnCountdownTimerHasExpired += OnCountdownTimerIsExpired;//給委托加一個(gè)方法,這個(gè)方法會(huì)執(zhí)行這里的“開始游戲”
        }

第一個(gè)游戲要額外注意。這5s倒計(jì)時(shí)中,要保證場(chǎng)景中那個(gè)平臺(tái)不會(huì)上升。等到真正倒計(jì)時(shí)結(jié)束后才開始上升。所以需要改一下代碼,5s倒計(jì)時(shí)后isGameStarted = true,根據(jù)這個(gè)變量判斷是否可以上升。


除此以外有好多地方的代碼需要改。
比如確保玩家只控制自己的角色移動(dòng)(通過photonView.IsMine判斷)、死亡后的觀戰(zhàn)而不是重玩一局等。
另外需要把預(yù)制體放在規(guī)定文件夾下。
項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))
另外就是這個(gè)預(yù)制體可以放在規(guī)定文件夾內(nèi)部的子文件中。
藍(lán)色框是規(guī)定路徑,黃色框是根據(jù)需要?jiǎng)?chuàng)建的子文件夾。
實(shí)例化時(shí),預(yù)制體名(string)那個(gè)參數(shù),要寫上路徑就是了。如下:

//常量路徑字符串
public const string PLATFORM_PREFABS_BASEPATH = "PunPlatformGamePrefabs/PlatformPrefabs/";

//實(shí)例化時(shí):platforms[index]:string類型
PhotonNetwork.InstantiateRoomObject(Const.PLATFORM_PREFABS_BASEPATH + platforms[index], spawnPosition, Quaternion.identity);

除了改代碼,最重要的就是不要忘了在預(yù)制體上加入一個(gè)PhotonView組件。
新版pun2插件無需手動(dòng)選擇同步什么組件。選擇AutoFindAll就可以了,還是挺方便的。
項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))

具體的這里不多說了,看官方文檔和demo足夠了。
有疑問歡迎留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-427691.html

到了這里,關(guān)于項(xiàng)目實(shí)訓(xùn)--Unity多人游戲開發(fā)(十一、PUN框架--游戲場(chǎng)景篇(加載與同步))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity2022】Unity多人游戲開發(fā)教程-Netcode for GameObjects-使用命令行啟動(dòng)多人游戲

    【Unity2022】Unity多人游戲開發(fā)教程-Netcode for GameObjects-使用命令行啟動(dòng)多人游戲

    首先亮出文檔,可以直接去看官方文檔。 本文章大部分內(nèi)容來源于官方文檔,另一部分為筆者講解的教程。 如果英語(yǔ)不好,或看不懂文檔的人,可以閱讀本文章。 官方文檔 官方文檔的中文翻譯: 中文翻譯 本教程使用的開發(fā)環(huán)境如下: Windows10 Unity 2022.3.0f1c1 Netcode for GameOb

    2024年02月08日
    瀏覽(35)
  • unity使用PhotonEngine實(shí)現(xiàn)多人聯(lián)機(jī)游戲開發(fā)(一)

    unity使用PhotonEngine實(shí)現(xiàn)多人聯(lián)機(jī)游戲開發(fā)(一)

    先來了解一下PhotonEngine(光子引擎),這是德國(guó)ExitGame公司開發(fā)的網(wǎng)絡(luò)引擎,photonengine簡(jiǎn)單易上手,很多游戲公司開發(fā)的網(wǎng)絡(luò)游戲都是使用的這個(gè)。這個(gè)網(wǎng)絡(luò)引擎里面包括了PhotonCloud(光子云)、photonServer(光子服務(wù)器)、PhotonQuantum(確定性量子引擎)、PhotonVoice(光子語(yǔ)音)

    2024年02月07日
    瀏覽(29)
  • 【Unity2022】Unity多人游戲開發(fā)教程-安裝Netcode for GameObjects

    【Unity2022】Unity多人游戲開發(fā)教程-安裝Netcode for GameObjects

    首先亮出文檔,可以直接去看官方文檔。 本文章大部分內(nèi)容來源于官方文檔,另一部分為筆者講解的教程。 如果英語(yǔ)不好,或看不懂文檔的人,可以閱讀本文章。 官方文檔 官方文檔的中文翻譯: 中文翻譯 本教程使用的開發(fā)環(huán)境如下: Windows10 Unity 2022.3.0f1c1 Netcode for GameOb

    2024年02月11日
    瀏覽(27)
  • Photon Unity Networking 實(shí)時(shí)多人在線游戲開發(fā)解決方案

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 2019年,由英特爾、Facebook等公司聯(lián)合舉辦的GDC大會(huì)上宣布了Unity Technologies將推出一個(gè)新品牌——Unity Game Development Platform(UGDP)。這個(gè)平臺(tái)將包括對(duì)虛幻引擎4、Unreal Engine 4和原生Unity引擎的支持。在這個(gè)平臺(tái)基礎(chǔ)上,Unity Technologies推出了實(shí)時(shí)的多

    2024年02月09日
    瀏覽(34)
  • VR多人協(xié)同(Photon Server & Pun2 & VRIF)

    VR多人協(xié)同(Photon Server & Pun2 & VRIF)

    內(nèi)容介紹: 采用Photon Server作為本地服務(wù)器,然后使用Pun2連接本地服務(wù)進(jìn)行VR多人交互 Photon Server部署 1、下載并解壓: photon-server-sdk_v5-0-12-24499-rc1.zip 2、授權(quán)(因官方授權(quán)問題可以轉(zhuǎn)用V4.0Server:VR多人協(xié)同(多人游戲本地服務(wù)器)(Photon Server V4.0)) 獲取地址: 點(diǎn)擊領(lǐng)取你的

    2024年02月16日
    瀏覽(56)
  • 【Unity 框架】QFramework v1.0 使用指南 工具篇:05. ResKit 資源管理&開發(fā)解決方案 | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨(dú)立游戲

    【Unity 框架】QFramework v1.0 使用指南 工具篇:05. ResKit 資源管理&開發(fā)解決方案 | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨(dú)立游戲

    Res Kit,是資源管理快速開發(fā)解決方案 特性如下: 可以使用一個(gè) API 從 dataPath、Resources、StreammingAssetPath、PersistentDataPath、網(wǎng)絡(luò)等地方加載資源。 基于引用計(jì)數(shù),簡(jiǎn)化資源加載和卸載。 擁抱游戲開發(fā)流程中的不同階段 開發(fā)階段不用打 AB 直接從 dataPath 加載。 測(cè)試階段支持只需打

    2024年02月01日
    瀏覽(58)
  • 【Unity 框架】QFramework v1.0 使用指南 架構(gòu)篇:03. 引入 Command | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨(dú)立游戲

    【Unity 框架】QFramework v1.0 使用指南 架構(gòu)篇:03. 引入 Command | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨(dú)立游戲

    我們回顧一下目前的代碼,如下; 現(xiàn)在,數(shù)據(jù)共享的問題通過 引入 Model 解決了。 這里再次強(qiáng)調(diào)一下,需要共享的數(shù)據(jù)放 Model 里,不需要共享的,能不放就不放。 雖然引入了 Model,但是這套代碼隨著項(xiàng)目規(guī)模的發(fā)展還是有很多的問題。 其中最嚴(yán)重也最常見的就是 Controller

    2024年02月06日
    瀏覽(27)
  • 【Unity 框架】QFramework v1.0 使用指南 工具篇:13. 其他事件工具 | Unity 游戲框架 | Unity 游戲開發(fā) | Unity 獨(dú)立游戲

    QFramework 除了支持了 TypeEventSystem、EasyEvent 還支持了 EnumEventSystem、StringEventSystem。 EnumEventSystem 前身是 老版本 QFramework 的 QEventSystem StringEventSystem 的前身是,老版本的 MsgDispatcher TypeEventSystem: 事件體定義簡(jiǎn)潔 比較適合用于設(shè)計(jì)框架 支持 struct 獲得較好內(nèi)存性能 使用反射,CPU

    2023年04月17日
    瀏覽(26)
  • Unity聯(lián)網(wǎng)多人游戲技術(shù)方案調(diào)研

    Unity聯(lián)網(wǎng)多人游戲技術(shù)方案調(diào)研

    Listen Server (Host) 和 Relay轉(zhuǎn)發(fā)服務(wù)器游戲包同時(shí)包含客戶端和服務(wù)端邏輯,聯(lián)網(wǎng)時(shí)一個(gè)客戶端開主,稱為Host,其他客戶端連入。局域網(wǎng)和互聯(lián)網(wǎng)都支持?;ヂ?lián)網(wǎng)需要有一個(gè)匹配服務(wù)器幫助找到不同人建立的主機(jī)。如果不使用Relay服務(wù)器,那對(duì)于互聯(lián)網(wǎng)連接就要使用NAT穿透下的

    2023年04月09日
    瀏覽(41)
  • [游戲開發(fā)][Unity]Assetbundle打包與資源加載框架

    我會(huì)分三個(gè)篇章寫整個(gè)框架分別是: AB打包篇 AB下載篇 AB加載篇 整個(gè)框架內(nèi)容比較多,屬于企業(yè)級(jí)方案,涉及到增量打包、打包策略、AB包下載、邊玩邊下、資源管理系統(tǒng),資源加載系統(tǒng)等功能。 Unity小白看本系列文章可能比較吃力。如果我哪里寫的不好,影響理解了,歡迎

    2024年02月13日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包