Various fixes to prefabs
This commit is contained in:
@@ -1034,7 +1034,10 @@ void Actor::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
|
|||||||
}
|
}
|
||||||
else if (!parent && parentId.IsValid())
|
else if (!parent && parentId.IsValid())
|
||||||
{
|
{
|
||||||
LOG(Warning, "Missing parent actor {0} for \'{1}\'", parentId, ToString());
|
if (_prefabObjectID.IsValid())
|
||||||
|
LOG(Warning, "Missing parent actor {0} for \'{1}\', prefab object {2}", parentId, ToString(), _prefabObjectID);
|
||||||
|
else
|
||||||
|
LOG(Warning, "Missing parent actor {0} for \'{1}\'", parentId, ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1230,14 +1230,14 @@ bool Prefab::SyncChangesInternal(PrefabInstancesData& prefabInstancesData)
|
|||||||
{
|
{
|
||||||
ScopeLock lock(Locker);
|
ScopeLock lock(Locker);
|
||||||
_isCreatingDefaultInstance = true;
|
_isCreatingDefaultInstance = true;
|
||||||
_defaultInstance = PrefabManager::SpawnPrefab(this, Transform::Identity, nullptr, &ObjectsCache, true);
|
_defaultInstance = PrefabManager::SpawnPrefab(this, nullptr, &ObjectsCache, true);
|
||||||
_isCreatingDefaultInstance = false;
|
_isCreatingDefaultInstance = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instantiate prefab instance from prefab (default spawning logic)
|
// Instantiate prefab instance from prefab (default spawning logic)
|
||||||
// Note: it will get any added or removed objects from the nested prefabs
|
// Note: it will get any added or removed objects from the nested prefabs
|
||||||
// TODO: try to optimize by using recreated default instance to ApplyAllInternal (will need special path there if apply is done with default instance to unlink it instead of destroying)
|
// TODO: try to optimize by using recreated default instance to ApplyAllInternal (will need special path there if apply is done with default instance to unlink it instead of destroying)
|
||||||
const auto targetActor = PrefabManager::SpawnPrefab(this, Transform::Identity, nullptr, nullptr, true);
|
const auto targetActor = PrefabManager::SpawnPrefab(this, nullptr, nullptr, true);
|
||||||
if (targetActor == nullptr)
|
if (targetActor == nullptr)
|
||||||
{
|
{
|
||||||
LOG(Warning, "Failed to instantiate default prefab instance from changes synchronization.");
|
LOG(Warning, "Failed to instantiate default prefab instance from changes synchronization.");
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ Actor* Prefab::GetDefaultInstance()
|
|||||||
_isCreatingDefaultInstance = true;
|
_isCreatingDefaultInstance = true;
|
||||||
|
|
||||||
// Instantiate objects from prefab (default spawning logic)
|
// Instantiate objects from prefab (default spawning logic)
|
||||||
_defaultInstance = PrefabManager::SpawnPrefab(this, Transform(Vector3::Minimum), nullptr, &ObjectsCache);
|
_defaultInstance = PrefabManager::SpawnPrefab(this, nullptr, &ObjectsCache);
|
||||||
|
|
||||||
_isCreatingDefaultInstance = false;
|
_isCreatingDefaultInstance = false;
|
||||||
return _defaultInstance;
|
return _defaultInstance;
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ Actor* PrefabManager::SpawnPrefab(Prefab* prefab, const Transform& transform, Ac
|
|||||||
// Pick prefab root object
|
// Pick prefab root object
|
||||||
if (sceneObjects->IsEmpty())
|
if (sceneObjects->IsEmpty())
|
||||||
{
|
{
|
||||||
LOG(Warning, "No valid objects in prefab.");
|
LOG(Warning, "No valid objects in prefab. {0}", prefab->ToString());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Actor* root = nullptr;
|
Actor* root = nullptr;
|
||||||
@@ -172,7 +172,7 @@ Actor* PrefabManager::SpawnPrefab(Prefab* prefab, const Transform& transform, Ac
|
|||||||
}
|
}
|
||||||
if (!root)
|
if (!root)
|
||||||
{
|
{
|
||||||
LOG(Warning, "Missing prefab root object.");
|
LOG(Warning, "Missing prefab root object. {0}", prefab->ToString());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -817,7 +817,7 @@ void InvokeObjectSpawn(const NetworkMessageObjectSpawn& msgData, const NetworkMe
|
|||||||
NETWORK_REPLICATOR_LOG(Error, "[NetworkReplicator] Failed to find prefab {}", msgData.PrefabId.ToString());
|
NETWORK_REPLICATOR_LOG(Error, "[NetworkReplicator] Failed to find prefab {}", msgData.PrefabId.ToString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
prefabInstance = PrefabManager::SpawnPrefab(prefab, Transform::Identity, nullptr, nullptr);
|
prefabInstance = PrefabManager::SpawnPrefab(prefab, nullptr, nullptr);
|
||||||
if (!prefabInstance)
|
if (!prefabInstance)
|
||||||
{
|
{
|
||||||
NETWORK_REPLICATOR_LOG(Error, "[NetworkReplicator] Failed to spawn object type {}", msgData.PrefabId.ToString());
|
NETWORK_REPLICATOR_LOG(Error, "[NetworkReplicator] Failed to spawn object type {}", msgData.PrefabId.ToString());
|
||||||
|
|||||||
Reference in New Issue
Block a user