久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|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
返回資訊列表
亚洲最大无码中文字幕网站| 91天美传媒精品| 久超碰这里只有精品| 无码高清专| 99re欧美| 日本免费一区二区不卡| 欧美综合骚| 无码一区免费在线不卡| 一区二区国产视频在线观看| 性欧美另类高清| 亚洲色图一区二区三区| av东京热男人的天堂| 久久亚洲欧美中文字幕国语| 日本孕妇一区二区视频操逼免费看 | 中字乱伦AV| 天天干夜夜鈤| 亚拍在线| 综合日韩激情另类图片| 日韩啪啪视频| 亚洲最大成人a毛毛片| 久艹免费| 久久r精品| 黄页18禁| 中出91| 草草影院日本第一页| 欧美牲| 中文字幕一区二区三区人妻不卡 | 岛国毛片在线观看免费| 99国产精品视频尤物| 高清孕妇孕交 交| 国产精品一级二级在线| 激情终合网| 天天日夜夜爽| 国产精品久久久久久片| 国产一级137片内射麻豆| 老熟女综合| 蜜臀久久99精品久久久久电影| 久久av网| 欧美亚洲性爱一区二区| 果冻国产精品麻豆成人av| 91久久青青草原精品| 久久中文字幕女同性恋一区| 亚州图片第一页| 东京成人一区| 日韩精品人妻中文字有码在线| 观看免费区二区三区二| 日韩亚洲美州欧洲综三区一品在线| 天天色天天干天天爱| 色妇综合网| 97天天在线| 日韩伦理视频| 97香蕉人人乳| 无码久| 欧美色综合图片| 欧美亚洲一区二区久久久婷精品大包诱| 97AV爱| 欧美熟妇精品黑人巨大一二三区| 午夜性| 欧美丝袜激情| 老汉网| 色综合加勒比四四季| 色999偷自拍拍| 国产精品久久久久久久久久久久久久久久久久| 天天天天做夜夜夜夜做| 亚洲综合图片在线| 香蕉视频精品亚洲一区二区三区在线播| 快播久久人人aV| 天天看天天日天天操| 日日夜夜摸| 美女t无毒不卡不卡| 91亚洲黄色网| 欧美成人四级在线播放| 五月婷婷久久综合| 操婷婷逼| www.91欧美| 自拍亚洲综合| 99精品人妻| 精品国产无码中文| 亚洲女毛多水多21P| 88xx成人精品视频| 入口操逼网站| 禁片 高清 在线观看视频网站| 草b在线| 日日A∨| 日本三级韩国三级美三级91| 污色区网站| 亚洲性网| 国产欧美岛国精品一区| 青娱乐蜜桃臀AV色婷| 精品女同一区| 亚洲无码国产精品久久| 天天看,天天做| 亚洲男人的天堂亚洲| 女色视频社区| 激情欧美日韩女同久久| 久久超碰免费的| av日韩中文字幕| 射综合网| 色婷久久| 少妇精品久久久| 色色九区| 免费作爱一级视频| 手机不卡视频不卡在线一二三区| 九九九九九九九九九九九九九九九女| 成人97人人超碰人人| 婷婷尹人大香蕉免费| 天美传媒在线一区| 天天综合亚洲综合| 黄色欧美性爱视频| 99操| 国产精品午夜福利亚洲综合网| 亚洲福利影院一区久久| 色色亚洲| 91视频综合网| 超碰人人乐97| 亚洲欧美校园| 日韩丝袜二区| 久草毛片| 一级免费啪啪片| 久久久久密臀一区二区| 九七超碰| 亚洲国产成人高清在线| 久久人人妻| 久久久久久中文| 日韩国产欧美伦理在线| 久久精彩视频9| 欧美色爱综合| 九色婷婷| 91bbbbbb| 国产在线视视频有精品| 日本九九久久99| 91亚洲综合在线| 中文字幕亚洲在线一区| 久久中文字幕女同性恋一区| hd成人一区二区在线| 欧美成人一区二区| 人人爱人人操人人性| 91蜜臀在线久久久久| 深夜视频| 99∨VTV| 欧美,日韩,中文,另类| 亚洲性爱无码乱伦av| 一区二三区四区视频大全套| 激情综合五月天| 国产热av| 久久久久免费少妇| 97色伦97色伦国产欧美| 亚欧精品久久久久久久久久久| 97在线视频免费看| 男人夜色天堂ss| 人妻精品一区二区| 九一综合精品视品av| 神马久久久久| 丰满精品人妻少妇久久字幕| 婷婷久久五月| av网站免费看| 天天摸夜夜操视频| 国产不卡片| 国产丝袜美女在线一区| 亚州大图综合色图| 亚洲中文字幕av| 欧美韩国你懂得在线| 日本成人A片免费看| 美日韩在线不卡人妻| 三级色综合| 天海翼久久| 91狠狠综合久久久| 欧美A片中文字幕| 久久偷偷色综合蜜桃| 国产情侣自拍在线播放| 老熟女91视频| 精吧天堂| 天色综合网| 亚洲97久久精品亚洲| 青女偷拍网| 99re这里只有精品3| 神马午夜久久| 久久一本大香蕉| 日本天天操| 秋霞色色影院| 91 国产丝袜在线播放-百度| 日韩在线女优天天干| 乱色老一区二区三区的观看方式| 久久大精品乱码视频人妻熟女| 秋霞免费AV| 9九九国产| yazhousetuoumei| 日韩激情中文字幕有码| 欧美巨大性舒爽顶到了| 国产日韩欧美| 国产女人高潮视频| 国产亚洲日本精品在线| 精品一区二区三区蜜桃| 无码操逼天堂| 国产精品97超碰| 亚洲激情 欧美色图| 亚欧成人中文字幕一区| 九九九九热| 黄久久| 日韩欧美偷拍美女视频| 亚洲AV无码天美传媒一区| 国产探花精品在线| CCYY草草影院地址入口| 久久这里只| 东北女人的毛片| 混色激情av| 91久热| 91社区拍啪人妻| 国产无吗在线播放| 国产精品96| 午夜操一视频一区| 久久久91福利姬| 丝袜夫妻自拍| 香蕉久久国产AV一区二区| 国产精品久久久久无码Av网曝门 | 久久久99免费| 精品九九| 密臀视频三区免费网站| 国内成人圈中文字幕无码视频| 北京专精特新企业招聘信息| 超碰AV在线| 中文字幕一区二区三区视频播放| 91|九色|国产熟女| 欧美|91色综合| 久久久久婷婷| 午夜天堂精品久久久久91| 亚洲AV无码国产精品久久久久| 岛国黄色大片网站| 93人人操人人| 无码 黑人一区二区三区| 亚洲无码视频免费在线观看网址!| 91色香| 亚洲国产福利视频| 国产后入式在线观看| 九九九久| 97欧美综合网| 97超碰久久| 亚洲色图综合| 精品人妻1区| 乱伦av.com| 免费1级a做爰片观看| 国产亚洲深夜激情| 色色色欧美| 无码人妻精品一区二区三区九九| 狠狠图片青青草| 欧美78| 美女t无毒不卡不卡| 久久爱97| 一二三四视频中文字幕在线看| 亚洲h片在线免费观看| 翔田千里Av在线| 宅男影院久久久,99| 97超碰大| 久草免费在线一区二区| 深爱五月婷婷| 婷婷国产精品九区| 丰满欧美放荡少妇在线| 亚洲国产97| 97精品免费视频网站| 成人26uuu| 欧美亚洲尤物久久| 欧亚在线视频| 熟女高潮合集-永久久久-成人AV| 9久久久久久| 热热色青青草| A一区片| 无码视频黄色网战| 91在线限制级| 亚洲黄色电影| 日韩人妻有码免费视频| 婷婷九月色| 99热导航| 国产精品久久久久久久久久久久久久吹 | 亚洲美女黄色| 91精品人妻一品二品三品| 69XX一中文字幕人妻91| 99自拍视频在线| 色综合潮| 日日爱99| 国产精品无码AV网站| 欧美淫穴| 欧美日韩狠狠爱| www.大香| 日日AV加勒比| 日本加勒比无码专区| 久久av一级av少妇av高潮| 五月色网| 日韩中文9| 免费成人在线观看91| 影音先锋国产精品| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 成人午夜高潮av猛片| 综合久久中文字幕综合日韩精品| 久久综合久色欧美综合狠狠 | 婷婷久久五月| 亚洲国产精品久久久久婷婷老年| 99亚洲国产精品色一区二区三区| 成人婷婷丁香| 精品97久久| 亚洲精品亚洲人成在线麻豆| 婷婷五月天无码 | 亚洲中文日韩欧美大香蕉视频| 色鬼在线综合| 日韩福利综合一区| 男人的天堂2018.| 欧美97色| 超碰亚洲97| 日韩有码专区| 伊人97超碰| 亚洲丝袜综合| 色婷婷九月| 色婷婷一区二区三区久久午夜成人不| 欧美色综合影院| 中文字幕人乱码中文字的预防方法| 激情综合网激情综合| 五月婷婷丁香| 97亚洲欧美| 五月婷婷激情网| 亚洲欧美91| 丁香五月综合| 亚洲最新Av| 男人天堂一区二区| 美女诱惑一区| 密臀在线免费观看| 成人AV超碰免费在线| 欧美激情片一区二区| 一个色导综合| 加勒比伊人综合| 日本高清一区二区在线| 夜夜夜爽www精品视频| 免费一级视频特黄色大片| 青青草依人大香蕉| 97视频在线观看播放与子乱对白在线……| 性色av大全| 欧美91网站| 日本高清一区二区在线| 96一区二区| 熟女一区二区| 十八禁啪啦拍视频无遮挡| 疯操AV| 免费观看有码高清视频| 草草电影院| 亚洲色情在线影视| 亚洲成人在线播放| 亚洲国产ⅴ高清在线观看| 亚洲综合 欧美| 久久久激情| 日本精品中文字幕视频| 男人天堂毛片| 欧美伦乱爱| 国产精品久久伊人| 翔田千里AV无码秘 三区| 少妇500双飞99| 亚洲Av无码成人精品国产| 男人的天堂视频精品乱在线| 人人澡综合涩| 99精品网| 久久香蕉影院| 国产家庭乱伦性爱视频| 九九九国产| 蜜桃久久综合视频| 色婷婷九月天天综合| 九九九网站| 屁股久久久久久久久| 日本久久久久久久久| 可能人人看人人摸| 91性网| 美国三级日本三级久久99| 久久精精区一区二区一蜜桃一区二区| 亚洲成人一区二区精品| 国内亚洲高清无码| 怡红院成人视频| 久久精品国产精品| 天天操女人| 日韩乱插| 国产乱伦一二三区| 中文字幕交换人妻| 日本免费人成视频播放120秒| 一区二区三区不卡视频| 天天内射| 欧美A√综合网 | 天堂九九九九九九九九九| 亚洲欧美日韩二区视频| 26uuu久久| 少妇的嫩逼图片| 男人的亚洲天堂| 色 婷97| 日韩伦理久 久久 清纯| 久久久草成人网站久久久草成人久久久草久久久 | 中文久久| 大香蕉一级黄色片久久| 亚洲丝袜诱惑| 亚洲91网| 黄色无码高清黄色无码网站| 精品人妻一区二区三区在| 一级AAA片一区二区三区| 国外91| 人妻内射一区二区在线视频| 91美女视频在线免费观看| 91偷拍欧美亚洲| 天天摸夜夜摸| 99www.bibizy香蕉资源国产一区二区三区高清 | 日韩av女优在线免费一区| 亚洲天堂热| 99热这里只有精品9| 亚洲AV无码乱码在线观看性色| 玖玖玖玖精品国产剧情| 熟女突然公开看18禁影片 | 91影视亚洲| 国产AB视频| 久久成年精品| 日本精品免费一区二区三区四区| 天天看片麻豆| 日韩专区久久久| 91日产桃蜜| 2017天天操| 99婷婷一区二区| 另类TS人妖一区二区三区| 密乳无码| 超碰在线人妻| 欧美熟妇乱码在线一区| 97日视频| 性九九九九九九| 亚洲欧美综合网| 最新亚洲黄色免费电影 | 美腿色图| 91天天美女| 欧美加勒比| 99老司机精品视频在线观看| 天天色播亚洲综合网站| 久久超碰久| 啊啊啊啊二区好大| 一区二区视频在看| 欧美日韩黄片精品在线| 欧美久热| 日韩人妻精品中文字幕| 韩日欧亚a级| 亚洲欧美综合网| 成人免费性爱视视| 第一高清av中文字幕| http://qxhbdz.com| 亚洲天堂人人妻| 欧美综合网1| 丰满人妻一区二区三区四区| 欧美伊人久久综合网| 免费看欧美美女黄色大片| julia高潮后不停追击中出| 操死我干死我| 九九九九九精品视频| 尤物视频一区| 校园春色综合| 9 1果冻精品视频| 91人妻精华帖| 中文字幕精品丝袜| 久久亚洲一区女同性恋中文字幕 | 国产AV久久野战精品| 口爆综合网| www.高清无码诱惑一区.com| 国产三级片在线观看| 草草网站影院白丝内射| 久久国产视频专区一二三| 日日日日做夜夜夜夜做无码97| 男人的天堂网页| 无码抄逼网| 人妻在线大香蕉| av三级电影在线播放| 亚洲日本韩国在线| 性感美女啊啊啊在线| 精品一区二区国产日韩| 国产九月婷婷| 国产精品一区二区三区在线| 亚洲精品乱码久久久久久蜜桃麻豆| 99re不伦| 日本一级特级毛片视频| 亚洲nv男人的天堂网| 999九九九九国产动| 亚洲图片色图欧美另类| 中文字幕制服欧美久久一区| 久九九九| 99久久无色码| 成人精品久久久午夜福利| 日韩欧美字幕亚洲一区二区| 精品综合久久久久久97| 国产理论视频在线播放| 91在线/欧洲| 国产精品999zyz| 亚洲天天影视综合网| 伊人五月天婷婷| 亚洲欧洲偷拍一区| 97综合网| 中文字幕国产精品1区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 久久婷婷亚洲| 欧美姓爱综合网| 天天爽天天爽| 蜜臀中文字幕| 欧美狠狠弄| 欧美一二三级精品在线| 吉川爱美亚洲二区在线| 激情干在线| 日韩91网| 中文字幕永久在线| 操碰97| 亚洲瓯美色图| 亚洲欧美在线观看2021| 欧美日韩制服| 动漫片子网站3黄| 在线看的av| 精品国产乱码久久久久久久久久毛片| 天天做日日爱夜夜爽| 亚洲午夜精品久久久中文影院| 91狠狠综合久久久久久| 亚洲av青草久久一区二区| 欧美超碰96| yw尤物av无码点击进入麻豆| 欧美成人综合| 五月婷婷综合网| 日本影视久久免费| 伊人伊人LD| 日韩中文字幕视频在线观看| 欧美色青| 四虎在线观看网站| 女人的久久久| 国产操操日韩三级黄| 欧美成97爱| 97久久精品亚洲中六字幕| 亚洲av影音先锋| 色爱亚洲| 四虎在线免费视频| 欧美色三级片91| 亚洲一区二区三区中文字幕| 亚洲男人在线观看天堂| juliaann丝袜大战黑鬼| 污啪啪啪视频| 少妇熟女1区2区3区| 超碰 欧美| 亚洲欧美色综合| 男女一级A片大黄,一进一出| 久久天天艹| 欧美日韩另类激情图片| 亚洲综合性网址| 精品少妇后入一区二区三区四区人妻巨乳 | a级理论午夜日本| 国产日韩精品suv| 蜜屁Av| 淫妻综合网| 久精品无码av一区二免费国产在线观看| 国产一国产一级毛片古装| 国产天天骚| 日日噜噜夜夜狠狠视频无| 欧美激情亚洲| 青青国产在线拍揄自揄拍| 亚洲综合激情五月久久| 男男H黄动漫啪啪无遮挡网站| 亚洲āv网址在线观看| 五月天婷婷社区| 日韩无码AB| 大香蕉天天看妹子| 欧美日韩222| 亚洲人妻一区二区三区| 婷婷五月综合在线| 性做久久久久久免费观看软件| 翔田千里Av在线| 91成人18| 操逼A∨| 91精品国产综合久久久蜜臀酒店| 三四中文字幕| 992视频一区| 香蕉精品二区二区| 少妇激情一区二区三区视频| 久草色在线观看| 97久久国产精品| 95精品在线| 国产丝袜视频| 丝袜熟女2P| 亚洲欧洲美腿丝袜| 精品久久久久9999| 97AV爱| 一区二区三区 丝袜 高跟 美腿| 91校园春色长篇| 亚州情色j区| 精品久久久久,69国产成人精| 国产浮力影院第1页| 国产剧情AV不卡在线观看| 亚洲成人av电影在线| 成人免费看吃奶视频网站| 亚洲免费成人在线高清无码视频| 国产高清亚洲日韩一区| 欧美在线永久天堂| 无套内射人妻在线播放| 91动漫操逼视频| 国产无马av| 久久久久久亚洲精品不卡人乳| 91neishe| 日韩丝袜人妻AV| 欧美白嫩女HD| 99re综合伊人| 色香欲影| 在线无码视频| 久久直播国产| 久操精品网| 欧美不卡在线美女| 精品国产乱码久久久兰草影视| 欧美性天天影视| 91九色丰满高潮| 大香蕉狠狠爱| 飘花国产午夜精品不卡| 日本网色| 99热精品国产| 98超碰欧美| 在线视频亚洲无码| av网页一区二区三区| 开心五月婷婷激情| 天天综合网在线| 很狠操| 一区二区三| 福利视频一区二区微拍| 成人情色一区二区| 1204金沙人妻懂旧版免费| 99福利社| 欧美性爱18观看| 日韩中文字幕视频在线观看| 亚洲.欧美.丝袜.中文.综合| 天堂种子在线www网资源| 日本青青草在线| 久久三区四区| 久久一级无码精品毛片6| 人妻密肉在线观看| 91欧美色| 国内三级自拍小视频在线观看 | 色拍偷亚洲| 探花精品 一区二区| 国内毛片无码一级毛片| 欧美日韩亚洲五月天婷婷| 精品人妻中文字幕高清| 狠狠久久亚洲欧美专区| 老鸭窝在线视频播放| 无码最新| 亚洲国内精品成人不卡| 欧美日韩*字幕一区| 97人肏| 超碰97人妻自拍| 国产精品无码AV网站| 日日骚精品视频| 嫩呦国产一区二区三区AV| 男人的天堂成人的社区| 男人的天堂 在线一区| 亚洲成人在线播放| 久久久精品,3| 自偷自拍的亚洲视频| 制服丝袜第二页| 无码av永久免费专区网站| 黄色不卡视频| 日韩在线一区高清在线| 和协影院中文字幕三区| 2017人人操,人人摸| 亚洲中文电影| 亚洲蜜乳av| 91精品又粗又猛又爽| 日韩色| 日本精品一区二区三| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 九色精品视频导航1| 淫骚熟女一区二区三区| 亚洲精品一二区| 亚洲日韩少妇一道本视频| 无码av永久免费专区网站| AV色五月天| 国产成人精品日本亚洲语言| 日日骚网站| 日本久久久久久久久| 亚洲无码精品AV久久久| 超碰97最新人妻| 特级丰满少妇一级AAAA爱毛片| 亚洲交换| 91N欧美| 嫩草在线视频| 色香91| 婷婷综合| 超碰在线人妻中文字幕| 啊啊啊啊啊啊啊啊啊啊在线观看| 自拍偷拍 日韩无码| 精品无av| 黄总AV色图| 一,爱啪啪,在线免费视频| 97在线观看视频| 女人的久久久| 少妇啪啪自拍| 久久日韩肥臀| 亚洲国成人情色好看电影| 国产一级作爱毛片| 欧美色青| 91男人天堂网| 日本三级久| 亚洲中文字幕久久人妻| 青草地一本线一区二区三区| 亚洲AO在线| 秋霞欧美性爰视频| 狠狠操使劲操| 免费精品AB| 精品无码一区二区| 日韩少妇一区二区三区| 97爱亚洲| 物业黑人 AV一区| 日韩pv中文| 国产一区二区三区导航| 超碰在线人人射| yazhouzaixian| 亚洲棕合电彰| 亚洲 日韩 欧美 国产综合体| 中国一级操逼视频| 天天影视亚洲| 国产乱不卡| 亚洲综合小视频小说在线观看| 欧美一区二区亚洲天堂| 中文字幕乱码人妻二区三区| 777超碰| 人妻精品一区一区三区蜜桃91| 亭亭丁香激情| 色九九九九久| 成人av动漫在线观看| 亚洲h片在线免费观看| 91亚洲网站| 免费国产| 日产123区精品免费观看| 久久久久久大| 久久黄黄| 五月丁香啪啪啪| wwwcaobibi| 男女性感激情网站| 亚洲天堂五月天国产| 东京热综合久久一区二区| 天美麻豆黄色录像| 日欧毛片久久| WWW.加勒比人妻一区不卡.com| 色综合一区二区三巨| 九热视频| 久久xxxx| 丁香久久| 中文字幕日韩综合| a久久| 久久99综合| 色综合色色| 日本午夜久久电影| 日本韩欧美在线播放a| 欧亚乱色熟女一区二区| 亚洲三区视频| A V视频日本| 双插性欧美一二三区| av强奸乱轮| 黄色片,com| 亚洲精品xxx| 欧美日韩国产高清在线一二三区 | 在线99热| 黄污污污污| 97超碰jingpin| 亚洲国产精品久久久久婷婷青年| 欧美日韩国产中文精品字幕自在自线, | 欧美天天谢综合网| 69AV女优男人的天堂| 天天干天天日天天射黄色大片| 九一综合精品视品av| 闷骚老熟女15P| 亚洲精品1区| 97欧美色| 久久春色| 黑人美精品 A片| 两性色网| www久久久| 18精品一区| 歐美性天天| 欧洲站一级二级三级h| 五月天婷婷社区| 欧美天天性| 伊人黄色片| 国产激情在线| 老鸭窝亚洲毛片| 乱老熟女一区二区三区| 青青草华人在线欧美在线| 日本二三四区| 成人免费毛片| 国产九九九九九九九九| 亚洲日产专区| 动漫区日韩区欧美区| 台湾佬中文娱乐网久久久久久久久久com | 熟女一区二区三区| 蜜桃臀一区二区三区久久| 亚洲中文字幕熟女少妇一区二区| 中日韩免费看男女操逼大全| 亚州免费啪啪视频| 97色婷婷| 欧美色图 人妻| 4虎在线观看| 18禁中文字幕| 久久超碰久| 97se综合| 免费观看成人www精品视频| 在线看片国产精品每日更新| 夜夜嗨一区二区| 伦在线97| 思思热国产高清| 伦理片秋霞免费影院| 伊人大香蕉在线| 精品免费成人久久| 你懂的在线观看区国产| 日本 欧美 国产一区| 成人老鸭窝人人在线视频| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 中文久久| 婷婷亚洲色| 98福利在线视频| 草草草视频在线免费看| 四虎影院成年人片| 蜜桃精品视频一区| 火箭成精品视频884必出精品| 在线综合色| 爱爱动态试试看6 0秒| 日本大香蕉综合网红本杳社区| 一本久道在线综合视频| 91人人爽人人爽| 99少妇| 手机看片1024你懂的国产| 东北女人被操| 国产一级高清免费观看| 亚洲人妻AV| 日本天天干天天日一区| 精品中文字幕一区二区| 国产精品久久久久久夜夜夜| 欧成人精品一区二区三区| 国产成人精品日本视频| 亚洲性少妇| 伊人丁香五月婷婷| 男人的天堂激情| 免费操逼91| 久无码| 亚洲高清视频在线免费观看| 韩国久久97| 啊啊啊爽爽| 国产熟女少妇一区| 久久内射| 亚州情色j区| 久久久精品网站| 欧美日韩99精品麻豆传媒| 久久精品国产亚洲av水密被窝| 国产一区二区视频在线播放| 2019亚洲男人天堂| av日韩手机在线影视| 超碰97在线中文| 强奸乱伦Av网| 亚洲日本大香蕉1| 日本黄 R色 成 人网站| 欧美另类丝袜熟女| 欧美色色色| 91一区二匹| 精品一区96| 免费av高清无码| 97色涩| 日本一区二区不卡精品| 精品二区三四区五电影 | 黑人精品成人一区二区三区| 97综合久第一页| 色色色热| 强被迫伦姧在线观看无码网站| 1区2区3区中文字幕日韩| 九九干| 综合亚洲欧美| 吉川爱美98堂在线| 男人高清无码一区二区| 国产三级中文字幕粉嫩| 日韩精品区二区三区不卡| 男女性无套 免费九一| 无码视频一区二区| 91天堂色男人的天堂| 日韩综合97p| 国产视频一区二区在线观看| 欧美亚洲一级在线观看| 欧美综合自拍亚洲综合图| 色婷婷电影网| 国产无码精品高清| 另类图片五月天| 精品国产网站| 亚洲AV无码黄色强奸| 深喉吞精| 大香蕉在线视频重口味毛片在线| 婷婷中文网| 中文字幕乱亚洲美女精品一区| 中文有码第五页| 天天色播亚洲综合网站| 97碰| 91老妇女| 99蜜桃臀亚洲成人在线观看| 欧美日韩91| 中文字幕一区二区免费在线| 亚洲天天自拍| 殴洲老熟女| 伊人久久88国产女| 久久黄色性爱视频| 亚洲天堂男人天堂网| 一本久久精品中文字| 爱爱动态120秒| 99精品久久久久久久婷婷| 青青色在线观看| 中文字幕一区二区三区蜜桃视频| 青娱乐亚洲热| www.色操逼| 国产又黄又粗的视频| 久久久久女教师免费一区| 一区,二区,三区视频| 青青草日韩无码| 乱伦3P视频| 欧美 精品国产制服第一页| 精品人妻久久久| 日韩少妇在线视频| 免费农村成人少妇人妻Aa一区二区视频 | 五月丁香六月| 91成人精品在线播放| 亚洲婷婷综合网| 4虎在线观看| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 日本一二三免费久久| 91少妇香蕉久久精品| 动漫片子网站3黄| 人妻啊啊人妻啊| 亚洲图片欧美在线视频| av在线免费一区二区| 欧美性爱日韩高清| 白丝av| 亚洲色图欧美色图另类图片| 噜噜噜噜天天狠狠| 91亚洲欧美综合高清在线| 色诱中文字幕| 日韩一级二级在线| 国产欧美一区二区| 丰满翘臀美女影院视频| 亚洲图片欧美91N| 熟妇熟女视频一区二区三区| 99热超碰在线| 99热这里只有精品99| 久久综合激情| 欧美色五月| 五月婷婷五月天| 亚洲日本成人动漫| 少妇二级| 任我爽视频在线观看| 超碰性爱97| 啊啊啊不要啊啊受不了了视频在线 | 男人的天堂2000| 精品国产久久乱码| 久久久久婷婷精品av电影| 91精品久久久久久久久久| 97免费视频在线观看视频| 在线观看午夜婷婷久久久久清性观看| 加勒比五月天| 夜夜嗨一区| 91日韩国产欧美亚洲另类精盘州至城都 | 久久av一级av少妇av高潮 | 日韩成人午夜精品久久高潮| 久久仑合| 天天日熟妇| 加勒比99999| 啪啪视频免费在线观看| 成人免费毛片| 成人免费在线网站| 色丁香五月婷婷| 人妻精品4K4K4K4K4| 久操在97| 国产白丝网站| 百度百度日本操逼| 岛国大片国产| 国产欧美日韩在线不卡第一页| 99热精品在线观看| 日韩一级二级在线| 超碰伊人在线| 色噜噜国产精品视频一区二区| 草草草视频在线免费看| 超碰人妻天天干| 91欧美| 91处女视频在线观看| 国产熟码AV| 大肥女高潮bbwbbwhd视频| 国内亚洲精彩视频在线| 五月丁香网站| 淫乱图区| 色香欲综合| 一类无码操逼视频| 婷婷色色五月| 亚洲在高跟鞋自慰久久在色线| 亚洲97资源| 欧美区亚洲区偷拍区| 欧美性爱在线无码| 天天弄欧美| 美女91网址| 操逼天美3区| 久久精精区一区二区一蜜桃一区二区| 无码人妻精品一区二区三区九九| 蜜臀久久久99久久久久| 成人激情无码在线视频| 精品久久青青草| 蜜臀在线看片| 小视频国产| 国产一区96在线| 五月天亚洲网| 人人操人人舒服| 成人欧美一区二区三区黑人一| 九九热精彩视频| 一起草三级AV电影在线观看 | 久久这里只精品| 艹精品| 黑人中出21连凳花野真衣| 久久男人| 激情啪啪拍91| 狠狠2050在线观看| 亚洲av噜噜噜噜噜噜| 国产精品三级视频网站| 欧美久久人妻少妇一区二区| 亚洲欧美日韩中文播放| 日韩成人电影AV| 中文日韩欧美熟| 无码国产Av| 日韩内射视频| 日韩一级二级三级在线不卡观看完整| av天堂手机版追回| 天堂射| 日韩免费在线观看不卡| 狠狠五月天| 91中出在线| 多乙久久久久久| 成人黄页| 亚洲图片色图欧美另类| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 男人的天堂免费| 久草视频分类在线| 99re在线视频国产| 国产毛片久久久久久久| 九九久久一区二区三区| 92久久| 日本高清电影欧美色图| 美女爽到高潮91| 成人国产精品三级A片| 成人在线午夜视频一区| 欧美区亚洲区偷拍区| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 老色69| 91亚洲在线| 欧美在线官网| 国产60页| 高潮内射在线| 国产综合日韩伦理| 亚洲男人天堂网久久| 丁香九月婷婷| 综合日韩激情另类图片| 亚洲成人黄色在线观看| 欧美男人一区| 国产在线播放成人免费| AV一二区| 操逼大黄片| 精品中文日韩字幕视频| 欧美日韩香蕉| 亚洲第一页综合在线| 色牛牛AV| 久夜视频| 67194无码不卡| 91肉丝| 超碰中文字幕人妻草一区| 国产中文精品一区二区在线观看| 在线五区| 精品性爱无码在线播放| 亚洲国产天堂| 大香蕉99热| 尤物网址| 国产激情在线| 麻豆久久久久久久久丝袜| 成全在线观看免费观看| 精品一区二区三区蜜桃臀www| 久久国内| 操熟女91| 亚洲AV不卡在线观看尤物| 欧美日韩性爱无码| 久久女人| 熟女中出视频| 不卡啪啪视频| 亚洲无992tv| 综合熟女| 人人摸.人人色| 大香蕉中文201| 九九久久99| 国产呦精品一区二区三区下载| 精品日韩| 亚洲涩图欧美| 成人免费在线网站| 97干97色| 97草草| 午夜天堂网| 欧美强奸一区二区诱惑| 国产成人在线观看网址| 加勒比少妇AV婷婷六月天超碰超碰| 国产精品岛国片在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 97超碰伊人| 午夜性| 狠狠操狠狠| 亚洲伊人a线观看视频| 日韩有码专区| 97av,com| 91偷拍欧美亚洲| 久久久精品国产亚洲AV无码| 少妇厨房愉情理伦片bd在线观看| 69丨亚洲丨精品丨入口免费播放| 欧美成人精品A片免费一区99| 久久性爱精品一区| 久艹日日日| 四虎影视国产精品| 德国一二三不卡| 欧美不卡二区| 欧美成人免费在线观看| 久夜操| 997色在线| 久操在97| 91肏屄网| 欧美精品第3页| 久久这里只精品99re66图| 欧美aa一级片| 男女啪啪网站免费视频| 大香久久| 亚洲天天自拍| 麻豆区久久久久亚| 97久久精品国产| 国产九九久久久精品| 五月天婷婷久久| 肉嘟嘟www视频在线观看高清| 极品综合| 久久av无码| 91福利网在线观看| 日韩精品午夜操呦呦不卡影院| 色香综合天天影视综合| 操死我了啊啊啊| 国产 三级自拍| 国产精品麻豆视频网站| 97综合在线| 东北熟女91| juliaann欧美丝袜办公室| 亚洲天堂久| 美女干逼2| 美女黄码视频午夜| surenchaopeng| 北京美女一区二区| 91在线限制级| 亚洲 图片 欧美 色图| 国产久久视频| 欧美性区| 亚洲91亚洲| 青青草色情网站视频| 美女啪欧美一区| 亚洲限制级| 蜜屁Av| 精品美女人人干| 97视频一区| 蜜臀99久久国产| 日韩在线电影| 午夜成人爽爽爽爽A片李冰冰|