国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

iOS與Unity混合開發(fā)中的通用指令化繪制工具設計

iOS與Unity混合開發(fā)中的通用指令化繪制工具設計 在實際 iOS 與 Unity 混合工程里所謂“iOS-Unity 通用繪制工具”通常并不是一個能自動把世界坐標換算成屏幕坐標的“黑盒”而是一套從繪制數據協(xié)議、Unity 側指令封裝、iOS 原生渲染到回寫鏈路一起協(xié)同的方案。之所以需要單獨抽一套通用層是因為大多數項目在 UI 動態(tài)畫線、涂鴉標記、軌跡預覽這些場景里都會遇到同一個問題Unity 側已經采集到了點序列iOS 原生側還需要再畫一份兩端如果各自寫一套坐標換算和樣式解析等到聯(lián)調時就會出現線條偏移、觸摸事件不同步、橫豎屏旋轉后錯位等問題。這篇文章會圍繞“動態(tài)畫線”這個最小場景介紹一套可落地的通用繪制工具結構。你會看到如何定義兩端都認的 JSON 繪制指令如何在 Unity 側生成噪聲曲線、折線和涂鴉數據如何在 iOS 側用 CAShapeLayer 渲染這些指令并通過橋接方法把原生觸摸事件回傳給 Unity。工程中不涉及平臺破解、抓包或其他灰產場景只討論正規(guī)游戲、渲染工具和原生輔助功能開發(fā)。1. 先確定主線這是一套指令化繪制橋接不是大而全的畫板 SDK1.1 這種工具通常會出現在哪些業(yè)務場景里游戲內玩法或輔助編輯器常見的繪制需求大致可以分成三類玩家用觸摸筆跡做涂鴉、簽名、關卡內標記。Unity 把業(yè)務生成的路徑、連擊軌跡、噪聲波形顯示在場景層或 UI 層。iOS 原生層需要在 Unity 渲染結果之上疊加一層批注例如截圖標注、AR 引導線、回放控制工具欄。第 1 種和第 2 種在純 Unity 工程中可以用 LineRenderer 或 UGUI 動態(tài)網格完成。真正麻煩的是第 3 種。Unity 的渲染結果和 iOS 原生視圖屬于兩個不同的渲染體系Unity 使用 OpenGL ES 或 Metal 渲染到自己的屏幕區(qū)域iOS 原生視圖則基于 UIKit、Core Animation。如果業(yè)務要求原生側動態(tài)畫線而 Unity 側又要同步同一份數據最穩(wěn)妥的做法不是截屏下發(fā)而是把繪制動作本身抽象成指令讓兩端執(zhí)行同一份指令集。1.2 通用繪制工具應該只管理繪制不應該直接管理游戲對象做這類工具時容易犯的最大錯誤是試圖讓一條線條直接對應一個 GameObject 或一個 UIView然后用很重的腳本去控制生命周期。真正的通用繪制工具應當更薄接收一個繪制動作集合。將動作轉換成統(tǒng)一數據格式。把數據提交給對應渲染端。渲染端只負責畫不負責業(yè)務邏輯。這里還有一個關鍵取舍數據協(xié)議才是核心渲染實現可以替換。Unity 編輯器里可以用 UGUI 頂點臨時預覽iOS 原生里可以用 CAShapeLayer 渲染未來如果切換到 Metal 自繪也只需要替換最底層的render(payload:)方法不需要改動上層業(yè)務代碼。2. 第一層基礎設施讓 iOS 和 Unity 都理解同一份繪制指令2.1 先用一個可以擴展的 JSON envelope 承載整批操作繪制數據不能只包含單個線條的點數組。實際場景里還包含畫布 ID、畫布寬高、坐標空間、繪制顏色、線寬、透明度、是否需要清除畫布、是否允許原生接收觸摸事件等附加信息。建議先定義一個 envelope 結構用來包住整批操作。{ version: 1, canvasId: annotation_canvas, coordinateSpace: uikit_points, viewport: { width: 390, height: 844, scale: 3.0 }, actions: [ { op: stroke, pathId: noise_001, style: { strokeColor: #2277FF, strokeWidth: 4, opacity: 0.9, lineCap: round, lineJoin: round, dashPattern: [] }, points: [ { x: 20, y: 500 }, { x: 60, y: 470 }, { x: 100, y: 420 } ] }, { op: clear } ] }這段 JSON 是兩端共同約定的協(xié)議。version用來做向后兼容canvasId用來區(qū)分多個畫布coordinateSpace告訴兩端坐標原點在哪里viewport則保留了畫布邏輯尺寸方便 iOS 原生側在屏幕旋轉后做映射。actions數組用于繪畫動作每個動作都是一條獨立可執(zhí)行指令。2.2 動作類型要按“可回放、可增量追加”設計繪制工具的動作類型不需要一開始就很多但每種動作的語義必須明確不能一個op里既畫線又處理手勢。建議從最小集開始op 類型用途必需字段說明stroke繪制一條折線或曲線pathId,style,points一條路徑只對應一個 CAShapeLayerclear清空畫布無可以搭配exceptPathIds實現部分清除layerVisible隱藏或顯示某一批路徑pathId,visible用于標記線的擦除和恢復enableTouch開啟或關閉原生觸摸采集enabled避免原生層誤接管手勢touchiOS 原生把觸摸點同步給 Unityphase,point,pointerId這是反向指令在真實工程中stroke不必高頻發(fā)送整條路徑。更合適的策略是 Unity 先在業(yè)務層累積點數據用手勢結束時再把整條路徑發(fā)給 iOS。如果確實需要實時預覽也可以按幀發(fā)送增量點但增量點仍要歸屬于同一個pathId。這種設計讓回放、回滾、撤銷都變得簡單因為每個操作都是可以重放的純指令。2.3 坐標系統(tǒng)一是兩端聯(lián)調的第一道門檻iOS 的 UIKit 坐標以左上角為原點x 向右增大y 向下增大。Unity UI 的默認坐標系在某些設置下 y 軸方向并不一致如果直接使用 Unity 的屏幕像素坐標很容易出現上下顛倒。在實際項目中更推薦使用“歸一化坐標”或“邏輯點坐標”。協(xié)調方式可以這樣定iOS 全部使用 UIKit point不寫 pixel。Unity 向 iOS 發(fā)送點之前先把世界坐標或 UI 坐標換算成 iOS 畫布坐標。在 iOS 側渲染時如果畫布尺寸和 JSON 里記錄的viewport不一致使用比例換算而不是直接 draw at point。float uiKitX uiX; float uiKitY screenHeightPoints - uiY;這段換算說明的是 Unity 坐標轉 iOS 坐標時的典型處理思路。如果兩端都使用歸一化坐標就是下面這個更穩(wěn)的公式normalizedX pointX / viewportWidth normalizedY pointY / viewportHeight收到 JSON 的端再用自己的實際畫布寬高乘回去就能應對不同分辨率。3. Unity 側把繪制邏輯收斂成一個命令緩沖器3.1 C# 側不要到處直接操作 LineRenderer如果項目的業(yè)務層到處調用LineRenderer.SetPosition后面想加 iOS 原生畫布就會非常痛苦。通用繪制工具的第一步是在 C# 側做一個命令緩沖器業(yè)務層只負責向緩沖器提交點數據和樣式。public class DrawingCommandBuffer { private ListDrawingStrokeAction _strokes new ListDrawingStrokeAction(); public void BeginStroke(string pathId) { _strokes.Add(new DrawingStrokeAction { PathId pathId }); } public void AddPoint(float x, float y) { if (_strokes.Count 0) { return; } var current _strokes[_strokes.Count - 1]; current.Points.Add(new DrawingPoint { X x, Y y }); } public void SetStrokeStyle(Color32 color, float width, float opacity) { if (_strokes.Count 0) { return; } var current _strokes[_strokes.Count - 1]; current.StrokeColor ColorUtility.ToHtmlStringRGBA(color); current.StrokeWidth width; current.Opacity opacity; } public void EndStroke() { // 這里可以做點數壓縮、抽稀和校驗 } public ListDrawingStrokeAction Flush() { var result _strokes; _strokes new ListDrawingStrokeAction(); return result; } }DrawingStrokeAction和DrawingPoint都是可序列化的 DTO不依賴 UnityEngine 的JsonUtility數組序列化限制實際工程可以結合Newtonsoft.Json、System.Text.Json或 Unity 自帶序列化器處理。重點在于業(yè)務層在代碼里只看到“開始畫筆、加一個點、設置樣式、結束畫筆”不需要關心這些點最終是進了 LineRenderer 還是 CAShapeLayer。3.2 一個可運行的最小用例用 PerlinNoise 生成動態(tài)波形Mathf.PerlinNoise 經常被用于生成地形高度、云層變化、人物抖動和波形軌跡。在繪制工具里它適合用來演示“Unity 動態(tài)生成路徑點再交給原生渲染”的完整鏈路。下面這段代碼把噪聲值轉成一條連續(xù)的折線橫坐標從畫布左側均勻推進到右側。public string BuildNoiseStrokePayload( float canvasWidth, float canvasHeight, float seed, int sampleCount) { var buffer new DrawingCommandBuffer(); float startX 20f; float endX canvasWidth - 20f; float baseY canvasHeight * 0.5f; float amplitude canvasHeight * 0.2f; buffer.BeginStroke(noise_ seed.ToString(0.000)); buffer.SetStrokeStyle( new Color32(0x22, 0x77, 0xFF, 0xFF), 4f, 0.9f); for (int i 0; i sampleCount; i) { float t (float)i / sampleCount; float noiseValue Mathf.PerlinNoise(seed t * 6f, 0.5f); float x Mathf.Lerp(startX, endX, t); float y baseY (noiseValue - 0.5f) * 2f * amplitude; buffer.AddPoint(x, y); } buffer.EndStroke(); var payload DrawingPayloadBuilder.BuildJson( annotation_canvas, canvasWidth, canvasHeight, buffer.Flush()); return payload; }這段代碼的關鍵點有三個sampleCount控制點密度點太密會浪費原生渲染開銷點太疏則曲線不平滑。入門項目可以先給 200 個點。Mathf.PerlinNoise(seed t * 6f, 0.5f)的第二個參數寫固定值得到的是一條一維噪聲波形如果第二個參數也隨 t 變化得到的是一塊噪聲面。BuildJson負責把 DTO 列表轉成上一節(jié)定義的 JSON envelope不參與渲染邏輯。3.3 Unity Editor 內可以先預覽再把指令提交給原生如果工程暫時只需要在 iOS 原生側渲染那么在 Unity Editor 里調試時需要有一個輕量預覽路徑。預覽最簡單的方式是用OnDrawGizmos或 Gizmos.DrawLine不引入額外 UI 組件。#if UNITY_EDITOR private ListVector2 _previewPoints; private void OnDrawGizmosSelected() { if (_previewPoints null || _previewPoints.Count 2) { return; } Gizmos.color Color.blue; for (int i 0; i _previewPoints.Count - 1; i) { Gizmos.DrawLine( new Vector2(_previewPoints[i].x, _previewPoints[i].y), new Vector2(_previewPoints[i 1].x, _previewPoints[i 1].y)); } } #endif如果你用的是 UGUI 動態(tài)畫線也不建議一開始就直接寫自定義網格。先用少量管理類把“路徑數據”保存下來再用LineRenderer或UGUI做編輯器預覽等到數據協(xié)議穩(wěn)定后再把真正發(fā)布到 iOS 的渲染實現切到原生層。編輯器預覽和 iOS 原生渲染可以并存預覽用于快速檢查原生渲染用于真機驗證。4. iOS 原生側用 CAShapeLayer 渲染指令用 Auto Layout 管理工具欄4.1 用 Codable 解析上一節(jié)下發(fā)的 JSONiOS 原生側應當有一個專用繪制視圖不建議直接在主ViewController里寫繪制邏輯。繪制視圖負責解析 JSON、管理 CAShapeLayer、處理觸摸事件ViewController 只負責布局??梢韵扔?Codable 定義結構struct DrawingEnvelope: Codable { let version: Int let canvasId: String? let coordinateSpace: String let viewport: DrawingViewport? let actions: [DrawingNativeAction] } struct DrawingViewport: Codable { let width: CGFloat let height: CGFloat let scale: CGFloat? } struct DrawingNativeAction: Codable { let op: String let pathId: String? let style: DrawingStrokeStyle? let points: [DrawingPoint]? let visible: Bool? let enabled: Bool? let phase: String? } struct DrawingStrokeStyle: Codable { let strokeColor: String? let strokeWidth: CGFloat? let opacity: CGFloat? let lineCap: String? let lineJoin: String? let dashPattern: [CGFloat]? } struct DrawingPoint: Codable { let x: CGFloat let y: CGFloat }解析完成后通過op分發(fā)到不同處理函數。核心邏輯是把stroke動作渲染成一個CAShapeLayer。func render(envelope: DrawingEnvelope) { if let viewport envelope.viewport { self.viewport viewport } for action in envelope.actions { switch action.op { case stroke: renderStroke(action) case clear: layer.sublayers?.removeAll() case layerVisible: updateLayerVisibility(action) case enableTouch: isTouchEnabled action.enabled ?? false default: break } } }CAShapeLayer直接使用 Core Animation 渲染矢量路徑不涉及額外貼圖對于畫線工具來說比頻繁提交紋理更高效也更容易做顏色、圓角、線帽和虛線控制。4.2 繪制 stroke 時要注意坐標映射和圖層命名CAShapeLayer和UIBezierPath是 iOS 原生繪制線的常用組合。下面給出一個基礎實現思路private func renderStroke(_ action: DrawingNativeAction) { guard let points action.points, points.count 2 else { return } guard let bezierPath UIBezierPath() else { return } let firstPoint mapRenderPoint(points[0]) bezierPath.move(to: firstPoint) for point in points.dropFirst() { let nextPoint mapRenderPoint(point) bezierPath.addLine(to: nextPoint) } let shape CAShapeLayer() shape.path bezierPath.cgPath shape.fillColor UIColor.clear.cgColor shape.strokeColor color(from: action.style?.strokeColor).cgColor shape.lineWidth action.style?.strokeWidth ?? 2 shape.opacity Float(action.style?.opacity ?? 1) shape.lineCap .round shape.lineJoin .round if let dashPattern action.style?.dashPattern { shape.lineDashPattern dashPattern.map { NSNumber(value: Double($0)) } } if let pathId action.pathId { layer.addSublayer(shape) shape.name pathId } else { layer.addSublayer(shape) } } private func mapRenderPoint(_ point: DrawingPoint) - CGPoint { let logicalW viewport?.width ?? bounds.width let logicalH viewport?.height ?? bounds.height let normalizedX point.x / logicalW let normalizedY point.y / logicalH return CGPoint( x: normalizedX * bounds.width, y: normalizedY * bounds.height ) }如果下發(fā)時已經約定好 iOS 坐標是“左上角原點”這里就不需要反轉 y。反之如果 Unity 發(fā)送的是從下到上的坐標就需要在mapRenderPoint里補一句y bounds.height - y。注意不要把CAShapeLayer的frame當成業(yè)務狀態(tài)去維護。frame只決定 layer 在其父坐標系里的位置一般繪制坐標都應由path本身攜帶圖層 frame 保持和畫布對齊。4.3 使用 UIStackView 和 Auto Layout 搭建繪制工具欄繪制工程里經常需要一組顏色選擇器、畫筆寬度滑塊、撤銷按鈕。這些控件如果用 Frame 硬編碼橫豎屏切換時需要一個一個改坐標。用UIStackView配合 Auto Layout可以在一開始就避免這種布局問題。private lazy var toolbarStackView: UIStackView { let stack UIStackView() stack.axis .horizontal stack.alignment .center stack.distribution .equalSpacing stack.spacing 12 stack.translatesAutoresizingMaskIntoConstraints false return stack }() override func viewDidLoad() { super.viewDidLoad() view.addSubview(canvasView) view.addSubview(toolbarStackView) let colorButton UIButton(type: .system) colorButton.setTitle(顏色, for: .normal) let widthSlider UISlider() widthSlider.minimumValue 1 widthSlider.maximumValue 20 let clearButton UIButton(type: .system) clearButton.setTitle(清空, for: .normal) toolbarStackView.addArrangedSubview(colorButton) toolbarStackView.addArrangedSubview(widthSlider) toolbarStackView.addArrangedSubview(clearButton) NSLayoutConstraint.activate([ toolbarStackView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16), toolbarStackView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16), toolbarStackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8), canvasView.leadingAnchor.constraint(equalTo: view.leadingAnchor), canvasView.trailingAnchor.constraint(equalTo: view.trailingAnchor), canvasView.topAnchor.constraint(equalTo: toolbarStackView.bottomAnchor, constant: 8), canvasView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) }這種結構里canvasView負責整塊繪制區(qū)域工具欄stackView懸浮在上方。由于繪制工具往往需要占用比較多屏幕面積所以要讓canvasView具有明確的 leading、trailing、top、bottom 四邊約束不要只給 width 和 height。5. 端到端鏈路從 Unity 主動推指令到 iOS 原生回傳觸摸事件5.1 Unity 調用 iOS 原生方法的橋接層Unity 工程打 iOS 包后C# 可以直接調用工程里的 Objective-C/C/C 函數。前提是原生側實現了同名導出函數并且 C# 使用__Internal標記。#if UNITY_IOS !UNITY_EDITOR using System.Runtime.InteropServices; public static class DrawingNativeBridge { [DllImport(__Internal)] private static extern void UnityDrawingBridgeSend(string payload); public static void Send(string payload) { UnityDrawingBridgeSend(payload); } } #endif在 Unity 業(yè)務代碼里調用時要區(qū)分 Editor 和 iOS 真機環(huán)境。Editor 里不能直接調用__Internal函數否則會因為找不到入口導致崩潰。public void FlushToNative(string payload) { #if UNITY_IOS !UNITY_EDITOR DrawingNativeBridge.Send(payload); #else Debug.Log([Drawing] preview only, payload size payload.Length); #endif }5.2 iOS 原生導出函數和回傳 Unity原生導出的 C 函數接收到字符串后要切換到主線程再交給繪制視圖。不要在回調函數里直接操作 UIKit 對象。extern C { void UnityDrawingBridgeSend(const char *jsonString) { if (jsonString NULL) return; NSString *json [NSString stringWithUTF8String:jsonString]; dispatch_async(dispatch_get_main_queue(), ^{ [[NSNotificationCenter defaultCenter] postNotificationName:DrawingPayloadDidReceive object:json]; }); } }iOS 原生側在touchesBegan、touchesMoved、touchesEnded中采集觸摸點后可以通過UnitySendMessage回傳給 Unity 場景里的某個 GameObject。extern C { void UnityDrawingBridgeTouchEvent(const char *eventJson) { UnitySendMessage(DrawingMain, OnNativeTouchEvent, eventJson); } }C# 側對應寫一個普通方法public class DrawingMain : MonoBehaviour { public void OnNativeTouchEvent(string payload) { var touchData JsonUtility.FromJsonNativeTouchEvent(payload); // 根據 touchData.phase 處理 down、move、up } }這個回路的價值在于Unity 只負責下發(fā)熱點指令原生側負責繪圖和手勢兩端不會互相阻塞。5.3 真機驗證怎樣的輸出才算鏈路打通搭建完橋接后不要只看畫面是否出現應該按下面的順序驗證在 Unity 場景里放一個“生成噪聲線”按鈕。點擊按鈕后Unity 組包并調用FlushToNative。iOS 原生 Xcode 控制臺應輸出收到 JSON 的日志。繪制視圖上出現藍色噪聲線。在 iOS 繪圖層用手指滑動Xcode 控制臺應輸出 touch 事件。Unity Console 中應該能收到OnNativeTouchEvent回調。排查鏈路可以按下表逐步查看驗證點預期現象如果失敗優(yōu)先檢查Unity 按鈕點擊日志出現 payload 長度C# 里是否走了UNITY_IOS分支原生收到 JSONXcode 打印收到字符串導出函數名是否一致JSON 是否 NULL視圖繪制成功藍色噪聲線出現JSON 里coordinateSpace和坐標映射觸摸采集成功iOS 日志輸出觸摸點isTouchEnabled是否為 trueUnity 收到回傳Unity 日志顯示 touch phaseUnitySendMessage的對象名是否真實存在6. 這幾個坑最容易在 iOS-Unity 繪制鏈路里出現6.1 橫豎屏旋轉后線條位置錯亂很多繪制工具一開始就鎖定豎屏所以橫豎屏來回切換時才暴露出坐標系問題。CAShapeLayer的path不會自動跟隨 view 的 size 變化重新計算尤其是你已經保存了絕對坐標而不是歸一化坐標。排查方法確認 JSON 下發(fā)時是否攜帶了當時的viewport。確認mapRenderPoint是否使用當前 bounds 反算。旋轉前后如果畫布尺寸發(fā)生變化需要重新觸發(fā)整批指令的重新渲染。最穩(wěn)妥的做法是在 iOS 原生側保留最后一份DrawingEnvelope在layoutSubviews或viewDidLayoutSubviews中重新執(zhí)行一次render(envelope:)。但如果每次都新建 CAShapeLayer內存會漲得很快性能不好所以生產項目偏向于保存 path 列表在旋轉后重建。6.2 動態(tài)畫線過于頻繁最終導致卡頓或內存報警每次touchesMoved都生成新的CAShapeLayer是畫板類項目最常見的錯誤。一條手指路徑可能產生幾百個 move 回調首幀點創(chuàng)建好 layer 后后續(xù)點只需要調用UIBezierPath.addLine并更新同一個 layer 的path。不要把每個點都提交一個大 JSON。更推薦的做法是手勢 down 時創(chuàng)建一條新 stroke。move 時把點追加到內存并且定時批量渲染。up 時才把完整 stroke 發(fā)送給 Unity 或保存到回放列表。動態(tài)線回放階段則使用 CADisplayLink每幀推進有限個點。性能排查順序建議第一看 CAShapeLayer 是否過多第二看是否頻繁調用layer.path 賦值第三看是否把整條路徑 JSON 高頻發(fā)送到日志或文本控件里。6.3 iOS 真機上出現 DllNotFoundException: Unable to load DLL slua如果 Unity 工程集成了 slua 這類 Lua 橋接插件打包到 iOS 真機后控制臺可能會看到類似下面這一條DllNotFoundException: Unable to load DLL slua這條報錯不能從 C# 調用方單獨解決。它通常表示插件沒有以 iOS 支持的 native library 形式打進包里或者插件只導入了 Editor 版本。檢查方式如下查看插件的 iOS 版本目錄是否包含.a、.framework或.bundle文件。在 Unity 插件 Import Settings 中確認 Platform 勾選了 iOS。真機日志無法在 Editor 里復現所以要先確認你用 Xcode 構建的是真機包而不是模擬器包。跑一個只調用 slua 的極簡用例排除業(yè)務代碼干擾。如果輸入數據里還有 Lua 側動態(tài)生成的繪制點要注意點坐標在進入 C# 后仍然是 Lua 表里的數字必須先在 C# 側轉換成 DrawingPoint DTO再進行 JSON 序列化不能直接把 Lua 表格轉成 JSON 后混進 Native 繪制協(xié)議。6.4 渲染 API 或插件不統(tǒng)一導致構建期現象不可復現Unity 在導出 iOS Xcode 工程時渲染 API 可以在 Player Settings 里勾選。如果關閉 Auto Graphics API只留 iOS 支持的 Metal 渲染很多繪制相關的異常更容易復現。可以進入 Unity 的 Player Settings在 Other Settings 的 Rendering 部分手動確認Graphics APIs: Metal Auto Graphics API: false注意這并不會直接解決 DllNotFoundException但統(tǒng)一渲染 API 之后紋理、截圖和動態(tài)繪制相關的日志會更穩(wěn)定排查問題時也少一個變量。7. 生產環(huán)境下如何繼續(xù)演進這套通用繪制工具7.1 性能和內存優(yōu)化要從“減少指令和圖層數量”入手在開發(fā)環(huán)境跑通不代表能直接用于生產。上線或對外發(fā)布前至少要做一輪繪制性能檢查用幾百條動態(tài)線測一測 CAShapeLayer 數量對內存的影響。在性能面板統(tǒng)計 Unity 側 JSON 序列化耗時。在 iOS Instrument 里觀察 Core Animation 的 Commit 數量。如果使用小圖標、顏色點等貼圖資源Unity 側優(yōu)先考慮 Sprite Atlas 打包合圖減少小圖各自提交造成的多次內存拷貝和額外 Draw Call。下面這張表可以作為性能驗收清單項目開發(fā)環(huán)境關注點生產環(huán)境關注點JSON 格式可讀性好方便打印可壓縮頻率低于每幀多次指令數量越小越好按幀批量下發(fā)避免每個點一次調用CAShapeLayer一個 stroke 一個 layer定期清理無引用圖層或復用 path點序列完整保留方便調試增加抽稀算法保留視覺關鍵點圖標資源單圖測試Sprite Atlas 合批減少單獨加載橫豎屏鎖豎屏測試記錄最后 envelope旋轉后重放7.2 日志、監(jiān)控和回滾機制要跟著協(xié)議一起擴展通用繪制工具最大的優(yōu)勢是“指令可回放”生產環(huán)境要充分利用這個特性。用戶反饋線條丟失或錯位時你可以讓客戶端只上傳最近一段動作指令而不是上傳整張截圖。回放動作指令可以快速判斷問題是出在采集端、協(xié)議端還是渲染端。日志記錄要覆蓋四條鏈路Unity 初始化繪制指令的耗時。Unity 發(fā)送 payload 的時間點。iOS 收到 payload 和渲染完成的間隔。iOS 觸摸事件回傳給 Unity 是否成功。如果生產端需要支持撤銷、重做可以給每條動作增加一個本地自增序號或時間戳而不是用隨機字符串作為 pathId。帶有序號的指令流天然支持服務端合并和客戶端回放。7.3 給新項目團隊的落地建議第一次接入這套方案時不建議直接鋪開涂鴉、標注、AR 引導等全部場景。建議按下面這個順序做增量驗證先實現 Unity 到 iOS 的單向畫線只畫一條靜態(tài) Bezier 折線。再接入 PerlinNoise 生成動態(tài)波形驗證點序列變化。然后接入 iOS 原生觸摸回傳驗證 Unity 能收到手勢事件。最后再把顏色選擇器、線寬控制、清空、撤銷這些 UI 控件接入 UIStackView 工具欄。每一步都建立一個可運行版本再進入下一步。通用繪制工具真正要解決的不是“有沒有畫出來”而是當 Unity 側和 iOS 原生側都需要理解同一段用戶操作時能不能用同一種指令語言干凈地表達出來。只要協(xié)議穩(wěn)定、坐標系統(tǒng)一、圖層管理清晰后續(xù)再加曲線插值、橡皮擦、自定義筆刷、多端回放都是在同一個骨架上擴展而已。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产一区二区在线看| 开心五月激情网| 美女诱惑在线一区| 九九色精品| 日韩亚洲欧美中文字幕| 天天操人人操骚逼网站| 蘋果手機免費看成人Av| 国产日本久久免费精品| 少妇无码av专区线| 国产无马在线| 天天插网| 国产色图乱伦| 久久久久夜夜夜夜| 在线看污网站| 色香伊人| 亚洲视频,小说| 96久久精品一二三区色欲| 精品午夜福利| 欧美色图私拍91| 久久香蕉综合一本到3atv| 亚洲天天操| 亚洲亚洲亚洲天堂天堂| 一区二区三区四区在线不卡| m欧洲一级午老| 激情综合亚洲| 天堂种子在线www网资源| 欧洲亚洲国产综合在线| 国产三区免费在线观看| 亚洲一卡2卡3卡4卡乱码网站| 久久草草亚洲蜜桃臀| 在线观看啊啊啊啊啊| 久插综合| 99re6久热只有精品6在线直播 | 亚洲第一页色| 亚洲欧美在线观看免费| 八戒无码国产午夜福利| 婷婷超| 欧洲自拍色图gif在线| 久久超碰大香蕉| 国产夜夜艹| 丝袜美腿欧美| 老女人爆菊| 久久本道| 成人精品一区二区三区| 精品十三区| 麻豆精品久久久久久久| 天天影视射综合网| 日韩97精| 男人的天堂在线| 啊啊啊快操我视频| 久干网| 一区二区视频你懂的| 91N综合网在线| 青青国产在线拍揄自揄拍| 欧美成人亚洲精品| 大香蕉伊人在线成人AV在线观看 | 少妇激情一区二区三区视频| 女生看匆91网站| 国产suv精品一区| 一二区在线观看视频| 热热色综合网| 97在线免费视频| 精品亚洲| 8x福利精品第一福利视频导航| 亚洲日韩在线a不卡99精品| 97在线观看免费视频| 色综91| 亚洲欧美首页| WWW啪啪的com| 日韩激情啪啪啪| 国产黄色av大片网站| www久| 电影69乱码96| 高清肉丝中文无码| 少妇精品久久| 少妇久久久久久久久| 韩国一级做a久久久久| 国产又黄又粗又猛大片| 一级黄色性爱A级片| 久久久久久国产无码精品| 欧美性爱系列| 偷拍亚洲高清图片| 哈哈操 大香蕉| 人人搞人人插人人操| 在线岛| 久久毛卡| 91美女视屏| 亚洲精品1区| 亚洲清纯综合| 在线一道啪| 色五月激情网| 亚洲综合另类色图| 久久精品国产AV一区二区三区| 亚洲精品一二区| 一本道综合色图| 国产精品第二页| 67914在线兔费成人视频| 激情婷婷黑人91| 欧美性暴力猛交| 国产精品久久久久无码Av网曝门| 性爱av在线免费观看| 欧美熟妇乱码在线一区| 男人的天堂 在线一区| 国产三区免费在线观看| 午夜天堂精品久久| 777超碰| 老司机老司机午夜影院| 欧美爆操91| 亚洲色图欧美色图综合| 亚洲欧美日韩免费电影| 久久视网78| 国产激情在线| 一区二区三区四区免费视频| 爱妻综合网| 翔田千里无码一区| 北京专精特新企业招聘信息| 欧美传媒一区| 国产无码三级视频在线观看| 丁香六月啪啪| 日韩大香蕉| 久久激情五月| 日逼97| 国产精品蜜乳AV| 国产剧情一区在线观看| 精品传媒在线一区| 亚洲丝袜色| 91热色| 国产女人和拘做爰视频| 综合网亚| 欧美性爱18观看| 中文伊人大香蕉视频| 91天美免费| 任你草| 色哟哟av网址| 久久久久久精品免费看A级| 伊人青青草久久| 蜜乳AV免费观看| 六月色婷婷| 欧美 亚洲 在线| 色情成人五月天| 91白嫩| 人人操AV| 国产乱伦亚洲色图高清无码| 天天做天天爱天天爽AV| www国产天美久久久| 99久久无色码| 国产在线激情视频| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 色老久久| 99热思思| 天天摸夜夜添无码小视频| 偷拍欧美亚洲| 大香蕉综合| 黄色一区二区秘书性感| 亚洲?V高清一区二区三区尤物| 国产原创精品| 国产高清免费不卡av| 国产一区二区精品在线视频| 亚洲天堂色图| 尤物黄色在线观看网站| 人妻内射一区二区在线视频| 国模少妇一区二区三区| 蜜臀视频网站| 91模特在线观看| 嗯嗯啊啊视频在线看| 大香蕉免费3| 天操天操夜操夜月操月年年操操| 不卡超碰护士AV在线免费播放| 亚川综合视频| 亚洲欧美首页| 欧美91网| 激情综合网一盗摄| 国产农村妇女精品一| 岛国黄色大片网站| 日韩中文字幕精品一区在线| 亚洲天堂男人网| 天天草AV| 日韩久久艹| 欧美一级三级| 99色热| 一级黄色视频网| 草草草视频在线免费看| 日本欧美不卡| 天天操熟妇| 五十路熟女工口| 天天日老熟妇| 亚洲国男人的天堂| 亚洲日韩精品在线播放| 在线A日本| 91熟女视频| 国产精品久久久久9999小说| 精品欧美日韩在线观看| 少妇精品久久久| 97色97好| 青青草吊丝| 五月激情天| 人人摸人人叼| 91丨九色丨43老版熟女| 爱射综合| 久久亚洲影院一区二区| 国产99热| 日本精品一区二区中文字幕| 啊啊啊慢点| 天天日天天看| 青青草大香蕉视频| 欧美AB在线| 欧美亚洲系列| 丰满人妻一区二区三区免费 | 激情啪啪拍91| 国产精品一级片在线看| aⅴ日韩成人电影av在线免费看av大全 | 男人天堂电影院| 91天堂网| 国产操逼网站亚洲一级黄色| 国产色图乱伦| 国产黄色视频久久| 日韩欧美午夜一区二区| 婷婷五月天影院| 久久女人一区二区三区| 日韩乱码av| 蜜臀精品1区2区| 人人澡综合涩| 97久久天天综合色天天综合色电影| 亚洲涩涩| 91中出视频| 亚洲黄色AV电影| 黄色区免费观看中文字幕| 免费看A片毛毛片在线播| 免费的很黄很污的全部视频| 91丨九色丨国产打屁股| 麻豆区99999| 色九九九综合| 欧美丰满少妇交换91欧美精品| 2019男人的天堂| 国产精品片| 成人小说视频在线精品欧美| 亚洲色图欧美视频| 精精夜夜| 涩涩久久精品| 酒色综合网| 亚洲av性爱电影| 日韩国产乱子伦App| 五月婷婷色| 亚洲成人一二三区| 97视频在线观看网站| 淫淫综合网| 人妻偷拍一区二区三区| 啪啪综合网| 五月婷婷hd| av影院十区| 久久丁香久草综合网| 黄色电影观看久久9| 日本在线一二 | 日韩99精品视频综合区| 99视频精品| 欧美色图成人网一区二区| 蜜汁欧美| 久久国产热视频97电影| 嗯嗯啊啊操死我| 青青久日| 熟女人妇一区二区三区| 欧美最婬乱婬爆婬性视频 | 超碰97人人乐| 亚洲囯产精品女人久久久| 1024日韩| 成人一二| 天天综合网~69| 97爱b| 999久久久| 久久九九网| 精品久久久不卡一区二区| 搡老女人老熟女91老熟女综合网| 亚一综合久久久久久久久久| 99r九九| 97超碰精品图片| 无码国产Av| 国产夫妻一区二区| 密臀视频三区免费网站| 成人婷婷丁香| 欧美桃色网| 国产无马视频| 欧美后入视频| 午夜偷拍久久熟女| 国产精品久久久久久久久久久久久久久久 | 26uuu成人影片| 91亚州日韩高清| 亚欧洲日韩国产精品| 高清无码 国产精品| 久久一二三级一一一| 超碰美国| 亚洲精品819| 亚州欧美另类| 婷婷五月天AV| 欧美色女人| 97干com| 色综合av综合久久| 操b网站亚洲无码| 国产成久久综合片| 日本新免费二区三区| 91精品微拍福利| 亚洲精品欧洲精品| 操B在线观看| 五十路人妻在线| 中文字幕精品一区二区精| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | av在线一区二区三区| 精彩久久中文| 激情综合五月| 天天综合97| 中文字幕在线观看网页| 国产极品精品美女视频| 日韩中文9| 色色无码| 久久riav中文精品| 美女十八禁| 天天影视网综合少妇| 青娱乐二区免费| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 热无码中文亚洲H一道本一区二区| 久久亚洲不卡一区二区三区| 无码精品人妻一区二区三区妖精| 日韩AV噜噜噜一区二区三区四区| 骚逼高潮久久精品| 国产精品免费日韩| 97 色综合| 亚洲综合图色在线| 欧美性爱在线无码| 日本不卡一区二区| 久久久久久中文| 蜜臀少妇一区二区| 黄色片,com| 亚洲深夜福利| 久久久111| 久久婷婷六月综合| 成人AV超碰免费在线| 亚洲脚交| 欧美性暴力猛交XXXX | 岛国小电影| 伊人女女资源在线观看| 日本一道在线播放高清| 久久久少妇诱惑精品视频| 99亚亚热| 色综合久久88色综合久久天天| 精品免费一区| 久久久免费视频18| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 大香蕉中文在线| 99RE在线视频精品,这里只有精品| 亚洲AV无码乱码在线观看性色| 一级AV性爱| 96麻豆精品一区二区三区| 国产精品视频| 婷婷国产精品九区| 亚码激情| 日本片日本片祼观看网站在线看中文版网页在线看 | 久久国产免费激情视频| 日韩亚洲欧美中文字幕| 久操网址| 一二三区操逼国产91| 欧日韩一二三f区| 中国小夫妻勾搭露脸淫荡对白| 日日夜夜天天| 91chinese在线| 青娱乐国产精品| 久久成年片色大黄全免费网站| 国产97在线播放| 日韩欧美水蜜桃人妻| 精品人妻一区二区免费蜜桃| 亚洲 欧美 中文 日韩超碰| 乱伦熟女区| 东北丰满熟女国产一区| 国产亚洲精品美女久久久| a亚洲欧美色欲| 玖玖爱影院| 天天噜| 超碰色老头| 九九九精品美女| 久肏视频字幕| 日本不卡一二区| 九九九成人| 东京热AV男人的天堂| 欧美丝袜美女电影一二三四区| 97视频www| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 免费精品无码一级毛片牛牛影视 | 亚洲熟女国产综合另类| 丰满欧美少妇| 91色爽欧美| 91人妻视频| aaa淫乱视频| 久日91在线| 男人的天堂日韩| 蜜桃臀一区二区三区久久| 亚洲综合 欧美| 91少妇高潮| 600国产精品视频| 97在线视频网站| 午夜操一操| 小说区 图片区色 综合区| AVE乱伦| 亚洲国产精品有声| 久久久com| 亚洲欧美九九| 久9久精品视频| 久操视频免费观看| 亚洲黄色| 精品久久无码午夜福利| 亚欧性爱在线无码| 国内黄色精品| 久草电影网| 97干97色| 免费看久久久性性| 午夜欧美J进J出白浆流出久久久| 人妻黑丝袜电影| 97日韩欧美亚洲| 在线视频亚洲无码| 五月色网| 欧洲与亚洲欧美精品中文字幕| 久操av在线| 色姑娘综合网| 曰韩无码777| 色呦呦、国产精品| 日本黄色XXX| 97视频在线| 无码精品一区二区三区潘金莲| 久久一二三四五六七八九区区区 | 啊啊啊啊好多水| 国产成人99久久亚洲综合| 国内精品久久久久影院亚洲| 中文字幕在线观看网页| 欧美一区二区| 一区三区啪啪| 国产九区| 日韩欧洲操屄视频| 人妻熟女字幕一区二区| 激情文学小说一区二区| 中文字幕亚洲永久精品| 草b在线| 网友自拍第1页| 操逼1区| 97色97好| 成人性爱免费播放| 99热精品在线观看| 黄色交缠性感爆操91国产精品免费一区二区三区 | 国产高清视频无码在线| 久久久久日本视| 青青草在线视频播放器| 91干熟女| 欧美在线|亚洲| 岛国色情视频在线观看| 少妇天堂网络| 国产精品内射婷婷一级二| 中文字幕jul-617人妻熟女| 天天操人人操骚逼网站| 99久久久无码精品国产人| 99久久com免费视频′| 欧美日韩小说| 曰韩无码777| 粉嫩av一区二区三区四季| 国产精品久久久久久久电影渣男| 亚洲色图 欧美热图 清纯唯美 另类自拍| 色原狠狠天天天| 久久6热视频免费观看| 97网址97| 亚欧高清在线| 少妇大屁屁| 操人91| JuliaAnnXXX888| 无遮挡h肉动漫在线观看| 天堂综合| 亚洲成人免费在线| 亚洲天天在线| 偷拍亚洲高清图片| 国产操逼视频在线观看| 伊人991| 久久精品毛片免费不卡| 综合天天。| 91粉嫩萝控精品福利网站_精品影音先锋国 | 怡红院成人av| 一本一道vs波多野结衣| 青久久| 色婷婷狠狠18禁| 91n欧美| 嗯啊啊啊轻点视频| 国产日逼视频| 亚洲综合有码| 午夜天天碰综合视频| 国产精品不卡av免费在线观看| 精品国产一区二区久久| 色网在线视频观看免费| 欧美色97| 色狠狠综合噜一二三区| 大香蕉强奸乱伦| 精品丰满熟妇人妻一区| 97九色人妻| 一级人妻性爱视频| 精品久久久久成人码免| 欧美美女自慰一区二区三区| 国产中文大片资源中文字幕| 久久精品国产97欧美精品亚洲| 91操碰| 思思视频免费看网站| 日本孕妇孕交| 高凊专区人人操| 国产毛片久久久久久久| 欧美熟妇精品黑人巨大91| 91在线限制级| 婷婷精品视频| 福利社区午夜一区二区| 日本大香蕉综合网红本杳社区| 后入 亚洲 美女 射| 日韩欧美tv一区二区在线观看| 97亚洲综合在线| 亚洲欧美setu| 丝袜熟女2P| 精品伊人久久久大香线蕉小说| 亚洲有码视频二区| 欧美草草| 秋霞午夜视频一区二区| 91亚洲黑人| 午夜精品探花| 亚洲小电影免费涩涩成人在线高清| 亚洲不卡一| 久久精品视频28| 东京热亚洲一区二区| 日韩亚洲中文字幕在线| 久久透逼视频| 综合伊人网12色| 欧美激情在线观看视频| 国产风韵犹存熟妇三区| 久久中日麻豆| 三级片大波波| 大香蕉97久久| 久操婷婷| 少妇滛荡视频| 午夜欧美女人操逼| 操高情无码| 国产亚洲精品A在线观看下载| 男女国产精品| 亚洲资源站| 国产精品农村妇女精品| 免看60秒涩涩视频| 果冻传媒A片一二三区| 欧美久久婷婷| 97视频620| 99操| 天天内射| 激情五月天校园春色网| av久日| 欧美在线色| 97爱碰| 97在线青| 岛国999| 天堂资源站| 成人黄页| 精久久久| 欧美黑人与女人91| 先锋女优在线观看视频| 日韩猛交| 一级黄色性爱裸体视频| 婷婷av在线中文字幕| 香蕉黄色一级视频| 日韩欧美tv一区二区在线观看| 再深点灬舒服灬太大了添视频| 国产成人 综合亚洲 天堂| 国产精品白丝在线播放| 日韩性爱1级片视频| 大黄片做爱的大的| 爽 好舒服 无码刺激久久| 最近的最新的中文字幕视频| 九九色精品| 亚洲欧美大香蕉| 手机不卡视频不卡在线一二三区| 国产亚卅97| 日韩精品9区| 国产suv精品一区| 人妻天堂网| 超碰97人人cao| 日本日逼高清| 99久久婷婷| 日本天天人人狠狠在线日美女| av操操不卡| 9999九九九久久久| 97视频播放| TS人妖另类精品视频系列| 久久国产乱子伦精品免费女人| 欧美性爱视频免费一区一A| 92人人操人人| 小草三级久久观看| 嗯,啊。舔我逼| 久久粉色| 成人a级高清视频在线观看| 亚洲aV性爱| 精品国产污一区二区三区| 精品亚州18| 日韩欧美女求操每天更新| 亚洲色图欧美一区二区不卡| 午夜一区二区三区国产| 欧日韩不卡视.频| 西西美女视频网| 精品97久久| 一线黄色免费性爱片| 五月丁香综合网| 日韩操呦呦影院在线观看| 日韩精品午夜操呦呦不卡影院| 免费视频在线一区二区不卡| 久久丁香五月婷婷| 粉嫩久久久久| 国产精品一区二区手机看片| 99性视频| 嗯嗯啊啊日韩精品| 亚欧毛片基地国产毛片基地| 97色婷婷| 久久熟女嫩草成人片免费| 亚洲AV无码乱码| 久久亚洲不卡| 亚州欧美在线| 激情综合网五月婷婷五月天| 国产婷婷一区| 久久久久久久精| 欧美十八禁导航成人| 99久久无色码| 亚洲精品97久久| 日韩精品一区二区三区色欲| 97精品在线| 一区二区精品日韩欧美在线观看| 天天操夜夜操| 99在线观看视频在线高清| 国岛片视频| 超碰在线97国产| 久久午夜鲁丝片| 加勒比伊人| WWW黄片COM| 国产黄色av大片网站| 欧美大香蕉97| 思思热在线视频免费| 五月婷婷六月天| 久久精品一区一起草| 大香蕉久| 亚洲欧美日韩国产丝袜自拍中文| 欧美成人A√在线一区二区| 国产欧美第五页| 丝袜 中出 制服 人妻 美腿 中文字幕| 婷婷影院入口| 亚洲九九视频在线观看| 国产97视频免费观看| 久湿久久| 睡产熟女乱伦| 精品少妇一区二区| 柠檬AV导航| 伊人九九九| oumeisetu综合| 日本精品五区| 日日AV加勒比| 精品视频免费在线一区| 国产第二页| 狠狠色噜噜狠狠狠狠狠色综合久久| 日韩美女高潮喷水视频| 91成人久久 | 亚洲自拍一区夜夜操| 蜜乳Av成人片网站| 9999久久久久| 色婷婷久久| 久操免费在线| 老熟女熟妇| 黄色AAAAAAAAAAA大片| 精品一区二区久久| 色一情一乱一乱一区91Av| 97免费视频在线| 欧美老熟另类| 日逼国产| 人妻久久一区二区三区| xxx亚洲午夜天堂| 岛国片在线播放| www.acm成人黄色毛片| 97精品综合| 日本性感人妻91| 亚洲美女 晚间男人天堂| 亚洲无线码一区国产欧美国| 97在线观看| 伊人 俄罗斯 a v| 国产热RE99久久6国产精品首 | 亚州国产精品乱| 一区AV| 亚洲青青草| 亚州国产精品乱| 1级黄色夫妻对换性交免费看| 大香蕉之青青草原| 东京热激情视频一二三区| 自拍偷拍亚洲熟女妇人精品| 好湿好紧视频| 玖玖爱一区在线| 伊人久久婷婷| 青娱乐欧美激情一区二区 | 天天欧美色| 99热99在线播放激情| 91综合站| 久久9精品网站| 夫妻四区五区六区| 色婷婷基地| 欧美极品性爱天天射| …亚洲黄色厕厕女女在线播…| 蜜桃久久久久久久久久久久| 中文啪啪视频| 精品成人av一区二区三区在线| 亚洲欧美色图小说| 美欧色综合| 国产AB视频| 免费久久9999| 成年男人的天堂| 中文字幕在线观看丝袜| 国产浮力影院第1页| 黄色免费网| 天天干人人乐| 91精品91久久久久77777| 大香蕉99热| 青青草日本中文字幕| 99热这里只有精品99| 精品久久久久av影院| 亚欧高清| 午夜操一操| 高清孕妇孕交 交| 精品一区99999| 日韩不卡网操逼中文字幕日韩| 综合网,亚洲,欧美| 精品国产乱码久久久久久久久1 | 97爱爱官网| 无码操逼天堂| 9999九九九久久久| 亚洲情色图片区| 99啪啪视频| 98色网| 黄污污污污| 亚洲激情AV| 午夜色婷婷| 深田咏美亚洲精品福利社 | 十八禁电影伊人网| 欧美综合 站| 熟女高潮合集-永久久久-成人AV | 丁香六月激情| 久偷拍| 中文字幕88av在线| 校园春色综合色| 亚洲蜜臀懂色| 天天干天天中出av| 99爱爱| 亚洲综合 欧美| 久久精品一区一起草| 99这里都是精品| 免费精品AB| 久久精品国产亚洲粉嫩| 91爱| 影音先锋日本一区二区| 17c在线成人免费A片观看| 高潮的A片激情扒开一区| 日本三级一区二区 在线| 亚洲自拍天堂| 久久东京国产精品视频| 91Chinese在线| 91N欧美| av情色影音| 亚洲天堂美臀在线| 玖玖无码超碰| 日韩欧美亚洲自拍偷拍| 欧美日韩性爱电影在线| 性开放中文AV高清无码免费看| 性爱乱伦一区| 夜夜操2028| 蜜桃色院一区久久 | 秋霞操逼片| 黄片com.| 99热免费| 密臀视频一区二区三区| 极品出轨视频网站| 超碰97久久| 欧美日韩一区二区三区四区蜜桃| 一区二区娱乐网站| 啊啊啊啊啊在线观看网址| 亚洲 欧美 另类 日韩 人妻一区| 91日韩网站| 性久久久| www.99视频| 91l欧美在线| 99热这里都是精品| 人人看人人爰人人操| 欧美黄色大香蕉一区二区| 超碰97资源中文字幕| 另类欧美| 久久久久久久久久va| 九九无码视频| 亚洲综合小视频小说在线观看| 激情婷婷丁香网| 高清国产无码av| 大香网伊人久久综合| 夜夜嗷嗷一区二区| 欧美性色网| a v网站在线播放| 欧美久久毛片基地| 久久久久久久久久久久97 | 91欧美综合在线| 中文字幕欧美丝袜07资源| 午夜福利免费福利视频| 久久av网| 97综合| 香蕉久久国产AV一区二区| 欧美亚洲美少妇一区二区| 欧洲精品一级二级精品综合视频综合| 黄片com.| 欧美情色男人的天堂| 国产成人久久精品蜜臀| 免费人成?大片在线播放| www.99热在线只有精品| 农村女一级毛卡片| 激情综合色| 黄站在线免费观看| 成人午夜小视频手机在线看| 1区2区3区中文字幕日韩| 亚州男人天堂| 日本色婷婷| 麻豆色99999| 精品v日韩欧美国产| 久草新免费| 日韩欧美大片免费高清啪啪| 夜夜爽33333| 96超碰网| 色色综合网站| 91蜜臀人妻中文字幕在线| 日韩黄色一区二区三区| 美女骚尻视频| 探花熟女,姿勢到位,體驗感也到位| 亚洲情色在线| 最新日日夜夜天天干干| 欧美一二三区四五区| 乱伦熟女论坛| 中文字幕乱碼在线| 尤物av网站免费在线播放| 亚殴在线| 久久久久亚洲熟妇熟女| 久久超碰亚洲人| 中文字幕第9页萱萱影音先锋| 97精品国产97久久久久久免费| 久久久久久97| 天天操天天射青青草| 亚洲精品国产精品成人| 久久的网站啊啊啊啊啊| 亚洲精品一二牛牛| 久久国产对白激情浪潮 | 欧美999999| 精品一区二区成人| 骚鸭AV| 色99视频| 欧美18老人禁| 校园春色中文字幕AV| 黄片aaaaa一区| av2014 日韩在线中文字幕| 天天干天天拍| 少妇被c 黄 免费观看| 1区2区3区中文字幕日韩| 欧美黄片免费在线观看视频| 国产一区二区精品在线视频| 国产99 中文字幕日韩小视频| 992大香蕉| 欧美一区二区情色| 亚洲国产精品有声| 好一吊区二区| 狠狠中文字幕| 国产野战露脸在线播放| 另类图片五月天| 亚洲情色五月天 | 92人人操人人| 欧美日韩97| 91在线/欧洲| 九九热精品视频在线观看| 肏逼视频日本| 中文字幕av一区二区三区人妻少妇| 色婷婷久久| 极品综合| 麻豆一区二区三区在线看 | 亚洲熟妇A V黑人| 磁力99AV| 婷婷伊人网| 国产黄色影片在线观看| 亚洲国产97在线精品一区| 中文字幕在线观看AV| 在线无码操| 国产一区二区成人av在线播放| 男人的天堂无码| 密臀在线免费观看| 午夜福利成人免费视频| 被窝影院午夜看片无码| 国产一区二区在线看| 欧美 传媒 麻豆 日韩 偷拍| 综合色99| 亚一综合久久久久久久久久| 日本精品五区| 久久久免费视频18| 久久有码| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 亚洲97网站| 青娱乐大香蕉| 久7色| 最新国产精品久久精品| 天天激情综合站| 91啪啪| 久9爱精品| 日本中文字幕熟妇| 夜夜久久| 亚洲精品丝袜| 久久久无码国精品无码三区三区| 国产精品呦一区二区三区| 国产操逼网站亚洲一级黄色| 婷婷人妻激情| 四虎免费视频| 亚洲精品日韩国产欧美| 中文字幕丰满人妻日本| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 激情五月婷婷| 亚洲一区二区中文字幕| 自拍偷拍亚洲熟女妇人精品| 翔田千里A片一区二区| 亚洲少妇视频| 日韩精品三级| 日韩成人人妻网站| 四虎国产精品永久在线囯在线| 久久熟女精品不卡一区| 91色堂| 日韩美女,国产传媒,视频一区| AV天堂电影网| 人妻日日夜夜精品| 91狠狠综合久久久久久| 色婷婷五月天| 日本三级韩国三级99| 天天日天天色| 婷婷色中文字幕| 久久久国产三级黄色片| 久久久久成人亚洲国产| 久久精品店| 日韩探花精品在线视频| 99久久e免费热视| 干干干天天| 操我无码| 国产成人自拍视频在线| 亚洲一区日韩| 色99在线| 日本有码久久| 啊啊啊 在线观看| 激情露脸爱| 老汉网| 91色伦综合| 日本不卡一区二区三区| 国产AB视频| 清纯唯美综合| 囯产精品久久久久久久久久二区三区| 色姑娘综合网| 国产福利电影| 99热99在线播放激情| 黄片无码在线制服| 久久草大香蕉| 偷拍 亚洲| 日韩久久超碰色| 极品久久久久久久久久久久久久| 久偷拍欧美日韩三区| 精品无码一区二区三区| 亚洲无码一区成人免费午夜| 国产精品九九九| 国产亚洲性生活视频播放| 日本午夜操逼| www.丁香五月| 91久久午夜无码鲁丝片久久人妻| 一直超碰| 67914在线兔费成人视频| 男人的午夜天堂| av毛片aaaaa免费看| 日本免费一级AAA大片器 | 97亚洲色图| 亚洲国产成人精品久久久国产成人一区二区 | 中国操逼无码| 久操视频资源站公开| 欧美激情综合色综合啪啪五月| 影音综合网| 超碰97综合网| 超碰免费人妻人人| 欧美丰满熟妇XXXX性ppX人交| 亚洲综合小说另类图欧美视频激情小说色五月天 | 一区二区播放| 亚洲欧美国产中文视频| 久久性爱网站| 一区=区三区视频| 精品无码一区二区三区| a亚洲欧美色欲| 婷婷亚洲综合| 蜜臀久久久国产| 成人怡红院| 91快色色色色色| 国产怡红院| 神马久久免费电影观看| 国产亚洲精品久久久久小| 亚洲成人免费在线| 久久精品视| 人人操人人爽人人操人人| 免费精品福利在线观看| 亚洲人妖网| 欧美色999| 狠狠穞A片一區二區三區| 欧美视频激情久久久久久| 啊啊啊操死我| 色婷五月| 狠狠操狠狠燥| 99老司机精品视频在线观看| 精品一区二区3区| 97中文字幕一区| 377p欧洲日本亚洲大胆| 男人的天堂.com| 国产精品操| 婷婷色导航| 色九色久| 欧美一区二区观看在线| 无码视频一区二区| 天天看夜夜看日日干| 五月天婷婷成人网| 嗯嗯嗯啊啊在线观看| 2021久久国产综合精品青草| 操逼精品视频| 亚洲影院365| 天堂日本亚洲欧美| 校园春色五月天| 丁香五月色| 91精品在线播放| 成人福利视频网| 亚洲色图第四色| 亚洲精品第一| 国产第二页| 精品亚洲国产成人精品| 热久久99999| 中文字幕一区二区日韩网| 中文乱码99| 色欲三区| 97精品综合久久网| 欧美aa一级片| 国产第二页| 色哟哟511老熟女| 国产吹潮女在线观看| 国产欧美日韩精品中文| 丝袜狠狠草尤物 91| 免费啪啪一级视频| 日本久久久精品电影| 国产女人成人精品视频| 99热这里只有精品1| 日本网色| 久久啊啊| 日韩伦理久 久久 清纯| 18禁止看精品中文字幕| 极品后入免费视频| 久久精品高清AV| 91精品操美女| 床上啊啊啊一区二区三区| 夜夜躁狠狠躁日日躁av| 青青草原狼av| 超碰无码加勒比| 午夜九九| 精品国产乱码久久久久久久久1| 97干97色| 国产一区在线播放| 久久免费老司机精品| 无码高清少妇久久| 亚洲在钱| 丁香五月社区| 最新日日夜夜天天干干| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 中日高清无码操逼视频| 日韩有码专区| 男人干美女| 成人日本视频人妻在线| 97欧美日韩| 青青草色情网站视频| 伊人黄色视频免费观看| 国产三级片在线观看| 麻豆性爱视频在线播放| 国产欧美亚洲精品a第2页| 美女网站91| 素颜老阿姨乱情色| 三级三级三级日本99| 欧美Aⅴ| 欧美成97爱| 自拍二页| 日本三级韩三级99久久| 免费A片三p视频| 九九九草| 国产av青草| 青草av在线| www.久久制服糖| 久久内射| 天美传媒av在线| 欧美精品另类人妖xxxx| 秋霞蝌科网日本一区| 日韩猛交| 久男人久久| 97超碰天天爱天天爱| 久久人人爽人人爽人人片Ⅴ| 香伊人在线| 超碰99在线| 色香伊人| 日本九九久久99播| 99超级碰免费视频| 久操凹凸视频| 一区在线精品中文字幕| 久久久精品,3| 一区二区视频你懂的| 小草精彩毛片| 天美麻花大全视频| 欧美少妇性爱网站| 性爱综合一区二区| 777超碰| 超碰色大香蕉| 影音资源男人日韩| 青娱乐大香蕉| 国产精品对白内射| 天天天天干| 欧美亚洲日本视频久久久 | 久久这里| 99爱久久视频频| 99色在线| 久久精品性| 思思性爱| 3D污黄视频在线观看| 中文字幕日韩电影人妻| 国产精品又黄又猛又粗| 久久 精品| 国产国产亚洲一二三久久| 视频二区熟女人妻| 91/欧美| 91爰爱欧美| 夜草欧美| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | henhen91| 91色欧美| 久久9久久| 操熟女91| 久操免费观看| 日韩一级二级三级| 久久精品无码专区| 搡老女人老91二区| 啪啪啪综合| 91美女片在线| 亚洲日韩美女丝袜美腿人妻视频| 久久精品操| 久久日韩肥臀| 久草这里只有精品| 搡老女人老熟女91老熟女综合网| 黄页| 欧洲性爱无码区| 欧美一级AAAAAAA| 国产一区二区三区视频在线看| 国产女同视频在线播放| 亚洲欧美综合区自拍另类 | 欧美肥臀在线| 亚洲高清欧美总合| 婷婷综合伊人一区| 性爱视频免费网址| 黄色片一区二区三区四区五区|