Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
##### Additions :tada:

- Added support for the Linux platform (x86-64 only).
- Added support for building the package from source in Unity 6.5.

## v1.24.0 - 2026-07-01

Expand Down
5 changes: 5 additions & 0 deletions Source/Editor/CesiumIonAssetsWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
using UnityEditor;
using UnityEditor.IMGUI.Controls;

#if UNITY_6000_2_OR_NEWER
using TreeViewItem = UnityEditor.IMGUI.Controls.TreeViewItem<int>;
using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState<int>;
#endif

namespace CesiumForUnity
{
public class CesiumIonAssetsWindow : EditorWindow
Expand Down
20 changes: 20 additions & 0 deletions Source/Editor/CesiumTreeViewState.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#if UNITY_EDITOR
using UnityEditor.IMGUI.Controls;

#if UNITY_6000_2_OR_NEWER
using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState<int>;
#endif

// Class for bridging the gap between templated and non-templated
// versions of TreeView et al., for the benefit of Reinterop.

namespace CesiumForUnity
{
public class CesiumTreeViewState : TreeViewState
{
public CesiumTreeViewState()
{
}
}
}
#endif
2 changes: 2 additions & 0 deletions Source/Editor/CesiumTreeViewState.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 1 addition & 5 deletions Source/Editor/ConfigureReinteropEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
using UnityEngine;
using UnityEngine.Networking;


namespace CesiumForUnity
{
[Reinterop]
Expand Down Expand Up @@ -109,10 +108,7 @@ public void ExposeToCPP()
string productName = Application.productName;
string osVersion = System.Environment.OSVersion.VersionString;

TreeViewItem root = new TreeViewItem(0, -1, "root");
int id = root.id;

TreeViewState treeState = new TreeViewState();
CesiumTreeViewState treeState = new CesiumTreeViewState();
IonAssetsTreeView treeView = new IonAssetsTreeView(treeState);
treeView.Reload();

Expand Down
6 changes: 6 additions & 0 deletions Source/Editor/IonAssetsTreeView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
using UnityEditor.IMGUI.Controls;
using UnityEngine;

#if UNITY_6000_2_OR_NEWER
using TreeView = UnityEditor.IMGUI.Controls.TreeView<int>;
using TreeViewItem = UnityEditor.IMGUI.Controls.TreeViewItem<int>;
using TreeViewState = UnityEditor.IMGUI.Controls.TreeViewState<int>;
#endif

namespace CesiumForUnity
{
public enum IonAssetsColumn
Expand Down
3 changes: 1 addition & 2 deletions Source/Runtime/ConfigureReinterop.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ public void ExposeToCPP()
mesh.SetIndices(new NativeArray<int>(), MeshTopology.Triangles, 0, true, 0);
mesh.RecalculateBounds();
int vertexCount = mesh.vertexCount;
int instanceID = mesh.GetInstanceID();

Vector3[] vertices = mesh.vertices;
Vector3 vertex = vertices[0];
Expand Down Expand Up @@ -521,7 +520,7 @@ public void ExposeToCPP()

Mesh.ApplyAndDisposeWritableMeshData(meshDataArray, meshes, MeshUpdateFlags.Default);

Physics.BakeMesh(mesh.GetInstanceID(), false);
Helpers.BakeMeshFromId(Helpers.GetObjectId(mesh));

CesiumCreditComponent creditComponent = new CesiumCreditComponent("text", "link", -1);
List<CesiumCreditComponent> creditComponents = new List<CesiumCreditComponent>();
Expand Down
18 changes: 18 additions & 0 deletions Source/Runtime/Helpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -209,5 +209,23 @@ public static double Mod(double m, double n)
}
return ((m % n) + n) % n;
}

public static ulong GetObjectId(UnityEngine.Object o)
{
#if UNITY_6000_4_OR_NEWER
return EntityId.ToULong(o.GetEntityId());
#else
return (ulong)o.GetInstanceID();
#endif
}

public static void BakeMeshFromId(ulong id)
{
#if UNITY_6000_4_OR_NEWER
Physics.BakeMesh(EntityId.FromULong(id), false);
#else
Physics.BakeMesh((int)id, false);
#endif
}
}
}
1 change: 0 additions & 1 deletion native~/src/Editor/IonAssetsTreeViewImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

#include <DotNet/CesiumForUnity/IonAssetsColumn.h>
#include <DotNet/System/String.h>
#include <DotNet/UnityEditor/IMGUI/Controls/TreeViewItem.h>
#include <DotNet/UnityEngine/Rect.h>

#include <memory>
Expand Down
13 changes: 8 additions & 5 deletions native~/src/Runtime/CesiumMetadataImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
#include <CesiumGltf/PropertyTablePropertyView.h>
#include <CesiumGltf/PropertyTableView.h>

#include <DotNet/CesiumForUnity/Helpers.h>
#include <DotNet/System/Array1.h>
#include <DotNet/UnityEngine/GameObject.h>
#include <DotNet/UnityEngine/Mesh.h>
#include <DotNet/UnityEngine/Object.h>
#include <DotNet/UnityEngine/Transform.h>

