LCC 與 LCC2 數據格式兼容開發指南
LCC2 數據格式提供了更好的數據壓縮及 LOD 機制,原 LCC 格式後續會逐步被 LCC2 取代,原 LCC SDK(v1.x)也會逐步停止維護。由於新舊數據格式差異巨大,新版 LCC SDK(v2.x)不會向下兼容 LCC 格式。後續可通過以下兩種方式實現數據兼容:
- 使用官方提供的轉換器(LccConverter)exe/dll,將 LCC 數據格式轉換為 LCC2,再進入 SDK 使用;
- 在應用層進行 LCC 和 LCC2 數據格式的兼容。
本文主要說明在應用層進行數據格式兼容的流程及步驟,即在同一 Unity 工程中同時導入兩個版本的 SDK,根據數據格式自動選擇對應版本進行渲染和相應的處理。
步驟 1:Unity 版本與工程設置
Unity 版本與工程設置與獨立使用 SDK 時一致,無需額外配置。具體可參考 PC 快速開發入門指南 和 工程設置優化指南
步驟 2:導入兩個版本的 SDK
通過 Unity UPM 分別導入 SDK v1.4.8 及以上版本 ( 建議使用 v1.4.32 )和 SDK v2.0.1 及以上版本。導入後,v1.x 版本會顯示為 Legacy。兩個版本的 SDK 可以共存,互不影響。
說明:
- SDK v1.4.32 可從 GitHub 下載:https://github.com/xgrids/LCC-Unity-SDK/releases
- SDK v1.4.32 的命名空間為
LCCCore_Legacy,管理器組件為LCCManager_Legacy;v2.x 的命名空間為LCCCore,管理器組件為LCCManager。
步驟 3:配置場景
在場景中新建一個空對象,命名為 LCCController,將 LCCManager_Legacy 和 LCCManager 兩個組件都掛載到該對象上。

在 LCCController 對象上同時掛載 LCCManager_Legacy 和 LCCManager 組件
注意:
LCCController 遊戲對象的 Transform 設置(Rotation.x = -90、Scale.x = -1)是與 LCC 數據座標系的對齊。關於座標系對齊的詳細說明,參見 Unity SDK 簡介 中的「LCC 數據座標系」。
步驟 4:編寫 MultiSDKController 腳本
新建一個 C# 腳本,命名為 MultiSDKController.cs,代碼如下:
using LCCCore;
using LCCCore_Legacy;
using System.IO;
using UnityEngine;
public class MultiSDKController : MonoBehaviour
{
public LCCManager_Legacy m_managerLegacy; // 用於 LCC SDK v1.4.8 及以下版本
public LCCManager m_manager; // 用於 LCC SDK v2.0.0 及以上版本
public string m_FilePath; // LCC 文件路徑
private LCCCore_Legacy.Renderer m_rendererLegacy; // 用於 LCC SDK v1.4.8 及以下版本
private LCCCore.Renderer m_renderer; // 用於 LCC SDK v2.0.0 及以上版本
private DataType m_dataType; // 數據類型,用於判斷使用哪個 SDK
void Start()
{
string extension = Path.GetExtension(m_FilePath);
if (extension == ".lcc")
{
m_manager.Enable = false; // 禁用 v2.0.0 及以上版本的管理器
m_dataType = DataType.LCC;
m_rendererLegacy = m_managerLegacy.GetRender(this.transform);
m_rendererLegacy.Load(m_FilePath, LCCCore_Legacy.PlatformType.PC, onLoadCallback);
}
else if (extension == ".lcc2")
{
m_managerLegacy.Enable = false; // 禁用 v1.4.8 及以下版本的管理器
m_dataType = DataType.LCC2;
m_renderer = m_manager.GetRender(this.transform);
m_renderer.Load(m_FilePath, LCCCore.PlatformType.PC, onLoadCallback);
}
}
private void onLoadCallback()
{
Debug.Log("data loaded !!!");
}
// 方法調用示例:通過數據類型判斷使用哪個 SDK 的渲染器進行操作
public void onRenderPointClick()
{
if (m_dataType == DataType.LCC)
m_rendererLegacy.SwitchRenderMode(LCCCore_Legacy.RenderMode.PointCloud);
else if (m_dataType == DataType.LCC2)
m_renderer.SwitchRenderMode(LCCCore.RenderMode.PointCloud);
}
void OnDestroy()
{
if (m_dataType == DataType.LCC)
m_rendererLegacy?.Dispose();
else if (m_dataType == DataType.LCC2)
m_renderer?.Dispose();
}
public enum DataType { LCC, LCC2 }
}
注意:
- 腳本文件名必須與類名一致(
MultiSDKController.cs對應class MultiSDKController),否則無法掛載到遊戲對象上。- 兩個版本的命名空間不同(
LCCCore與LCCCore_Legacy),使用Renderer、PlatformType、RenderMode等同名類型時需帶上命名空間前綴以區分。- 示例通過文件後綴(
.lcc/.lcc2)判斷數據格式並選擇對應 SDK 版本。
步驟 5:掛載腳本並設置屬性
- 將
MultiSDKController.cs腳本也掛載到場景中的 LCCController 對象上。 - 在 Inspector 窗口中,將 LCCManager 和 LCCManager_Legacy 組件分別拖動到腳本對應的屬性上。
- 在腳本的 File Path 屬性中填寫 LCC / LCC2 文件的路徑地址。

