diff --git a/Assets/Scenes/Experiment.unity b/Assets/Scenes/Experiment.unity index 378ace2..0f2d73c 100644 --- a/Assets/Scenes/Experiment.unity +++ b/Assets/Scenes/Experiment.unity @@ -2642,6 +2642,58 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 99cce68fc82caea44b5a140697be00a8, type: 3} +--- !u!1 &2200000000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2200000001} + - component: {fileID: 2200000002} + m_Layer: 0 + m_Name: Treat Spawner Center + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2200000001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2200000000} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2200000002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2200000000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 14b0bf07aa1abc44a8ebd00cecacd6f4, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Spawner + objectToSpawn: {fileID: 262983251238298495, guid: 80c527a86ad6fc34dbc73ee80c1f2951, type: 3} + spawnInterval: 5 + maxAlive: 0 + spawnOnStart: 1 + repeatSpawns: 1 + launchForce: 4 + launchRandomAngle: 360 + spinSpeed: 180 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -2671,3 +2723,4 @@ SceneRoots: - {fileID: 375061916} - {fileID: 2100000001} - {fileID: 2100000101} + - {fileID: 2200000001} diff --git a/Assets/Scripts/Spawner.cs b/Assets/Scripts/Spawner.cs index 051a10b..54805d9 100644 --- a/Assets/Scripts/Spawner.cs +++ b/Assets/Scripts/Spawner.cs @@ -11,6 +11,9 @@ public class Spawner : MonoBehaviour [SerializeField] private int maxAlive = 0; [SerializeField] private bool spawnOnStart = true; [SerializeField] private bool repeatSpawns = true; + [SerializeField] private float launchForce = 0f; + [SerializeField] private float launchRandomAngle = 0f; + [SerializeField] private float spinSpeed = 0f; private readonly List spawned = new List(); @@ -31,6 +34,14 @@ public class Spawner : MonoBehaviour } } + private void Update() + { + if (spinSpeed != 0f) + { + transform.Rotate(0f, 0f, spinSpeed * Time.deltaTime); + } + } + private IEnumerator SpawnRoutine() { // Infinite loop to keep spawning (can be modified) @@ -66,6 +77,13 @@ public class Spawner : MonoBehaviour var instance = Instantiate(objectToSpawn, transform.position, Quaternion.identity); spawned.Add(instance); + + if (launchForce > 0f && instance.TryGetComponent(out var body)) + { + var angleOffset = launchRandomAngle > 0f ? Random.Range(-launchRandomAngle, launchRandomAngle) : 0f; + var direction = Quaternion.Euler(0f, 0f, angleOffset) * transform.right; + body.AddForce(direction.normalized * launchForce, ForceMode2D.Impulse); + } } private int CountAlive()