This question was
closed Jan 07, 2019 at 12:19 AM by
MasonXY for the following reason:
The question is answered, right answer was accepted
Trouble with Velocity speeding things up.
I am trying to create a turret that tracks the player's movement, and fires a projectile at the player at regular intervals. I've gotten it to work, but have run into a problem in play testing.
I am poor at explaining things, so let me illustrate my problem.
The way I have the turret tracking is by making the velocity the player's position - turret position. This seemed like a fast way to get it going in the direction I wanted it to.
But, this means that the further away the player is from the turret, the faster the projectile seems to move relative to the player.
I'm a newbie on Unity, so I'm not sure how to address the problem.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TurretTracking : MonoBehaviour {
[SerializeField] float rotationSpeed = 5f;
[SerializeField] GameObject player = null;
[SerializeField] GameObject bullet = null;
[SerializeField] GameObject firingPoint = null;
[Header("These two should be the same")]
[SerializeField] float shotCounter = 5f;
[SerializeField] float storeCounter = 5f;
// Use this for initialization
private void Start()
{
player = FindObjectOfType<Player>().gameObject;
}
// Update is called once per frame
void Update ()
{
TrackPlayer();
CountDownAndShoot();
}
private void TrackPlayer()
{
Vector3 playerPosition = player.transform.position;
Vector2 direction = new Vector2(playerPosition.x - transform.position.x, playerPosition.y - transform.position.y);
Vector2 neutralPosition = new Vector2(0, 0);
var relativeYPosition = transform.position.y - player.transform.position.y;
if (relativeYPosition <= 0)
{ transform.up = -neutralPosition; }
else
{ transform.up = -direction; }
}
private void CountDownAndShoot()
{
shotCounter -= Time.deltaTime;
if (shotCounter <= 0f)
{
Fire();
shotCounter = storeCounter;
}
}
private void Fire()
{
Vector2 firingDirection = new Vector2(player.transform.position.x - this.transform.position.x, player.transform.position.y - this.transform.position.y);
GameObject projectile = Instantiate(bullet, firingPoint.transform.position, transform.rotation)as GameObject;
projectile.GetComponent<Rigidbody2D>().velocity = firingDirection;
}
}
velocity-problem.png
(233.0 kB)
Comment