亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Unity設(shè)計(jì)模式實(shí)戰(zhàn):狀態(tài)機(jī)、對(duì)象池與事件中心解決商業(yè)項(xiàng)目痛點(diǎn)

Unity設(shè)計(jì)模式實(shí)戰(zhàn):狀態(tài)機(jī)、對(duì)象池與事件中心解決商業(yè)項(xiàng)目痛點(diǎn) 1. 項(xiàng)目概述Unity程序員為什么繞不開“模式”這個(gè)坎干了這么多年Unity開發(fā)我越來越覺得設(shè)計(jì)模式不是面試八股文而是商業(yè)項(xiàng)目里真刀真槍解決問題的工具箱。你接手一個(gè)項(xiàng)目Leader甩過來一句“用狀態(tài)機(jī)重構(gòu)一下BOSS戰(zhàn)斗邏輯”或者策劃滿嘴跑火車地要求“每種敵人都有三種攻擊形態(tài)后續(xù)還要加新種類”這時(shí)候如果你腦子里沒有一套成熟的“模式”體系代碼就會(huì)從第三天開始失控。標(biāo)題里說的“模式相關(guān)的開發(fā)需求”我理解下來大概分兩層。狹義上是指設(shè)計(jì)模式在Unity中的落地比如單例、狀態(tài)、觀察者、工廠、對(duì)象池、命令模式這些廣義上還包括Unity引擎自帶的“模式化”機(jī)制比如Animator的有限狀態(tài)機(jī)、協(xié)程和異步模型、腳本生命周期回調(diào)甚至Addressables的資源加載模式。這兩層你得融會(huì)貫通才能在商業(yè)項(xiàng)目里游刃有余。這篇文章不是教科書式的理論復(fù)述而是把我這些年從中小型團(tuán)隊(duì)、獨(dú)立Demo到線上運(yùn)營(yíng)項(xiàng)目的實(shí)踐總結(jié)一遍什么場(chǎng)景用哪個(gè)模式、為什么選它而不是另一個(gè)、核心代碼長(zhǎng)什么樣、以及我在真實(shí)項(xiàng)目中踩過哪些坑。無論你是剛轉(zhuǎn)Unity兩三個(gè)月的初級(jí)程序員還是在做中大型項(xiàng)目想梳理代碼架構(gòu)的資深開發(fā)這篇文章應(yīng)該都能給你一點(diǎn)可落地的參考。我始終有個(gè)觀點(diǎn)設(shè)計(jì)模式是為了解決特定問題而存在的不是為了炫耀技術(shù)。脫離業(yè)務(wù)場(chǎng)景談模式是耍流氓具體怎么理解下面拆開講。2. 需求拆解與方案選型模式不是越多越好而是越準(zhǔn)越好2.1 先看清“模式化需求”到底長(zhǎng)什么樣展開寫方案之前得先把需求看清楚。我總結(jié)了商業(yè)項(xiàng)目里最常見的幾類“模式相關(guān)需求”你對(duì)照一下基本不會(huì)跑偏第一類對(duì)象狀態(tài)切換類需求。典型的就是角色行為——待機(jī)、移動(dòng)、攻擊、受擊、死亡或者戰(zhàn)斗流程——回合開始、玩家行動(dòng)、敵方行動(dòng)、回合結(jié)束。這類需求的特點(diǎn)是狀態(tài)之間切換邏輯復(fù)雜條件判斷散落在各處用一堆if-else寫到最后連自己都改不動(dòng)。第二類對(duì)象創(chuàng)建與管理類需求。比如怪物波次生成、子彈發(fā)射、UI彈窗、飄字特效。這類需求的核心矛盾是對(duì)象數(shù)量動(dòng)態(tài)變化創(chuàng)建銷毀頻繁直接new和Destroy會(huì)導(dǎo)致性能抖動(dòng)和GC壓力同時(shí)不同種類對(duì)象的創(chuàng)建流程差異大代碼容易重復(fù)。第三類模塊間通信類需求。比如戰(zhàn)斗模塊打掉一個(gè)怪UI界面要刷新任務(wù)進(jìn)度音效模塊要播放擊殺音效成就系統(tǒng)要累計(jì)計(jì)數(shù)。如果每個(gè)模塊都直接互相引用耦合度會(huì)瞬間爆炸改一個(gè)功能牽扯一片。第四類流程控制與管理類需求。比如新手引導(dǎo)、副本流程、登錄流程這些流程有嚴(yán)格的先后順序且每一步都可能被突發(fā)事件打斷——玩家斷線、點(diǎn)擊跳過、強(qiáng)制退出。普通寫法是嵌套回調(diào)寫到最后就是傳說中的“回調(diào)地獄”。2.2 方案選型背后的取舍邏輯針對(duì)上面四類需求對(duì)應(yīng)的模式選型其實(shí)有相對(duì)成熟的組合。這里直接給結(jié)論附上我的理由需求類型推薦模式組合為什么不選其他方案狀態(tài)切換狀態(tài)模式State 有限狀態(tài)機(jī)FSM用EnumSwitch寫狀態(tài)切換新加一個(gè)狀態(tài)要改原方法違背開閉原則對(duì)象創(chuàng)建管理對(duì)象池Object Pool 工廠模式Factory直接Instantiate頻繁操作性能和內(nèi)存都不穩(wěn)工廠類把創(chuàng)建邏輯收斂配合池子批量管理模塊通信觀察者模式Observer/ 事件中心模塊之間互持引用整個(gè)項(xiàng)目變成蜘蛛網(wǎng)沒法做熱更和單元測(cè)試流程控制命令模式Command或異步狀態(tài)機(jī)嵌套回調(diào)邏輯不直觀出錯(cuò)后堆棧全亂而且中途打斷很難處理這個(gè)選型邏輯本質(zhì)上是在回答三個(gè)問題這個(gè)需求的變化點(diǎn)在哪里這段代碼的復(fù)用點(diǎn)是哪里改動(dòng)頻率最高的地方能不能被隔離2.3 為什么我建議“先做減法”我在早期帶項(xiàng)目的時(shí)候犯過一個(gè)典型錯(cuò)誤剛學(xué)完設(shè)計(jì)模式恨不得把二十三種模式全塞進(jìn)項(xiàng)目里。結(jié)果就是代碼抽象層級(jí)過多一個(gè)簡(jiǎn)單的攻擊邏輯繞了五六個(gè)類新來的同事根本看不懂調(diào)試起來想罵人。后來我學(xué)乖了。設(shè)計(jì)模式在項(xiàng)目里應(yīng)該按“成本收益比”來取舍。比如一個(gè)功能可能寫死不再改那直接用最簡(jiǎn)單的方式實(shí)現(xiàn)就好沒必要硬套模式。但如果需求文檔里明確寫了“后續(xù)會(huì)新增角色種類”、“可能有多種攻擊方式”那就值得花一天時(shí)間把模式設(shè)計(jì)好。記住一句話模式是應(yīng)對(duì)變化的手段沒有變化需求就蒸蒸日上不需要模式。這個(gè)行業(yè)很多項(xiàng)目的代碼腐爛不是因?yàn)槌绦騿T不懂設(shè)計(jì)模式恰恰是因?yàn)檫^度設(shè)計(jì)導(dǎo)致沒人敢改、沒人能懂。3. 核心技術(shù)點(diǎn)解析五個(gè)高頻Unity設(shè)計(jì)模式實(shí)戰(zhàn)詳解這五個(gè)模式是我從業(yè)以來使用頻率最高的幾乎每個(gè)商業(yè)項(xiàng)目都會(huì)用到。我分別從“它解決什么問題”、“核心原理長(zhǎng)什么樣”、“Unity環(huán)境下的實(shí)現(xiàn)細(xì)節(jié)”三個(gè)角度講透。3.1 單例模式服務(wù)管理器的利與弊單例大概是Unity開發(fā)者最早接觸的模式因?yàn)樗鉀Q了一個(gè)很現(xiàn)實(shí)的問題有一些對(duì)象全局唯一而且到處都要訪問——音頻管理器、UI管理器、網(wǎng)絡(luò)管理器、存檔管理器。每個(gè)地方都傳引用太麻煩不如搞個(gè)全局訪問點(diǎn)。C#里最典型的實(shí)現(xiàn)就是你經(jīng)常見到的public class AudioManager : MonoBehaviour { private static AudioManager _instance; public static AudioManager Instance { get { if (_instance null) { _instance FindObjectOfTypeAudioManager(); if (_instance null) { var go new GameObject(AudioManager); _instance go.AddComponentAudioManager(); DontDestroyOnLoad(go); } } return _instance; } } }這段代碼把幾個(gè)要點(diǎn)都覆蓋了懶加載、場(chǎng)景中自動(dòng)查找、沒有則自動(dòng)創(chuàng)建、跨場(chǎng)景不銷毀。很多初學(xué)者抄完就完了但有幾個(gè)坑你得注意。第一個(gè)坑是單例的銷毀時(shí)機(jī)。游戲退出時(shí)Unity會(huì)銷毀所有場(chǎng)景對(duì)象靜態(tài)字段不會(huì)自動(dòng)置空。如果此時(shí)有異步回調(diào)訪問單例會(huì)出現(xiàn)“對(duì)象已銷毀但靜態(tài)引用還在”的詭異錯(cuò)誤。我的習(xí)慣是重寫OnDestroy時(shí)把_instance置空并加一個(gè)_isQuitting標(biāo)志位在回調(diào)里判斷。第二個(gè)坑是單例的初始化順序。A單例在Awake里訪問B單例如果B還沒初始化結(jié)果就是空引用。我踩過這個(gè)坑之后項(xiàng)目里統(tǒng)一規(guī)定所有單例的初始化放在Start或者另一個(gè)管理器的Init流程里禁止在Awake里互相訪問。第三個(gè)坑也是最關(guān)鍵的認(rèn)知——單例不是萬能的。它在小型項(xiàng)目里好用但當(dāng)你有一堆單例像“音效管理”、“任務(wù)管理”、“背包管理”、“成就管理”它們內(nèi)部還在互相調(diào)用你就等于把全局耦合穿了一條線。所以現(xiàn)在業(yè)界更推薦用依賴注入或服務(wù)定位器來替代單例至少讓訪問關(guān)系顯式化。Unity新版本的Dependency Injection包就是干這個(gè)用的。注意如果項(xiàng)目里單例數(shù)量超過5個(gè)而且存在互相調(diào)用關(guān)系你就要考慮用服務(wù)定位模式或者DI容器重構(gòu)了。否則后期維護(hù)成本會(huì)指數(shù)級(jí)上升。3.2 狀態(tài)模式與有限狀態(tài)機(jī)角色AI和戰(zhàn)斗流程的最佳搭檔狀態(tài)模式在Unity里的應(yīng)用數(shù)量我敢說排第二沒人敢排第一。Animator Controller本質(zhì)就是一個(gè)可視化有限狀態(tài)機(jī)但代碼層面的狀態(tài)機(jī)依然不可或缺因?yàn)閺?fù)雜的戰(zhàn)斗邏輯、AI邏輯單靠動(dòng)畫層根本表達(dá)不了。我常用的狀態(tài)機(jī)基類設(shè)計(jì)長(zhǎng)這樣public abstract class StateBase { protected StateMachine machine; public StateBase(StateMachine machine) { this.machine machine; } public virtual void OnEnter() { } public virtual void OnUpdate() { } public virtual void OnExit() { } } public class StateMachine { private StateBase _currentState; private DictionarySystem.Type, StateBase _states new DictionarySystem.Type, StateBase(); public void AddState(StateBase state) { _states[state.GetType()] state; } public void ChangeStateT() where T : StateBase { var next _states[typeof(T)]; _currentState?.OnExit(); _currentState next; _currentState.OnEnter(); } public void Update() { _currentState?.OnUpdate(); } }這套設(shè)計(jì)的核心思路是每個(gè)狀態(tài)是一個(gè)獨(dú)立的類狀態(tài)之間的切換通過ChangeState觸發(fā)新加一個(gè)狀態(tài)不影響已有邏輯只需要AddState并調(diào)用切換即可。舉個(gè)例子一個(gè)普通的近戰(zhàn)單位AI一般就這幾個(gè)狀態(tài)待機(jī)、巡邏、追擊、攻擊、受擊、死亡。用狀態(tài)機(jī)的寫法每個(gè)狀態(tài)的自邏輯內(nèi)聚在一個(gè)類里邏輯邊界非常清晰。如果你需要新增一個(gè)“狂暴”狀態(tài)只需要寫一個(gè)RageState類然后在滿足條件的地方調(diào)用ChangeState ()完事。但這里有個(gè)實(shí)戰(zhàn)中非常重要的細(xì)節(jié)狀態(tài)機(jī)里的狀態(tài)切換條件不能散落在Update里到處判斷。我見過很多同學(xué)把切換條件寫在每個(gè)狀態(tài)的OnUpdate里結(jié)果狀態(tài)一多切換關(guān)系變成一張亂七八糟的網(wǎng)你根本理不清誰是誰的上級(jí)。我的做法是把切換條件的判斷集中在一個(gè)地方比如狀態(tài)機(jī)的“Update”里先收集外部事件再做統(tǒng)一裁決?;蛘哂脦А斑^渡條件”的狀態(tài)機(jī)框架每個(gè)狀態(tài)聲明自己能過渡到哪些狀態(tài)以及對(duì)應(yīng)的條件委托。另外如果你的需求只是動(dòng)畫切換不是復(fù)雜邏輯切換優(yōu)先用Animator Layer和動(dòng)畫參數(shù)不要用代碼狀態(tài)機(jī)重造輪子。只有邏輯復(fù)雜度超過動(dòng)畫表達(dá)范圍時(shí)才值得引入代碼狀態(tài)機(jī)。3.3 觀察者模式與事件中心解耦通信的神兵利器模塊通信耦合這個(gè)事是項(xiàng)目規(guī)模上來之后第一個(gè)爆發(fā)的問題。我記得有一段時(shí)間項(xiàng)目里所有系統(tǒng)都持有其他模塊的引用UI要直接調(diào)戰(zhàn)斗模塊的方法戰(zhàn)斗模塊要直接改玩家的血條UI網(wǎng)絡(luò)模塊又要回調(diào)戰(zhàn)斗模塊……有一次改背包上限崩了三個(gè)UI界面排查了半天最后發(fā)現(xiàn)是背包模塊在Awake里調(diào)用了UI模塊的方法而UI模塊還沒初始化。觀察者模式就是為了解決這種“廣播-訂閱”關(guān)系誕生的。Unity里最直白的實(shí)現(xiàn)就是C#的event或者一個(gè)全局事件中心。我?guī)ы?xiàng)目時(shí)習(xí)慣用后者因?yàn)閑vent在多模塊解耦的同時(shí)也帶來一個(gè)問題監(jiān)聽者的生命周期管理極其麻煩。你訂閱了事件如果忘了退訂或者對(duì)象銷毀了但event列表里還留著引用輕則內(nèi)存泄漏重則調(diào)用已銷毀對(duì)象的委托直接拋異常。我這里提供一個(gè)簡(jiǎn)化版事件中心的思路核心點(diǎn)在于支持“帶參事件”以及“弱引用或安全移除”public class EventCenter { private static Dictionarystring, System.Actionobject _listeners new Dictionarystring, System.Actionobject(); public static void Subscribe(string eventName, System.Actionobject callback) { if (!_listeners.ContainsKey(eventName)) _listeners[eventName] null; _listeners[eventName] callback; } public static void Unsubscribe(string eventName, System.Actionobject callback) { if (_listeners.ContainsKey(eventName)) _listeners[eventName] - callback; } public static void Broadcast(string eventName, object data null) { if (_listeners.TryGetValue(eventName, out var callbacks)) callbacks?.Invoke(data); } }你用的時(shí)候打怪模塊只需要廣播一個(gè)“OnMonsterKilled”事件附帶怪物ID和擊殺坐標(biāo)UI的成就監(jiān)聽者訂閱它音效的監(jiān)聽者訂閱它任務(wù)的監(jiān)聽者訂閱它。模塊之間完全不知道對(duì)方的存在這解耦效果立竿見影。但觀察者模式也有它的軟肋——你很難從代碼里直觀地看出來“誰在聽這個(gè)事件”。有時(shí)候一個(gè)事件被改了參數(shù)所有監(jiān)聽的模塊都要跟著測(cè)一遍漏掉一個(gè)就是線上事故。所以我的建議是事件名不要用模糊的字符串盡量定義一個(gè)靜態(tài)常量類集中管理所有事件名。事件參數(shù)不要用一個(gè)裸的object這樣接收方每次都要強(qiáng)轉(zhuǎn)還容易錯(cuò)。定義一個(gè)事件參數(shù)基類每個(gè)事件有明確的參數(shù)類型。訂閱行為盡量在OnEnable里做在OnDisable里退訂確保生命周期安全。3.4 對(duì)象池模式性能優(yōu)化的必修課對(duì)象池的原理你在leetcode上刷題也見過——預(yù)先創(chuàng)建一批對(duì)象用的時(shí)候取用完了還回去避免反復(fù)創(chuàng)建銷毀。在Unity里的價(jià)值尤其大因?yàn)镮nstantiate和Destroy的成本不只是CPU還會(huì)造成內(nèi)存碎片和GC壓力在移動(dòng)端上表現(xiàn)非常明顯。我的經(jīng)驗(yàn)是凡是頻繁生成且生命周期短暫的對(duì)象必須進(jìn)對(duì)象池。典型的有子彈、粒子特效、飄字、小怪、掉落物。但也不是所有對(duì)象都需要池化比如一次游戲只創(chuàng)建一次的UI面板池化的收益基本可以忽略。這里給一個(gè)比較通用的對(duì)象池實(shí)現(xiàn)思路public class ObjectPoolT where T : Component { private StackT _pool new StackT(); private T _prefab; public ObjectPool(T prefab, int preloadCount 0) { _prefab prefab; for (int i 0; i preloadCount; i) { var obj CreateNew(); obj.gameObject.SetActive(false); _pool.Push(obj); } } private T CreateNew() { var obj Object.Instantiate(_prefab); obj.gameObject.SetActive(false); return obj; } public T Get() { T obj _pool.Count 0 ? _pool.Pop() : CreateNew(); obj.gameObject.SetActive(true); return obj; } public void Return(T obj) { obj.gameObject.SetActive(false); _pool.Push(obj); } }用起來也簡(jiǎn)單射擊的時(shí)候從池子里Get一顆子彈設(shè)置位置和方向子彈擊中或者飛出邊界后把自身Return回池子。整個(gè)過程中不會(huì)產(chǎn)生GC壓力幀率穩(wěn)定很多。不過有幾個(gè)細(xì)節(jié)得提醒你注意池子里的對(duì)象不要跨場(chǎng)景殘留。項(xiàng)目里如果有場(chǎng)景切換池里的對(duì)象如果掛在DontDestroyOnLoad節(jié)點(diǎn)下場(chǎng)景A的對(duì)象跑到場(chǎng)景B就會(huì)出問題。我的做法是場(chǎng)景切換時(shí)清空池子或者為每個(gè)場(chǎng)景維護(hù)獨(dú)立的池子。對(duì)象池不要設(shè)置得太大。預(yù)創(chuàng)建太多對(duì)象會(huì)拖慢啟動(dòng)時(shí)間太少又頻繁創(chuàng)建。我一般取項(xiàng)目里的峰值并發(fā)數(shù)量的1.2倍左右具體數(shù)值靠性能測(cè)試調(diào)。必須做“回收不徹底”的自查。有些對(duì)象被池化后內(nèi)部的協(xié)程、動(dòng)畫、Shader屬性沒有重置就會(huì)出現(xiàn)“第二發(fā)子彈沒有特效”“第三次使用后位置不對(duì)”的詭異問題。給每個(gè)池化對(duì)象寫一個(gè)統(tǒng)一的Reset方法Get時(shí)強(qiáng)制調(diào)用。3.5 工廠模式對(duì)象創(chuàng)建邏輯的“封裝大師”工廠模式和對(duì)象池天生一對(duì)。對(duì)象池負(fù)責(zé)“復(fù)用”工廠負(fù)責(zé)“創(chuàng)建”。但在Unity項(xiàng)目中工廠模式真正的價(jià)值是——隱藏對(duì)象創(chuàng)建的細(xì)節(jié)屏蔽不同類型的構(gòu)造差異。舉個(gè)例子假設(shè)游戲里有近戰(zhàn)怪、遠(yuǎn)程怪、精英怪、BOSS四種敵人它們的預(yù)制體不同、初始屬性不同、掛載的AI組件也不同。如果每次都在戰(zhàn)斗模塊里寫GameObject go Instantiate(meleePrefab); go.GetComponentMeleeEnemy().Init(level);那么戰(zhàn)斗模塊就要知道所有敵人的細(xì)節(jié)一旦新增一個(gè)“法師怪”你就得跑到戰(zhàn)斗模塊里加一條邏輯這違反了開閉原則。用工廠模式改一版public interface IEnemyFactory { EnemyBase CreateEnemy(EnemyType type, Vector3 position, int level); } public class EnemyFactory : IEnemyFactory { private DictionaryEnemyType, GameObject _prefabMap; public EnemyBase CreateEnemy(EnemyType type, Vector3 position, int level) { GameObject prefab _prefabMap[type]; var enemyObj Object.Instantiate(prefab, position, Quaternion.identity); var enemy enemyObj.GetComponentEnemyBase(); enemy.ReInit(level); return enemy; } }用工廠模式的好處是新增敵人類型時(shí)只需要注冊(cè)對(duì)應(yīng)的預(yù)制體到字典里或者在工廠里加一個(gè)case分支調(diào)用方波次系統(tǒng)的代碼完全不用動(dòng)。這個(gè)設(shè)計(jì)在“系統(tǒng)持續(xù)擴(kuò)展”的場(chǎng)景下省下的維護(hù)成本相當(dāng)可觀。在我合作的某公司項(xiàng)目中他們的怪物系統(tǒng)就是這個(gè)思路策劃在表格里配置怪物類型ID工廠根據(jù)ID從配置表加載預(yù)制體、屬性、AI模塊程序完全不需要為每個(gè)新怪物寫創(chuàng)建代碼。這就是工廠數(shù)據(jù)驅(qū)動(dòng)結(jié)合的威力。實(shí)戰(zhàn)心得工廠模式很容易和對(duì)象池模式混用創(chuàng)建邏輯放工廠復(fù)用邏輯放池子。二者組合后的完整流程是工廠Get對(duì)象時(shí)先嘗試從池子拿拿不到再走Instantiate。歸還時(shí)主動(dòng)回池。這套組合拳打出來性能和擴(kuò)展性就都有了。4. 商業(yè)項(xiàng)目實(shí)踐記錄從需求到落地的完整過程拆解4.1 真實(shí)需求場(chǎng)景復(fù)盤某跨平臺(tái)項(xiàng)目曾遇到一個(gè)典型的“模式化開發(fā)需求”我拿這個(gè)案例做一次全流程復(fù)盤。需求背景游戲中有一種資源副本玩法玩家每天可以挑戰(zhàn)三次副本中有若干波怪物怪物死亡后掉落道具副本結(jié)束彈出結(jié)算界面。乍一看這是個(gè)稀松平常的玩法但如果你往深處想會(huì)發(fā)現(xiàn)里面嵌套著好幾層設(shè)計(jì)問題第一層波次怪物的生成機(jī)制。每一波的怪物種類和數(shù)量由策劃配置表動(dòng)態(tài)決定有些波次會(huì)混合出三種以上的怪物有些波次會(huì)出現(xiàn)精英怪。而且玩家在打怪過程中副本內(nèi)部可能會(huì)觸發(fā)“暴走”事件額外生成一波怪。第二層怪物行為的狀態(tài)機(jī)。怪物的行為要區(qū)分待機(jī)、追擊、攻擊、受擊、死亡。每種怪物攻擊方式還不一樣近戰(zhàn)怪近身攻擊遠(yuǎn)程怪保持距離釋放技能。第三層系統(tǒng)通信。怪物被擊殺時(shí)副本計(jì)時(shí)器要更新、任務(wù)系統(tǒng)要計(jì)數(shù)、UI要飄字、音效要播放、成就系統(tǒng)要檢查進(jìn)度。這些模塊之間不能相互硬引用。第四層結(jié)算流程。副本打完之后需要按順序播放勝利動(dòng)畫——發(fā)放獎(jiǎng)勵(lì)——刷新界面——彈出結(jié)算UI期間還有可能被玩家點(diǎn)擊跳過打斷。4.2 模式選型與架構(gòu)設(shè)計(jì)根據(jù)需求我用一張表把方案的選型邏輯列出來模塊選擇理由怪物生成工廠模式 對(duì)象池怪物種類差異大但是創(chuàng)建流程統(tǒng)一生成頻率高必須池化怪物行為狀態(tài)模式 FSM行為邏輯復(fù)雜且后續(xù)會(huì)加新怪、新行為狀態(tài)機(jī)天然抗擴(kuò)展跨模塊通信事件中心觀察者模式戰(zhàn)斗、UI、音效、任務(wù)系統(tǒng)互不引用全靠事件解耦副本流程狀態(tài)機(jī)或用UniTask寫流程編排順序邏輯清晰方便插入打斷點(diǎn)這個(gè)架構(gòu)的漂亮之處在于每個(gè)模塊只關(guān)心自己的事。波次系統(tǒng)根據(jù)配置調(diào)工廠生成怪物不用關(guān)心怪物內(nèi)部邏輯怪物死亡時(shí)廣播一個(gè)事件不用關(guān)心誰在聽UI和音效各自訂閱事件不用關(guān)心戰(zhàn)斗流程。4.3 核心代碼落地拆解以怪物生成為例我先把關(guān)鍵的生成器簡(jiǎn)化一下。這里要注意的是代碼層面做了兩件很重要的事讀配置表驅(qū)動(dòng)創(chuàng)建以及把業(yè)務(wù)實(shí)體和預(yù)制體解耦。public class MonsterSpawner : MonoBehaviour { [SerializeField] private MonsterFactory _factory; [SerializeField] private ObjectPoolMonsterBase _pool; public void SpawnWave(WaveConfig waveConfig) { foreach (var item in waveConfig.monsterItems) { for (int i 0; i item.count; i) { MonsterBase monster _factory.CreateMonster(item.monsterId); monster.transform.position GetSpawnPosition(); monster.OnDeath HandleMonsterDeath; } } } private void HandleMonsterDeath(MonsterBase monster) { monster.OnDeath - HandleMonsterDeath; _pool.Return(monster); EventCenter.Broadcast(OnMonsterKilled, monster.Data); } }這段代碼的含金量在哪里首先創(chuàng)建怪物交給了工廠把生成邏輯收斂到一個(gè)點(diǎn)其次怪物死亡后自動(dòng)回池不需要業(yè)務(wù)方關(guān)心“回收”這件事最后還有通過事件廣播把“怪物死亡”這一信息廣播出去UI、任務(wù)、成就自己決定要不要訂閱。代碼整潔度和可擴(kuò)展性都在線。再貼一段怪物狀態(tài)機(jī)的簡(jiǎn)化框架你看下狀態(tài)類內(nèi)部是怎么組織的public class MeleeAttackState : StateBase { private MonsterBase _monster; public MeleeAttackState(StateMachine machine, MonsterBase monster) : base(machine) { _monster monster; } public override void OnEnter() { _monster.PlayAnimation(Attack); } public override void OnUpdate() { if (_monster.Target null || !_monster.Target.IsAlive) { machine.ChangeStateIdleState(); return; } if (!_monster.IsInAttackRange) { machine.ChangeStateChaseState(); } } }這套狀態(tài)機(jī)在實(shí)際戰(zhàn)斗中被驗(yàn)證過效果近戰(zhàn)怪的“追擊-攻擊-追擊”來回切換遠(yuǎn)程怪的“保持距離-蓄力-釋放”組合全都靠不同狀態(tài)類的組合實(shí)現(xiàn)邏輯清晰調(diào)試時(shí)用Log打一下狀態(tài)切換就能定位問題。4.4 上線后復(fù)盤模式設(shè)計(jì)的收益與成本這個(gè)副本玩法上線后我做過一次復(fù)盤。收益非常明顯第一后續(xù)加了三種新怪物沒有改任何戰(zhàn)斗模塊代碼只新增狀態(tài)類和在工廠里注冊(cè)預(yù)制體第二性能抖動(dòng)消失了怪潮生成時(shí)幀率穩(wěn)定第三UI和邏輯徹底解耦策劃調(diào)UI布局不碰邏輯代碼。但成本也有。狀態(tài)類和工廠類的數(shù)量增多文件查找變得困難。為了緩解這個(gè)問題我們制定了文件夾組織規(guī)范狀態(tài)類按角色分文件夾工廠類按業(yè)務(wù)模塊分文件夾公共組件放在共享目錄。這些規(guī)范不是設(shè)計(jì)模式教的是項(xiàng)目經(jīng)驗(yàn)沉淀出來的。5. 常見問題排查與避坑技巧實(shí)錄這部分內(nèi)容是我最想分享的因?yàn)樵O(shè)計(jì)模式的書里和文章不會(huì)寫這些全是實(shí)戰(zhàn)踩出來的血淚。5.1 狀態(tài)機(jī)陷入“狀態(tài)抖動(dòng)”怎么辦最常見的問題是所謂狀態(tài)抖動(dòng)State Jitter兩個(gè)狀態(tài)之間的切換條件同時(shí)滿足導(dǎo)致同一幀內(nèi)反復(fù)切換。比如追擊狀態(tài)切攻擊狀態(tài)的時(shí)候攻擊距離判斷邊緣正好抖動(dòng)角色就會(huì)瘋狂抽搐。我的解法加一個(gè)“最小切換間隔”狀態(tài)機(jī)內(nèi)部記錄上一次切換的時(shí)間如果距離上次切換小于一定幀數(shù)直接忽略切換請(qǐng)求。另外狀態(tài)進(jìn)入時(shí)把條件“鎖住”一幀避免OnEnter內(nèi)部立刻觸發(fā)條件判斷。5.2 事件中心導(dǎo)致的對(duì)象泄漏前面用了事件中心后還有個(gè)經(jīng)典的坑UI面板關(guān)閉時(shí)如果忘了退訂事件閉包會(huì)一直持有面板的引用。這時(shí)候你在場(chǎng)景里隱藏了面板但內(nèi)存里它永遠(yuǎn)活著重復(fù)打開關(guān)閉十幾遍內(nèi)存飆到爆炸。排查思路很直接注冊(cè)中心在Subscribe的時(shí)候記錄訂閱對(duì)象的TypeUnsubscribe檢查一次?;蛘咧苯訉懸欢未a在Editor模式下定期掃描所有事件監(jiān)聽器的引用對(duì)象是否已被銷毀。我現(xiàn)在的項(xiàng)目里甚至上線了一個(gè)“事件泄漏報(bào)警器”開發(fā)模式下打印警告。5.3 對(duì)象池“回收不干凈”導(dǎo)致數(shù)據(jù)錯(cuò)亂池化的對(duì)象復(fù)用后如果內(nèi)部有上次使用殘留的數(shù)據(jù)就會(huì)產(chǎn)生各種幽靈Bug。比如怪物的血量沒重置第二次出來只有50%血子彈的方向還是上一次的發(fā)射角度全錯(cuò)。解決方式是強(qiáng)制約定一個(gè)IReset接口所有池化對(duì)象必須實(shí)現(xiàn)。Get的時(shí)候調(diào)用一次ResetReturn的時(shí)候調(diào)一次。這個(gè)接口不能省省了就是給自己埋雷。5.4 過度設(shè)計(jì)的邊界感最后想聊一個(gè)和設(shè)計(jì)模式本身關(guān)系不大但又密切相關(guān)的實(shí)操問題怎么判斷當(dāng)前需求值不值得應(yīng)用設(shè)計(jì)模式。我的判斷標(biāo)準(zhǔn)有三個(gè)如果這個(gè)功能寫死就再也不改直接用最簡(jiǎn)單的方式別上模式。如果需求文檔里明確出現(xiàn)“后續(xù)會(huì)有多種…”“未來要支持自定義…”那值得上模式。如果團(tuán)隊(duì)里其他人對(duì)這套模式不熟悉你需要先花半天時(shí)間做一個(gè)培訓(xùn)分享否則代碼寫出來沒人能維護(hù)。設(shè)計(jì)模式是團(tuán)隊(duì)的溝通語言不是個(gè)人炫技的資本。一個(gè)人寫得飛起全組看不懂這個(gè)成本比代碼本身的結(jié)構(gòu)問題更致命。6. 最后分享我的幾個(gè)習(xí)慣項(xiàng)目做多了其實(shí)能沉淀下來的方法論就那么幾條。我個(gè)人的體會(huì)是設(shè)計(jì)模式的運(yùn)用不是靠背而是靠一次次重構(gòu)練出來的。你第一次寫一個(gè)戰(zhàn)斗系統(tǒng)可能全是if-else第二次寫的時(shí)候發(fā)現(xiàn)相同邏輯出現(xiàn)多處自然而然就抽出了狀態(tài)機(jī)第三次再遇到類似需求你會(huì)直接開始規(guī)劃狀態(tài)接口——這個(gè)過程就是“模式化思維”的養(yǎng)成。另外一個(gè)很實(shí)用的建議每次做技術(shù)方案選型的時(shí)候把你選擇的模式名稱寫進(jìn)代碼注釋里。比如在類注釋上寫“Class: MonsterStateMachine此處使用狀態(tài)模式管理怪物行為便于后續(xù)擴(kuò)展新狀態(tài)”。這能幫你和后來的維護(hù)者快速建立上下文比單獨(dú)寫一份文檔有用得多。對(duì)了還有一個(gè)小技巧Unity的新版本內(nèi)置了部分設(shè)計(jì)模式的官方實(shí)現(xiàn)思路比如Addressables里的資源句柄思想和對(duì)象池思路是互通的。你學(xué)設(shè)計(jì)模式的時(shí)候如果能跟引擎底層的實(shí)現(xiàn)方式對(duì)上號(hào)理解會(huì)深很多。比如協(xié)程本質(zhì)上是一個(gè)迭代器模式ResourceManager的資源加載本質(zhì)上是一個(gè)代理模式AssetBundle的依賴關(guān)系本質(zhì)上是組合模式。最后回答一個(gè)很多人會(huì)問的問題設(shè)計(jì)模式要學(xué)到什么程度才能進(jìn)商業(yè)項(xiàng)目我的答案很簡(jiǎn)單——不要求你會(huì)背二十三種模式的全部定義但以下六種必須能熟練寫出且講清原理狀態(tài)、觀察者、單例、工廠、對(duì)象池、命令。這六種覆蓋了我遇到的大概80%的業(yè)務(wù)場(chǎng)景。其他模式遇到了再學(xué)帶著問題學(xué)得更快。就寫到這里希望對(duì)正在做Unity開發(fā)的你有點(diǎn)幫助。模式這東西用起來才是你的光看文章永遠(yuǎn)都是別人的。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲熟女乱色一区二区三区| 人伦四五区| 91深夜夜| 欧美色综合| 久久综合久色欧美综合狠狠| 91在线欧色| 成年人性爱日韩| 男人的天堂免费| 91 综合 色| 欧色综合| 超碰综合色| 五月天开心网| 高清不卡一二三区视频......| 伊人黄色片| 久久久久久九九九| 乱人乱色一区二区三区免费 | 亚洲脚交| 新视频sss国产| 精产国品一区二三产品| 久久久久密臀视频| 99久久9| 色av中文字| 熟女人妻一区二区三区| 久久黄片国产一区二区| 日韩在线欧美精品一区二区| 亚洲精品国语在线播放| 97操| 超碰78| 久久香蕉国产线看观看亚洲女人 | 久久夜嗨| 九九九九九九免费视频| 免费精品无码一级毛片牛牛影视 | 97在线观看播放视频| 17c嫩草51久久91嫩草| 特色a在线上| 老熟女综合网| 91中出视频| 欧美色性情| 亚洲色图欧美色图综合| 午夜九九| 97资源亚洲| 四季av一区二区凹凸精品小说| 亚洲区限制级| 久热大香蕉网站| 呦女网站| 色五月av| 国产久久成人| 桃花色涩综合影院| 丰满人妻一区二区三区| 国产高清不卡视频| 亚洲综合校园春色| 亚洲综人网| 日少妇视频| 伊人久久综合影院精品久久久| 精品人妻中文字幕高清| 日韩无码a片| 先锋色眉乱伦资源| AV 少妇 人妻 偷拍| 天天摸夜夜摸| 国产精品国产| 欧美亚洲今日在线| 中文字幕日韩精品久久| 在线一道啪| 国产视频一区二区免费| 国产人伦精品一区二区三区| 日韩特一级久久| 91美女视频直播| 日夜伊人网| 国产综合在线视频网站| 91麻豆va国产精品| 亚洲熟妇乱女区二区三区| 欧美 日韩 国产传媒| 久久骚| 亚洲一区二区中文字幕| 精品欧美А∨无码黑人大荫蒂| 日本性爱少妇| 国产欧美一区二区| 丝袜美腿丝袜| 国产久久免费精品视频| 久久婷婷五月天| 久久大陆| 噜噜在线| 二级毛片| 日韩国产欧美伦理在线| 人妻久热在线| 国产精品熟女一区二区三区| 久久久九九网站| 亚洲瓯美色图| 91n处女在线观看| av在线播放国产一区| 国产精品久久久鸭无码的功能| 高清不卡国产| 91老司机视频| 国产三级日产三级韩国三级| 99天天超碰| 欧美色另类| 啪啪视频亚洲第一| 熟女欧美日韩综合婷婷| 偷拍盗拍亚洲色图图片| 精品在线观看视频在线| 91网站18在线| 国产拍偷精品网站| 伊人大香蕉在线| 天天综合网~91| 亚洲精品中文字幕一区在线视频| 亚洲永久永久永久永久一级一级一级精品| 久久免费少妇| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 色色福利| 天天干1区2区在线| 欧美麻豆成人同性GⅤ在线| 日产中文字幕2020| 青娱乐欧美激情一区二区| 日本少妇va7777| 特色a在线上| 亚洲1区| 国产欧美日产一区二区三区 - 国产欧美日 | 在线一道啪| 久久伊人青青草| 国产亚洲色停停久久99精品91| 丁香成人五月天| 人妻大香蕉| 久久久久国产精品喷潮免费观看臀| 国内黄色精品| 思思热免费在线视频| 美国久久一二三四| 欧美国产精品| 香蕉免费一区二区三区不读 | 精品一区99999| 精品国产人成在线| 欧美v亚洲v综合v国产v妖精| 91老熟女逼| 内射夫妻三片| 欧美成人一区二区| 青青草中文-久久青草精品一区二区三| 亚洲日精品| 超碰人人妻| 欧美色欧美| 91色噜噜狠狠| 日本色色色视频| 人人操人人精品影片| 日本久久天堂| 亚洲密乳AV| 中文字幕第23区| 口爆吞精在线观看| 另类小说欧美激情校园春色| 射丝袜高跟鞋99| 国产午夜在线观看视频| 校园春色 欧美| 亚洲91av| 户外裸露刺激视频第一区| 啊啊啊啊,啊啊好多水| 人人操人人摸人| 欧美日韩亚洲天堂| 亚洲欧美激情小说| 天美国产精品| 国模不卡| 综合久久97| 欧美天堂超碰97| 亚洲精品无码少妇久久| 无码高清操逼| 91热色| 久久9亚洲| 太久视频| 少妇人妻好深太紧了vr91| 蜜区区视频79| 国产精品欧美激在线| 粉嫩粉嫩一区性色AV片| 呦呦影院| 日本不卡一二区| 老师充足的奶水小说| 国产精品制服丝袜清纯唯美| 日本一级真人黄色性爱视频| 另类欧美色| 精品无码一二三四区| 一区二区激情国产熟女| 人妻 丝袜美腿 中文字幕| 少妇的嫩逼图片| 天天射夜夜| 色97| 婷婷综合在线| 色情综合网| 亚洲精品xxx| 国产精品午夜AV完会免费| 老熟妇一区二区三区啪啪| 极品白嫩福利在线| 传媒免费一区二区三区| 精品国产污一区二区三区| 韩国黄色片精品久久久| 亚洲aV性爱| 国产一区二区三区免费视频在性观看 | 亚洲国产97| 后入综合久久| 亚洲色图 图片| 日本不卡三级网在线播放| 爱射综合| 91在线无码精品秘 软件| 久久性爱视频99| 欧美 色 亚洲| 四虎精品永久在线观看| 加勒比性爱成人在线| 欧美中文字幕一区| 97 亚洲 日韩 欧美 在线| 大香蕉97久久| 欧美嗯啊……在线观看视频免费| 大香樵伊人网| 亚洲AV乱码专区国产噜噜亚洲 | 亚洲丝袜在线观看| 精品对白久久不卡| 五月婷亚洲精品天堂| 久久一区二区三区四区五区| 国产精品久久久久久久久久久久| 婷婷综合伊人一区| 亚洲日韩人妻中文字幕一区| 91精品无码久久久久久久| 国产农村妇女精品| 97精品一区二区视频| av影片在线观看不卡| 国产免费内射视频| 人妻精品免费一二三区| 免费观看国产不卡av| 免费av在线播放二区| 91精品人妻偷情| 中日韩免费看男女操逼大全| 性爱Av免费| 天天摸夜夜添无码小视频| 久久精品中文字幕观看| 美女极品一区二区三区| 午夜精品久久久久久久99蜜桃一| 超碰人人色| 国产精品老熟女一区二区| 91蜜臀在线久久久久| 亚洲情色1区| 美女干逼2| 啊啊啊啊好疼| av网站国产主播在线| 性久久久| 五月婷婷六月丁香| 少妇一区二区三区在线观看| 啊啊啊操死我了| 丝袜足交视频| 亚洲色色探花| 国内成人圈中文字幕无码视频| 久热大香蕉网站| 欧美色网络| 粉嫩av平台| 五月天玖玖资源站| 美女黄页| 中文字幕一区二区三区人妻不卡 | 桃花色综合影院| 超碰人妻天天干| 五月丁香六月婷综合成人综合 | 亚洲中字幕日本一区二区三区| 欧美一区二区日韩三区| 人人扣人人操| 91处女视频在线观看| 综合亚洲网| 无码 黑人一区二区三区| 天天爽人人综合免费7799| 亚洲色婷婷综合久久久久中文| 国产专区路线| 日韩欧美午夜一区二区| 日韩欧美久久婷婷网站| 国产精品探花色| 超碰九色| 中文字幕精品专区搜索结果91| 久夜操| 另类欧美综合| 国产AV色黄看到爽| 麻豆婷婷成人一二三| 丝袜视频一区二区在线播放国产中文 | 少妇与黑人高潮在线| 亚洲蜜臀视频精品久久| 欧美日本成人一区二区| 色99在线| 肥臀熟女一区二区三区视频| 精品国产乱码久久久久久口爆网站| 在线天堂999| 麻豆熟妇乱妇熟色A片在线看| 四虎午夜影院| 少妇免费视频| 精品久9| 大香蕉啪啪网| 久热精品在线| 国模精品娜娜一二三区 | 麻豆视频国产一区二区| 一二三区在线| 日日摸天天爽夜夜欢| 日本一本道A级黄色毛片试看60分钟| 人妻精品综合中文字幕在线 | 91被操| 蜜臀av一区二区三区免费观看| 人妻天天爽夜夜爽2| 九九视频黄色片| 校园春色制服丝袜中文字亚洲| 亚洲蜜臀精品视频久久| 色婷婷综合视频| 欧美春色| 天色综合网| 久久超碰国产一区二区三区| 欧洲综合视频| 最新日本中文字幕| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久熟女人| 九九综合九九综合| 久久的网站啊啊啊啊啊| 国产日韩在线播放av| 欧美性爱一区二区三区四区| 99国产在线 精品 视频| 91日日夜夜| 小情侣高清国产在线视频| 午夜精品久久久久久久| 欧美在线播放aaaa| 亚洲中文字幕在线视频一区二区| 欧美天堂日韩三级国产传媒| 国产精品人妻熟女aⅴ| 乱子伦一区二区三区国产精品| 能在线播放的国产三级| 九九九成人| 97WW精品| 欧洲亚洲国产综合在线| 尤物视频偷拍免费| 嗯嗯啊啊视频在线看| 亚欧色图在线激情| 欧美一区二区三区黄色影视| 五月天综合网| 亚洲天堂一区二区久久| 亚洲男人天堂2| 920日本午夜免费| 天天射天天操天天干天天吃2018| 99热8| 五月天大香蕉| 日韩免费大片一级播放| 国产传媒日韩| 成人黄页| 台湾佬激情综合| 三级AV入口| 婷婷五月天色网| 99re6久热只有精品6在线直播| 少妇人妻太紧太深av| 色偷偷2020免费视频播放| 久操99| 亚洲精品影视老司机| 麻豆AV一区二区天美传媒| 北京专精特新企业招聘信息| 在线人人人人人人精品超| 天久久久噜噜噜久久国产精品爽爽| 东北老女人的激情视频| 婷婷激情五月综合| 99天堂网| 日韩Va亚洲va欧美Ⅴa久久| 亚洲精品第一| 日本不卡一二区| 久久99精品九九久久久婷婷| 天天综合网国产| 岛国艾薇凹凸视频天堂| 日小BB小视频| 超碰午夜| 9久久久久| 美女91网| 欧美日韩久久精品爱爱| 亚洲成成熟女人综合一区二区| 91欧美丨精品丨入口| 91一区二区| 男人a天堂手机在线版| 日产操逼| 亚州欧美色图| 精品97久久| 精久久久| 久久久久久九九九九九九| 亚洲精品欧洲精品| 91校园春色长篇| 啪啪视频亚洲第一| 在线观看不卡一区二区三区| 99re9| 精品一区二区三区蜜桃| 97欧美综合网| 精品天堂| 东京热,男人的天堂| 偷拍亚洲高清图片| 涩五月婷婷| 国产女生在线| 日韩久久激情精品| 亚洲国产无码精品首页久久久| 亚洲少妇综合在线播放| 国产午夜激片Av毛片不卡| av在线免费一区二区| 偷拍亚洲熟女视频播放| 曰本人妻人人澡人人夹| 无码聚合| 99久久99久久综合| 九久久九精品视频| 77国产精品| 亚洲国产丝袜在线观看| 少好三P| 91美女视频电影| 91在线一起| 性感美女91影视| 啊啊啊草死我| 性爱综合一区二区| 日操粉逼逼| 91精品国产麻豆国产自产在| 美女露胸露尿口| 一区久久久二区| 1二区9| 中文子幕一二三| 性欧美| 99re免费| 上海一级黄片| 精品超碰中文在线| 亚洲熟女一区| 啊啊啊慢点| 超清中文乱码字幕| 视频黄色国产一级| 色五月婷婷在线| 国内外毛片在线观看| 亚洲中文sv| 麻豆天美91| 乱伦Av网| 久久久久久久 九九九九九九九| 久久国模av| 日韩电影中文字幕| 伊人操你| 欧美1727免费观看视频| 精人妻无码一区二区三区伊人直播| 2020天天色综合| 天堂v无码免费视频| 手机在线播放国产福利| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 成人热久久精品| 国产精品伦理| 中日韩熟女| 97综合在线观看| 一本大道久| 国产精品麻豆成人av| 麻豆啪啪啪视频| 67194无码不卡| 五月天久久人妻| 国产精品人人爽人人做可爱福利| 中文字幕五区| 中文字幕欧洲有码| 性久久| 一二三啪啪专区| 天天干人妻视频| 99久久精品欧美国产| 久热99| 日韩 女同 综合| 亚洲春色一区二区三区| 五月天开心网| 国产91丝袜 在线播放| 老熟妇一区二区三区…| 国产精品 午夜福利| 日韩射精| 五月婷婷啪啪| 啊啊啊男女| 狠狠色狠狠色狠狠五月| 色麻豆AV| 日本操色导航| 亚洲国内精品成人不卡| 国产丝袜欧美在线视频| 老熟女熟妇| 思思久热在线精品66| 920日本午夜免费| 性欧美91| 综合影院亚洲| 欧美AAAA黄片| 黑人天8A∨高清网站| 色哟哟 日韩精品| 97九色人妻| 国产精品视频在线观看| 台湾佬激情综合| 欧美性天天| 国产suv精品一区二区四| 国产熟女精品一区二区| 91亚洲不卡一区| 秋霞 色色| 亚洲情色1区| 亚洲精品自拍| 国产美女激情| 91成人精品在线播放| 91国产伊人大香蕉| 一起草AV| 91丨国产丨白浆秘 洗澡动漫| 激情图片伦理国产一区二区日韩| 国内精品久久人妻性色av| 在线97在线| 国产无马视频| 久久久久久久久9| 伊人AAA| 国产辣妈在线视频福利| 日韩电影天堂视频一区二区| 一区三区啪啪| 啊啊啊啊啊啊啊啊视频| 熟啊v色欧美热| 五月婷网站| 加勒比无码毛片| 少妇高潮99p| 色欲Av人妻精品一区二| 久污| 亚洲91少妇| 视频一区二区三区精品| 国产吹潮女在线观看| 99ri视频| 91人妻最真实刺激绿帽| 天天舔日美女视频| 日韩二三区| 日韩,欧美,中文在线| 欧美 亚洲精品首页| 日本A级视频| 丁香九月激情啪| 日本精品一级二级三级| 国产精品色约约| 骚货人妻偷情自拍在线视频| 天天搞在线综合网| 亚洲另类天堂| 久久久精| 97日视频| 综合影院亚洲| 操逼网站视频漫画国产| 日本羞羞的视频在线播放| 啊啊啊啊,啊啊好多水| 日本午夜福利视频| 这里只有精品视频在线| 亚洲av综合色区无码一| 国产偷人伦激情在线观看| 大干人妻| 日日黄色三级网站| 区日韩亚洲乱码av电影| 亚洲高清无码免费观看视频| 亚洲国产精品9999在线观看| 亲子敌伦对白在线播放| 久草看看看| 大香蕉琪琪日本女优不卡| 在线女人91| 激情五月天网站| 欧美强奸乱| AV一区观看| 3PAV乱伦视频| 好爽免费视频| 玖玖久久久| 久久精品国产97欧美精品亚洲 | 亚洲国产美女久久久久| www欧美91| 天操天操夜操夜月月年年操操| 啊啊啊啊啊啊好湿好爽视频| 清纯唯美激情四射| 亚洲日韩AV视色| 六月丁丁香| 日韩国产中文字幕| 色色色欧美| 天天综合欧美综合| 红杏大香蕉| 色色婷| 久久久婷| 男人的天堂2010| 长长久久免费视频| 欧美制服网站美腿丝袜| 麻豆天美国美国产| 久久久久日本视| 老熟女91av| 中文字幕在线观看AV| 亚洲天堂色图| 老熟妇一区二区三区啪啪| 97日视频| 欧美成人一区二区| 欧美后入式| 67914在线兔费成人视频| 亚洲精品乱码久久久久久蜜桃麻豆| 9997se| 香蕉国产97| 色色九区| 亚洲欧洲中文日韩女优乱码| 国产99精品一区二区三区免费| 一级特黄aaa大片在线观看成人一级片在线观看| 日韩福利综合一区| 在线国产福利网址导航| 青娱乐日韩无码| www.狠狠操| 麻豆国产原创AV色哟哟| 九区国产| 欲色综合| 黄色成人网久久久久久| 脫衣舞一区二区三区| 在线强奷到舒服的无码视频| 激情综合五月| 日韩传媒在线| 亚洲精品久久久久久| 91爱| 影音先锋视频在线| 五月天社区| 九一亚洲国产免费| 熟女露脸激情自拍视频| 火箭成精品视频884必出精品| 日韩免费a级毛片无码a∨| 国产精品一区av在线| 久久久精品视频免费观看| 女优视频第10页| 午夜精品久久久久久久99热影院 | 无码WWW免费视频网站| 99无码视频| 99热导航| 欧美天天干| 无码丰满熟妇一区二区浪潮AV| 天美麻花大全视频| 狠狠干精品一二三四五六2022| 国产精品久久久久久夜夜夜夜| 人人妻人人爽| 2019天天干天天操| 成人精品视频一区二区| 欲综合网| 美女操逼福利视频| 91国产丝袜足交精品视频| 亚洲AV色图一区| 国产无码三级视频在线观看| 色婷亚洲五月在线观看| 亚洲国产精品久久久男人的天堂| 国产又粗又长的视频| 免费无码国产精品v片在线观看| 色婷婷电影网| 国产热av| 久久毛卡| 午夜福利在线视频1000| 欧美精品三级黄片| 99热亚洲| 亚洲国产97在线精品一区| 国产精品一区二区校花| 麻豆久久久久久久久丝袜 | 91天堂色男人的天堂| 久久久久久久78| 91天天| 国产刺激视频| 亚洲欧美洲综合| 亚洲午夜av| 美国三级日本三级久久99| 色综合久久av| 日韩精品9999| 日本天天吊| 91综合无码| 去干网最新版| 久草毛片| 大香蕉久| 欧洲精品二区| 天天日天天操心| 日韩久射综合| 99这里有精品| 试看60秒 爽| 色噜噜综合在线| 四虎免费在线观看| 看看小穴| 国产一区二区三区高清视频| 九久久九精品视频| 91av一区二区在线观看| AV在线资源| 蜜乳AV一区| 视频黄站| 国产毛片精品一区二区色欲黄A片| 色色九区| 国产精品九9| 囯戸精品高潮呻吟旡码| 热久久国产精品视频大陆精品| 欧美一区二区福利在线| 久久久久久久久久久久欧美日| 2019久久久久久久久福利| 精品一区二区三区四区外站| 秋霞蝌科网日本一区| 亚洲做性| 欧美超碰9798| 国产日韩欧美操逼视频| 欧美日韩97在线| 丁香五月激情五月| 三级日韩一区二区三区| 日本新免费二区三区| 嫩草影院性色| 九久精品| 天天色怡春院| 九九性视频| 日本αv| 天天操天天谢| 99热精品在线观看| 亚欧免费| 97神马久久| 久久只有精品一区二区三区| 久久精品店| 国产三级片在线观看| 国产AV天美| 久久久精品成人国产| 91天天| 91国产丝袜美女| 亚洲欧美校园另类春色| 免费伦费视频在线观看| 九九碰九九爱97超| 久久成人午夜狠狠| 乱日视频| 免费人成?大片在线播放| 999久久久免费精品国产牛牛| 手机av亚洲丝袜美腿日韩第一页二页| 蜜桃臀av在线观看| 色成人Www精品永久观看| 97综合国产| 伊人96在线| 中文字幕av久久爽Av| 日欧操屄视频| 天天草夜夜草高潮片| 一区二区视频在看| 亚洲诱惑天堂 | 中文字幕黄片在线| 人人妻人人爽一区二区三区| 麻豆国产成人精品| 欧美专利1区2区3区4区5区免费| 福利在线黄片| 国产欧美成人第一页在线观看| 国产精品香蕉| 天天操妹子| 久久久少妇诱惑精品视频| 中文字幕乱码人妻一区二区三区,99精品| 自拍偷拍2025在线观看| 涩涩这里只有精品视频| 亚洲精品一二牛牛| 亚洲欧美日韩激情不卡| 青青草依人大香蕉| 偷拍片久久| 美女毛片999| 九九热超碰97亚洲最新香蕉 | 欧美日韩欧美| 伊人网一本| 精品九九淫乱男| 麻豆天美传媒在线视频天堂| 97在线日韩中文字幕| 人妻精品综合中文字幕在线 | 亚洲日本韩国极品一区二区| 99re在线观看| 色999五月色| 久久露脸国产老熟女| 黄色片大香蕉| 怡红院一区二区熟女人妻| 久久久青青草| 亚洲情色一区综合| 美女自卫慰黄网站免费| 国产一区二区三区久久久精品| 人人妻人人澡人人爽人人精品浪潮| 99这里都是精品| 一级性爱视频免费在线| 男人夜色天堂ss| 337p大胆噜噜噜噜噜91Av| 久久久久成人亚洲国产| 欧美亚洲尤物久久| 色狠狠 - 百度| 乱伦av麻豆| 国产精品一二三在线看| 蜜桃av综合网发布| 国产成人无码久久精品| 欧美人妻一区| 日韩欧美中文| 亚洲乱伦图片视频| 思思热免费视频观看| 日本福利二区视频| 志村玲子视频一区二区| 中文字幕在线24| 国产有码一区| av久日| 亚洲日精品| 啊啊啊啊啊啊好多水| 奶水 人妻 哺乳 在线| 97在线欧| 91欧洲入口| 久9爱精品| 亚洲图片欧美色| 自拍偷拍国产欧美日韩韩| 久久91视频| 激情综合婷婷| 日本免费不卡二区| 秋霞鲁丝午夜无码一区二区三| 99re在线视频这里只有精品| 超碰在线91| AV一起草在线| 久久 国产精品 一区| 黄页大片在线观看| 亚洲色图欧美色图制服诱惑| 天天操妹子| 日本人妻中文字幕| 婷婷91| 东北女人的毛片| 亚洲蜜臀精品视频久久| 国产精品高潮久久久无码| av绯色| 国色天香av| AV色五月天| 百度百度日本操逼| 欧美日韩性爱操大逼| 成人影 天天操 亚洲| 亚洲 无码 有码 中文字幕| 久久久久亚洲| 欧日a| 黑人天8A∨高清网站| 久超碰这里只有精品| 日本操逼aaaaa| 激情综合五| 国产乱青青草久久| 美国日韩黄片| 日本狠狠干| 青青草久久| 天天视频黄| www.夜夜| 欧美在线第五页| 影音先锋日本一区二区| 亚洲图片 91| 超碰偷拍| 亚洲五码一区二区三区| 欧美综合第一| 天天做天天爱| 亚洲av无码成人精品国产| www.AV有限公司一区| 日本影视久久免费| 狠狠穞A片一區二區三區| 国产精品一区二区后入| 青青操网| 国产极品999| 男人的天堂网页| 大香蕉伊人久久| 老色鬼成人精品视频下载大在线观看| 日韩操逼性鲍| 伊色久人大在线| 91小视频| 久久久精品一区二区| 久久人人爽爽人人爽人人片αV| 无码一区二区三区四区五区六区七区八区九区十区视频 | 国产精品2020| 久久精品国产Aⅴ| 九九九九久久久| 亚洲图片欧美偷拍| 激情久久久| 情色大香蕉| 久久久久久久久久8888| 色九色久| 丁香五月影院| 欧美东京热青青草| 六六久久日韩不卡| 国产精品乱码久久久久| 91久久久久免| 亚州91| 最新一二三区视频| 免费看黄片现成| 国产肏屁眼视频| www.99中文字幕| 大香蕉青青9| 欧美视频边做饭边橾| 色97国产69香蕉| 综合啪啪| 偷拍盗拍亚洲色图图片 | 麻豆亚洲AV成人无码久久精品| 99∨VTV| 亚洲色天| 青青久操| 久久久久久精品免费看A级| 亚洲骚男同com| 99色在线| 精品日韩人妻视频| 97资源免费视频| 在线观看黄色电话| 婷婷激情四射| 色盈盈影院| 亚洲国产成人精品久久久国产成人一区二区三.| 91超碰碰在线| 大香蕉久| 欧美一区二区三区不卡高清视频| 超碰1024久久| 人人摸人人叼| 亚洲色图欧美激情| 蜜臀久久久| 在线国产探花| 天天干天天操天天操夜夜操天天操| 大香蕉99热| 一级啊性爱在线视频| 欧美劲爆第一页| 亚洲色9| 欧美很很操视频| 翔田千里AV无码秘 三区| 国产乱码精品久久久久久| 午夜男女爽爽爽在线视频| 大香蕉一级黄色片久久| 欧美激情久久久久| 色婷婷丁香五月| 亚洲激情综合另类男同| 一本大道青青| 超碰人妻中文在线| 97精品综合久久| 99久久精品无码一区二区毛片免费| 蜜臀在线看片| 宗合情欲网| 开心五月婷婷激情| av天堂精品久久| 天天久久| 天天在线91| 亚洲综合图文| 欧美一级三级| 入口操逼网站| 国产精品4p在线观看| 人妻夜爽夜夜爽| 青青草五月天| 116美女午夜| 一级免费啪啪片| 黑人白女精品一区| 少妇久久久久久久久| 尤物AV免费网站| 欧美A√综合网| 99热超碰| 香蕉综合网| 秋霞免费AV| 久久受www免费人成| 91青青草| 91亚洲图片| 国产日韩中文字幕欧美| 97亚洲欧美日韩| 一牛影视久久久一区二区三区| 99ri视频| 日韩另类| 亚洲精品aa久久伊人| 91深夜夜| 无码区蜜乳| 国产精品懂色tv影视免费观看| 友优传媒精品在线一区二区| 久9综合在线| 欧美日韩97在线| 色网综合网| 天天澡天天爽日日av| 欧美内射少妇| 婷婷伊人一区| 手机av天堂久久久久| 水澄无码AV| 亚洲黑丝在线| 国产精品交换一区二区| 天天干天天爽| 99热这里| 天天综合91在线| 992这里有精品| 日韩三级一区| 天美传媒国产原创中文字幕亚洲欧美另类 | 免费av在线播放二区| 国产家庭乱伦表演| 98人妻精品一区二区色欲| 色综合一本| 国产亚洲色停停久久99精品91| 亚洲不卡三级手机播放| av黄图片在线观看| 亚洲欧美一区二区网址| 2019精品国产无码成人| 性爱Av免费| 黑人无码一区二区| 久99久视频| 色色无码| 蜜桃臀 后入 一区 二区 三区 在线| 岛国小电影| 日韩9999| 一摸二插三插| 94色色电影网| 91视频精品| 日韩人妻播放| 丁香五月天堂| 久99久视频精选| 综合激情97 | 传媒在线观看一区二区三区| 亚洲色图欧美| 内射老妇BBWX0C0CK| 欧美日韩精品一区二区三区高清| 日韩AV一起草| 亚洲精品819| 97视频900| 夜夜欧美| 韩国手机不卡无码三级视频| 午夜寂寞欧美| 91大胆欧美| 亚洲第91页| 国产麻豆91欧美一区二区久久婷婷国产精品| 麻豆亚洲AV成人无码久久精品| 襙一襙| a级成人毛片免费视频高清| 99色婷婷| 天堂在线一区二区| 无码二级三级| www.亚洲黄色| 国产热RE99久久6国产精品首| 96AV精品| 青青草久久在线| 97亚洲精品| 成人乱码一区二区三少妇| 天天日日夜夜| 伦在线97| 一起草在线视频| 日韩在线观看字幕精品| 天无日色综合| 欧美丝袜美女电影一二三四区| 日韩9区| 91成人久久 | 少妇内射www在线观看视频| 日本三级精品| 26uuu性| 四虎AV无码| 久9爱精品| 国产精品一区二区校花| 伊人综合色网| 夜夜嗨老熟女AV一区二区三区| 黄片视频观看| 婷婷丁香六月| 国产精品在线一区二区| 91被操| 懂色AV一区二区三区| 97国产精品久久久久| 91久久免费视频互動交流| www.婷婷五月天| 精品9999| 人妻 中文 日韩| 欧美 青青草| 97AV在线观看| 啪啪91| 激情文学小说一区二区| 2020中文在线一区二区三区| 97 亚洲 日韩 欧美 在线| 九九九一二三| 深夜激情无码| 风骚少妇视频中文字幕| 国产成人 综合亚洲 天堂| 偷拍 精品 另类 四区| 亚洲深夜福利| 激情综合久久| 超碰97人人乐| 一区二区三区精品久久| 偷拍2020| 男女激情黄色网址| 激情黄色五月天| 国产日逼视频| 国产九区| 国产欧美精选自拍一区| 躁躁日曰躁2020| 欧美一二三级精品在线| 色九月综合| 亚洲另类欧美精品| 色狠狠综合噜一二三区| 性夜影院爽黄A爽免费动漫| 久久久久13| 亚洲成a人v欧美综合天堂下载| 夜夜操二区| 亚洲欧美日韩激情不卡| 91婷婷伊人狠人| 在线视频97| 亚洲男人天堂网久久| 无码久久亚洲高清,| yazhousetuoumei| 熟女这里只有精品6| 国产少妇高潮| 在线中文字幕极品av| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 日韩91网| 日本超碰在线国产一区| 97免费在线视频| 美女的肌被草喷水视频| 亚洲性爱免费电影| 99热日| 另类 综合 日韩 欧美 亚洲| 久久69精品久久久久久久| 欧洲精品一二三在线| 欧美日韩性爱操大逼| 一卡二卡三卡| 欧美精品四区| 人人操人人摸avav| 加勒比人妻综合| 久操精品网| 又大又大又大又粗爽高潮观看| 91色综合激情| 国产精品探花视频| 97在线免费视频观看| 亚洲AV乱码专区国产噜噜亚洲 | 人妻少妇三级| 国产吞精a级片激情电影| 国产精品久久泡妞网站| 欧美日韩人人精品| 上海一级黄片| 久久久久国色αv免费观看| 欧美专利1区2区3区4区5区免费| 色天使亚洲综合在线观看| 男人的天堂三级| 亚洲熟妇图片| 亚洲高清无码在线桃色| 欧美日韩另类激情图片| 久久久穴999| 日韩啪啪网| 女性喷水高潮在线观看| 亚洲国产亚洲天堂| 蜜臀久久99精品久久久老,,| 国产精品女生av| 日本大香蕉综合网红本杳社区| 国产精品 午夜福利| 国产精品自产拍在线观看社区 | 91网18| 另类小说五月天| 极品综合| 中文字幕一区二区三区人妻不卡| 久久中文色图| 91狠狠色丁香婷婷综合久久精品| 亚洲精品一区二区精品| 久久香蕉国产线看观看亚洲女人| 超碰在线人妻不卡| 婷婷综合激情| 精品偷拍13p欧美dodk视频| 中文字幕三四区| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 精品亚洲国产成人AV制服丝袜| 操逼网站网站| 人妻娇喘 激情视频| 欧美激情色婷婷花野真衣一区二区| 色情综合网| 国产精点久久久成人| 亚洲无线码欧洲精品区别| 久久啊啊| 亚洲精品乱码久久久久久蜜桃麻豆| 久插综合| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 夜夜草天天| 综合 亚洲 欧美| 久久天堂网| 九区国产| 香蕉久久精品| 欧亚乱色熟一区二区三四区| 婷婷午夜| 大香蕉乱伦视频网| 国产综合永久精品日韩鬼片| 岛国在线免费视频| 欧美高清无码免费视频高清版| 96久久久久久久| 99热精品在线观看| 青青草中出视频 | 色情五月丁香| av凤凰久久久| 国产福利影视| 青娱乐久久艹| 熟女人妇一区二区三区| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 最新日产中文在线麻豆| 巨爆乳一区二区爆乳区| 色y情视频免费看| 老司机深夜18禁污污网站| 老司机午夜精品视频| 97啪啪| 人人模人人看| 影音先锋每日最新资源在线观看| 欧美激情久操网| 男啪女色黄无遮挡免费观看| 久久久亚洲熟妇熟女| 欧美综合网| 亚洲欧美日韩制服另类| 九九热最新| 9 7超碰在线免费观看| 久久啊哟| 色女网日韩| 国产AV天美| 黄呦呦在线| 玖玖草久草99蜜月一区二区三区| 亚洲熟久久| 日韩特一级久久| 欧美综色欧| 国产一区在线播放|