- Home /
Is this a good way to handle range?
using UnityEngine;
using System.Collections;
public class Projectile : MonoBehaviour
{
private float damage;
private float range;
private static float speed;
private Vector3 endRange;
void Update()
{
Vector3 distance = endRange - transform.position;
if (distance.sqrMagnitude > 0.25f)
gameObject.SetActive(false);
transform.Translate( Vector2.right * speed );
}
void OnEnable()
{
endRange = transform.position + Vector3.one * range;
}
}
Basically what this is doing is adding a range to the position when the object is enabled. When the fistance towards this object is less than 0.25, then disable object.
Is this a good way of doing projectile range or is there another method? Keep in mind there will be around 100 - 200 projectiles on screen at any given moment.
Answer by MartinCA · Jul 04, 2015 at 09:07 AM
Something here seems overly complex for no reason. If you want to limit your projectile travel by distance from it's origin point - do just that.
Store "startPosition" value when enabled and check the distance from current position to start position whenever the projectile moves. Basically, I don't understand the inversion you're doing with inferring the end position on start. Also, your method would fail is the direction is different than the direction you used to calculate "endRange".
Just use this:
void OnEnable()
{
startPosition = transform.position;
}
void Update()
{
if ( Vector3.Distance( transform.position, startPosition ) > MAX_RANGE )
{
"We're out of range!"
}
}
You can also optimize this by using the square variant of of the distance and checking against MAX_RANGE * MAX_RANGE.
Additionally, if range is constant, you can always just limit lifetime instead of range. It's a much simpler approach but it really depends on your use case.
Your answer
Follow this Question
Related Questions
How to calculate projectile range 2 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Proper instantiate projectile with variables (C#) 1 Answer
Multiple projectiles hitting the same target at once for shotguns 0 Answers