Hello, guys. I would like some help on this.
I need help making a game object go to a specific point and come back to the previous starting position.
This is what I tried to do but didn’t quite get it.
Thank you so much for your time.
public class GrabObject : MonoBehaviour
{
[SerializeField] float rayDistance;
[SerializeField] LayerMask grabable;
[SerializeField] LayerMask ground;
[SerializeField] GameObject currentPrefab;
[SerializeField] float desiredDuration;
InputSystemManager inputSystemManager;
float startPos;
float elapsedTime;
// Start is called before the first frame update
void Start()
{
inputSystemManager = GameObject.FindAnyObjectByType();
startPos = transform.position.y;
}
// Update is called once per frame
void Update()
{
if (inputSystemManager.ButtonPressedDown())
{
if (currentPrefab == null)
{
RaycastHit hitray;
bool hit = Physics.Raycast(transform.position, Vector3.down, out hitray,rayDistance, grabable);
Debug.Log(hit);
if (hit)
{
//FindObjectOfType<AudioManager>().Play("Absorb");
//Instantiate(spawnEffect, hit2D.point, Quaternion.identity);
currentPrefab = GameObject.Find(hitray.collider.gameObject.name);
//hasAnItem = true;
StartCoroutine(LerpPosition(currentPrefab.transform.position));
StartCoroutine(LerpPosition(new Vector3(transform.position.x, startPos, transform.position.z)));
}
}
else
{
RaycastHit hitray;
bool hit = Physics.Raycast(transform.position, Vector3.down, out hitray, rayDistance, ground);
if (hit)
{
//FindObjectOfType<AudioManager>().Play("Spit");
//Instantiate(spawnEffect, hit2D.point, Quaternion.identity);
//hasAnItem = false;
//Debug.Log("hitX");
GameObject currentPrefabObj = Instantiate(currentPrefab, hitray.point, Quaternion.identity);
currentPrefabObj.SetActive(true);
currentPrefab = null;
}
}
}
}
IEnumerator LerpPosition(Vector3 targetPos)
{
float time = 0;
while (time < desiredDuration)
{
transform.position = Vector3.Lerp(transform.position, targetPos, time / desiredDuration);
time += Time.deltaTime;
yield return null;
}
transform.position = targetPos;
}