Мое предположение: ваша проблема в том, что вы не вращаете firePoint
, чтобы указывать на положение мыши.
Поэтому использование
Instantiate(BulletTrailPrefab, firePoint.position, firePoint.rotation);
, вероятно, будет равно
Instantiate(BulletTrailPrefab, firePoint.position, Quaternion.identity);
и, следовательно,
transform.Translate (Vector3.right * Time.deltaTime * moveSpeed);
всегда перемещается только в направлении мира X.
Я бы использовал выделенный метод для инициализации вызываемого объекта с необходимой информацией, а также для перемещения Destroy
позвоните туда, чтобы сделать это только один раз:
public class Trail : MonoBehaviour
{
public int moveSpeed = 20;
private Vector2 _direction;
private bool _isInitialized;
public void Initialize(Vector2 direction)
{
_direction = direction;
_isInitialized = true;
Destroy(gameObject, 1);
}
// Update is called once per frame
void Update()
{
if(!_isInitialized) return;
transform.Translate (_direction * Time.deltaTime * moveSpeed);
}
}
, а затем используйте его как
// Use the correct type here
public Trail BulletTrailPrefab;
private void Shoot()
{
Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 firePointPosition = firePoint.position;
var direction = (mousePosition-firePointPosition).normalized;
var hit = Physics2D.Raycast(firePointPosition, direction, 100, whatToHit);
// no pass in the direction
Effect(direction);
Debug.DrawLine(firePointPosition, direction * 100, Color.cyan);
if (hit.collider != null)
{
Debug.DrawLine(firePointPosition, hit.point, Color.red);
Debug.Log("Hit " + hit.collider.name + "and did" + Damage + "Damage");
}
}
private void Effect(Vector2 direction)
{
var bullet = Instantiate(BulletTrailPrefab, firePoint.position, firepoint.rotation);
bullet.Initialize(direction);
}