Move an object in an arc towards a location
I'm trying to make a rocket object that arcs to the desired location and I've tried many solutions and it just won't work. using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; public class Bullet : MonoBehaviour { public float distance; public float speed = 0.25f; public int damage = 40; public Rigidbody2D rb; public GameObject impactEffect; public Vector3 target; public Vector3 player; public bool CanGo = true; public bool Switch = false; public float step; public Vector3 Arc; private Vector3 vectorToTarget; public Vector3 Arc_M; public GameObject Target_Obj; // Use this for initializatio private void FixedUpdate() { Vector3 vectorToTarget = target - transform.position; float angle = (Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg) - 90; Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward); transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * 3.5f); Debug.Log("arc " + Arc); step = speed * Time.deltaTime; Arc = Vector3.MoveTowards(transform.position, target, step); Arc = Vector3.Normalize(Arc); if (!Switch) { if (CanGo) { Arc_M = new Vector3(Arc.x * 3f, Arc.y * 3f, 0); Arc_M = Vector3.Normalize(Arc_M); transform.position = Arc_M; } } else { Arc_M = new Vector3(Arc.x * 0.4f, Arc.y * 0.4f, 0); Arc_M = Vector3.Normalize(Arc_M); transform.position = Arc_M; Debug.Log("switched"); } distance = Vector3.Distance(target, transform.position); if(transform.position.x == target.x && transform.position.y == target.y) { Destroy(this.gameObject); } else if (distance <= 0.5f) { Destroy(this.gameObject); } } public IEnumerator Switch1() { yield return new WaitForSeconds(1.8f); //Switch = true; //speed = 2f; yield return new WaitForSeconds(3.2f); //speed = 0.75f; Switch = false; } private void Start() { CanGo = true; Debug.Log("start"); StartCoroutine(Switch1()); Target_Obj = GameObject.FindWithTag("Target"); } public void SetTarget(Vector3 pos, Vector3 Player) { player = Player; target = pos; Debug.Log("pos " + pos); Debug.Log("target " + target); } }