#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);
}
}