projectEli/Assets/NeoFPS/Core/Utilities/ReplaceObject.cs

67 lines
2.0 KiB
C#
Raw Normal View History

2022-11-07 01:28:33 +00:00
using NeoSaveGames.Serialization;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace NeoFPS
{
public class ReplaceObject : MonoBehaviour
{
[SerializeField, Tooltip("The object to replace this one with.")]
private GameObject m_SwapPrefab = null;
private NeoSerializedGameObject m_NSGO = null;
private void Awake()
{
m_NSGO = GetComponent<NeoSerializedGameObject>();
}
public void Replace()
{
if (m_SwapPrefab != null)
{
var t = transform;
// Instantiate prefab
Transform instance = null;
// Parent with save system
bool parented = false;
if (m_NSGO != null)
{
// Instantiate under parent if found
var parentNSGO = m_NSGO.GetParent();
if (parentNSGO != null)
{
instance = parentNSGO.InstantiatePrefab(m_SwapPrefab.transform);
parented = true;
}
else
{
// Or parent under scene if not
if (m_NSGO.serializedScene != null)
{
instance = m_NSGO.serializedScene.InstantiatePrefab(m_SwapPrefab.transform);
parented = true;
}
}
}
// Parent without save system if required
if (!parented)
{
instance = Instantiate(t.parent);
instance.SetParent(t.parent);
}
// Set local transform
instance.localPosition = t.localPosition;
instance.localRotation = t.localRotation;
instance.localScale = t.localScale;
Destroy(gameObject);
}
}
}
}