82 lines
2.8 KiB
C#
82 lines
2.8 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
public class ObjectForceController : MonoBehaviour
|
||
{
|
||
[SerializeField] private List<Rigidbody> objects; // Η λίστα με τα αντικείμενα
|
||
[SerializeField] private float forceAmount = 10f; // Πόσο force να βάλουμε
|
||
|
||
private Dictionary<Rigidbody, (Vector3, Quaternion)> startTransforms = new Dictionary<Rigidbody, (Vector3, Quaternion)>();
|
||
|
||
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<Rigidbody, (Vector3, Quaternion)> initialTransforms = new Dictionary<Rigidbody, (Vector3, Quaternion)>();
|
||
|
||
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(); // Σιγουρεύουμε ότι γυρνάνε ακριβώς στην αρχική τους θέση
|
||
}
|
||
}
|