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())
|
||||
{
|
||||
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);
|
||||
_isCreatingDefaultInstance = true;
|
||||
_defaultInstance = PrefabManager::SpawnPrefab(this, Transform::Identity, nullptr, &ObjectsCache, true);
|
||||
_defaultInstance = PrefabManager::SpawnPrefab(this, nullptr, &ObjectsCache, true);
|
||||
_isCreatingDefaultInstance = false;
|
||||
}
|
||||
|
||||
// Instantiate prefab instance from prefab (default spawning logic)
|
||||
// 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)
|
||||
const auto targetActor = PrefabManager::SpawnPrefab(this, Transform::Identity, nullptr, nullptr, true);
|
||||
const auto targetActor = PrefabManager::SpawnPrefab(this, nullptr, nullptr, true);
|
||||
if (targetActor == nullptr)
|
||||
{
|
||||
LOG(Warning, "Failed to instantiate default prefab instance from changes synchronization.");
|
||||
|
||||
@@ -76,7 +76,7 @@ Actor* Prefab::GetDefaultInstance()
|
||||
_isCreatingDefaultInstance = true;
|
||||
|
||||
// Instantiate objects from prefab (default spawning logic)
|
||||
_defaultInstance = PrefabManager::SpawnPrefab(this, Transform(Vector3::Minimum), nullptr, &ObjectsCache);
|
||||
_defaultInstance = PrefabManager::SpawnPrefab(this, nullptr, &ObjectsCache);
|
||||
|
||||
_isCreatingDefaultInstance = false;
|
||||
return _defaultInstance;
|
||||
|
||||
@@ -157,7 +157,7 @@ Actor* PrefabManager::SpawnPrefab(Prefab* prefab, const Transform& transform, Ac
|
||||
// Pick prefab root object
|
||||
if (sceneObjects->IsEmpty())
|
||||
{
|
||||
LOG(Warning, "No valid objects in prefab.");
|
||||
LOG(Warning, "No valid objects in prefab. {0}", prefab->ToString());
|
||||
return nullptr;
|
||||
}
|
||||
Actor* root = nullptr;
|
||||
@@ -172,7 +172,7 @@ Actor* PrefabManager::SpawnPrefab(Prefab* prefab, const Transform& transform, Ac
|
||||
}
|
||||
if (!root)
|
||||
{
|
||||
LOG(Warning, "Missing prefab root object.");
|
||||
LOG(Warning, "Missing prefab root object. {0}", prefab->ToString());
|
||||
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());
|
||||
return;
|
||||
}
|
||||
prefabInstance = PrefabManager::SpawnPrefab(prefab, Transform::Identity, nullptr, nullptr);
|
||||
prefabInstance = PrefabManager::SpawnPrefab(prefab, nullptr, nullptr);
|
||||
if (!prefabInstance)
|
||||
{
|
||||
NETWORK_REPLICATOR_LOG(Error, "[NetworkReplicator] Failed to spawn object type {}", msgData.PrefabId.ToString());
|
||||
|
||||
Reference in New Issue
Block a user