I'm currently creating a scrip that handles the projectile movement and it's almost where I want it to be. Currently the script correctly instantiates the projectiles, moves the projectiles towards the mouse and deletes them off screen, but the speed of the projectile is not constant (faster or slower depending on how close the mouse is to the player) and after the projectile is fired, it follows the position of the mouse until it flies off screen.
public class LetterController : MonoBehaviour {
private List<GameObject> letters = new List<GameObject>();
public GameObject letterPrefab;
public float letterVelocity;
Vector3 direction;
void Update()
{
direction = Input.mousePosition;
direction.z = 0.0f;
direction = Camera.main.ScreenToWorldPoint(direction);
direction = direction - transform.position;
if (Input.GetMouseButtonDown(0))
{
GameObject letter = (GameObject)Instantiate(letterPrefab, transform.position,Quaternion.identity);
letters.Add(letter);
}
for (int i = 0; i < letters.Count; i++)
{
GameObject goLetter = letters[i];
if (goLetter != null)
{
goLetter.transform.Translate(direction * Time.deltaTime * letterVelocity);
Vector3 letterScreenPosition = Camera.main.WorldToScreenPoint(goLetter.transform.position);
if (letterScreenPosition.y >= Screen.height || letterScreenPosition.y <= 0 || letterScreenPosition.x >= Screen.width - 20 || letterScreenPosition.x <= -20)
{
DestroyObject(goLetter);
letters.Remove(goLetter);
}
}
}
}
}
I tried moving everything from Update()
into a separate function called Shoot()
and called that from Update()
. I tried putting Vector3 direction
in its own Vector3 function and calling it in goLetter.transform.Translate
. I also tried using LateUpdate()
. Nothing I've tired has made any significant changes to how the projectile interacts in Unity. I'd like to have the projectiles move at a constant speed and not follow the cursor but rather travel in a straight line anyone got any clues?