99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

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

iOS與Unity混合開發(fā)中的通用指令化繪制工具設計 在實際 iOS 與 Unity 混合工程里所謂“iOS-Unity 通用繪制工具”通常并不是一個能自動把世界坐標換算成屏幕坐標的“黑盒”而是一套從繪制數(shù)據(jù)協(xié)議、Unity 側指令封裝、iOS 原生渲染到回寫鏈路一起協(xié)同的方案。之所以需要單獨抽一套通用層是因為大多數(shù)項目在 UI 動態(tài)畫線、涂鴉標記、軌跡預覽這些場景里都會遇到同一個問題Unity 側已經采集到了點序列iOS 原生側還需要再畫一份兩端如果各自寫一套坐標換算和樣式解析等到聯(lián)調時就會出現(xiàn)線條偏移、觸摸事件不同步、橫豎屏旋轉后錯位等問題。這篇文章會圍繞“動態(tài)畫線”這個最小場景介紹一套可落地的通用繪制工具結構。你會看到如何定義兩端都認的 JSON 繪制指令如何在 Unity 側生成噪聲曲線、折線和涂鴉數(shù)據(jù)如何在 iOS 側用 CAShapeLayer 渲染這些指令并通過橋接方法把原生觸摸事件回傳給 Unity。工程中不涉及平臺破解、抓包或其他灰產場景只討論正規(guī)游戲、渲染工具和原生輔助功能開發(fā)。1. 先確定主線這是一套指令化繪制橋接不是大而全的畫板 SDK1.1 這種工具通常會出現(xiàn)在哪些業(yè)務場景里游戲內玩法或輔助編輯器常見的繪制需求大致可以分成三類玩家用觸摸筆跡做涂鴉、簽名、關卡內標記。Unity 把業(yè)務生成的路徑、連擊軌跡、噪聲波形顯示在場景層或 UI 層。iOS 原生層需要在 Unity 渲染結果之上疊加一層批注例如截圖標注、AR 引導線、回放控制工具欄。第 1 種和第 2 種在純 Unity 工程中可以用 LineRenderer 或 UGUI 動態(tài)網(wǎng)格完成。真正麻煩的是第 3 種。Unity 的渲染結果和 iOS 原生視圖屬于兩個不同的渲染體系Unity 使用 OpenGL ES 或 Metal 渲染到自己的屏幕區(qū)域iOS 原生視圖則基于 UIKit、Core Animation。如果業(yè)務要求原生側動態(tài)畫線而 Unity 側又要同步同一份數(shù)據(jù)最穩(wěn)妥的做法不是截屏下發(fā)而是把繪制動作本身抽象成指令讓兩端執(zhí)行同一份指令集。1.2 通用繪制工具應該只管理繪制不應該直接管理游戲對象做這類工具時容易犯的最大錯誤是試圖讓一條線條直接對應一個 GameObject 或一個 UIView然后用很重的腳本去控制生命周期。真正的通用繪制工具應當更薄接收一個繪制動作集合。將動作轉換成統(tǒng)一數(shù)據(jù)格式。把數(shù)據(jù)提交給對應渲染端。渲染端只負責畫不負責業(yè)務邏輯。這里還有一個關鍵取舍數(shù)據(jù)協(xié)議才是核心渲染實現(xiàn)可以替換。Unity 編輯器里可以用 UGUI 頂點臨時預覽iOS 原生里可以用 CAShapeLayer 渲染未來如果切換到 Metal 自繪也只需要替換最底層的render(payload:)方法不需要改動上層業(yè)務代碼。2. 第一層基礎設施讓 iOS 和 Unity 都理解同一份繪制指令2.1 先用一個可以擴展的 JSON envelope 承載整批操作繪制數(shù)據(jù)不能只包含單個線條的點數(shù)組。實際場景里還包含畫布 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數(shù)組用于繪畫動作每個動作都是一條獨立可執(zhí)行指令。2.2 動作類型要按“可回放、可增量追加”設計繪制工具的動作類型不需要一開始就很多但每種動作的語義必須明確不能一個op里既畫線又處理手勢。建議從最小集開始op 類型用途必需字段說明stroke繪制一條折線或曲線pathId,style,points一條路徑只對應一個 CAShapeLayerclear清空畫布無可以搭配exceptPathIds實現(xiàn)部分清除layerVisible隱藏或顯示某一批路徑pathId,visible用于標記線的擦除和恢復enableTouch開啟或關閉原生觸摸采集enabled避免原生層誤接管手勢touchiOS 原生把觸摸點同步給 Unityphase,point,pointerId這是反向指令在真實工程中stroke不必高頻發(fā)送整條路徑。更合適的策略是 Unity 先在業(yè)務層累積點數(shù)據(jù)用手勢結束時再把整條路徑發(fā)給 iOS。如果確實需要實時預覽也可以按幀發(fā)送增量點但增量點仍要歸屬于同一個pathId。這種設計讓回放、回滾、撤銷都變得簡單因為每個操作都是可以重放的純指令。2.3 坐標系統(tǒng)一是兩端聯(lián)調的第一道門檻iOS 的 UIKit 坐標以左上角為原點x 向右增大y 向下增大。Unity UI 的默認坐標系在某些設置下 y 軸方向并不一致如果直接使用 Unity 的屏幕像素坐標很容易出現(xiàn)上下顛倒。在實際項目中更推薦使用“歸一化坐標”或“邏輯點坐標”。協(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è)務層只負責向緩沖器提交點數(shù)據(jù)和樣式。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() { // 這里可以做點數(shù)壓縮、抽稀和校驗 } public ListDrawingStrokeAction Flush() { var result _strokes; _strokes new ListDrawingStrokeAction(); return result; } }DrawingStrokeAction和DrawingPoint都是可序列化的 DTO不依賴 UnityEngine 的JsonUtility數(shù)組序列化限制實際工程可以結合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)的第二個參數(shù)寫固定值得到的是一條一維噪聲波形如果第二個參數(shù)也隨 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)畫線也不建議一開始就直接寫自定義網(wǎng)格。先用少量管理類把“路徑數(shù)據(jù)”保存下來再用LineRenderer或UGUI做編輯器預覽等到數(shù)據(jù)協(xié)議穩(wěn)定后再把真正發(fā)布到 iOS 的渲染實現(xiàn)切到原生層。編輯器預覽和 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ā)到不同處理函數(shù)。核心邏輯是把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 原生繪制線的常用組合。下面給出一個基礎實現(xiàn)思路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 函數(shù)。前提是原生側實現(xiàn)了同名導出函數(shù)并且 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函數(shù)否則會因為找不到入口導致崩潰。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 原生導出函數(shù)和回傳 Unity原生導出的 C 函數(shù)接收到字符串后要切換到主線程再交給繪制視圖。不要在回調函數(shù)里直接操作 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); // 根據(jù) touchData.phase 處理 down、move、up } }這個回路的價值在于Unity 只負責下發(fā)熱點指令原生側負責繪圖和手勢兩端不會互相阻塞。5.3 真機驗證怎樣的輸出才算鏈路打通搭建完橋接后不要只看畫面是否出現(xiàn)應該按下面的順序驗證在 Unity 場景里放一個“生成噪聲線”按鈕。點擊按鈕后Unity 組包并調用FlushToNative。iOS 原生 Xcode 控制臺應輸出收到 JSON 的日志。繪制視圖上出現(xiàn)藍色噪聲線。在 iOS 繪圖層用手指滑動Xcode 控制臺應輸出 touch 事件。Unity Console 中應該能收到OnNativeTouchEvent回調。排查鏈路可以按下表逐步查看驗證點預期現(xiàn)象如果失敗優(yōu)先檢查Unity 按鈕點擊日志出現(xiàn) payload 長度C# 里是否走了UNITY_IOS分支原生收到 JSONXcode 打印收到字符串導出函數(shù)名是否一致JSON 是否 NULL視圖繪制成功藍色噪聲線出現(xiàn)JSON 里coordinateSpace和坐標映射觸摸采集成功iOS 日志輸出觸摸點isTouchEnabled是否為 trueUnity 收到回傳Unity 日志顯示 touch phaseUnitySendMessage的對象名是否真實存在6. 這幾個坑最容易在 iOS-Unity 繪制鏈路里出現(xiàn)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 真機上出現(xiàn) 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 里復現(xiàn)所以要先確認你用 Xcode 構建的是真機包而不是模擬器包。跑一個只調用 slua 的極簡用例排除業(yè)務代碼干擾。如果輸入數(shù)據(jù)里還有 Lua 側動態(tài)生成的繪制點要注意點坐標在進入 C# 后仍然是 Lua 表里的數(shù)字必須先在 C# 側轉換成 DrawingPoint DTO再進行 JSON 序列化不能直接把 Lua 表格轉成 JSON 后混進 Native 繪制協(xié)議。6.4 渲染 API 或插件不統(tǒng)一導致構建期現(xiàn)象不可復現(xiàn)Unity 在導出 iOS Xcode 工程時渲染 API 可以在 Player Settings 里勾選。如果關閉 Auto Graphics API只留 iOS 支持的 Metal 渲染很多繪制相關的異常更容易復現(xiàn)??梢赃M入 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)化要從“減少指令和圖層數(shù)量”入手在開發(fā)環(huán)境跑通不代表能直接用于生產。上線或對外發(fā)布前至少要做一輪繪制性能檢查用幾百條動態(tài)線測一測 CAShapeLayer 數(shù)量對內存的影響。在性能面板統(tǒng)計 Unity 側 JSON 序列化耗時。在 iOS Instrument 里觀察 Core Animation 的 Commit 數(shù)量。如果使用小圖標、顏色點等貼圖資源Unity 側優(yōu)先考慮 Sprite Atlas 打包合圖減少小圖各自提交造成的多次內存拷貝和額外 Draw Call。下面這張表可以作為性能驗收清單項目開發(fā)環(huán)境關注點生產環(huán)境關注點JSON 格式可讀性好方便打印可壓縮頻率低于每幀多次指令數(shù)量越小越好按幀批量下發(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 引導等全部場景。建議按下面這個順序做增量驗證先實現(xiàn) Unity 到 iOS 的單向畫線只畫一條靜態(tài) Bezier 折線。再接入 PerlinNoise 生成動態(tài)波形驗證點序列變化。然后接入 iOS 原生觸摸回傳驗證 Unity 能收到手勢事件。最后再把顏色選擇器、線寬控制、清空、撤銷這些 UI 控件接入 UIStackView 工具欄。每一步都建立一個可運行版本再進入下一步。通用繪制工具真正要解決的不是“有沒有畫出來”而是當 Unity 側和 iOS 原生側都需要理解同一段用戶操作時能不能用同一種指令語言干凈地表達出來。只要協(xié)議穩(wěn)定、坐標系統(tǒng)一、圖層管理清晰后續(xù)再加曲線插值、橡皮擦、自定義筆刷、多端回放都是在同一個骨架上擴展而已。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
996热| 色情综合| 色性综合| 婷婷久久图片| 免费看欧美成人A片无码| 日日夜夜爽| 99爱视频精品在线观看| 色五月婷婷1| 99网| 99精品热视频| 五月丁香偷拍| 五月丁香综合在线| 国产精品视频久久99| 激情久久久久久久久久久| 中字幕视频在线永久在线观看免费 | 久久综合色情网站| 碰人人97| 激情婷婷五月在线合集| 国产精品人成A片一区二区| 五月天综合视频| 美女天天久久| 色五月综合网| 激情综合无码| 天天综合网、天天综合色| 99视频日韩| 五月丁香六月激情| 久久五月丁香| 午夜天堂一区人妻| 中文字幕无线久必| av在线播放网站| 99精品在线观看| 在线观看婷婷5月| 人人摸人人干人人做| 五月丁香美女视频| 99在线观看亚洲| 国产精品国产| 五月激情啪啪啪| 99内射视频| 欧美A级成人婬片免费看理论| 婷婷金品综合视频| 久久婷婷五月天| 99re思思久久| 五月色综合| 大香蕉婷婷| 成人在线综合| av九九| 欧美97色| 色婷婷五月天| 六月婷欧美丁香综合| 中文字幕人成乱码在线观看| 影音先锋美国A| 99成人| 五月丁香黄色视频| 九九成人视频| 91碰操| 激情综合视频| 色噜噜狠狠一区二区三区| 欧美大片| 自拍视频在线观看9| 五月丁香婷婷伊人日韩| www.com.色色| 九九热10| 九九99一区| 岛国av电影网站| 激情宗合网激情五月天| 人妻aV在线| 伊人玖玖网| 97色啪| 亚洲精品在线视频| 国外亚洲成AV人片在线观看| 色情五月天导航| 97碰操| 欧美一线视频| 欧美色图天堂网| 婷婷欧美色| 夜夜操夜夜爽| 激情五月色播五月| 五月婷婷性爱| 日韩av高清| 影音先锋男人资源站一区二区| 停停五月色宗合| 97视频.干com| 日日夜夜小色哥| 爽天天天天天天天| 最近中文字幕在线中文视频| 五月丁香成年黄色| 激情综合网亚洲色图| 夜夜夜夜撸夜夜操| AA片在线观看视频在线播放| 99热免费精品| 99在线精品在线视频| 超碰猛烈的性猛交| 色九九中文字幕| 色播播婷婷| 六月色日韩| 久久99热精品a片在线观看| 天天夜夜爽| 玖玖99免费视频| 五月婷婷综合网| 色图亚洲91| 六月婷婷视频| 色噜噜狠狠狠综合曰曰曰| 综合色影| 亚洲色色五月| 精品草原久久视频| 中国丰满熟女A片免费观| 大香蕉伊然在亚洲90| 丁香婷婷性爱| 国产日韩欧美性爱| 伊人喵咪a V| 超碰成人电影| 久草狼人| 久9精品| 色97综合婷婷天天色| 色色色色热| 色婷婷丁香| 9一精品视频观看| 亚洲小视频免费播放| 五月天色视频| 五月丁香六月综合图| 婷婷在线播放av| 人妻无码精品一区| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 午夜青草资源| 日本人妻A片成人免费看片| 欧美婷婷九月| 六月丁香激情网| 天天干天天干天天操| 久久婷婷五月综合色天| 五月丁香龟婷婷| 这里只有精品视频在线| 狠狠狠婷婷五月综合| 人妻啪啪啪| 日韩欧美不卡| 天天久久综合| 日韩五月婷婷久久| 婷婷丁香五月在线播放| 性爱五月婷婷| 六月丁丁香| 国产精品男人AV不卡| 五月天天丁香婷婷在线中| 五月丁香在线观看| 美欧成人视频| 97资源欧美日韩大香蕉超碰一区| 成人综合AV| 99色在线视频| 五月久久网| 亚洲国产色色| 99热久97| 久久9精品| 久久九九玖玖| 婷婷伊人网| 99热精品在线播放| 免费无码毛片一区二区A片 | 九九热婷婷| 婷婷六月激情| 激情亚洲婷婷| 五月天色不卡| 精品人妻久久久| 丰满少妇乱A片无码| WWW丁香五月| 91精品91久久久中77777| 丁香五月婷婷啪啪| 五月丁香网站| 亚洲乱码日产精品BD| 99在线精品观看99| 蜜臀AV在线观看| 丁香五月激情月| 久久中文网| 午夜婷婷五月天在线| 又大又粗九一在线| 人妻久热| 26uuu激情五月天| 久月久在线视频| 激情五月www| 丁香五月九九| 婷婷五月天激情网| 久播影院免费观看电视剧大全最新网| 8区视频在线| 67194国产| 激情无码五月天| 亚洲亚洲人成综合网络| www夜夜| 日韩操逼大片| 91呦呦呦| 超碰久热| 亚洲五月色| 久久98热re| 337p大胆噜噜噜噜噜91Av| 婷婷丁香五月天综合AV| 碰碰碰碰碰99| 思思热在线视频精品| 爱婷婷久久视频| 五月丁香最新| 亚洲无AV在线中文字幕| 97狠狠色| 色欲久久久久| 亚洲激情五月婷婷日日| 97色永久免费视频| 97人人操人人拍| 五月丁香六月香香蕉| 99久热这里有精品| 全高清无码视頻| 国产JK精品白丝AV在线观看| 五月丁香欧美综合| 国产精品人成A片一区二区| 婷婷丁香五月亚洲免费| 99视频精品视频| 丁香六月综合| 综合色图婷婷| 久操婷婷| 欧美精品999| 久久婷婷欧美| XXXX岛国| 精品国产人人爱人人| 七七久久婷婷| 色婷婷综合久久| 婷婷五月激情网| 婷婷综合在线观看视频| 2020久久婷婷五月| 欧美激情五月天婷婷| 人人超碰99| 99超级碰免费视频| 色婷婷五月在线| 99热这里精品| 日日夜夜天天综合| 九九热精品6| 五月停停直播| 日韩狠狠色婷婷| 国产婷婷综合| 青青草99热久久精品国| 日韩黄色AV无码| 乱精品一区字幕二区| 久久免片| 亭亭五月丁香五月天激情| 激情色色色| 久热只有这里精品| 五月天停停成人网| 五月婷婷丁香综合| 狠狠色综合精品视频在线| 午夜 外网 精品 在线| 淫视馆AV在线| 91超碰在线观看| 久久婷婷五月综合一| 激情五月天婷婷播播久久综合91| 99热这里有精品| 久久婷婷色| 婷婷国产成人| 狠狠干综合网| 色情综合网| 99热最新精品| 激情五月天在线视频| 99精品一二三四视频| 色情婷婷五月天| 97婷婷五月天| 亚洲无码11| 欧美日本另类| 色爱综合网| 91viP在线看| 在线观看的av| 欧美人与性动交CCOO| 色婷婷色99国产综合精品| 性一交一乱一交A片久久四色| 久久天天| 欧美一级色| 婷婷中文字幕版| 九月丁香婷婷| 99热首页在线30| 欧美日本综合网| 九九色综合| 综合视频久久| 九九精品网站| 99热在线中文字幕| 五月婷亚洲精品| 九一99| 久久99色色| 婷婷五月天婷婷| 99色在线观看视频| 国产激情综合五月久久| 婷婷免费视频| 成人五月丁香花| 婷婷欠久少妇| 欧美大道不卡| 狠狠色丁香五月婷巨| 男人天堂伊人五月丁香| 激情网综合| 色婷婷丁香五月综合| 嫩草乱码一区三区四区| AV在线大香蕉| 99热免费| 大香久久综合网| 丁香五月婷婷激情完整版| 综合九九久久| 开心激情色婷婷五月天| 亚洲色婷婷网站| 丁香五月六月激情| 日韩 中文 欧美| 开心激情网五月天| 香港九九六区八区99| 亚洲AV另类| 97在线精品| 天天色,天天操,天天射| 91大屁股精品| 精品国产乱码久久久久夜深人妻| 亲子乱av一区二区三区的| 丁香婷婷五月综合影院| 婷婷综合五月激情| 丁香五婷婷| 婷婷五月天影院| 99视频这里有精品| www.色五月.com| 日日想日日夜日日操| 婷婷五月视频| 国产激情综合| 欧美日韩国产一区| 操一操| 9色在线| 超碰人人摸人人操| 五月丁香综合啪啪| 五月婷婷在线观看黄| 五月婷婷之综合激情| 热99玖玖99玖玖99九九| 激情五月天啪啪视频| 婷婷五月丁香久久| 五月婷婷丁香| 91丨九色丨熟女|老版| 久久久五月激| 久久五月婷| 激情丁香五月AV| 激情五月图| 婷婷五月天久久| 欧美三级巜人妻互换| 色婷婷情片| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 婷婷色色五月天| 日韩色五月| 337p大胆噜噜噜噜噜91Av| 亚洲视频在线观看区| 久久这里都是精品免费| www.99久| 乱码操操| 激情综合99| 国产操逼视频网站| 五月婷婷激清网| 日本狠狠干| 天天操无码| 天天搞天天爽| 狠狠综合久久综合| 九九在线这里只有精品视频| 国产免费一区二区三州老师F1……| 久久婷婷五月国产激情综合片| 色五月五月天色婷婷色五月| 丁香久久九九99| 日在线V视频在线播放| 婷婷六月丁香欧美视频在线| 六月婷婷日| 伊人丁香婷婷东京| 九九这里只有精品| 天天色天天搡| 日韩1区2区| 色碰干| 天天透天天爱| 涩九九九九| 99热97| 无码成人AAAAA毛片AI换脸| 婷婷五月激情四月综合| 六月丁香啪啪啪| 久久免费9| 久99视频在线观看| AV九九| 激情五月婷婷五月| 丁香五月视频在线观看| 五月综合激情啪啪啪啪啪| 干亚洲天堂| 99精品视频偷拍| 亚洲综合草草| 丁香婷婷六月| 国产丁香五月天婷婷| 色综合色综合网| 婷婷五月天AV激情| 丁香五月狠狠在线观看| 激情五月婷婷五月丁香五月开心五月| 99热丁香| 激情五月天婷婷| 天天网站天天爽| 秋霞免费视频| 亚洲成人人人操| 99小视频在线观看| 婷婷五月天天aV| 色婷婷操逼网| 色综合激情| 久月丁香爱婷婷综合| 欧美激情综合| 久久久这里有精品| 色五月激情视频在线综合| 婷婷综合五月天| 色婷婷丁香五月丁香| 狠狠爱青青草| 我爱大香蕉| 亚洲夜五月| 无码激情AAAAA片-区区| 欧美婷婷五月天| 五月婷婷人人人操| 婷婷综合性爱网| 99热精品在这里| 精品亚洲国产成AV人片传媒| 99热官网| 俺也去在线视频| 99热碰碰热| 婷婷五月激情网| 天天干天天色天天干| 一级性感毛片| 双性美人被调教到喷水A片| 九九热这里只有精品31| 五月香婷婷| 99久久户外勾搭| 98色花堂98t.R| 丁香丁婷五月激情| 月色色综合婷婷网| 欧美性久| 国产午夜精品一区二区三区嫩草| 深爱丁香激情| 伊人婷婷大香蕉| 综合久久狠狠| 激情五月天影院| 人妻精品久久久久久久| 99热最新| 久婷久婷激情肉| 激情四射网| 啪啪综合网| 五月丁香成人网| 色综合另类| 九九热10| 美女天天艹人人爽| 国产精品操| 精品二区| 五月婷婷基地| 日本三级韩三级99久久| 美女激情综合| 婷婷色色婷婷| 色综合射婷婷| 丁香五月婷婷少妇| 久久久ww| 五月丁香九九| 婷婷六月久久| 日韩综合成人| 婷婷五月色播天| 五月丁香免费看| 99网99热| 日本五月婷婷| 五月婷综合| 婷婷五月丁香成人| 99热20| 激情伊人| 婷婷爱在线观看| 成人在线视频一区| 天天网曰日曰夜夜综合永久免费| 日韩AV中文在线观看| AV性爱在线| a在线观看| 五月天婷婷综合免费| 久久有码| 提提热五月天婷婷| 成人九九视频| 五月天婷婷中文字幕在线播放| 久热这里只有精品6官网亚洲| 日韩精品一区二区亚洲AV观看| 久久婷婷五月综合色和| 青青久久五月天丁香婷婷| 99超超碰| 婷婷日韩| 久青草大香蕉| 影音先锋天天日| 色欲色香,www,com| 操碰久| 婷婷丁香五月天熟女丝袜| 97人人干。| 丁香婷婷影院| 伊人大香久久| 97碰人人操| 99热碰碰| 97色色色| 国产噜一噜天天噜| 天天舔天天摸天天射| 99在线精品视频观看免费下载| 人妻自慰在线| 激情五月婷婷色综合| 亚洲天堂AV免费片| 性色99| 六月天婷婷| 97超碰在线免费观看| 视频一二区| 久久综合干| av大香蕉| 丰满少妇猛烈A片免费看观看| 亚洲中文字幕在线观看| 第四色色六月色综合| 色吊丝av中文字幕| 9l视频自拍九色9l视频自拍九色9l社区| 在线另类视频| 99视频精品视频| 久久综合性| 婷婷色婷婷亚洲成人| 日日天天天| 婷婷激情五月吧| 丁香五月激情综合在线观看| 欧美色色色色色色色| 国产午夜精品久久久观看| 久久久久久久人妻| 天天干电影| 久久精品国产精品| 七七色色综合| 梁铮版蜘蛛女在线观看| 五月成人天| 久久这里有精品| 色吧婷婷五月亚洲| 色情五月婷| 婷婷色五月噜噜| 久久久精品人妻录| 大香蕉伊人久久| 欧美成人猛片AAAAAAA| 91日综合欧美| 好吊操这里只有精品| 华人在线免费| 色五月激情网| 久久婷综合网| 亚洲欧州色情在线观看| 丁香婷婷性久久| 色色热| 久久天堂加勒比| WWW夜夜| 五月婷婷婷| 亚洲激情婷婷| 9超碰在线| 激情四射五月天偷偷看婷婷| 欧美Va婷色| 国产成人精品一区二区三区视频| 人人性久久| 97激情五月天| 五月丁香999| 伊久大香蕉| 色婷婷AAA| 五月天精品视频| www.99在线| 久久五月婷婷丁香| 久色资源网| 思思热在线观看| 91一起操| 九九热中文| a毛片二逼wwwwwwwwww| 亚洲婷婷丁香五月在线| 五月婷婷偷拍| 成人网丁香五月| 天天综合天天玩夜夜玩天天玩夜夜玩| 99碰碰| 99热观看| 色吧五月婷婷| 67久久| 久久久久久久久久8888| 97欧美在线| 色天使久久综合| 婷婷丁香一月| 香蕉97碰碰碰欧美| 婷婷五月天综合蜜桃| 日韩中文欧美| 婷婷久久五月| 丁香五月欧美成人| 久久婷婷五月天激情四射| 亚洲欧美国产高清vA在线播放| 91干| 久热91精品| 亚洲男女激情| 99热999| 天天骑天天操| 色婷婷五月成人网| 婷婷六月激情| 婷色视频| 99热天堂| 婷婷99中文字幕| 超碰93在线观看| 久99久99精品免| 激情综合五月婷婷| 激情丁香九九五月综合网| 开心五月网 | 日本99视频| 婷婷爱在线观看| 亚洲色五月| 亚洲人妻电影| 亚洲免费99| 亚洲综合婷婷五月| 亚洲午夜AV| 色婷婷黄色网络| 激情五月天电影| 99在线观看视频免费| 九九亚洲| 五月婷婷六月奇米网丁香| 久久婷婷七月丁香| 丁香婷婷色五月激情综合| 婷婷综合色网| 久久激情五月| www.热99热| 色综合女人99| 伊人婷婷大香蕉| 婷婷九月丁香| 久久人人做人人妻人人玩精品va| 亚洲精品操一操、噜一噜、摸一摸、爽 | 婷婷啪啪| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 99丁香五月婷| 国产激情视频在线观看| 大香蕉院线| 伊人久久大香天蕉亚洲特级| 色情综合网| 26uuuavcom| 操比激情五月| 六月婷婷色| www.粉嫩av.com| 亚洲精品白浆高清久久久久久| 欧美激情-区二区三区| 能看的av网站| 日日操日日爽| 丁香综合网| 国产精产国品一二三在观看| 五月综合婷婷五月| 婷婷色五月激情| 97碰碰九九视频| 色玖玖导航| 99热这里只有精品98| 久久免费干| 婷婷五月天成人网| 五月丁香啪啪啪啪| 亚洲综合色色| 91综合网| 亚洲熟妇AV乱码在线观看| 日日操夜夜骑| 激情网 五月天| 97人妻碰碰碰久久| 国产黄大片在线观看画质优化 | 激情综合五月色在线| 色色色五月| 国产精产国品一二三在观看| 91人人网| 色五月色五天免费视频| yazhou seshipin| 一级二级色大片| www久久久久久久久久久| 五月丁香婷婷综合久久| 久久丁香久久| 激情五月综合免费| 亚洲中文字幕AV| 七七色综合| 狠狠爱深色婷婷综合| 中文字幕永久在线| 伊人玖玖网| 色播激情五月天| 337p午夜影院| 玖玖在线资源视频| 99色在线视频| 丁香五月AV| 啪啪视频99| 色狠狠色噜噜AV天堂五区| 丁香五月在线观看| 欧美99热| 伊人网大香| 日韩操逼大片| 久久婷婷五月天激情| 精品久久人妻热| 久热视频A.| 天堂中文国产| 在线观看996精品| 五月婷婷欧洲| 亚洲AV日韩在线观看| 99精品在线观看| 激情六月综合| 色婷婷狠狠| 色99网站| 精品久久艹| 亚洲天堂99| 五月婷六月| 色五月网址| 六月色色| 人妻少妇色综合| 高清无码视频网址| 欧美在线操| 日韩视频99| 天天做天天摸| 色婷婷五月天激情在线观看| 午夜婷婷久久 | 久久伊人婷婷| 久久大香蕉| 色婷婷丁香五月| 狠狠舔| 丁香六月色香蕉视频| 天天色天天爽| 五月天婷婷激情小说| 日本ww亚洲| 婷婷视频在线| 九九热在线精品视频| 综合婷婷都市激情| 99熟女啪啪视频| 亚洲另类婷婷综合| 五月天婷婷视频| 色婷婷在线视频| 台湾无码A片一区二区| 丁香六月色婷婷| 97色色色| 色五月,com| 99欧美三级视频| 伊人www22综合色| 婷婷五月丁香狠狠| 婷婷五月深深爱| 丁香激激情网| 天天色视频| 91操碰| 丰满少妇乱A片无码| 蜜臀AV在线观看| 六月成人网| 爆乳熟女-区二区三区| 久久婷婷五月天蜜桃| 天天草天天舔| 99视频在线| 丁香五月色情| 激情综合丁香六| 人妻激情视频| www.日日日.com| 99热久| 99久久99久久综合| 亚洲殴洲精品Av在线| 91热99| 狠狠干激情五月| 色色综合激情| 99re资源在线视频导航| 色综合区| 婷婷六月丁香久| 日韩无码色色| 99精品视频在线观看| 中文字幕高清av| 久久无码激情视频| 天天色视频| 99精彩视频| 久久思思99| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 在线99热| 久久婷婷五月综合色播| 五月丁香激情婷婷| 久99久视频精品| 日韩一区二区在线播放| 久久精彩视频| 字幕网AV中文字幕| 99九色视频在线观看| 久久aaaa片一区二区| 色久天| 欧美月久久| 色天天狠狠干| 97色色综合| 91综合在线观看首页| 五月色 亚洲| 亚洲欧美综合7777色婷婷| av在线观看网址| 五月婷婷,六月激情| 99热亚洲| 色激情网| 五月噜噜| 午夜性做爰电影| 欧美久久婷婷| 激情网五月| 九月激情婷婷丁香| 狠狠操天天日| 99精品在线观看| 久久久激情| 超碰成人电影| 久久婷婷五月综合精品蜜芽| 五月丁香激情综合网官网| 五月丁香婷婷基地| 色色色色五月| 久久六月综合| 丁香五月婷婷基地| 九九碰九九爱97超| 肏屄色播伊人97婷婷| 天天操婷婷| 国产黄色大片| 色五月婷婷亚洲最大| 少妇高潮呻吟A片免费看软件| 五月婷婷精品视频| 久久激情五月天| 西西4r午夜剧场| 互月天综合| 激情AV| 五月天激日本色情在线| 久久激情综合| 天天搞夜夜六| 人人摸人人干| 伊人日日干| 岛国AAAV| 免费观看欧美成人AA片爱我多深| 67194中文在线| 五月婷婷激情四月| 日本在线观看aaa 99| 综合激情深爱| 日本人妻久久| 无码髙清| 久久久久婷婷| 久久婷婷热| 五月婷免费视频久久久| 伊人婷婷大香蕉在线| 一级A片天天操夜夜操| 亚洲啪啪精品| 五月天久久综合| 91九色PORNY大屁股| 婷婷丁香人妻久久在线观看| 青青草婷婷久久| 日本综合久久| 婷久看人爽| 91大屁股在线| 噜噜色五月| 色婷婷九月| 久久综合丁香激情五月| 最新五月天婷婷影| 国产亚洲99久久精品熟女| 天天影院色| 精品激情| 婷婷五月花| 色99视频| www.粉嫩av.com| 国产AV影片| 人人干av| 久久机热这里只有精品免费视频| 最近中文字幕2019视频1| 不卡影院午夜理论片| 婷婷五月无码| 九九热在线精品视频| 成人网丁香五月| 婷五月天丁香婷五月| 99久在线精品99re8| 丁香五月亚洲婷婷| 久久99久久99精品免视看婷| 中文字幕日产A片在线看| 中文字幕色色| 成人午夜无码视频| 欧美激情 日韩无码 婷婷 五月天| 五月停停大香蕉| 丁香五月性| 狠狠色激情综合| 六月婷婷激情| 狠狠操综合| caopeng超碰| 开心五月婷婷婷美女| 2018国产大陆天天弄| 婷婷激情六月| 激情五月天开心网丁香无码| www.久久爱.c n| 免费看欧美成人A片无码| 婷婷丁香小说| 婷婷 激情 五月| 丁香色六月婷婷| 婷婷五月另类网站| 丁香五月欧美色综合| 午夜爱爱爱成人| 丁香婷婷色| 91猫咪国产在线播放| www婷婷| jizzdr| 69婷婷丁香午夜| 97碰啪啪| 大香蕉75线| 影音先锋男人女人| 99热只有这里有精品| 欧美日本国产欧美日本韩国99| 五月丁香六月婷婷综合伊人| 欧美成人无码高清一区二区三区| 日韩在线观看亚洲| 中文AV网站| 狠狠干综合| 色欲婷婷五月天| 99精品无码网站| 五月色在线| 夜夜爱影院| 欧美三级视频| 欧美槡BBBB槡BBB少妇| 久久人妻人人| 天天干夜夜谢| 婷婷丁香激情五月天色色| 亚洲第精品| 久热这里这里有精品| 五月丁香性爱| 91人人操| 天堂综合久| 五月色情婷婷| 久操香蕉| 久久R激情| www久久久久久久久久久久久久久久久| 天天肏夜夜肏| 国产精品99久久久久久久女警| 天天干狠狠| 91seav| 99久久99久久| 婷丁香五月天| 九九99热| 日韩色五月| 婷婷五月激情中文字幕| 色婷婷亚洲精品天天综| 国产色99| 九九这里有精品| 激情五月天社区| 九九热大香蕉| 亚洲av成人在线| 99热综合网| 婷婷五月电影院| 五月丁香啪啪啪啪| 99精品在线| 五月综合色| 婷婷久久色| 久热91| 中字幕视频在线永久在线观看免费 | 五月天堂色色| 大香蕉七区| 丁香五月最新地址| 九九AV在线| 色色99| 色五月丁香五月五月婷婷| 亚色网站小视频| 六月丁香综合网| 丁香五月在线观看| 色婷久九| 噼里啪啦完整版中文在线观看| 婷婷五月激情热播| 韩日在线熟女| 青青草蜜臀| 色 色 色综合com| 亚洲人妻Av| 久久人人妻| 成人中文网| wwww.色婷婷| 色噜噜狠狠色综合网| 天天日夜夜高潮| 亚洲、热| 国产精品久久久久久白浆色欲| 色五月婷婷在线| 伊人激情综合| 久久婷丁香五月| 婷婷五月综合色中文字幕| www·五月天| 亚洲激情婷婷| 久久六月天| 欧美婷婷色| 久久狠婷婷| 99这里只有精品视频免费| 天天操天天操天天操| 亚洲免费观看高清完整版AV线| 狠狠色色| 综合 蜜月 婷婷| 亚洲九九夜夜| 激情深爱综合网| 久久激情五月| 91操人| 亚洲视频在线网| 五月婷婷无码| 五月天综合视频| 激情五月天网| 五月丁香五月丁香五月丁香五月丁香91| 岛国在线观看91| 五月Huangsewang| 中文字幕,综合,91| 伊人国产婷婷五月天| 久热综合| 久久综合站| 欧洲激情五月天婷婷| 这里只有精品免费视频在线观看| 一级黄色影片| 欧美高潮9| 激情九月综合| 九九爱激情| 色色色网站| 国产激情在线| www.av骚货| 婷婷五月天丁香社区| 狠狠精品干练久久久无码中文字幕 | 婷婷综合av| 丁香成人综合| 另类A片| 日本少妇裸体做爰高潮片| 人妻激情在线| www,99热| 九九艹女| 琪琪理论片| 婷婷五月成人| 97se在线视频| 日本熟女一区二区| 大香网伊人久久综合| 色九月婷婷丁香| 深爱激情网综合| 亚洲欧洲另类| 99热天堂| 亚洲精品午夜国产va久久成人| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | www.婷婷六月天| 色婷小说| 亚洲女婷婷五月基地综合久久久| 色九九综合| 五月婷婷婷综合网| 人妻在线观看视频| 思思视频精品| 激情六月婷婷| 九九色影院| 久久久久久97| 超碰97久久| 亚州操操| 婷婷黄色| 久99视频在线观看| 欧美激情综合色综合啪啪五月| 亚洲视频码| www.五月天社区| 艹B高清无码| 亚洲五月天综合| 涩五月婷婷| 熟女色专区| 六月丁香五月天| 插插插丁香五月婷婷| 婷婷激情六月| 天天日人人| 大学生高潮无套内谢视频| 丁香五月宝贝激情网| 丁香六月啪啪| 亚洲精品影视| 99九九精品| 色色99色色| 人妻日日日| 色青五月天| 婷婷日本在线| 丁香色婷婷五月天| 亚洲成人高清在线| 伊人久久婷婷| 五月天激情综合首页| 欧美激情五月天| 天天日天天干天天爱| 99综合视频一体| va婷婷在线| 精品爱欲五| 婷婷五月天激情电影小说| 五月婷婷综合影院| 这里只有精品1| 丁香激情五月综合网| 丁香六月婷婷缴情欧美| 99愛国产| 五月丁香婷婷久久| 夜夜撸日日操| 五月婷婷免费| 成人短视频免费| 五月天婷婷綜合院| 91狠狠综合久久| www夜夜操| 99热这里只是精品| 91人人操| 久久久久9| 99热这| 国产精品人妻欲求不满| 无码少妇高潮喷水A片免费| 2025年最新亚洲在线欧美| www.久久9| 午夜丁香婷婷| 99热99网| 久久九久久| 亚洲色欲AAAAAA| 日韩黄色电影| 色五月婷婷五月| 色色亚卅| 欧美婷婷丁香五月| 五月亭亭六月天| 91dy.av| 久操香蕉| 五月丁香色| 伊人五月久久| 欧美VA视频| 亚洲丁香花色| 天天插夜夜爽| 日韩高清久久| 亚洲成人在线观看av| 丁香五月人妻| 这里只有精品视频一区| 亭亭丁香97| 九九热在线精品视频| 五月开行婷婷色五月| 婷婷五月天堂| 伊人丁香在线| 婷婷久久综合久| 99热这里只有免费| 少妇丁香婷婷 | 99热精品6| 狠狠综合久久| 97人操| A片试看50分钟做受视频| 六月丁香网| 就爱干 在线| 色久女| 97干资源在线观看| 强壮的公次次弄得我高潮A片日本 | 天天插天天日| 五月 婷婷 成人| 婷婷丁香视频在线观看免费| 激情四射婷婷| 日本97在线看片| 婷婷五月天社区| 亚洲天堂啪啪| 思思视频这里是精品| 91狠狠色丁香| 97碰操| 九九av| 97色在线视频| 97碰碰在线看视频免费| 美女妹子后射视频网站在线观看| 丁香五月婷婷动漫视频| 黄色三级日本| 色五月超碰| www.一起草av| 日韩人妻白浆视频系列| 五月色综合| 婷婷五月丁香在线视频| 色情激情五月| 99视频在线观看欧| 在线va网站| 激情深爱五月婷婷| 大香蕉婷婷五月| 月色色综合婷婷网| 五月婷婷,六月婷婷| Www.sesese丁香| 欧美十二区| 欧美久久一级内射wwwwww.| 久久思思热| 欧美激情综合| 五月婷婷色| 伊人啪啪网| 国产毛片精品一区二区色欲黄A片| 曰日爽日日操| 欧洲亚洲精品| 99在线精品视频| 99精品热| 久久综合首页| 日本在线99| 六月婷婷五月丁香| 天天色天天日| 人妻啪啪啪| 天天日夜夜欢| 五月天综合在线| 九九热再线九九视频免费在线观看 | 激情五月天婷婷| 干一干xxxx| 91丨九色丨白浆| 色色色色五月| 99精品视频免费观看| 99热这里只有精品99| 亚洲国产精品二二三三区| 精品婷婷| 大伊香蕉精品视频在线| 综合狠久久| 99热人人操人人操| 激情婷婷五月天丁香| 五月婷婷 婷婷五月 一区二区 久久久| 欧美大片| 91猫咪国产在线播放| www,奇米影视| 色婷婷丁香社综合| 色色五月婷| 永久的网站AAAA| 久久人妻情侣| 欧美婷婷五月丁香| 亚洲人成色A777777在线观看| 激情五月天激情综合网| 六月婷婷视频| 久热无码| 亚洲欧洲中文日韩久久AV乱码| 777影视理论片大全在线观看| 国产欧美日韩综合精品一区二区| 亚洲久艹| 丁香五月婷婷AV| 在线综合婷婷| 天天插天天射| 依人大香蕉| 琪琪色网在线| 婷婷六月综合基地| www色色com| 玖玖在线视频福利| 欧美成人精品一区二区| 综合噜噜| 国产日韩欧美性爱| 啪啪色激情五月天| 色婷婷亚洲| 丁香5月婷婷| 婷婷激情综合网| 国产欧美日韩综合精品一区二区| 另类丁香综合| 天天婷婷综合| 夜夜爽天操| 五月丁香六月色| 99久久超级| 美女激情综合| 丁香五月婷婷丫| 91丨九色丨丰满人妖| 婷婷五月天伊人在线| 玖玖无码中文| 五月丁香激情啪啪| 亚洲中文字幕AV| 亚洲午夜成人av电影网| 91 九色 入口| 中文字幕婷婷| 丁香六月 婷婷六月| 五月社区婷婷激情| 91黄操| 婷婷在线中文字幕| 九九婷婷综合| 五月丁香婷庭在线| 激情五月天在线免费美女视频| 日日夜夜干| 免费观看18视频网站| www.久久久久久久| 六月丁香婷婷在线波多 | 国产精女同一区二区三区久| 国产 码在线成人网站| 熟女激情五月天| 亚洲婷婷五月天| 日本欧美国产| 这里只有精品9| www激情| www.色9| 99综合激情久久精品久久| 午夜婷婷久久| 丁香婷婷激情网站| 桃色激情婷婷伊人网| 九九热99热| 久婷自拍视频| 99综合激情久久精品久久| 人妻体体内射精一区二区| 激情图片久久| 99热这里只有精品1| 国自产拍偷拍精品啪啪一区二区| 99玖玖在线视频| 青草五月天| 激情五月丁香五月色| av九九| 丁香五月先锋| 99久久.www| 色播五月婷婷| 九热网站| 亚洲 六月 综合| 97超碰,人人舔,人人操,人人摸| 99色色爰| 色吧五月婷婷| 猫咪伊人久久| 996er热| 九九99在线视频| 狠婷婷五月| www91色网站| 狠狠干狠狠干狠狠干狠狠干| 色婷婷亚洲婷婷| 色噜噜狠狠色综合无码久久欧美| 九九无码| 激情婷婷久久| 久九色| 六月婷婷AV| 精品成人a v无码内射| Av免费网站在线| 婷婷五月18永久免费视频| 激情久久伊人| 亚洲婷婷六月天| 91人妻九色大屁股| 丁香五月婷婷影院| 野外99热|