掛載 MultiSDKController 腳本並在 Inspector 中設置屬性
此時運行代碼,即可根據 LCC 數據格式自動使用對應的 SDK 版本進行渲染,實現數據格式兼容。
關鍵步驟
在應用層實現 LCC 與 LCC2 數據格式兼容的關鍵步驟:
- 通過 UPM 同時導入 v1.x(Legacy)與 v2.x 兩個版本的 SDK,二者可共存。
- 在同一對象上掛載
LCCManager_Legacy與LCCManager兩個管理器組件。 - 根據數據格式(文件後綴
.lcc/.lcc2)選擇對應版本的管理器創建渲染器並加載數據。 - 確定使用某一版本後,禁用另一版本的管理器(
Manager.Enable = false)。 - 切換數據或銷毀時,通過
Renderer.Dispose()卸載當前渲染的數據。
數據格式兼容注意事項
不支持同時渲染 LCC 和 LCC2。 因此切換所用數據時,需要先將當前正在渲染的數據卸載(調用
Renderer.Dispose()),否則可能導致內存和顯存泄露。禁用未使用的 Manager。 在確定使用某一個 SDK 版本後,最好將另一個 SDK 版本的 Manager 對象取消使能(
Manager.Enable = false),否則可能導致一些無效的性能損耗。API 接口一致,但需調用正確的 Render。 兩個 SDK 版本的 API 接口完全一致(v2.x 版本很多API已遷移到Manager類,請參閱API手冊),但使用時需確保調用正確版本的 Renderer(
m_rendererLegacy或m_renderer)。另外,v2.0.0 及以上版本不再支持調色和裁剪數據保存功能,其他部分 API 也已失效,請查閱對應版本的開發者文檔。
相關 API
本方案主要涉及兩個版本 SDK 的管理器與渲染器 API。以下以 v2.x(LCCCore)為例說明,v1.x(LCCCore_Legacy)接口一致,僅命名空間不同。
LCCManager.Enable
// 屬性
public bool Enable { get; set; }
管理器的使能開關。設為 false 可禁用該版本 SDK 的管理器,避免與另一版本同時工作產生無效性能損耗。
調用示例:
// 使用 LCC2 數據時,禁用 Legacy 管理器
m_managerLegacy.Enable = false;
說明:
- 在確定使用某一版本後,建議禁用另一版本的管理器。
GetRender
// 返回值:Renderer → 渲染實例,失敗返回 null
public Renderer GetRender(Transform _transform)
創建一個渲染實例並綁定到指定的 Transform。
| 參數 | 類型 | 說明 |
|---|---|---|
_transform | Transform | 渲染實例掛載的 Transform |
調用示例:
m_renderer = m_manager.GetRender(this.transform);
說明:
- 需通過對應版本的管理器創建,確保渲染器與數據格式匹配。
Renderer.Dispose
// 返回值:void
public void Dispose()
銷毀渲染實例,釋放所有 GPU 資源和內存。銷毀後實例不可再使用。
調用示例:
m_renderer?.Dispose();
說明:
- 切換數據前必須先卸載當前數據,否則可能導致內存和顯存泄露。
- 調用後自動通知 Manager 移除引用。
- 建議在對象銷毀(
OnDestroy)時調用。