LCC / LCC2 データ形式互換性開発ガイド
LCC2 データ形式は、より優れたデータ圧縮と LOD 機構を提供します。従来の LCC 形式は徐々に LCC2 に置き換えられ、従来の LCC SDK(v1.x)も徐々にメンテナンスされなくなります。新旧のデータ形式は大きく異なるため、新しい LCC SDK(v2.x)は LCC 形式と後方互換がありません。データ互換性は次の 2 つの方法で実現できます。
- 公式コンバータ(LccConverter)の exe/dll を使用して LCC データ形式を LCC2 に変換し、SDK で使用します。
- アプリケーション層で LCC と LCC2 のデータ形式互換性を実装します。
このガイドでは主に、アプリケーション層でデータ形式互換性を実装する流れと手順、つまり 2 バージョンの SDK を同じ Unity プロジェクトに同時にインポートし、データ形式に基づいて対応するバージョンを自動選択してレンダリング・処理する方法を説明します。
手順 1:Unity バージョンとプロジェクト設定
Unity バージョンとプロジェクト設定は SDK を単独で使用する場合と同じで、追加の設定は不要です。PC クイックスタートガイド と プロジェクト設定の最適化ガイド を参照してください。
手順 2:2 つの SDK バージョンをインポートする
Unity UPM を通じて SDK v1.4.8 以降(v1.4.32 を推奨)と SDK v2.0.1 以降 をインポートします。インポート後、v1.x バージョンは Legacy と表示されます。2 つの 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 GameObject の Transform 設定(Rotation.x = -90、Scale.x = -1)は、LCC データ座標系にアライメントするためのものです。座標系アライメントの詳細は Unity SDK の概要 の「LCC データの座標系」を参照してください。
手順 4:MultiSDKController スクリプトを書く
MultiSDKController.cs という名前の新しい C# スクリプトを以下のコードで作成します。
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("データが読み込まれました !!!");
}
// メソッド呼び出し例:データ型で操作対象の 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に対応)。一致しないと GameObject にアタッチできません。- 2 つのバージョンは名前空間が異なります(
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 バージョンをインポートします。2 つは共存できます。
- 同じオブジェクトに
LCCManager_LegacyとLCCManagerの両方のマネージャコンポーネントをアタッチします。 - データ形式(ファイル拡張子
.lcc/.lcc2)に基づいて、対応するバージョンのマネージャを選択してレンダラーを作成し、データを読み込みます。 - 使用するバージョンを決定したら、他方のバージョンのマネージャを無効化します(
Manager.Enable = false)。 - データの切り替えや破棄時は、
Renderer.Dispose()で現在レンダリング中のデータをアンロードします。
データ形式互換性の注意事項
LCC と LCC2 の同時レンダリングはサポートされていません。 したがって、データ切り替え時は現在レンダリング中のデータを先にアンロードする必要があります(
Renderer.Dispose()を呼び出します)。さもないとメモリやビデオメモリのリークを引き起こす可能性があります。未使用の Manager を無効化する。 使用する SDK バージョンを決定したら、他方の SDK バージョンの Manager オブジェクトを無効化するのが最善です(
Manager.Enable = false)。さもないと、いくらかの無駄なパフォーマンスオーバーヘッドが生じる可能性があります。API インターフェースは一貫していますが、正しい Renderer を呼び出す必要があります。 2 つの SDK バージョンの API インターフェースはまったく同じです(v2.x では多くの API が Manager クラスへ移動しています。API マニュアルを参照)。ただし、正しいバージョンの Renderer(
m_rendererLegacyまたはm_renderer)を呼び出すことを確認する必要があります。また、v2.0.0 以降はカラー調整とクリッピングデータの保存をサポートしなくなり、他の一部 API も非推奨になっています。対応するバージョンの開発者ドキュメントを確認してください。
関連 API
このソリューションは主に 2 つの 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)に呼び出すことを推奨します。