Почему мой игровой объект projectile не перемещается?

#c# #unity3d #topdown

#c# #unity3d #верхний

Вопрос:

Я уже пробовал множество других решений, но ни одно из них не сработало для меня.
Мои снаряды просто стоят там, даже если я использую AddForce .

Вот код

 public Transform gunExitPoint;
public int ProjectileVelocity;
public GameObject projectilePref;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Mouse0))
    {
        GameObject shot = Instantiate(projectilePref, gunExitPoint.position, gunExitPoint.rotation);

        Rigidbody2D rb = shot.GetComponent<Rigidbody2D>();
        rb.AddForce(transform.forward * ProjectileVelocity * Time.deltaTime, ForceMode2D.Impulse);
    }
}
  

Комментарии:

1. Что ProjectileVelocity установлено?

2. Я назначил его в редакторе, это неправильно?

3. Если вы отлаживаете свою программу и либо устанавливаете точку останова при rb.AddForce() вызове и / или наблюдаете ProjectileVelocity , можете ли вы увидеть, что это что-то другое, чем 0 ?

4. как мне установить точку останова?

5. learn.microsoft.com/en-us/visualstudio/get-started/csharp/…

Ответ №1:

Просто исходя из того, что у вас есть здесь, и предполагая, что это полный пример, ваша int переменная ProjectileVelocity не назначена. Неназначенный integer тип по умолчанию имеет значение 0 . Умножение на 0 приводит к 0 значению. Если вы используете это как свою силу, то ваш снаряд никуда не полетит.

Ответ №2:

после изменения моего кода и использования отладки (спасибо gmiley) я смог добавить силу к своим снарядам, затем я изменил rigidbody2d на dynamic и увеличил скорость до 1000f. вот код (к сожалению, он немного неаккуратный)

 public Vector2 thrust;
public Transform gunExitPoint;
public int ProjectileVelocity = 1000;
public GameObject projectilePref;

// Start is called before the first frame update
void Start()
{
    
}


void Update()
{
    if (Input.GetKeyDown(KeyCode.Mouse0))
    {

        GameObject shot = Instantiate(projectilePref, gunExitPoint.position, gunExitPoint.rotation);

        Rigidbody2D rb = shot.GetComponent<Rigidbody2D>();

        thrust = transform.up * ProjectileVelocity ;
        rb.AddForce(thrust, ForceMode2D.Impulse);
    }
}