- Home /
Moving a sprite towards Postion and further
Hi Guys,
im working on a little shootingscript. I want that the bullet is moving to a specific position (where the user clicked) and then further until its destroyed. At the moment its just moving to the click position and after 3 seconds (which is determined in a 2. script) it is destroyed.
So my question: How can i get the bullet move in the direction of the mouseclick and let it move further then the mouseclick position?
Heres my code:
public float speed = 1.5f;
private Vector3 target;
private Vector3 clickpos;
private Vector3 origPos;
void Start (){
target = transform.position;
origPos = transform.position;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
clickpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
}
if (this.transform.position == clickpos) {
this.gameObject.rigidbody.velocity = new Vector2(target.x, target.y);
}
else
{
transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
}
Vector3 moveDirection = gameObject.transform.position - origPos;
if (moveDirection != Vector3.zero)
{
float angle = Mathf.Atan2(moveDirection.y, moveDirection.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}
}
Answer by Baste · Oct 09, 2014 at 01:04 PM
What you need to do is to store the direction of the vector from your starting position to the click position, and then move the bullet in that direction. So something like:
Vector3 target;
bool hasBeenShot;
void Update() {
if (Input.GetMouseButtonDown(0))
{
target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
target.z = transform.position.z;
direction = target.position - transform.position
hasBeenShot = true;
}
if(hasBeenShot) {
transform.position = Vector3.MoveTowards(transform.position, transform.position + direction, speed * Time.deltaTime);
}
Hope that helps!
A note: I'm not quite sure what's going on here - the bullet usually doesn't have the script that shoots the bullet. In particular, with the script you posted, you can change the direction of the bullet by clicking the mouse after the bullet has been shot. You're doing something weird. Still, what I posted should fix your problem.
Thats exactly what i was looking for :) and yep my script is weird and im going to rework it. But your code really helps me with the flying bullet problem.
Thank you sir :)
Your answer
Follow this Question
Related Questions
Scrolling Sprite Object 0 Answers
Moving a sprite 1 Answer
Sprite Direction using transform.localRotation probelm 2 Answers
projectile move still the same direction 0 Answers