Unity2D transform.right не прямой
Я пишу 2D шутер на Unity. Стрельбу я решил сделать через Raycast и Trail, написав вот такой скрипт:
void Shot()
{
if (BuletScoreInGun == 0) return;
ShackCamera.SetTrigger("");
RaycastHit2D[] ray = new RaycastHit2D[Rays];
FireEffect.Play();
for (int i = 0; i < ray.Length; i++)
{
Vector2 directtion = GetDirection();
ray[i] = Physics2D.Raycast(BulletSpawnPoint.position, directtion, range, DestroyLayer);
TrailRenderer trail = Instantiate(BulletTrail, BulletSpawnPoint.position, BulletSpawnPoint.rotation);
StartCoroutine(SpawnTrail(trail, ray[i]));
}
BuletScoreInGun--;
}
Vector3 GetDirection()
{
Vector2 directtion = transform.right;
directtion += new Vector2(
Random.Range(-BuletSpreadVariance.x, BuletSpreadVariance.x),
Random.Range(-BuletSpreadVariance.y, BuletSpreadVariance.y));
directtion.Normalize();
return directtion;
}
private IEnumerator SpawnTrail(TrailRenderer Trail, RaycastHit2D Hit)
{
float time = 0;
Vector2 startPoint = Trail.transform.position;
Vector2 directtion = GetDirection();
if (Hit)
{
while (time < 1)
{
Trail.transform.position = Vector3.Lerp(startPoint, Hit.point, time * 2);
time += Time.deltaTime / Trail.time;
yield return null;
}
Trail.transform.position = Hit.point;
Destroy(Trail.gameObject, Trail.time);
}
else
{
while (time < 1)
{
Trail.transform.position = Vector3.Lerp(startPoint, (pl.isFacingRight == false ? directtion : -directtion) * range, time);
time += Time.deltaTime / Trail.time;
yield return null;
}
Destroy(Trail.gameObject, Trail.time);
}
}
Но когда я стреляю в воздух, выполняется условие что мы не во что не попали. И пуля стреляет в сторону transform.right * range (без учета GetDirection()). Но пуля слегка отклоняется и из-за этого она случайно может попасть в врага, но пуля пролетит сквозь него.