using namespace DotNet;
Expand Down Expand Up @@ -58,14 +60,14 @@ CesiumMetadataImpl::CesiumMetadataImpl(
CesiumMetadataImpl::~CesiumMetadataImpl() {}

void CesiumMetadataImpl::addMetadata(
int32_t instanceID,
uint64_t objectId,
const CesiumGltf::Model* pModel,
const CesiumGltf::MeshPrimitive* pPrimitive) {
this->_pModels.insert({instanceID, {pModel, pPrimitive}});
this->_pModels.insert({objectId, {pModel, pPrimitive}});
}

void CesiumMetadataImpl::removeMetadata(int32_t instanceID) {
auto find = this->_pModels.find(instanceID);
void CesiumMetadataImpl::removeMetadata(uint64_t objectId) {
auto find = this->_pModels.find(objectId);
if (find != this->_pModels.end()) {
this->_pModels.erase(find);
}
Expand All @@ -78,7 +80,8 @@ CesiumForUnityNative::CesiumMetadataImpl::GetFeatures(
const DotNet::CesiumForUnity::CesiumMetadata& metadata,
const DotNet::UnityEngine::Transform& transform,
int triangleIndex) {
auto find = this->_pModels.find(transform.GetInstanceID());
auto find =
this->_pModels.find(CesiumForUnity::Helpers::GetObjectId(transform));
if (find == this->_pModels.end()) {
return DotNet::System::Array1<DotNet::CesiumForUnity::CesiumFeature>(0);
}
Expand Down
6 changes: 3 additions & 3 deletions native~/src/Runtime/CesiumMetadataImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ class CesiumMetadataImpl : public CesiumImpl<CesiumMetadataImpl> {
~CesiumMetadataImpl();

void addMetadata(
int32_t instanceID,
uint64_t objectId,
const CesiumGltf::Model* pModel,
const CesiumGltf::MeshPrimitive* pPrimitive);

void removeMetadata(int32_t instanceID);
void removeMetadata(uint64_t objectId);

DotNet::System::Array1<DotNet::CesiumForUnity::CesiumFeature> GetFeatures(
const DotNet::CesiumForUnity::CesiumMetadata& metadata,
Expand All @@ -42,7 +42,7 @@ class CesiumMetadataImpl : public CesiumImpl<CesiumMetadataImpl> {

private:
std::unordered_map<
int32_t,
uint64_t,
std::pair<const CesiumGltf::Model*, const CesiumGltf::MeshPrimitive*>>
_pModels;
};
Expand Down
24 changes: 13 additions & 11 deletions native~/src/Runtime/UnityPrepareRendererResources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <DotNet/CesiumForUnity/CesiumPointCloudRenderer.h>
#include <DotNet/CesiumForUnity/CesiumPrimitiveFeatures.h>
#include <DotNet/CesiumForUnity/CesiumPropertyTable.h>
#include <DotNet/CesiumForUnity/Helpers.h>
#include <DotNet/System/Array1.h>
#include <DotNet/System/Collections/Generic/List1.h>
#include <DotNet/System/Object.h>
Expand All @@ -55,7 +56,6 @@
#include <DotNet/UnityEngine/MeshRenderer.h>
#include <DotNet/UnityEngine/MeshTopology.h>
#include <DotNet/UnityEngine/Object.h>
#include <DotNet/UnityEngine/Physics.h>
#include <DotNet/UnityEngine/Quaternion.h>
#include <DotNet/UnityEngine/Rendering/CullMode.h>
#include <DotNet/UnityEngine/Rendering/IndexFormat.h>
Expand Down Expand Up @@ -992,9 +992,9 @@ UnityPrepareRendererResources::prepareInLoadThread(
if (shouldCreatePhysicsMeshes) {
// Baking physics meshes takes awhile, so do that in a
// worker thread.
const std::int32_t len = meshes.Length();
std::vector<std::int32_t> instanceIDs;
for (int32_t i = 0; i < len; ++i) {
const std::uint64_t len = meshes.Length();
std::vector<std::uint64_t> objectIds;
for (uint64_t i = 0; i < len; ++i) {
// Don't attempt to bake a physics mesh from points, lines, or
// an invalid triangle mesh.
switch (primitiveInfos[i].mode) {
Expand All @@ -1007,21 +1007,22 @@ UnityPrepareRendererResources::prepareInLoadThread(
}
}

instanceIDs.push_back(meshes[i].GetInstanceID());
objectIds.push_back(
CesiumForUnity::Helpers::GetObjectId(meshes[i]));
}

if (instanceIDs.size() > 0) {
if (objectIds.size() > 0) {
#ifndef __EMSCRIPTEN__
return asyncSystem.runInWorkerThread(
#else
// Unity Wasm can only access managed code from the main thread.
return asyncSystem.runInMainThread(
#endif
[workerResult = std::move(workerResult),
instanceIDs = std::move(instanceIDs),
objectIds = std::move(objectIds),
meshes = std::move(meshes)]() mutable {
for (std::int32_t instanceID : instanceIDs) {
UnityEngine::Physics::BakeMesh(instanceID, false);
for (std::uint64_t objectID : objectIds) {
CesiumForUnity::Helpers::BakeMeshFromId(objectID);
}

LoadThreadResult* pResult = new LoadThreadResult{
Expand Down Expand Up @@ -1628,7 +1629,8 @@ void* UnityPrepareRendererResources::prepareInMainThread(
// For backwards compatibility.
if (metadataComponent != nullptr) {
metadataComponent.NativeImplementation().addMetadata(
primitiveGameObject.transform().GetInstanceID(),
CesiumForUnity::Helpers::GetObjectId(
primitiveGameObject.transform()),
&gltf,
&primitive);
} else {
Expand Down Expand Up @@ -1680,7 +1682,7 @@ void freePrimitiveGameObject(
// Kept for backwards compatibility.
if (metadataComponent != nullptr) {
metadataComponent.NativeImplementation().removeMetadata(
primitiveGameObject.transform().GetInstanceID());
CesiumForUnity::Helpers::GetObjectId(primitiveGameObject.transform()));
} else {
freePrimitiveFeatures(primitiveGameObject);
}
Expand Down
Loading