久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

UE5 GameplayAbility 源碼剖析:生命周期、標(biāo)簽與網(wǎng)絡(luò)策略

UE5 GameplayAbility 源碼剖析:生命周期、標(biāo)簽與網(wǎng)絡(luò)策略 1. 為什么值得把 GameplayAbility 的源碼翻個(gè)底朝天第一次接觸 UE5 的 GameplayAbility 系統(tǒng)很多人是被一堆宏和虛函數(shù)勸退的。UGameplayAbility這個(gè)類看著不大但真正翻開(kāi)源碼會(huì)發(fā)現(xiàn)它牽扯到 AbilitySystemComponent、GameplayTag、AttributeSet、GameplayEffect、AbilityTask 一整條鏈路。我最初做技能系統(tǒng)時(shí)也是照著教程抄能跑起來(lái)就收工結(jié)果遇到“技能打斷后冷卻沒(méi)清”“被動(dòng)技能重復(fù)觸發(fā)”“預(yù)測(cè)回滾導(dǎo)致表現(xiàn)錯(cuò)位”這類問(wèn)題時(shí)完全不知道從哪下手只能靠試。后來(lái)逼著自己把GameplayAbility.h/.cpp從頭讀了一遍很多之前覺(jué)得玄乎的行為一下就說(shuō)得通了。這篇內(nèi)容就是把我讀源碼、踩坑、重構(gòu)技能系統(tǒng)的過(guò)程整理出來(lái)。核心圍繞UGameplayAbility 的源碼定義展開(kāi)它到底定義了哪些生命周期鉤子、哪些狀態(tài)標(biāo)志、哪些可重寫的接口這些接口在什么時(shí)機(jī)被誰(shuí)調(diào)用調(diào)用時(shí)機(jī)的差異會(huì)帶來(lái)什么實(shí)際后果。適合已經(jīng)能跑通基礎(chǔ) GAS 流程、但想搞清楚“為什么這樣寫”的中高級(jí)開(kāi)發(fā)者也適合正準(zhǔn)備把項(xiàng)目里那套手寫技能邏輯遷移到 GAS 的同學(xué)。讀完之后你至少能做到看到一個(gè)技能需求知道該重寫哪個(gè)函數(shù)、該在哪個(gè)階段加邏輯、哪些坑是源碼層面就注定要避開(kāi)的。我不會(huì)逐行貼源碼那樣沒(méi)意義源碼會(huì)隨版本變。我講的是結(jié)構(gòu)和契約這個(gè)類對(duì)外承諾了什么、內(nèi)部維護(hù)了什么狀態(tài)、和外部系統(tǒng)怎么交互。這些是跨版本相對(duì)穩(wěn)定的東西也是你真正需要記住的部分。2. 先搞清楚 UGameplayAbility 在整套系統(tǒng)里的位置2.1 它不是一個(gè)“技能腳本”而是一份能力契約很多人對(duì) GameplayAbility 的第一誤解是把它當(dāng)成“一個(gè)技能的具體實(shí)現(xiàn)”。實(shí)際上它更像一份能力契約它聲明“我這份能力需要什么標(biāo)簽才能激活、激活后要授予哪些標(biāo)簽、消耗什么、冷卻多久、網(wǎng)絡(luò)策略是什么”而具體“打出去是什么效果”往往交給 GameplayEffect 和 AbilityTask 去完成。源碼里UGameplayAbility的成員變量大致可以分成幾類理解這個(gè)分類比記住具體字段名重要得多。第一類是配置數(shù)據(jù)AbilityTags、CancelAbilitiesWithTag、BlockAbilitiesWithTag、ActivationOwnedTags、ActivationRequiredTags、ActivationBlockedTags、CostGameplayEffectClass、CooldownGameplayEffectClass等。這些是你在藍(lán)圖或數(shù)據(jù)資產(chǎn)里填的東西決定了能力的“準(zhǔn)入條件”和“副作用標(biāo)簽”。第二類是運(yùn)行時(shí)狀態(tài)bIsActive、bIsCancelable、bIsBlockingOtherAbilities、bIsEndAbilityCalled、RemoteInstanceEnded等布爾標(biāo)志以及CurrentActorInfo、CurrentSpecHandle、CurrentActivationInfo這些“當(dāng)前這次激活”的上下文句柄。這里是最容易出問(wèn)題的地方因?yàn)橐淮文芰赡鼙欢啻渭せ畋热邕B發(fā)每次激活的上下文是獨(dú)立的。第三類是實(shí)例化策略相關(guān)InstancingPolicyNonInstanced / InstancedPerActor / InstancedPerExecution和NetExecutionPolicyLocalOnly / LocalPredicted / ServerOnly / ServerInitiated。這兩個(gè)枚舉直接決定了對(duì)象的生命周期和網(wǎng)絡(luò)行為是源碼里大量分支判斷的根源。提示讀源碼時(shí)先看頭文件的成員分組再看 cpp 里的ActivateAbility、CommitAbility、EndAbility、CallActivateAbility這幾個(gè)函數(shù)的調(diào)用關(guān)系基本就能把主干理清。不要一上來(lái)就鉆GameplayAbilitySpec和AbilitySystemComponent的細(xì)節(jié)容易迷路。2.2 實(shí)例化策略決定了你重寫的函數(shù)能不能存住狀態(tài)InstancingPolicy是源碼里影響最大的一個(gè)配置因?yàn)樗鼪Q定了UGameplayAbility對(duì)象本身是不是“每次激活一份”。NonInstanced 意味著整個(gè)類型只有一份 CDO 級(jí)別的實(shí)例所有激活共享它你不能在里面存任何“這次激活專屬”的成員變量InstancedPerActor 是每個(gè) Actor 一份可以存跨激活的狀態(tài)但同一時(shí)刻多次激活會(huì)共享InstancedPerExecution 是每次執(zhí)行一份最安全但開(kāi)銷最大。源碼里UGameplayAbility::GetInstancingPolicy被AbilitySystemComponent::TryActivateAbility反復(fù)查詢用來(lái)決定是復(fù)用已有實(shí)例還是DuplicateObject一份新的。這就解釋了一個(gè)經(jīng)典現(xiàn)象你在 NonInstanced 能力里寫了個(gè)成員變量記錄“第幾次連擊”結(jié)果發(fā)現(xiàn)所有角色共享同一個(gè)計(jì)數(shù)器連擊數(shù)亂跳。不是引擎有 bug是你在契約上就用錯(cuò)了策略。我的經(jīng)驗(yàn)是純一次性、無(wú)內(nèi)部狀態(tài)的技能用 NonInstanced比如簡(jiǎn)單的瞬發(fā)傷害需要跨激活保存狀態(tài)但同一 Actor 不會(huì)并發(fā)激活的用 InstancedPerActor比如蓄力、連招可能并發(fā)激活或需要嚴(yán)格隔離的用 InstancedPerExecution比如投射物回調(diào)、多段持續(xù)效果。這個(gè)選擇在源碼層面沒(méi)有“自動(dòng)糾正”選錯(cuò)了就是選錯(cuò)了運(yùn)行時(shí)才暴露。2.3 網(wǎng)絡(luò)執(zhí)行策略在源碼里是怎么分流的NetExecutionPolicy的分支散落在ActivateAbility的調(diào)用鏈里。LocalPredicted 是最常用的它的邏輯是客戶端先本地預(yù)測(cè)執(zhí)行同時(shí)通知服務(wù)器服務(wù)器執(zhí)行后通過(guò)GameplayAbilitySpec的預(yù)測(cè)鍵做回滾校正。源碼里CallActivateAbility會(huì)根據(jù)GetNetExecutionPolicy和GetNetSecurityPolicy判斷當(dāng)前端該不該真正跑ActivateAbility以及要不要走預(yù)測(cè)窗口。這里有個(gè)容易被忽略的點(diǎn)預(yù)測(cè)執(zhí)行下ActivateAbility可能在客戶端和服務(wù)器各跑一次所以你在里面寫的邏輯必須能承受“跑兩遍”。比如你在ActivateAbility里直接SpawnActor一個(gè)特效客戶端跑一次、服務(wù)器跑一次服務(wù)器通常不渲染但對(duì)象還是生成了如果沒(méi)做NetMode判斷或沒(méi)走 GameplayCue就會(huì)出現(xiàn)重復(fù)生成或服務(wù)器空耗。源碼不會(huì)幫你攔這個(gè)它只負(fù)責(zé)按策略調(diào)用副作用得你自己管。3. 生命周期鉤子源碼里那幾個(gè)必須記住的調(diào)用點(diǎn)3.1 從 TryActivateAbility 到 ActivateAbility 的完整鏈路理解生命周期關(guān)鍵是記住這條鏈外部調(diào)用AbilitySystemComponent::TryActivateAbility或TryActivateAbilityByClass/TryActivateAbilitiesByTagASC 做一系列檢查標(biāo)簽、冷卻、消耗、是否已激活、是否被阻塞通過(guò)后調(diào)用UGameplayAbility::CallActivateAbility再由它調(diào)用你重寫的ActivateAbility。CallActivateAbility里還夾著PreActivate、設(shè)置bIsActive、處理OnAbilityActivated回調(diào)等動(dòng)作。源碼里CallActivateAbility大致做了這些事檢查bIsActive防止重入、調(diào)用PreActivate內(nèi)部會(huì)設(shè)置當(dāng)前 ActorInfo 和激活信息、根據(jù)網(wǎng)絡(luò)策略決定是否CommitAbility、然后調(diào)用虛函數(shù)ActivateAbility。注意CommitAbility的時(shí)機(jī)在不同策略下不一樣這直接影響“消耗和冷卻是在技能真正開(kāi)始前扣還是開(kāi)始后扣”。如果你在ActivateAbility里先做了一段前置判斷再想提交消耗得清楚CommitAbility可能已經(jīng)被調(diào)用過(guò)了。我實(shí)際項(xiàng)目里遇到過(guò)一個(gè)典型問(wèn)題技能需要“確認(rèn)目標(biāo)合法后才扣藍(lán)”但默認(rèn)流程里CommitAbility在ActivateAbility之前就跑了導(dǎo)致目標(biāo)非法時(shí)藍(lán)已經(jīng)扣了。解決辦法不是去改引擎而是在ActivateAbility里先做校驗(yàn)非法就EndAbility并配合bReplicateEndAbility處理或者干脆把消耗邏輯從CostGameplayEffect挪到技能內(nèi)部手動(dòng)ApplyGameplayEffect。源碼給了你鉤子但沒(méi)義務(wù)替你做業(yè)務(wù)判斷。3.2 ActivateAbility 里該做什么、不該做什么ActivateAbility是你重寫得最多的函數(shù)它的簽名帶四個(gè)參數(shù)Handle、ActorInfo、ActivationInfo、TriggerEventData。源碼約定這個(gè)函數(shù)是“能力真正開(kāi)始執(zhí)行”的入口但它不負(fù)責(zé)結(jié)束結(jié)束要靠你顯式調(diào)用EndAbility。這是新手最容易漏的一點(diǎn)寫了ActivateAbility但忘了在所有分支調(diào)EndAbility結(jié)果能力一直處于 active 狀態(tài)后續(xù)再也激活不了。源碼里EndAbility會(huì)做清理設(shè)置bIsActive false、移除ActivationOwnedTags、清理 AbilityTask、廣播結(jié)束回調(diào)、處理預(yù)測(cè)回滾。所以任何“開(kāi)始”都必須配對(duì)“結(jié)束”。我的習(xí)慣是在ActivateAbility開(kāi)頭就規(guī)劃好所有可能的退出路徑成功路徑、失敗路徑、被打斷路徑每條路徑都確保走到EndAbility。對(duì)于持續(xù)型技能通常用 AbilityTask 的回調(diào)來(lái)觸發(fā)結(jié)束而不是在ActivateAbility里同步結(jié)束。另一個(gè)源碼層面的細(xì)節(jié)ActivateAbility里不要做重活。它運(yùn)行在游戲線程的關(guān)鍵路徑上而且預(yù)測(cè)模式下會(huì)跑多次。重活應(yīng)該拆到 AbilityTask 里異步做或者交給 GameplayEffect 的周期執(zhí)行。源碼設(shè)計(jì) AbilityTask 就是為了把“跨幀的、需要等待的”邏輯從ActivateAbility里剝離出去。3.3 EndAbility 的參數(shù)不是隨便填的EndAbility的簽名里有bReplicateEndAbility和bWasCancelled兩個(gè)布爾。源碼里這兩個(gè)參數(shù)影響很大bReplicateEndAbility決定結(jié)束是否同步到其他端bWasCancelled決定走的是“正常結(jié)束”還是“取消結(jié)束”的回調(diào)分支。很多網(wǎng)絡(luò)同步問(wèn)題就出在這兩個(gè)參數(shù)填錯(cuò)。比如一個(gè) LocalPredicted 技能在客戶端被玩家主動(dòng)取消你調(diào)EndAbility(true, true)服務(wù)器收到取消后會(huì)走取消清理但如果你填EndAbility(false, true)服務(wù)器可能根本不知道客戶端結(jié)束了導(dǎo)致服務(wù)器側(cè)能力還掛著。源碼不會(huì)校驗(yàn)?zāi)愕囊鈭D它只按參數(shù)執(zhí)行。我的做法是封裝一個(gè)項(xiàng)目?jī)?nèi)的EndAbilitySafe輔助函數(shù)把常見(jiàn)的幾種結(jié)束場(chǎng)景正常完成、被取消、預(yù)測(cè)失敗的參數(shù)組合固定下來(lái)避免每個(gè)技能各寫各的。注意EndAbility內(nèi)部有bIsEndAbilityCalled之類的防重入保護(hù)但不要依賴它來(lái)兜底。重復(fù)調(diào)用雖然可能被攔但調(diào)用前的副作用比如你已經(jīng)手動(dòng)移除的標(biāo)簽不會(huì)回滾。結(jié)束邏輯要冪等這是源碼給不了你的紀(jì)律。4. 標(biāo)簽系統(tǒng)與能力交互源碼里的匹配規(guī)則4.1 AbilityTags 與 ActivationRequiredTags 的區(qū)別源碼里和標(biāo)簽相關(guān)的字段有好幾組最容易混的是AbilityTags和ActivationRequiredTags。前者是“我這個(gè)能力身上貼的標(biāo)簽”用于被其他能力查詢、被CancelAbilitiesWithTag匹配后者是“激活我需要的標(biāo)簽”是準(zhǔn)入條件。兩者方向相反一個(gè)是“我是什么”一個(gè)是“我需要什么”。ActivationBlockedTags是“擁有這些標(biāo)簽時(shí)我不能激活”ActivationOwnedTags是“我激活期間授予這些標(biāo)簽”。源碼在DoesAbilitySatisfyTagRequirements里統(tǒng)一做這套判斷邏輯是先檢查 blocked有就拒絕再檢查 required缺就拒絕。這個(gè)順序意味著 blocked 優(yōu)先級(jí)高于 required設(shè)計(jì)標(biāo)簽時(shí)要考慮這個(gè)優(yōu)先級(jí)帶來(lái)的行為。我踩過(guò)的坑是給一個(gè)“沉默”狀態(tài)加了ActivationBlockedTags包含Ability.Skill結(jié)果發(fā)現(xiàn)某些技能還是能放。排查后發(fā)現(xiàn)那些技能的AbilityTags里沒(méi)打Ability.Skillblocked 匹配的是能力自身的標(biāo)簽不是它授予的標(biāo)簽。源碼里 blocked 檢查用的是AbilityTags以及GetAssetTags所以標(biāo)簽體系要統(tǒng)一規(guī)劃不能東一個(gè)西一個(gè)。4.2 CancelAbilitiesWithTag 的連鎖取消在源碼里怎么走CancelAbilitiesWithTag讓一個(gè)能力激活時(shí)自動(dòng)取消掉帶指定標(biāo)簽的其他能力。源碼里這個(gè)邏輯在ActivateAbility成功后的OnAbilityActivated附近觸發(fā)通過(guò) ASC 遍歷當(dāng)前激活的能力列表匹配標(biāo)簽后調(diào)用對(duì)方的CancelAbility。CancelAbility內(nèi)部會(huì)調(diào)EndAbility(true, true)也就是帶取消標(biāo)記的結(jié)束。這里有個(gè)連鎖反應(yīng)要注意A 取消 BB 的結(jié)束邏輯里如果又觸發(fā)了 C 的取消會(huì)形成級(jí)聯(lián)。源碼沒(méi)有深度限制理論上可以一直鏈下去。實(shí)際項(xiàng)目里我見(jiàn)過(guò)因?yàn)闃?biāo)簽設(shè)計(jì)成環(huán)導(dǎo)致取消風(fēng)暴的案例表現(xiàn)是幀率驟降。規(guī)避辦法是標(biāo)簽設(shè)計(jì)保持單向取消關(guān)系畫成有向無(wú)環(huán)圖別讓兩個(gè)能力互相取消。另外CancelAbilitiesWithTag只在激活瞬間生效一次不是持續(xù)監(jiān)聽(tīng)。如果你需要“某標(biāo)簽出現(xiàn)時(shí)持續(xù)壓制其他能力”那要用ActivationBlockedTags配合標(biāo)簽的授予與移除而不是指望 cancel 字段。4.3 標(biāo)簽匹配的層級(jí)語(yǔ)義源碼里標(biāo)簽匹配默認(rèn)是層級(jí)匹配Ability.Skill.Fire會(huì)匹配查詢Ability.Skill。這個(gè)語(yǔ)義在FGameplayTagContainer::HasTag系列函數(shù)里實(shí)現(xiàn)GAS 大量使用HasTag而非精確相等。這意味著你設(shè)計(jì)標(biāo)簽時(shí)可以利用層級(jí)做批量控制比如給所有火系技能打Ability.Skill.Fire然后一個(gè)“禁火”效果授予Ability.Skill.Fire到 blocked 里就能一次性禁掉所有火系。但層級(jí)匹配也有反直覺(jué)的地方HasTag是“容器里有沒(méi)有這個(gè)標(biāo)簽或其子標(biāo)簽”而HasTagExact才是精確匹配。源碼里不同地方用的函數(shù)不一樣讀的時(shí)候要留意。比如某些查詢用 exact某些用層級(jí)混用會(huì)導(dǎo)致“明明打了標(biāo)簽卻不生效”。我的建議是項(xiàng)目?jī)?nèi)統(tǒng)一約定能力標(biāo)簽用層級(jí)匹配做分類狀態(tài)標(biāo)簽用精確匹配做開(kāi)關(guān)減少歧義。5. 消耗、冷卻與 CommitAbility 的源碼細(xì)節(jié)5.1 CommitAbility 到底提交了什么CommitAbility這個(gè)名字容易誤解成“提交技能”其實(shí)它提交的是消耗和冷卻。源碼里它依次調(diào)用CommitAbilityCost和CommitAbilityCooldown前者應(yīng)用CostGameplayEffectClass后者應(yīng)用CooldownGameplayEffectClass。兩個(gè)都可以重寫K2_CommitAbilityCost/K2_CommitAbilityCooldown或?qū)?yīng)的 C 虛函數(shù)來(lái)做自定義判斷。關(guān)鍵點(diǎn)在于CommitAbility返回 bool表示消耗和冷卻是否都成功提交。源碼里CallActivateAbility會(huì)根據(jù)返回值決定是否繼續(xù)。如果你重寫了CommitAbilityCost并在里面做了“藍(lán)不夠就返回 false”的判斷那么ActivateAbility根本不會(huì)被調(diào)用。這個(gè)機(jī)制很適合做“資源不足直接拒絕”的場(chǎng)景比在ActivateAbility里判斷更早、更干凈。但要注意CommitAbility默認(rèn)在ActivateAbility之前調(diào)用具體取決于網(wǎng)絡(luò)策略和調(diào)用路徑所以你在ActivateAbility里看到的“已經(jīng)扣過(guò)費(fèi)”的狀態(tài)是正常的。想改成“先執(zhí)行后扣費(fèi)”得重寫調(diào)用順序或繞開(kāi)默認(rèn)提交這屬于進(jìn)階改造要謹(jǐn)慎評(píng)估對(duì)預(yù)測(cè)回滾的影響。5.2 冷卻的授予與查詢是兩套機(jī)制源碼里冷卻不是UGameplayAbility自己維護(hù)的計(jì)時(shí)器而是通過(guò)CooldownGameplayEffectClass應(yīng)用一個(gè)帶Cooldown標(biāo)簽和時(shí)長(zhǎng)設(shè)置的 GameplayEffect然后查詢時(shí)用CheckCooldown去問(wèn) ASC“這個(gè)能力的冷卻標(biāo)簽還在不在”。也就是說(shuō)冷卻是標(biāo)簽驅(qū)動(dòng)的不是能力內(nèi)部狀態(tài)。這個(gè)設(shè)計(jì)的好處是冷卻可以被外部修改比如減 CD 的效果直接改 GE 時(shí)長(zhǎng)或移除標(biāo)簽壞處是你不能簡(jiǎn)單地在能力里讀一個(gè)RemainingCooldown字段。源碼里GetCooldownTimeRemaining是通過(guò)查詢冷卻 GE 的剩余時(shí)間算出來(lái)的。理解這一點(diǎn)你才能正確實(shí)現(xiàn)“冷卻縮減”“冷卻暫?!边@類需求——它們本質(zhì)是在操作那個(gè)冷卻 GE而不是操作能力對(duì)象。我見(jiàn)過(guò)有人為了做“擊殺重置冷卻”在能力里存了個(gè)時(shí)間戳自己算結(jié)果和 GAS 的冷卻標(biāo)簽體系打架出現(xiàn)“顯示可放但實(shí)際放不出”。正確做法是找到冷卻 GE 的 handleRemoveActiveGameplayEffect掉它讓標(biāo)簽消失冷卻自然歸零。5.3 消耗失敗時(shí)的回滾邊界預(yù)測(cè)模式下客戶端先扣費(fèi)、服務(wù)器可能拒絕源碼通過(guò)預(yù)測(cè)鍵做回滾。但回滾的邊界是“GAS 管理的 GE 和標(biāo)簽”你手動(dòng)在ActivateAbility里改的屬性、生成的對(duì)象GAS 不一定能幫你回滾。所以消耗相關(guān)的邏輯盡量走CostGameplayEffectClass讓框架管自定義的副作用要么做成 GE要么自己實(shí)現(xiàn)預(yù)測(cè)回滾接口。提示調(diào)試?yán)鋮s和消耗問(wèn)題時(shí)先打開(kāi)showdebug abilitysystem看當(dāng)前標(biāo)簽和激活的 GE比在代碼里打斷點(diǎn)快得多。源碼的行為在調(diào)試視圖里基本都能對(duì)上。6. AbilityTask把跨幀邏輯從 ActivateAbility 里剝離6.1 AbilityTask 在源碼里的生命周期綁定AbilityTask 是UGameplayAbility體系里負(fù)責(zé)“等待”的組件源碼里它繼承自UObject通過(guò)NewAbilityTask創(chuàng)建并綁定到當(dāng)前能力實(shí)例。它的生命周期跟著能力走能力EndAbility時(shí)會(huì)EndTask所有關(guān)聯(lián)任務(wù)。這個(gè)綁定關(guān)系在源碼里通過(guò)Ability指針和TaskOwner維護(hù)任務(wù)里訪問(wèn)Ability要判空因?yàn)槟芰赡芟扔谌蝿?wù)結(jié)束。ActivateAbility里創(chuàng)建任務(wù)后通常要調(diào)ReadyForActivation才會(huì)真正開(kāi)始執(zhí)行。源碼里這個(gè)調(diào)用會(huì)觸發(fā)任務(wù)的Activate然后任務(wù)在合適的時(shí)機(jī)廣播委托比如OnCompleted你在委托回調(diào)里繼續(xù)技能邏輯或結(jié)束能力。這個(gè)“創(chuàng)建-就緒-回調(diào)”的模式是 GAS 異步邏輯的標(biāo)準(zhǔn)寫法比自己在ActivateAbility里寫 Tick 或定時(shí)器干凈得多。我實(shí)際用下來(lái)AbilityTask 最大的價(jià)值是讓技能邏輯可組合。一個(gè)“等待目標(biāo)選擇”的任務(wù)、一個(gè)“等待動(dòng)畫蒙太奇結(jié)束”的任務(wù)、一個(gè)“等待投射物命中”的任務(wù)可以像積木一樣拼。源碼里官方提供的任務(wù)AbilityTask_WaitTargetData、AbilityTask_PlayMontageAndWait、AbilityTask_WaitGameplayEvent等就是范例讀它們的實(shí)現(xiàn)比讀文檔更能學(xué)會(huì)怎么自定義任務(wù)。6.2 自定義 AbilityTask 的源碼級(jí)注意事項(xiàng)寫自定義任務(wù)時(shí)源碼里有幾個(gè)約定必須遵守。第一任務(wù)要聲明bSimulatedTask或處理網(wǎng)絡(luò)復(fù)制否則預(yù)測(cè)端和服務(wù)器端行為不一致。第二任務(wù)結(jié)束要調(diào)EndTask并且處理好“能力已結(jié)束但任務(wù)回調(diào)還在飛”的競(jìng)態(tài)。第三委托廣播前要檢查ShouldBroadcastAbilityTaskDelegates源碼里這個(gè)函數(shù)會(huì)判斷能力是否還有效。我寫過(guò)一個(gè)“等待范圍內(nèi)敵人進(jìn)入”的任務(wù)最初沒(méi)處理能力提前結(jié)束的情況結(jié)果玩家在等待期間取消技能任務(wù)回調(diào)仍然觸發(fā)訪問(wèn)了已失效的Ability指針導(dǎo)致崩潰。后來(lái)在回調(diào)里加了IsValid(Ability)和ShouldBroadcastAbilityTaskDelegates()雙重判斷才穩(wěn)。這類問(wèn)題源碼不會(huì)替你防因?yàn)槿蝿?wù)和能力的生命周期是解耦的你得自己維護(hù)這個(gè)契約。6.3 任務(wù)與預(yù)測(cè)回滾的配合預(yù)測(cè)模式下任務(wù)在客戶端和服務(wù)器可能各跑一份回滾時(shí)客戶端的任務(wù)會(huì)被取消重建。源碼里通過(guò)AbilityTask的預(yù)測(cè)鍵和OnDestroy回調(diào)處理這個(gè)。自定義任務(wù)如果持有外部狀態(tài)比如已經(jīng)生成的 Actor要在OnDestroy里清理否則回滾后會(huì)殘留。這塊是 GAS 里最復(fù)雜的部分我的建議是能用官方任務(wù)就用官方任務(wù)它們已經(jīng)處理好了預(yù)測(cè)細(xì)節(jié)必須自定義時(shí)先在非預(yù)測(cè)ServerOnly 或 LocalOnly模式下驗(yàn)證邏輯再逐步開(kāi)預(yù)測(cè)測(cè)試。別一上來(lái)就 LocalPredicted 加自定義任務(wù)出問(wèn)題很難定位是邏輯錯(cuò)還是預(yù)測(cè)錯(cuò)。7. 常見(jiàn)問(wèn)題排查與實(shí)操避坑清單7.1 能力激活了但沒(méi)反應(yīng)怎么按源碼順序排查遇到“調(diào)了 TryActivateAbility 但技能沒(méi)動(dòng)靜”按源碼的檢查順序倒推最快。ASC 的TryActivateAbility大致依次檢查能力是否已存在、是否已激活bIsActive、標(biāo)簽要求是否滿足blocked/required、冷卻是否就緒、消耗是否可支付、網(wǎng)絡(luò)策略是否允許當(dāng)前端執(zhí)行。任何一環(huán)失敗都會(huì)靜默返回 false。我的排查順序是先看bIsActive是不是上次沒(méi)結(jié)束再看標(biāo)簽用調(diào)試視圖看 blocked/required 的實(shí)際匹配再看冷卻 GE 是否還掛著最后看網(wǎng)絡(luò)策略和NetSecurityPolicy。這套順序基本能覆蓋八成“沒(méi)反應(yīng)”的問(wèn)題。源碼里這些檢查都有對(duì)應(yīng)的日志分類開(kāi)LogAbilitySystem的 Verbose 能看到具體哪一步拒絕的。7.2 技能結(jié)束后狀態(tài)殘留的典型原因狀態(tài)殘留通常有三類來(lái)源。第一類是ActivationOwnedTags沒(méi)被移除原因往往是EndAbility沒(méi)被調(diào)用或者調(diào)用了但bReplicateEndAbility填錯(cuò)導(dǎo)致某端沒(méi)同步。第二類是 AbilityTask 沒(méi)結(jié)束任務(wù)還在監(jiān)聽(tīng)事件能力卻已經(jīng)結(jié)束。第三類是手動(dòng)應(yīng)用的 GE 沒(méi)清理尤其是你自己ApplyGameplayEffect但沒(méi)存 handle 的情況。源碼層面EndAbility會(huì)移除ActivationOwnedTags并結(jié)束任務(wù)但不會(huì)清理你手動(dòng)應(yīng)用的 GE。所以項(xiàng)目里我強(qiáng)制約定所有手動(dòng)應(yīng)用的 GE 必須存 handle在OnEndAbility或OnRemoveAbility里統(tǒng)一清理。這個(gè)約定寫進(jìn)代碼規(guī)范后狀態(tài)殘留問(wèn)題少了一大半。7.3 預(yù)測(cè)回滾導(dǎo)致表現(xiàn)錯(cuò)位的處理思路預(yù)測(cè)回滾錯(cuò)位最典型的表現(xiàn)是客戶端技能特效放了服務(wù)器判定沒(méi)命中特效卻不會(huì)消失。根源是特效走了普通 Spawn 而不是 GameplayCue。源碼里 GameplayCue 是專門為預(yù)測(cè)設(shè)計(jì)的回滾時(shí)會(huì)自動(dòng)處理表現(xiàn)的撤銷。所以所有技能表現(xiàn)盡量走 GameplayCue這是 GAS 的既定契約。如果必須用普通 Actor 做表現(xiàn)那要在任務(wù)或能力的回滾回調(diào)里手動(dòng)銷毀。源碼里UGameplayAbility有OnPredictiveAbilityFailed之類的鉤子不同版本名字略有差異可以在里面做清理。但手動(dòng)清理永遠(yuǎn)不如 GameplayCue 穩(wěn)能走 Cue 就走 Cue。7.4 常見(jiàn)問(wèn)題速查表現(xiàn)象源碼層面的可能原因排查動(dòng)作技能無(wú)法激活標(biāo)簽 blocked/required 不滿足或冷卻未就緒開(kāi)調(diào)試視圖看標(biāo)簽與冷卻 GE技能激活后立即結(jié)束ActivateAbility某分支提前調(diào)了EndAbility檢查所有退出路徑連擊計(jì)數(shù)錯(cuò)亂NonInstanced 策略下存了實(shí)例狀態(tài)改用 InstancedPerActor/PerExecution客戶端有特效服務(wù)器沒(méi)有表現(xiàn)未走 GameplayCue預(yù)測(cè)未同步遷移表現(xiàn)到 GameplayCue冷卻顯示可放但放不出自定義冷卻與 GE 冷卻體系沖突統(tǒng)一用冷卻 GE 管理取消技能后標(biāo)簽殘留EndAbility參數(shù)填錯(cuò)或未調(diào)用檢查bReplicateEndAbility/bWasCancelled任務(wù)回調(diào)訪問(wèn)空指針能力先結(jié)束任務(wù)未判空回調(diào)加IsValid與廣播檢查7.5 幾條源碼閱讀的實(shí)操心得讀UGameplayAbility源碼我的建議是帶著問(wèn)題讀別通讀。先挑一個(gè)你項(xiàng)目里最復(fù)雜的技能從它的ActivateAbility出發(fā)順著調(diào)用鏈往上追到TryActivateAbility往下追到EndAbility把這條鏈上的每個(gè)函數(shù)都看一遍比泛讀十遍有用。第二善用調(diào)試視圖和日志源碼行為在運(yùn)行時(shí)都能觀察到別純靠腦補(bǔ)。第三注意版本差異GAS 在不同引擎版本間有 API 調(diào)整網(wǎng)上老教程的字段名可能已經(jīng)變了以你本地引擎源碼為準(zhǔn)。最后分享一個(gè)我自己的習(xí)慣每讀一個(gè)關(guān)鍵函數(shù)就在項(xiàng)目里寫一個(gè)最小復(fù)現(xiàn)的測(cè)試技能專門驗(yàn)證這個(gè)函數(shù)的行為。比如讀CommitAbility就寫個(gè)技能故意讓消耗失敗看流程怎么走。這種“讀一段驗(yàn)一段”的方式比讀完再統(tǒng)一驗(yàn)證記得牢得多也更容易發(fā)現(xiàn)文檔沒(méi)寫的邊界行為。源碼是死的你把它跑起來(lái)、改一改、看反應(yīng)它才真正變成你的東西。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日日碰狠狠添天天爽超| 日日干男人的天堂| 久久久久久十| 少妇蹲下买菜露大唇0| 欧美,日韩,中文,另类| 欧美精品自慰系列寂寞少妇| 天天综合-91入口| 欧美日韩免费专区在线| 新版天堂中文资源8在线| 亚洲天天操| 久久香蕉超碰97国产精品| 亚洲一区二区三区欧美日韩| 国产一区二区在线播放量| 久草成人| 97在线亚洲| 欧亚不卡| 亚洲蜜臀懂色| 中文字幕丝袜美腿| 青青欧美在线| 日韩黄色成人性爱| 日本操大逼| 欧美欧美啪啪视频| 91肉丝| 国产少妇高潮| 久久久精品一区二区| 日韩亚洲美女一区久久| 国产中文字幕曰本毛片| 校园春色制服丝袜中文字亚洲| 精品国产一级久久| 韩国一级婬片A片无码天美| 怡红院一区二区熟女人妻| 小电影欧美91| 久草老司机| 一二三四视频在线社区中文字幕| 97久久综合网| 久久香蕉国产传媒一区剧情天美| 五月天我淫我色av| 国语人妻精彩刺激| 三级色影综合网| 国产精品久久久久久久电影渣男| 伊人网在线视频| 成人无码在线超碰网| 欧美一区二区在线资源| 日韩av免费一级电影| 亚洲天堂,男人| 国产又黄又爽| 99超碰网| 亚州色阁| 中文在线久久字幕| 亚洲av影院在线观看| 亚洲国产精品久久久男人的天堂| 日韩av在线播放不卡| 98久久| 狠狠色一区二区中文字幕| 国产成人拍国产亚洲精品| 蜜臀在线看片| 国内一区二区三区| 91操操操操| 国产原创精品| 爱我干综合| 性色AV网站| 亚洲骚逼少妇| AV天堂因数| 精品人人| 日本一级性爱| 丁香九月激情啪| 国产亚州高清国产拍精| 亚洲欧美日韩精品久久久一区二区| 黄页av| 骚日日av| 91插B网站| 青青色综合| 大奶啊啊好爽 | 欧美影音在线| 亚洲污一污二| 精品一二三区四视频| 少妇第一页| 久久五月份| 操操啪| 色优久久| 夜夜操夜夜爽夜夜高潮| 麻豆天美传媒在线视频天堂| 久超碰在| 夜夜 中文视频rt| 欧美丝袜美女电影一二三四区| 亚洲国产精品久久久男人的天堂| 欧美色66| 9999亚洲电影| 91中文字幕在线观看| 97在线欧| 91国模| 欧洲色综合| 夜夜欧美| 国产精品久久久无码AV网站| 加勒比大香蕉视频在线| 久久精品老司| 午夜一区| 影音先锋国产精品| 欧美视频第二页| 99日视频在线免费| 在线日韩日本亚洲国产| 93人人操人人| 91n美女视频| 亚洲精品不卡一二三区| 亚洲欧美小说| 操逼视频亚洲| 亚洲欧洲久久天堂| 欧美熟妇成人一区二区| 色噜噜人妻av 中文字幕| 亚洲欧洲第二视频在线观看色图| 激情色图| 天天看,天天做| 亚洲怡春院| 校园春色AV天堂| 亚洲国产欧美另类自拍| 九九热精品| 99热国产精品| 国产又粗又长又爽又色| 精品妇操一区二区三区| 多乙久久久久久| 免费农村成人少妇人妻Aa一区二区视频| 97一区二压| 欧美天天| 亚洲综合小视频小说在线观看| 60秒免费小视频| 日韩熟女精一区二区三区不卡| 一区二区三区 日韩欧美| 欧美久久婷婷| 先锋色眉乱伦资源| 精久久久| TS人妖另类精品视频系列 | J?P?NESEHD熟女熟妇伦| 亚洲欧美爆| 中国操逼无码| 高精欧美色| 能看的AV| 91蜜臀在线久久久久| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91肉片| 欧美99热| 国产女大学生AV| 蜜桃久久精品一区二区三区| 一区二区三区精品久久| 女人久久久| 色第一页| 中文字暮97| 黄片视频,下载| 日韩中文9| 久热无码| 凹凸视频特色日本特黄| 中文人妻av高清一区| 超碰欧美97资源| 久久久久久午夜男人的天堂| www.色婷婷.com| 家庭乱伦性爱av| 日韩性爱长视频免费| asc国产精品| 色性欧美| 中文字幕超碰CAO| 伊人久操| 日韩一区二区精品视频| 加勒比色99999| 亚洲精品视频二区| 熟女乱伦A| 精国久久一区二区三区98| 免费操逼视频下载| 国产精品白领在线观看| 欧美日韩妖精91com| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 91肉片| 国产欧美日本亚洲精品 | 国产白丝网站| 97精品一二区| 丰满高潮18xxxx| 啊啊啊慢点| 国产又大又粗又长视频在线| 亚洲一本色码中文字幕| 东京热天堂网| 综合久久欧美| 9118禁| 天天爱天天操| 在线啊v一区| 国产老太乱伦一区| 婷婷久草| 影音资源男人日韩| AV中文字幕剧情1区2区3| 99国产人成精品| 久久精品国产亚洲AV片多多 | 日韩激情电影中文字幕| 中文字幕人妻丝袜乱一区三区| 青草香蕉网| julia中文字幕在线观看| 日韩人妻精品久久久久| 欧美性爱另类综合| 日本www操操操| 欧美 日韩 亚洲 春色| 中文字幕在线免费观看 | 天美AV片| 日日夜夜干| 久久草大香蕉| 婷婷久草| 亚洲激情综合| 国产欧美第五页| 99热这里是精品| 人妻精品一区二区在线| 久久国内| 日本高清_区二区三区| 国产美女销魂在线观看不卡| 三级特黄60分钟播放| 性爱网站一区二区| 在线无码视频| 激情丁香婷婷| 欧美黑人性猛交91| 日韩精品人妻系列无码天堂| 天天日天天射天天干| 欧美日日夜夜| 亚av顶级裸体一区二区三区四区五区 | 嗯嗯啊啊用力视频免费| 亚洲一二三精品久久网| 国产天天看| 日本精品性生活久久久| 少妇蹲下买菜露大唇0| 啊啊啊水好多| 日本操逼视频在线| 天天插夜夜操| 思思热免费视频观看| 欧美第二页午夜| 中国黄色特级精品一区二区三区片| 大乔未久88一区| 色呦色呦色精品| 蜜区区视频79 | 色婷婷影视| 一二三四免费视频| 国产成人精品午夜福利| aV中文麻| 午夜视频久久久久一区| 大香蕉手机视频| 国产嫩草精品A88AV在线| 另类av天堂| 中出在线视频| 搡老女人老91妇女老熟女| 国产JDAV无码视频在线观看| 国产家庭乱伦网址| 色 婷97| 中文字幕精品三级久久久| 91热热色| 久久天天艹| 日本一级性爱| 亚洲人91| 国产精品不卡一区二区电影| 少妇厨房愉情理伦片bd在线观看| 蜜桃臀久久| 内射小黄片| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 午夜寂寞欧美| 夜夜操天| 亚欧美色| 国产成人www免费人成看片| 亚洲五月婷婷| 玖玖爱伊人玖玖爱| 爱妃国产亚洲视频中文字幕| 天美av在线观看| 新视频sss国产| 91狠狠综| 性色一线| 日韩啪啪视频| 人人色人人操在线| 久久偷偷色综合蜜桃| 国产高清亚洲日韩一区| 夜夜嗨一区二区三区三州加勒比 | 一起草精品人妻| 欧美三级一级| 欧美超碰在线| 69综合网| 宅男影院久久久,99| 另类综合另类| 五十路三区在线| 强奸a片网| 综合97亚洲| 男女日B国产| 九九热免费国产视频婷婷伊人五月 | 日韩在线人妻网站| 日韩免费av片高清无码| 91 丝袜在线| 中国操逼无码| 熟女自慰久久久| 欧美日韩97| 丁香五月天激情| 加勒比性爱成人在线| 大屁股人妻女教师撅着屁股| 大香蕉 222| 一区二区影视| 国产丝袜视频| 2017亚洲天堂| 人妻夜夜爽天天爽麻豆三区网站| 91黑人狂躁丰满熟妇| 五月激情啪啪| 精品亚洲天堂| 按摩中文字幕| 人人操人人干xxx| 亚洲三级网址久久最新| 日本色色视频网站| 97草草| 亚洲各类熟们中文字幕| 中文字幕视频二区| 久久久久无码| 天天操天天干一区二区 | 无码 有码 国产18p| 男人精品天堂一区| 成人福利视频网| 亚洲少妇免费视频\| 人人做人人妻人人夜视频| 日本孕妇孕交| 精品久久99| 91 天天综合| 日韩熟女精品无码专区一区二区| 三男一女不戴套的A片| 欧亚乱色熟一区二区三四区| 国产精品久久久久久无码红治院| 欧美高清在线| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 蜜桃臀av一区二区| 99这里有精品| 亚洲欧洲日韩国产自在线| 夜夜嗨一区| 韩国女主播青草福利视频| 涩综合导航| 亚洲熟女偷拍在线观看| 婷婷五月天小说| 国产乱伦亚洲色图高清无码| 懂色影视久久| 国产AV天美| 操逼国产免费| 淫荡网址| 婷婷激情四射| 97bbn| 久久久婷婷| 五十路六十路七十路熟婆| 综合激情一一91| 日本三级久| 操逼天美3区| 欧美天天综合网版| 伊人久久大香蕉线AV五月天| 激情综合亚洲| 成人激情无码在线视频| 蜜臀久久99精品久久久久久无删减 | 红桃视频高潮| 亚洲日韩成人性爱视频| 边做饭边操逼逼| 国产精品禁久久久精品| 久久久久9999妇女| 国产原创精品| 狠狠狠狠狠狠| 中日高清无码操逼视频| AV网站高清无码在线观看| 操婷婷逼| 国产51色综合久久免费| 狠狠操狠狠操操| 天堂亚洲精品| 九一国产精品| 久久动漫精品视频这里只有精品| 超碰激情808| 五月婷婷综合网| 欧美日韩国产色图在线| 免费一级a毛片久久久久久鸭绿欲| 亚洲女人91| 国产后入清纯| 亚洲一区制服诱惑| 久久99精品国产| 久草综合京东| 欧美熟女激情| 欧美熟女激情| 精品无码一二三四区| 国产不卡精品91| 超碰97精品在线| 丰满岳乱妇一区二区三区| 亚洲精品免费中文字幕| 一区二区三区国产在线播放| 伊人麻豆传媒| 中文字幕一二三| 国产精品操| 激情在线青青操| 亚洲天堂一区二区| 国产成人精品午夜福利| 激情情色五月天| 二三四区精品| 少妇激情AV| 天天日天天干天天摸天天操| 97超碰9| 精品无吗m| 国产91丝袜 在线播放| 囯产乱伦一区二区三女| 国产日逼视频| 欧美性爱综合,免费| 97欧美日韩精品| 亚洲91射| 国产97av| 国产在线播放成人免费| 亚洲欧洲成人在线电影| 岛国1区2区3区在线观看| 欧美人与动性人交a| 成人午夜高潮av猛片| 成人午夜高潮av猛片| 吖在线不卡一区二区国产剧情| 少妇熟女1区2区3区| 欧美激情另类一区二区| 亚洲乱码国产乱码精网站| 97人人模人人爽人人| 日本欧美成人片AAAA| 亚洲一区二区三区久久 亚洲一区二区| 亚洲精品视频二区| 国产美女精品| 四虎在线视频| 26uuu久久| 操逼逼福利视频| 五月天激情小说| 亚洲天堂自拍| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久久免费懂色| 国产suv精品一区二六| 99夜夜操| 午夜理论片在线观看免费| 国产成人+综合亚洲+天堂| 91 国产丝袜在线放观看| 白丝在线一区| 亚洲综合另类| 国产树林里野战在线看| 久久久99久9| 蜜臀av网址| 麻豆天美传媒毛片| 最新日韩黄片| 欧美 亚洲 综合 制服 另类| 久久夜夜| 99熟女| 欧美少妇性乱| 久青草影院| 精品美女久久一二三| 久久日韩肥臀| 亚洲一卡2卡3卡4卡乱码网站 | 欧美天天综合站| 久久系列| 日韩中文字幕视频在线观看| 99RE在线视频精品,这里只有精品| 精品少妇高潮久久| a v网站在线播放| 骚乳在线| 大JI巴好深好爽又大又粗视频| 操比国产| 天天综合网~91综合网| 少妇人妻太紧太深av| 国产成人亚洲精品自产在线| 人妻丰满熟妇av无码区蜜桃| 无码人妻精品一区二区中文| 欧亚日韩三区| 青娱乐999| 色综合一区二区三巨| 天堂亚洲精品| 国产无套粉嫩白浆在| 日韩电影天堂视频一区二区| 久久亚洲国产成人| 伊人大香蕉在线| 精品一区二区三区麻豆| 操碰97| 死我十八禁| 亚洲强奸乱伦影视网| 亚洲精品白丝| 嫖老熟女A片一二三区| 96久久久精品| 黄色视频特级毛片| 久久久久久裸体| 国产精品香蕉热久久新品| 一区二区三区成人| 蜜乳AV网址| 天天影视之亚洲综合网| 91人人臊| 熟妇色99| 久久极品一区二区| 操逼A∨| 亚洲淫色网中文| 超碰色美女| 欧美三级偷拍| 欧美疯狂做爰xxxx| 婷婷五月天AV| 91人妻素女| 人妻少妇久久中文| 久久草在线综合视频| 男人的天堂kva| 99激情视频| 日韩15p| 另类图片五月| 日韩一区二区精彩视频| 久日91在线| 夜夜一区二区| 天天综合影院91| 麻花豆传媒剧国产MV出差| 狠狠色一区二区中文字幕| 综合97| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 欧美白嫩在线放| 亚洲欧美综合区自拍另类| 国模91| 日本福利社| 日韩一级二级三级免费看完整版| 国产乱人妻精品入口| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 色色色999| 人人操人人93| 校园春色欧美| 国产白嫩精品久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 91日韩国产欧美亚洲另类精盘州至城都| 欧美性猛交美女自慰91| 国产三级多多影院2022国产AA一级毛片无码 | 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 日韩天天本| 色婷婷小说| 免费观看国产小粉嫩喷水精品午| 99rre在线精品99re8| 97大色网| 九九九九久久久| 丰满人妻一区二区三区四区| 日韩啪啪视频| 男人天堂久久精品不卡| 人人操天天爽| 久久草草欧美精品| www.av在线观看| 日韩一区二区精彩视频| 91综合网在线| 超碰久草| 97视频新免费| 国产一区二区三区久久精品太古里| 婷婷在线精品| 操逼逼福利视频| 91AV入口| 97天天日| 超碰无码五月97| 婷婷六月色| 91精品人妻一品二品三品| JuliaAnn丝袜熟女系列| 欧美天天在线| 内射夫妻三片| 亚洲色综合| 青青草日本中文字幕| 日韩天天综合| 91社操逼| 91红杏| 欧美成va视频网站| 国产夜夜操| 玖玖爱综合网| av绯色| 欧美 亚洲 大香| 欧美综合色,www| 99re公开精品免费视频| 国产精品肉丝自拍| 欧美美女视频| 大香蕉综合在线| 色在线69堂| 久久成人国产精品| 日韩美女久久一区二区三区| 婷婷国产精品一区二区| 色噜噜精品一区二区三| 久9久9精品| 精品日韩人妻视频| 热天堂一区二区| 久久一区二区蜜桃| 99热伊人| 97超碰伊人| 亚洲欧美日韩精品久| 亚洲老司机123专区| 亚洲欧美情色| 色色色综合网| 男人的天堂1024| 日韩性爱高清免费视频| 人人摸人人舔一区二区| 国产成人精品无码久久| 2017大香蕉国产精品久久| 国产精品日本无码A片| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 日本中文字幕熟妇| 美女刺激久久国产欧美| 日韩天天综合| 色玖玖| 综合亚洲欧美| 天天综合色| 91色宗合| 97午夜剧场日韩| 97天天日| 宗合情欲网| 欧洲欧美视频一区二区| 97欧美色资源| 久久线上视频免费看| 免费AV中文网在线观看| 96精品久久久久久久久久| 中国少妇啪啪视频| 国产区91柔拿会所技师| 极品白嫩福利在线| 激情自拍 校园春色| 999热这里只有精品| 翘臀vidoes| 91在线视频国产网站| 色女网日韩| 国产精品麻豆免费视频| 亚洲宗合网| 婷婷丁香成人| 91亚洲人| 日夜干射色啊| 日韩免费性爱视频在线观看| 亚洲男人在线观看天堂| 在线天堂999| 操逼国产免费| 欧美性高潮| 婷婷三区| 久久久久久久国产a∨| 男人天堂导航| 91亚州欧美| 亚洲黄色a级片| 中国熟妇| 国产肏屁眼视频| 女人双腿搬开让男人桶| 九九九九九九视频免费| 99热 按摩 日韩| 黄色av一区二区在线| 久久大黄片| 中文字幕视频免费| 综合网欧美在线| 亚洲阿v天堂无码z2018| 九九九九亚洲| 超碰在线97国产| 五月激情综合网| 琪琪精品免费一区二区三区| 91宗合网| 曰韩香蕉97| 性欧美另类高清| 91人妻素女| 试看60秒 爽| 亚洲人人夜夜澡人人爽| 亭亭丁香激情| 97干在线| 色嗨嗨在线| 极品销魂美女一区二区| 午夜亚洲| 97bbn| 久草久热| 六月丁香五月婷婷| 亚洲午夜福利在线影院 | 久久熟女人| 婷婷深爱五月| 377p欧洲日本亚洲大胆| a'v在线资源| 成人国产二区三区在线,男女精品。| 又摸又舔在线观看网站| 91蜜臀熟女| 日韩女模中文造逼| 中国东北熟女老太婆内谢| 视频国产欧美在线播放| 久久久精精精| 淫纸中9区| 伊人嫩草| 日韩综合97P| 免费久久9999| 99999精品成人| 91女在线观看| 97超碰碰碰| 五月激情小说| 国产欧美一区激情交| 日韩午夜精品一区二区三区电影| 操操吧亚洲乱伦视频| 欧美一区二区男人天堂| 偷拍 亚洲 欧美| 欧美性爱超碰97| 欧美日韩制服| 亚洲综合嫩| 色婷婷A V一二三四区麻豆综合| 亚洲综合校园春色| 成人欧美日超碰| 污污污8888| 亚洲情色图片区| 黑丝日韩av丝袜av| 级品肉射| 日本顶级天天操狠狠操夜夜操中文字幕 | 精品人妻中文字幕高清| 91超碰在线| 国产精品九九九| 天天干人人看综合| 午夜国产综合视频在线观看 | 丝袜视频网国产90| 欧美日韩系列| 99久久99九九99九九九| 999久久久九九九九| 97色色色| 成人a v在线播放免费| AAAA欧美日韩| 天天干天天燥| 操逼逼福利视频| 中文字幕在线高清男人的天堂| 亚洲国产成人高清在线| 五月激情小说| 色女99一级片在线观看| 欧美成人色| 2019亚洲男人天堂| 99re视频在线播放青草| 福利视频合集| 精品人体无圣光凹凸| 九月丁香综合网| 热九九精品| 久热69九色熟妇97| 一区二区蜜臀| 少妇精品久久久八区九区| 超碰97国产欧美| av网站免费看| 伊人激情五月天一区二区| www成人啪啪18秘 免费| 久久人妻办公室视频| 91新在线欧美| 国产不卡的视频 | 精久久久| 中文字幕一区二区视频在线观看| 中文字幕黄片在线| 日韩AC| 婷婷伊人一区| 人妻少妇久久| 一二三区操逼国产91| 成人八戒网站| 欧美色三级片91| 青青伊人久久| 啊啊啊啊啊啊好多水| 尤物网址| 一区二区偷拍拍视频| 欧美97日韩精品| 97se亚洲综合自| 国产日韩欧美中文在线播放| 97人人操人人干| 久久亚洲不卡一区二区三区| 人妖欧美一区二区| 人人做天天爱| 亚洲激情综合| 国产诱惑| 日韩欧美大片免费高清啪啪| 欧美精品日韩一区二区| 久久久穴999| 鸥美中出| 在线看免费无码AV天堂的| 日产中文字幕2020| 女优大全 - 91n| 亚洲超碰AV| 国产极品久久久| 清纯唯美亚洲综合| 3p国产色噜噜一区| 久久免费精品96| 97碰| 免费看毛片操穴| 国模久久在线| 亚洲国产一区二区入口| 国产一区二区三区不卡手机在线| 一二三区视频在线观看| 91强热人妻| 蜜臀久久久| 国产精品国产亚洲区艳妇糸列| 能看的av| 69久久| 亚洲制服欧美另类内射| 97在线青| 国产亚洲精品美女久久久| 日韩97视频!在线| 欧美乱欲| 天天爽天天| 精品一区二区三区18| 黄片直播三级黄片两女一男| 试看福利| 欧美日韩电影成人在线| 久久av网| 亚洲欧洲av影音| 蜜臀AV一区二区三区激情综合| 色97干| 国产女人高潮视频| 天天网综合| 玖玖人人爱| 精品福利| 日本精品88888888| 亚洲啪啪视频免费| 亚州色图狠狠干| 欧美日韩*字幕一区| 大香蕉在线86| 欧美日韩大黄片| 中文字幕人妻色偷偷久久皮| 黄色激情电影在线观看| 四季AV一区二区凹凸精品小说| 日韩黄色片子| 99久在线精品99re8a| 国产又黄又爽又刺激久久久久久| 韩国女主播青草在线| 欧美性爱第一区| 国产人妻精品一区二区三区秋霞| 日韩一区二区三区四区五区| 中文字幕国产| av天天在线观看| 不卡av免费在线网址| 插老姨肥穴| 黄片aaaaa一区| 91精品91久久久久77777| 九九Av| 国产9区| 蜜臀AV成人精品蜜臀| 啪啪资源网| 日本精品加勒比海一区| 极品五月天噜噜| 翔田千里Av在线| 中字一区| 鲁鲁色综合网| 日韩熟女乱伦中出| 欧美综合网站999| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲国产青青| 色婷婷电影网| 操人人| 欧美综合传媒| 97香焦色区| 上海一级黄片| 午夜在线播放| 日本九九久久99| 操操啪| 国产精品久久久无码aV去| 男人天堂 天天射| 午夜人妻精品综合在线| 欧美性爱免费短视频| 成人夜夜| 美女97超碰| 9l视频自拍9l九色成人| 亚洲伊人久久综合97| 天天搞欧美| 日本一二区免费| 丁香五月综合| 中国熟女老妇仑乱一区二区三区| 内射卯月麻衣| 国产亚洲 中文欧美久久| 手机在线A片| 欧美成人性活片| 亚洲丰满很很操| AND人妻系列| 在线播放中文字幕| 亚洲第一精品在线视频| 国产超碰人人操| 免费看黄片现成| 蜜臀久久99精品久久久久久成人小说| 大吊色| www.婷婷五月天| 色综合av男人天堂| 国产强奸AV在线| 精品人妻15区| 风骚少妇视频中文字幕| 一区久久久二区| www久| 国产精品成人蜜臀AV在线| 久久精品国产精品一区| 欧美的精品的视频| 久草成人影片| 午夜福利在线视频1000| 97操97色| 香蕉在线一区二区三区| 亚洲最大无码中文字幕网站| 在线综合 亚洲 欧美中文字幕| 91亚洲欧美激情| 久啪视频| WWW美腿丝袜香蕉中文| 少妇人妻无码| 婷婷伊人一区| 岛国小电影| 久久一二三四五六七八九区区区 | 国产精品视频一区二区三区八戒| 国产精品爆乳懂色蜜乳| 蜜臀久久久99久久久久 | 久久精品午夜国产亚洲AV无码 | 亚洲日韩欧美一区二区| 麻豆性爱视频在线播放 | 日本道久久综合色色| 亚洲av综合色区无码一| 久久久久久69国产一区二区 | 香蕉精品二区二区 | a人欧美综合天堂麻豆| 欧美日韩国产中文精品字幕自在自线, | 69XX一中文字幕人妻91| 97超碰中文在线| 中文字幕欧美丝袜07资源| 天天噜| 亚洲精品人体| 国产精品美女| 国产成人欧美精品在线| 99人妻| 亚洲本色精品一区二区久久| 上特色A在线| 久久久96| 色欲Av人妻精品一区二| 激情小说日韩无码| 日本三级A片网站com| 天天插夜夜操| 精品亚洲国产成人精品| 亚洲高清无码在线桃色| 看日韩操逼| 久热9| 91亚·色| 蜜奶av| 亚洲美女 晚间男人天堂 | 久妇网| 精品美女在线视频| 国产在线精品电影观看| 操老熟女AV| 婷婷国产精品一区二区| 色香av| 国产二区三区免费视频| 在线免费观看日韩一区| 日韩午夜精品一区二区三区电影| 国产免费一区在线观看| 口爆综合网| 殴美综合色88| 色欧洲97| 亚洲女人91| 亚洲精品一二牛牛| 中文字幕亚洲热播人妻| 久操热线| 久久9精品视频| 亚洲综合性网址| 黄页网站成人免费| 91视频综合网| 精品人妻一区| 狠狠狠狠狠| 麻豆性爱视频在线播放| 久久久久婷婷精品av电影| 97se亚洲综合自| 亚洲男人综合| 国产福利精品最新在线 | 人妻乱仑一区二区三区| 黄污污污污| 和协影院中文字幕三区| 深夜激情| ji熟女.com| 超碰在线国产| 欧美日韩国产电影| 九九九九亚洲| 欧美精品23| 开心五月深爱五月| 97看操| 欧综合网| 青娱乐国产精品| 精品久久久九九九孕妇| 蜜臀aV午夜一区二区三区| 久操免费在线| 国产美女高潮叫床视频| 亚洲情色1区| 色悠悠伊人网五月天| 人人操我人人干| 五月婷婷色色| 新视频sss国产| 国产捆绑一区| 在线国产探花| 激情黄色五月天| 日韩视频中文字幕| 超碰精品在线| 天天插天天操天天摸天天射天天看| 丝袜AV一区二区三区| 熟女精品va中文字幕| 熟女在线视频| 亚州性色| 国产一区二区啪啪视频| 97爱b| 亚洲成人精品在线一区| 99热日本| 色99久草| 岛国AB视频| 大香蕉宅男伊人| 十八禁啪啪视频| 97色碰| 日韩国产九九精品一区二区三区毛片| 亚洲熟伦熟妇AV无码春色| 大香樵伊人网| 人妻91少妇| 精品国产肉丝袜在线拍国语| 色男人色天堂东京热| 成人26uuu| 中文字幕一二三区| 超碰色老头| 五月天婷婷久久| 桑老女人九区| 亚洲夜夜欢无码一区二区| 久久综合av| 亚洲字幕一区二区| 少妇三P| 国产精品露脸在线观看| 99国产精品在线观看| 97香蕉网| 久久久艹艹艹| 欧美天天| 午夜情侣自拍网站| 亚洲超碰97| 99re6久热只有精品6在线直播| 欧美性夜| 中文字幕高清20页视频| 亚洲一区二区AV| 无码99| 色姑娘综合网| 中文字幕艹艹| 日韩无码视频黄色| 久久熟妇五十路一区| 亚洲男人久久综合天堂| 男人的天堂欧美| 中文字幕日韩精品久久| 欧美情色贴图| 高跟丝袜AV专区国产| 国产精品粉嫩福利在线| 女人高潮大叫一级毛片| 青青草在线视频播放器| www.超碰在线| 女人综合网| 麻豆 欧美 日韩| 天天夜躁日日躁狠狠2002| 色 亚洲 91| 999国产精品999| 97视频播放| 人妻久热在线| 亚洲国产精品99久久久| 美日韩一二三区| 欧美成人午夜免费福利785| 日韩大香蕉AV影片| 天天综合精品| 日韩操逼HD| 亚洲中文字幕av | 天天色综亚洲91污| 久久精品超碰| 青青操97| 国产一区二区三区视频在线看| 狠狠爱夜夜干| 天天爽爽爽爽| 亚洲精品成人动漫在线| 99精品丰满人妻无码| 亚洲天堂男人在线| 亚洲av无码国产精品字幕| 天天射夜夜| 99热这里只有精品8| 人人操人人干xxx| 日日干夜夜欢| 日韩欧美麻豆大片| 欧美日韩国产黄色片| 精品在线78| 中文字幕少妇色| 午夜免费福利视频一区| 亚洲国产精品无码AV久久| 裸体美女久久久| 五月天激情小说网| 久久性爱精品一区| 欧美se综合| 蜜臀久久在线视频| 五月丁香影视| 亚洲 日本 国产 综合| 国产一线二线三线av| 欧美另类自拍| 久操操| 欧 美 自 拍 偷 拍| 91欧| 久久久久9| 一区二区三区 丝袜 高跟 美腿| 特级毛片特黄久久免费看| 香蕉99秘 一区精品蜜桃臀| 九九九久久久久| 亚洲欧洲另类| 久久九九视频九九视频| 久久久中文| 欧美图片校园春色| 天天综合网入口~91| 五月丁香在线| 九九探花视频在线观看| 人妻偷拍一区二区三区| 亚州欧美另类| 亚洲人91| 好吊色一区| 国产按摩一区二区三区| 国产熟女乱论| 国产中文字幕在线点播| 欧美色图91| 午夜操操操| 91无码人妻| 亚洲少妇在线影音| 日韩中字av一区| 91欧美| 毛片电影一区二区三区| 欧美一区二区三区入口| 亚洲AV麻豆Aⅴ无码电影一| 91宗合网| 一卡二卡三卡| 国产精品高朝久久久久久久| 四虎免费看黄| 97色97好| 日韩美女久久一区二区三区| 五月丁香激情综合网| 日本熟女中文| 久久欧美性爱视频| 国产真实野战在线视频| 少妇3P性爱自拍| 欧美一区二区三区另类精品| 国产一级137片内射麻豆| 精品国产三级av韩国在线| 97精品免费视频网站| 中文字幕一区二区无码成人| 玖玖无码超碰| 凹凸 69堂 在线播放| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 人妻少妇av在线观看| 日韩一级成人毛片免费观看 | 尤物视频视频官网| 国产一区二区二区按摩精品啪视频| 丰满人妻一区二区三区免费| 欧美色九九| 欧美精品黑人猛交高潮| 伊人91| 九九九精品| 无码不卡亚洲成?人片| 中文一区二区三区影院| 激情综合网亚洲| 日本一区二区亚洲综合| av爱爱爱| 国产精品网址| 波多野结衣一级视频| 婷婷午夜成人色中色| 女同性恋久久| 91性高潮久久久久久久久| 日本三级中国三级99人妇网站| 狠狠色丁香| 国产伊人自拍| 久久亚洲天天做| 美女诱惑在线一区| 人澡逼| 日本二三四区| 一区二区三区国产在线播放 | 日本色色色网站免费看不卡| 少妇熟女1区2区3区| 国产日产精品久久快鸭的功能介绍| 综合久久久久久久综合网| 性爱乱伦网址| 亚州精人品大香蕉| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 717影院理论午夜伦八戒| 可以免费观看的AV| 尤物av网站| 亚洲drav色图| 久9九综合在线| 国产精品久久久久无码Av网曝门| 另类小说综合网| 91GD.COM| 69AV女优男人的天堂| 啊啊啊啊啊啊啊啊啊啊在线观看| 欧美 日韩第一性色| 淫荡网址| 小视频玖玖| 久久婷婷五月天| 女人一区| 欧美在线亚洲| AV一起草在线| 久久久夜夜嗨免费视频| www老逼91| 色婷婷一区二区三区久久午夜成人不| 丝袜AV一区二区三区| 三级色综合|