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

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
返回資訊列表
8050午夜少妇无码| 大香蕉久久| 人妻熟女av国产网站| 资源新线在线天堂| 欧美日韩一干二干| 色五月首页| 少妇熟女1区2区3区| 四虎在线播放| 丁香六月激情| 中文字幕,人妻,日韩| 人人操人人色网| 精品美女少妇一区二区| 日韩丨制服丨中文|在线| 99www.bibizy香蕉资源国产一区二区三区高清 | 久久一本大香蕉| 搡老熟女老女人老熟妇免费视频| 五月婷婷综合网| 97在线免费观看视频| 操逼天美3区| 99精品九九九九九九| 欧美日韩国产一区二区小黄片大全| 日韩三级伊人| 丁香婷婷久久 | 97干在线| 屁屁影院一区二区三区国产| 麻豆天美电影一区二区| 密臀国产在线| 久久久久久久伊人精品| 超碰97欧美在线| 日本黄页视频在线观看| 欧美伊人久久综合网| 精品久久視頻在线| 亚州色国| www.久久制服糖| 蜜臀av一区二区三区免费观看| 亚州日韩97| 国产女同在线观看视频| 亚洲人妻一区二区三区| 久久这里只精品| 久久久精品无码亚免费| 亚洲男人天堂2016| 黑人综合网| 久久xxxx| 亚洲有码视频二区| 男人的天堂激情| 9久精品| 蜜桃色色网站视频三区| 五十路一区无码| 精品丰满人妻一区二区三区免费观| 精品人妻视频一区二区在线播放 | 国产AV天美| 好爽视频在线观看| 精品久久視頻在线| 精品成人久久久人人亚洲| 伦理片秋霞免费影院| 麻豆精品天美| 久久精品亚洲成a人天堂| av草草在线电影| 国产精品一区二区黄片| 国产2.3.4区| 精品国产一级久久| 中国91AV| 天天欧美色| 久久高潮妇女视频| 久久婷婷色综合一区二区三区| 天天射夜夜骑| 成人A片男人的天堂| 午夜性刺激视频免费观看| 天堂中文日本在线观看| 丝袜美腿操av| 精品人人| 欧美一级久久久久久久大片动画| 蜜桃狠狠色伊人亚洲综合| 中文字幕aⅴ在线视频| 人妻美腿丝袜日韩| 91色图片| 五月激情在线| 欧美精品xxxwww| 777超碰| 国产九区| 91亚·色| 日韩精品 资源| 99热线麻豆 | 日本一区二区不卡精品| 97超碰香蕉| 四季AV一区二区凹凸精品小说| 国内毛片无遮挡国产| 欧美大片天天看| 激情五月激情综合网| 黄片qw| 超碰 欧美| 亚洲男人天堂2019| 丝袜大香蕉| 天天色黄色影院天天操| 久久九色| 人人妻人人爱人人玩| 国产风韵犹存熟妇三区| 国产极品久久久| 五月丁香六月| 色色国产| 婷婷五月天激情网| a片在线播放| 天天干1区2区在线| 欧洲亚洲天堂精品| 欧美性爱一区二区三区四区 | 日本123区操B视频| 日韩人成网站在线播放| 日韩无码黄色片| 国产视频一区二区三区在线免费观看| 黄骗免费网站| 2023天天操夜夜操| AV乱伦专区| 亚洲,欧美,综合网| 丁香五月天激情综合| 亚洲视频中文一区| 国产精品白领在线观看| yaouchengrenav| 亚洲情色视频| 福利视频香蕉免费一区二区在线| 欧美一区二区三区不卡高清视频| 色悠久| 亚洲色91| 高清无码 国产精品| 午夜久久无码1000合集| 久久久97| 天天日天天舔东京热| 91丝袜激情在线| 极品白嫩福利在线| 人妻在线大香蕉| 丝袜狠狠草尤物 91| 8x福利精品第一福利视频导航| 日韩一性一交一A片俄罗斯| 亚洲αv一区二区三区| 欧美精品自慰系列寂寞少妇 | 欧美熟女激情| 在线啊啊啊| 熟妇熟女一区二区三区| 黄片免费看的| 性爱动态120秒| 中美日韩毛片| 国产一线二线三线av| 久久精品国产精品一区| 亚洲午夜福利在线影院| 91欧美情色| 91色拍| 日韩性爱免费视频在线网站| www.狠狠干.coom| 亚洲的天堂网| 一区二区三区高清天码| 992这里有精品| 午夜精品久久999热蜜桃介男人用| 久久精品操| 中文日本免费高清| 九九热精品在线| 久久视频,这里只有精品 | 婷婷五月成人| 久久后入制服| 国产女生在线| 国产精品在线一区二区| 欧美一区二区三区互相| 91亚·色| 欧美狠狠| 99久久com免费视频′| aV中文麻| 婷婷色综合| 女人18精品一区二区三区| 国产极品精品美女视频| 99九九久久| 操逼操2| 欧美成人9797| 97超碰护士| 大香蕉九九| 天天操天天干美女网址导航| 粉嫩不卡一区二区性爱| 欧美青青草视频| 无码精品人妻一区二区三区妖精 | 色优久久| 97国产超碰| 久久久久久亚洲精品不卡人乳| 91国精产品| 欧美日韩日产免费网站看| 日本天堂网| 狠狠爱夜夜| 欧美午夜精品久久久久久3D| 亚洲久草AV色图| 激情接吻视频久久久久久| 欧美天堂超碰97| 国产对白刺激视频| 午夜综合在线| 亚洲欧洲网站免费观看| 日日骚一区二区三区| 国产动漫操逼视频| 国产熟妇 码视频户外直播| 麻豆久久久久久久久丝袜| 欧美一级黄色免费专区| 国产亚洲色婷婷99精品91| 6080YYY午夜理论片在线观看| 东北女人的毛片| 福利社区午夜一区二区| 亚洲自拍欧美色综合| 国产女性无套 免费观看| 欧美日韩美女精品久草一区二区三区| 九九视频黄色片| 青娱乐国产精品| 亚洲欧美日韩不卡人妻| 欧美97网| 天天做天天爱| 天美传媒精品一区二区| 久 久无码人妻AV| 丝袜亚洲综合| 一道α片欧美| 免费A V在线播放| 欧美精品99久久久**| 欧美日韩操逼动图| 综合熟女| 日本高清视频在线观看黄已三辽| 翔田千里无码一区| 欧美日韩成人在线| 精品亚洲一区在线观看| 久久少妇| 亚洲色阁| 亚洲天堂男人天堂网| 亚洲熟妇白浆无码AV| 欧美激色| 中日韓欧美高清| 99久久久久久久久| 久草久日| 6080YYY午夜理论片在线观看| 91熟女少妇| 婷婷色网| AV天堂男人的天堂| 极品丝袜无码| 亚洲综合春色| 久久久蜜桃一区二区三区| 午夜福利精品| 搡老女人老妇女AAA一VU麻豆| 91色综合| 黄片www视频免费| 日韩九九九| 国内外毛片在线观看| 91精品婷婷国产综合久久竹菊| 欧美综合97www| 国产精品久久久久久片| 欧美人妻久久精品二区三区| 先锋色眉乱伦资源| 一区二区三区黄片免费观看| 青娱乐欧美激情一区二区| 中文字幕一二三| 婷婷午夜清品久久久久久久性色视频观| 久久精品99久久久久久| 国产外初女出血视频| 五月婷婷青青草娱乐伊人| 97视频在线视频| 97精品在线| 啊啊啊要高潮了| 蜜臀av网址| 亚洲图片视频小说| 好吊色综合| 女性91网站| 天天夜躁日日躁狠狠2002| 国产精品久久久久久久AV大片| 色就色综合| 亚洲图片欧洲图片aⅴ| 99精品成人免费看| 六月婷婷综合| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 亚洲夜夜欢无码一区二区| 天天操天天舔| 91女在线观看| 97超碰超欧美。| 色爱天堂| 中文字幕奈奈美被公侵犯| 欧美午夜视频精品久久| 久久久久成人蜜桃精品| 欧美在线伊人色| 99国内熟女露脸视频| 超碰色美女| 97亚洲色图| 国产日韩无码一区二区三区久久区| 俄罗斯一区二区视频在线观看| 精品亚洲国产成人av网站| 久久五月视频| 老女人老91妇女老热女| 亚洲欧美色图片| 国产一级作爱毛片| 综合干干干av久久久综合网| 高清无码学生妹高潮| 一区二区高清视频| hd成人一区二区在线| 99青草| 蜜臀av网址| 国产一区二区成人av在线播放| 去干网最新版| 99热18这里只有精品| 大肥女高潮bbwbbwhd视频| 岛国大片在线观看网站入口| 午夜免费视频1000| 青娱乐休闲视频在线观看| 久久久免费一级黄片| 人人操人人精品影片| 五月天激情网图片| 国产精品盗摄 偷窥盗摄| 超碰69| 五月激情天| 岛国福利在线精品播放| 热热色AV| 毛片视频白嫩| 亚洲欧洲网站免费观看| 日韩国产精品人妻无码久久久| 校园春色亚洲无码| 欧美超碰9798| 综合欧美日本三级| 呦呦影院| 九九九999久久久网站| 97看操| 亚洲偷拍自拍在线视频| 人人人摸人人| 青木玲在线不卡| 口爆综合网| 亚洲欧洲日韩国产自在线| 久久精品国产Aⅴ| 神马久久久久久久久久| 日韩欧美视频青青| 久久欧美性爱视频| 国产一级137片内射麻豆| 99av| 久久爱97| 欧美少妇性乱| 久久精品国产97欧美精品亚洲 | 色色九区| 色综合久| 果冻传媒A片一二三区| www.久久制服糖| 中文字幕一区av| 97综合久第一页| 精品人妻av在线播放| 国产无遮挡| 欧美综合网A| 婷婷久久五月| 欧美激情内射| 蜜乳AV一区| 欧美高清18A片| 蜜桃狠狠色伊人亚洲综合 | 国产AV线| 日韩在线人妻网站| 黄污污污污| 中文字幕精品一区二区精| 天啪| 五十路成人在线视频二区三区| 亚洲国产一区二区三区在线 | 亚洲视频精选| 久久久九九| 蜜臀AV成人精品蜜臀AV久久| 97久久超碰| 日本视频一区二区三区| 国产午夜福利专区综合| 天天综合网日韩| 国产午夜福利合集| 熟啊v色欧美热| 99国内精品| 欧美黄片欧美黄片xxx| 国产日韩精品无码去免费专区国产| 日夜伊人网| 在线亚洲欧美| 美女操逼福利视频| 亚洲天堂性爱| 男人天堂网手机版婷婷| 人妻精品一区二区三区| 巨乳特殊服务按摩| 国产精品第一页国产大屁股视频免费区| 天天综合91入口| 精品1区2区3区| 国产怡红院在线| 欧美姓爱综合网| 成人国产二区三区在线,男女精品。| 成人在线视频一区| 色婷婷婷五月天激情四射| 欧美日韩理论一区| 免費人妻夜夜爽天天爽爽一区| 嗯啊啊啊轻点视频| 91呆哥人妻| 91人人臊| 久久99网站| 国产久久久久久久久一区二区 | 久久五月天婷婷丁香中文字幕| 超碰人人操97碰| 欧美伦乱爱| 久久免费9| 国产成人自拍视频在线| 欧美在线综合| 天天射夜夜操| 八人操人人摸人人看| 在线观看综合精品亚洲| 日韩激情视频| 神马久久免费电影观看| 樱花蜜乳av| 俺去久久| 爱逼综合| 亚洲欧美国产日本一区二区三区| 温婉少妇玩3p| 欧美在线电影| 久操网视频| 日本色色网| 色狠人在线99| 欧美78P| 一个国产在线综合网站| 97中文天堂| 亚洲欧美天| 国产精品白丝| 91精品国产高清久久久久久,亚洲成人 | 亚洲欧美综合图片| 亚洲一级性爱视频免费看| 色狠狠 - 百度| 97碰碰日本乱偷人妻中文的| 成人av影院在线观看| 日本999精品| 91影库| 最新9久久久9免费视频| 久久肏大逼| 偷拍亚洲视频一区二区三区四区| 国产超碰在线| 一二三区操逼国产91| 91久久久久久久久久久| 国产精品午夜福利亚洲综合网| 人妻人人澡人人爽人人| 91小视频| 亚洲人精品午夜不卡| 色嗨嗨在线| 亚洲精品九九九九九九| 91 亚洲 欧洲| 国产传媒午夜理伦精品| 色臀aV| 久久99久久99久久99人受| 欧美天天射| 乱码熟妇人妻久久久| 日韩中文字幕人妻视频| 青青草原av| 亚洲精品819| 国产欧美精选自拍一区| 91日韩网站| 精品无码一区二区| 狠狠色狠狠色狠狠五月| 五十路三区在线| 色五月第四色| 亚洲成人网站在线观看| 大色综合| 久久久精品中文字幕麻豆| 日日夜夜狠狠| 欧美αv.com| 992大香蕉| 亚洲成人一二三区| 女人午夜视频777| 国内一区二区免费| 精品乱码在线观看| 国产女上位好爽在线| 久久九九视频九九视频| 日本一区二区中文字幕久久| 黄色十八禁| 久久久久久亚洲精品不卡人乳| 在线综合 亚洲 欧美中文字幕| 99这里只有精品| 一区二区三区在线资源| 亚洲成人av电影在线| 久久啊啊啊| 欧美一区二区三区成人性生活| 一区二区三区精品黑丝白丝酒店对鸡| 无码天天操| 日韩肏逼视频| 色妺妺AⅤ| 嗯嗯啊操我| CCYY草草影院地址入口| 天操天操夜操夜月月年年操操| a男人的天堂| 国产成人精品日本视频| 襙一襙| 日本免费二区三区| 国产精品久久久久久久黄无码| 亚洲无限观看| 国产精品久久久亚洲一区| 大屁股xxxxx| 亚洲欧美视| 一区二区三区日韩欧美| 日本综合久久| 家庭乱伦网站国产| 高清在线不卡一区二区 视频| 玖玖综合视频| 人人妻人人爽一区二区三区| 亚洲宗合网| 狠狠狠狠狠干| 搡老女人老熟女91老熟女综合网| 淫淫综合网| 人人操人人叉人人插人人| 超碰免费97| 东京太热男人的天堂久久久| 天天影视网色欲色香| 青青青青草av在线观看| 青青草视频这里只有精品| 日本韩欧美在线播放a| 免费αV在线视频| 欧美91变态| 九九热re99re6在线精品| 男人把坤坤插入女人的下体| 久久久久久久久久黄色网| 性色avv| 欧美一区二区观看在线| 日韩图区 偷拍| 大香蕉免费3| 99婷婷一区二区| 欧洲久久一二线| 男人天堂新| 大干人妻| 国产成人啪一区二区| 亭亭在线资源| 91在线一起| 性交一区二区在线播放| 久久m| 99只有精品| 久久发布国产伦子伦精品| 男人的天堂啪啪啪啪啪蜜桃不卡| 天天弄天天操| 99超碰色| 99re只有精品| 少妇专区一二三四五| laoshunv91| 中国小夫妻勾搭露脸淫荡对白| 久久鲁夜| 天天综合麻豆视频| 加勒比久久av| 精品人妻伦一区二区三区久久| 久久日本熟妇熟色高清 | 国产又操| 久久综合激情| 夜夜爽爽爽| 亚洲国产剧情少妇激情| 伊人操操| 日韩人妻精品| 97伊人超碰| 欧美色图电影| 思思久热在线精品66| 乱伦日本中文自拍| 操日韩第| 色爱综合网| 免费观看欧美日韩操逼视频| 国产欧美一区二区| 国产美女激情| 亚欧操逼片在线观看| 日韩欧美女求操每天更新| 啊啊啊啊操死我| 97无码视频在线播放| 国产午夜福利专区综合| 秋霞蝌科网日本一区| 91婷婷| 国产原创精品| 久草精品一区| 熟女91网站| 中国熟女老妇仑乱一区二区三区| 欧美日韩另类在线播放| 少妇干B| 久久男女激情视频网站| 超碰97爽| 五月天加勒比啪| 超碰久超碰久| 亚欧免费| 亚洲精品亚洲人成在线麻豆| 熟妇熟女亚洲天堂网| 国内操逼视频二区| 97资源站国产精品| 亚洲码在线中文在线观看| 欧美强奸乱| 旡码电影特区| 亚洲大色鬼| 国产传媒日韩| 黄片aaaaa一区| 国产av尤物| 天美传媒Av在线| 熟女高潮合集-永久久久-成人AV | 后入人妻无码| 亚洲 无码 偷拍| 亚欧高清在线| 中文字幕88av在线| 国产区在线| 亚洲国产ⅴ高清在线观看| 欧美日韩91| 91天天爱| 99999久久精| 欧美亚洲国产91在线| 色爱国产| 国产一区二区三区,在线观看观看| 人妻天堂三区| 天天视频综合在线观看视频| 男人下部插入女人下部| 深爱伊人影院| 在线观看不卡一区二区三区| 五月激情综合网| 人妻五十路在线| 国产免费黄色一级大片| 福利伊人玖玖国产| 欧美一二在线| 91亚洲网| 99亚洲天堂| 国产精品91ai| 久久久久夜夜夜夜| 午夜福利视频在线一区| 国产午夜视频| 熟妇综合一区二区三区| 人妻少妇久久久| 国产精品高朝久久久久久久| 91深夜夜| 精品视频专区| 久久性爱视频免费看| 国产亚州精品美女久久久免费| 久久熟妇五十路一区| 天天干18禁| 999岛国大片| 亚洲蜜臀视频精品久久| 99re热有精品视频国产| 熟妇视频一区二区三区在线观看| 国语少妇精| 亚洲古典另类欧美在线| 欧洲精品网| 欧美一二三级精品在线| 久久精品人体| 久久精品一区二区三区四区五区| 人妻久久久久久| 色原狠狠天天天| 日韩精品国产一区二区| 上床不卡网站| 日韩精品在线视频在线观看| 免费人人搞97| 三男一女不戴套的A片| 色噜噜综合在线| 蜜臀99久| 日韩一级二级| …亚洲黄色厕厕女女在线播…| 91操碰| 亚洲交性| 96精品在线| 欧洲一区二区| 5月婷婷6月六月丁香| 超碰这里有精品| 男女真人网18| 亚洲情色 自拍| 五月婷丁香| 神马午夜久久| 久久伊人在线五区| 91色人妻| 97爱b| 日本操逼视频导航| 国内外毛片在线观看| 久草免费在线一区二区| 一区二区播放| 日本熟妇人妻中出视频| 任我爽在线视频免费观看| 入口操逼网站| 97国产精选| 色色激情五月天| 久久人| 欧美性爱一内片一区二区三区| 性爱网站一区二区| 欧美天堂亚洲电影院一区在线播放| 人人插人人摸人人| 吊色| 你懂得91| 中日韩久久久免费看| 97色色网| 免费人成毛片乱码| 久久大陆| 久久久九九网站| 精品少妇人妻| 99热这里只有精| 乱伦日本中文自拍| 青青草日韩免费观看高清在线| 92人人操人人| 日日超碰亚洲| 日本淫穴在线| 国产小视频91| 99人妻| 色娱乐色呦呦夜夜夜夜av| 日本精品高清一二区一本到| 日本色日夜干| 久久人妇| 久久九九99| 亚洲成人黄色在线观看| 智利AV在线网| 久久日韩毛| 国产JDAV无码视频在线观看| 国产熟女自拍| 99re6久热只有精品6在线直播 | 久久中文字幕在线观看| 亚洲狼狼干综合1| 国产一区在线免费播放| 91色宗合| 欧洲亚洲天堂精品| 日韩草久视频| 亚洲第一黄色av网站 | 日本一区二区成人在线| 精品人妻一区二区三区四区不卡在| 97国产亚洲中文在线| 国产视频一区二区免费| av网站在线看| 亚洲中文字幕久久无码精品| 日日日啊啊啊| 狼人久草| 色在线亚洲视频www| 欧美精品97| 男人的天堂久久狠| 日本天堂网| 探花精品视频| 国产成年女人免费视频播放a| 十八禁黄色| 精品久久久久9999| www.五月天| 色乱二区| 操逼逼一区视频| 伊香蕉综合久久久久久久噜噜噜 | 亚洲欧美经典一区二区| 亚洲熟女精品| 国产操逼网站亚洲一级黄色| 国产怡红院在线| 人妻 欧美 中文| 在线啊啊啊啊| 丁香五月天堂网| 粉嫩不卡一区二区性爱| 青春草莓视频在线观看网址| 婷婷探花久久精品一区| 97在线观看免费视频l| 97色插| 狠狠爱综合网| 亚洲成人美女无吗| 2017人人操,人人摸| 精品免费一区| 精品国产乱码久久久| 亚洲人码13| 美女主播色欲91抠b在线播放| 婷婷亚洲中文字幕在线| 亚洲第一综合| 超97在线精品视频| 中文字幕一区二区三区字幕| 尤物网站91| 天久久久噜噜噜久久国产精品爽爽 | 亚洲高清视频在线免费观看| 精品69网| 清纯唯美激情| 蜜桃臀av一区二区| 精品女同一区| 色香91| 亚洲精品久久一区二区三区蜜桃臀| 国产天美欧美| 啊啊啊不要好疼视频| 亚洲人妻av| 中文字幕jul-617人妻熟女| 午夜福利视频在线一区| 91久久精品中文字幕| 精品人妻中文字幕4399| 眼镜人妻101.com| 极品欧美一区二区三区| 久久久蜜桃臀无码视频| 大奶的诱惑| 亚洲风情在线观看| 色777999综合| 天天综合站| 久久九九精品一区二区| 天天影视网色欲色香| 国产精品久久久久999| 97视频在线免费播放| 超碰久在线天天做| 男人的天堂日韩| 久久久久久久综合,国产| 东方亚洲在线操逼天堂| surenchaopeng| 亚洲十八禁止| 超碰社区97| 青青在线视频免费| 男人久久天堂| 老司机福利青青草| 人妻偷拍一区二区三区| 正在播放国产精品一区| 久久美女国产| 999国产精品999| 日韩99精品视频综合区| 强奸乱伦大香蕉网| 91精品丝袜久久久久久| 婷婷五月天小说| 欧美图片偷拍| 少妇与黑人高潮在线| 欧美三级一级| 狠狠夜色午夜久久综合在线| 久久综合久色欧美综合狠狠| 九九九九一级| 91日产桃蜜| 亚洲欧美综合| 国产又黄又粗又猛大片| 国产一级特黄大片处女| 日韩欧美亚洲一区二区三区影院| 激情综合婷婷| 天天看少妇| 超碰这里只有精品| 中文字幕av片| 久久久96| 精品少妇人妻av久久免费| 日本韩欧美在线播放a| 25国产精品免费观看| 日韩三级网址| 91久久久久久久| 夜夜欧美 | 熟女一区二区| 夜夜嗨一区二区三区三州加勒比 | 色欧美在线| 成人精品无码| A V视频日本| 激情五月综合网| 97精品国产97久久久久久| 欧美亚洲高清不卡| 亚洲天堂电影网99999| 国产精品美女视频诱惑| 中文字幕91页| 久久久蜜桃一区二区三区| 欧美日韩一干二干| 精品丰满熟妇人妻一区| 亚洲av噜噜噜噜噜噜| 91精品久久久久五月天精品| 日韩无码专区| 天天操av懂色| 99热国产| av毛片aaaaa免费看| 國產尤物AV尤物在線觀看| 情侣开房子拍 日韩无码 女的很漂亮| 女人的天堂大香蕉网| 99999久久精| 女人被男人桶爽视频网站| 五月激情在线| 精品久久久不卡一区二区| 97手机日韩| 夜夜影视四色| 青青草国产亚洲精品久久| 色九色久| 国产精品人妻无码久久久老鸭窝| 嫖老熟女A片一二三区| av天天在线观看| 伊人网在线观看| 加勒比综合88| 丰满少妇乱子伦精品无| 男人的天堂在线2| 91亚洲最新在线| 天天摸夜夜添无码小视频| 一区二区你上我| 色婷婷一区二区三区久久午夜成人不| 91免费看一区二区三区| 国产成人精品日本亚洲语言| 欧美熟女妇同| 久久狠狠色噜噜狠狠狠狠97| 国产成人+综合亚洲+天堂| av72网| 中文操逼字幕| 亚洲熟女av日韩熟女| 日本人妻天堂网站在线播放| 久久精品国产亚洲av水密被窝| 殴美大黄片| 欧美夜夜骑视频| 84YTCOM性无码| 夂久色| 国产国产亚洲一二三久久| 免费一级特黄特色大片在线观看看| 国产精品九9| 欧美 亚洲 在线| 操逼操操操91| 青青草日本中文字幕| 人人操人人色网| 99精品在线| 综合欧美色图| 日本护士高潮| 欧美在线综合| 91社区拍啪人妻| 色超碰综合| WWW操逼| 91jk色拍| 人人看黄色视频| 少妇毛片久久| 日韩97| 麻豆 欧美 日韩| 东京热双插| 天天爽天天爽| 60秒不遮不挡| 五月丁香在线| 神马麻豆福利院| 色婷婷狠狠| 精品人妻丰满熟妇一区二区三| 免费观看啪视频| 啪啪啪男女亚洲中文字幕99| 国产午夜激片Av毛片不卡| 99精品丰满人妻| 国产一级137片内射麻豆| 曰本熟女视频| 国产极品精品美女视频| 国产精品久久久久久久久久久久久久久久久久| 欧美性夜| 国产精品一区二区三区在线密挑| 天天做天天爱| 欧美制服另类丝袜| 大香蕉一级黄色片久久| 色性荡荡荡荡视频| 一级片视频啪啪| 九九英色视频| 色综合久久av| 99热大香蕉伊在线| 久久高清欧美国产| 大香蕉手机在线| 日韩无码专区| 精品国产乱码久久久久久网站入口| 大香蕉免费中文| 色激情综合网站| 亚洲欧美九九九| 日本狂喷奶水在线播放212| 亚洲男人的天堂网| 免费操逼视频下载| 美女t无毒不卡不卡| 亚洲天堂区| 青青青在线高清视频在线一二三四区| 色噜噜婷婷| 91成人无码| 麻豆国产av网| 国产精品网址| 亚洲se电影| 女人高潮抽搐喷水视频网站| 亚洲天天更新| 欧美性,色九九| 免费看黄片现成| 精人妻无码一区二区三区伊人直播 | 97超碰色屌| 美国aaaaa一级黄片| 国语精品av| 亚州色交| 高清国产性猛交xxxx乱大交| 欧美女同在线| 国产欧美伊人| 中国一级操逼视频| 一本一道久久综合久久| 五月婷在线| 91视频精品| 精人妻无码一区二区三区伊人直播| 亚洲超碰在线| 999久久久免费精品国产牛牛| B049AV在线播放| 97天堂| 三级日本一区二区三区| 久久夜精品一区二区三区| 99色在线视频| 人人操我人人干| 亚洲双插| 综合亚洲情色| 国产亚洲99久久精品| 97人人夜| 熟女丝袜视频| 欧美日韩性爱无码| 亚洲高清自拍| 在线情色电影 91大| 99日韩| 国产自产自拍| 男人天堂2017| 超碰 国产熟女精品一区| 狼人综合婷婷激情四射 | 五月婷婷综合网| 激情婷婷综合久久| 干美女人妻| 色噜噜人妻丝袜AV资源| 熟女六十路| 欧美精品久久久久久久丰满| 十八禁黄色| 日韩丝袜高跟制服在线观看| 夜夜爽爽爽| 日韩黄色一区二区三区| 2018天天日天天日| 亚洲欧美碰碰| 亚洲啪啪啪啪视香蕉| 四虎影库国产精品免费| 综合天天网| 国内精品久久人妻性色av| 欧美色图片色哟哟| 闷骚老熟女15P| 日本一级一级一级一级| 97超碰久久| 天天干一区二区| 女性喷水高潮在线观看| 亚洲天堂久久| 九九九九免费高| 熟妇熟女一区二三区| 可以看的av| 黄页视频网站野外| 国产婷婷综合在线观看| 久久视频,这里只有精品| 性色中出| 亚洲91极品| 在线观看岛国有码| 久久久久久久久久va| 亚洲国产精品无石码久久 | 男人的天堂视频精品乱在线| 欧美天堂亚洲电影院一区在线播放| 丝袜内射| 麻豆天美电影一区二区| 亚洲成人综合在线| 艹比视频国产精品| 韩美日操逼| 欧美色人| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | japan日本高清乱xxxx| 女性喷水高潮在线观看| 91五十路| 另类图片五月天| 青青草一本道福利视频| 蜜桃臀一区二区aV | 色色综合97| 青娱乐av在线| 久久久久久中文字幕中文字幕最新| 人妻嗯啊啊在线播放| 久久精品国产精品亚洲艾通辽熟妇 | www.激情| 99热欧美| 色一情一乱一乱一区91Av| 99热这里只有精品地址| 日韩,欧美,中文在线| 一级毛片久久久久久久女人18| 午夜男女爽爽爽影院视频| 国产女大学生AV| 男人的天堂 在线一区| 嗯嗯啊啊好爽| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 久草综合视频| 亚洲 欧美 另类 综合 偷拍| 久久久9视频| 黄色二级片网站| 另类亚洲图色| 天天香香欲综合| 亚洲色91C| 天天舔天天日天天射| 天堂国产AV| 国产肏屁眼视频| 丝袜av一区二区三区| 精品人妻夜夜草| 亚洲大胆人体av| 性交一区二区在线播放| 欲色啪| 欧美最婬乱婬爆婬牲视频| 国产日韩美女小穴视频网站不卡| 97操综合| 污电影在线观看| 人妻丰满熟妇av无码区蜜桃| 97亚洲色图| 国产精品日日摸夜夜添骚逼| 日本性感人妻91| 午夜偷拍久久熟女| 强免费黄色网址| 日日狠狠久久偷偷色综合免费| 色av中文字| 一区 欧美 日韩 麻豆| 韩日精品福利视频一区不卡在线免| 国外91| av2014 日韩在线中文字幕| 国产精品久久久久久久久久久久久久吹 | 91蜜桃传媒精品久久久一区二区| 亚洲 欧美 第一页| 91在线欧美| 色色网91| 一起草精品人妻| 日本特黄f c2| 四虎视频在线观看| 亚洲图片欧美另类综合免费视频大大香| 久久久96精品| 亚洲男人天堂av| 黑人美精品 A片| av天堂5| 久久久艹艹艹| 熟女欧美日韩综合婷婷| 国产伊人精品在线| 国产无码精品无码| 久草网站免费在线观看| 丁香五月激情五月| 国产久久一区二区午夜| 99www.bibizy香蕉资源国产一区二区三区高清 | 丁香五月天社区| 超碰97男人| 国产美女91| 一区二区三| 日本在线不卡v二区| 蜜桃视频精品一区二区| 色色色色色色色色综合| 国产精选视频| 92性色国产午夜福利在线661| 亚洲二区精品在线观看| 超碰99在线观看| 欧洲乱码视频| 凹凸 69堂 在线播放| a片 xxxx受爽视频| 久操com| 亚洲老熟妇xxx| 婷婷香网站| 97色综合中文网| 国产Aα| 啊啊啊 在线观看| 欧美激色| 国产高清午夜成人在线观看| 精品性爱一区二区| 天天影视激情欧美| 97伦综合| 岛国激情视频软件| 欧美日韩国产在线| 色在线69堂| 懂色Av一区二区三区| 日韩97| 久久久久久国产手机AV| 超91综合网| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 人妻精品一区二区在线| 欧美日韩222| 操久久久久| 久久av一级av少妇av高潮 | 成年人网站在线免费观看| 啊v视频在线观看| 少妇丝袜在线观看AV| 亚洲人体视频在线观看| 婷色五月天| AV在线播放网址| 激情抓乳插进去啪啪啪日韩| 日韩女优中文字幕| 亚91网| 国产尤物AV尤物在线观看不卡| 91麻豆天美国产| 蜜桃香蕉久草精品在线| 91精品久久久久五月天精品| 嗯嗯嗯好爽| 国产2.3.4区| 青青久久手机线视频| 欧美久久毛片基地| 夫妻天天操岛国视频| 色综合久久久久| 天天热精品| AA级电影三区| 亚洲少妇色| 精品人妻一区二区三区视频| 立川理惠被中出无码| 久久性爱视频| 国产后入式在线观看| 操高情无码| 欧美夜色| 都市久久精品激情亚洲| 欧亚乱色熟一区二区三四区| 亚洲猛交| 91free福利| 欧美色图97| 国产特级毛片AAAAAA高潮流水| 女一区二区| 97神马久久| 亚洲第一页色| 超碰在线91| 日本99视频| 操老熟女AV| 国产一级137片内射麻豆| 精品人妻伦一区二区三区久久| 天天情欲宗合网| 手机在线免费看的av| 精品国产网站|