using UnityEngine; namespace Lean.Common { /// This component allows you to spawn a prefab at the specified world point. /// NOTE: For this component to work you must manually call the Spawn method from somewhere. [HelpURL(LeanHelper.HelpUrlPrefix + "LeanSpawn")] [AddComponentMenu(LeanHelper.ComponentPathPrefix + "Spawn")] public class LeanSpawn : MonoBehaviour { public enum SourceType { ThisTransform, Prefab } /// The prefab that this component can spawn. public Transform Prefab; /// If you call Spawn(), where should the position come from? public SourceType DefaultPosition; /// If you call Spawn(), where should the rotation come from? public SourceType DefaultRotation; /// This will spawn Prefab at the current Transform.position. public void Spawn() { if (Prefab != null) { var position = DefaultPosition == SourceType.Prefab ? Prefab.position : transform.position; var rotation = DefaultRotation == SourceType.Prefab ? Prefab.rotation : transform.rotation; var clone = Instantiate(Prefab, position, rotation); clone.gameObject.SetActive(true); } } /// This will spawn Prefab at the specified position in world space. public void Spawn(Vector3 position) { if (Prefab != null) { var rotation = DefaultRotation == SourceType.Prefab ? Prefab.rotation : transform.rotation; var clone = Instantiate(Prefab, position, rotation); clone.gameObject.SetActive(true); } } } } #if UNITY_EDITOR namespace Lean.Common.Editor { using TARGET = LeanSpawn; [UnityEditor.CanEditMultipleObjects] [UnityEditor.CustomEditor(typeof(TARGET))] public class LeanSpawn_Editor : LeanEditor { private bool showUnusedEvents; protected override void OnInspector() { TARGET tgt; TARGET[] tgts; GetTargets(out tgt, out tgts); Draw("Prefab", "The prefab that this component can spawn."); Draw("DefaultPosition", "If you call Spawn(), where should the position come from?"); Draw("DefaultRotation", "If you call Spawn(), where should the rotation come from?"); } } } #endif