• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            的筆記

            隨時隨地編輯

            游戲能力預測概述(機器翻譯版)

            游戲能力預測概述(機器翻譯版)

            高級別目標:

            在GameplayAbility級別(實施能力)預測是透明的。說一個能力“Do X> Y-> Z”,我們會自動預測我們可以做的部分。
            我們希望避免在能力本身中有諸如“如果權限:做X否則:X的預測版本”的邏輯。

            在這一點上,并不是所有的案例都得到解決,但是我們有一個非常堅實的框架來處理客戶端預測。

            當我們說“客戶端預測”時,我們真的意味著客戶端預測游戲模擬狀態。事情仍然可以“完全是客戶端”,而不必在預測系統中工作。
            例如,腳本完全是客戶端,不會與此系統交互。但是,當他們施放法術時,預測法術力從100到90的客戶是“客戶端預測”。

            我們目前預測的是什么?
            活力激活

            • 觸發事件
              -GameplayEffect應用程序:
              -Attribute修改(EXCEPTIONS:執行當前不預測,只有屬性修飾符)
              -GameplayTag修改
            • 游戲提示事件(均來自預測游戲效果和自己)

            -Montages

            • 運動(內置于UE4 UCharacterMovement)

            有些事情我們無法預測(我們大多數可能,但目前還沒有):
            -GameplayEffect刪除
            -GameplayEffect定期效果(點滴)

            我們試圖解決的問題:
            “我可以做嗎?”基本預測協議。
            2.“撤消”當預測失敗時如何撤消副作用。
            3.“重做”如何避免重播本地預測的副作用,但也可從服務器復制。
            4.“完整性”如何確定我們/真的/預測所有的副作用。
            5.“依賴關系”如何管理依賴預測和預測事件鏈。
            6.“覆蓋”如何預先覆蓋狀態,否則由服務器復制/擁有。


            實施細節

            PredictionKey

            該系統中的一個基本概念是預測鍵(FPredictionKey)。它自己的預測鍵只是在客戶端的中心位置生成的唯一ID。客戶端將其預測密鑰發送到服務器,
            并與預測動作和副作用相關聯。服務器可以對預測密鑰進行接受/拒絕來響應,并且還將服務器端創建的副作用與該預測密鑰相關聯。

            (重要)FPredictionKey始終復制客戶端 - >服務器,但是當復制服務器 - >客戶端時,它們首先將發送預測密鑰的客戶端復制到服務器。
            這在FPredictionKey :: NetSerialize中發生。當從客戶端發送的預測密鑰通過復制的屬性被復制時,所有其他客戶端將接收到無效(0)預測密鑰。

            能力激活

            能力激活是一流的預測行動。每當客戶端預測性地激活能力時,他明確地要求服務器和服務器明確地做出響應。一旦有了能力
            預測性地激活,客戶端具有有效的“預測窗口”,其中預測性副作用可能發生,這些未明確地被“詢問”。 (例如,我們沒有明確提出“我可以減少法力,我可以嗎
            把這個能力放在冷卻時間。這些行為被認為是邏輯原子的,激活一個能力)。

            AbilitySystemComponent提供了一組用于在客戶端和服務器之間進行通信能力激活的功能:TryActivateAbility - > ServerTryActivateAbility - > ClientActivateAbility(Failed / Succeed)。

            1.客戶端調用TryActivateAbility生成新的FPredictionKey并調用ServerTryActivateAbility。
            2.客戶端繼續(在從服務器回來之前),并使用與能力的ActivationInfo關聯的生成的PredictionKey調用ActivateAbility。
            在ActivatAbility調用之前/之前發生的任何副作用/生成的FPredictionKey與它們相關聯。
            4.服務器決定ServerTryActivateAbility中是否發生了這種能力,調用ClientActivateAbility(Failed / Succeed),并將UAbilitySystemComponent :: ReplicatedPredictionKey設置為已發送的生成的密鑰。
            5.如果客戶端接收到ClientAbilityFailed,則立即殺死該能力并回滾與預測密鑰相關聯的副作用。
            5A。 “回滾”通過FPredictionKeyDelegates和FPredictionKey :: NewRejectedDelegate / NewCaughtUpDelegate / NewRejectOrCaughtUpDelegate完成。

            在TryActivateAbility中注冊回調:

            //如果此PredictionKey被拒絕,我們將調用OnClientActivateAbilityFailed。
            ThisPredictionKey.NewRejectedDelegate()。BindUObject(this,&UAbilitySystemComponent :: OnClientActivateAbilityFailed,Handle,ThisPredictionKey.Current);

            在ClientActivateAbilityFailed_Implementation中調用回調函數:
            FPredictionKeyDe

            posted on 2017-05-10 11:31 的筆記 閱讀(360) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲AV不卡| 久久精品国产亚洲av影院| 国产精品va久久久久久久| 久久91精品国产91久久麻豆| 精品久久久久久99人妻| 无码人妻少妇久久中文字幕| 精品人妻久久久久久888| 国产999精品久久久久久| 精品久久人人爽天天玩人人妻| 久久精品国产亚洲一区二区| 久久精品国产一区二区三区不卡| 精品久久人妻av中文字幕| 久久久久久久综合综合狠狠| 久久国产精品99精品国产| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 伊人久久大香线蕉综合热线| 91精品国产高清久久久久久io | 久久中文字幕无码专区| 久久久久久久波多野结衣高潮| 天天久久狠狠色综合| 久久夜色精品国产欧美乱| 精品国产91久久久久久久a| 久久久久人妻一区精品色| 中文成人久久久久影院免费观看 | 人人狠狠综合久久亚洲高清| 热99re久久国超精品首页| 亚洲国产精品久久久天堂| 亚洲午夜精品久久久久久浪潮| 国产精品青草久久久久福利99| 国产精品久久免费| 国产精品久久久久AV福利动漫| 亚洲AV无码久久精品色欲| 久久无码AV中文出轨人妻| 国产欧美久久久精品影院| 尹人香蕉久久99天天拍| 久久婷婷国产剧情内射白浆| 亚洲欧美久久久久9999 | 精品久久一区二区| 成人国内精品久久久久一区| 97久久精品无码一区二区| 狠狠色婷婷综合天天久久丁香|