using System.Collections; using System.Collections.Generic; using UnityEngine; public class ObjectForceController : MonoBehaviour { [SerializeField] private List objects; // Η λίστα με τα αντικείμενα [SerializeField] private float forceAmount = 10f; // Πόσο force να βάλουμε private Dictionary startTransforms = new Dictionary(); void Start() { // Αποθηκεύουμε τις αρχικές θέσεις και περιστροφές foreach (var obj in objects) { startTransforms[obj] = (obj.position, obj.rotation); } } public void AddForceToObjects() { // Εφαρμόζουμε force στον τοπικό Z άξονα foreach (var obj in objects) { obj.AddForce(obj.transform.forward * forceAmount, ForceMode.Impulse); } } // Μέθοδος για reset των αντικειμένων στις αρχικές τους θέσεις και περιστροφές [System.Obsolete] public void ResetObjects() { foreach (var obj in objects) { if (startTransforms.ContainsKey(obj)) { obj.position = startTransforms[obj].Item1; obj.rotation = startTransforms[obj].Item2; obj.velocity = Vector3.zero; // Σταματάμε την κίνηση obj.angularVelocity = Vector3.zero; } } } // Μέθοδος για ομαλή επιστροφή στη θέση με Lerp public void LerpToStart(float duration) { StartCoroutine(LerpCoroutine(duration)); } private IEnumerator LerpCoroutine(float duration) { float elapsedTime = 0f; Dictionary initialTransforms = new Dictionary(); foreach (var obj in objects) { initialTransforms[obj] = (obj.position, obj.rotation); } while (elapsedTime < duration) { elapsedTime += Time.deltaTime; float t = elapsedTime / duration; foreach (var obj in objects) { if (startTransforms.ContainsKey(obj)) { obj.position = Vector3.Lerp(initialTransforms[obj].Item1, startTransforms[obj].Item1, t); obj.rotation = Quaternion.Lerp(initialTransforms[obj].Item2, startTransforms[obj].Item2, t); } } yield return null; } ResetObjects(); // Σιγουρεύουμε ότι γυρνάνε ακριβώς στην αρχική τους θέση } }