Объекты не двигаются, Как заставить пули двигаться - PullRequest
0 голосов
/ 12 октября 2019

Я делаю врага, который будет стрелять в игрока. Я поворачиваю пул во время его появления и пытаюсь запустить его, но по какой-то причине он не двигается

У меня есть два скрипта для скрипта пули и скрипт для врага, который стреляет пулями

Сначала я пытался сделать движение пули с помощью AddForce(transform.up * Speed); image

Для пули

public class BulletScript : MonoBehaviour
{

    public GameObject bullet;

    void Start()
    {
        bullet.transform.Translate(bullet.transform.forward * Time.deltaTime);
    }

}

для врага

public class TurelScript : MonoBehaviour
{

    public Transform Player;
    public Transform Turell;
    public GameObject PrefabOfbullet;
    public Transform BUlletPosition;

    public float Rotation;

    void Start()
    {
        var turnOfBullet = Quaternion.Lerp(BUlletPosition.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - BUlletPosition.position), Time.deltaTime * 40f);
        var rigidbodyBullet = GetComponent<Rigidbody2D>();


        StartCoroutine(BulletSpawn());
    }

    // Update is called once per frame
    void Update()
    {
        var turn = Quaternion.Lerp(Turell.rotation, Quaternion.LookRotation(Vector3.forward, Player.position - Turell.position), Time.deltaTime * 4f);
        var rigidbody = GetComponent<Rigidbody2D>();


        rigidbody.MoveRotation(turn.eulerAngles.z);
    }


    IEnumerator BulletSpawn()
    {
        while (true)
        {
            Instantiate(PrefabOfbullet, BUlletPosition.position, Turell.rotation);
            yield return new WaitForSeconds(0.3f);
        }
    }
}

1 Ответ

1 голос
/ 12 октября 2019

Поскольку пуля выглядит как Rigidbody2D, вам не следует использовать Transform.Translate на всех , а менять только компонент Rigidbody2D и FixedUpdate, чтобы не нарушать физику. (См. Rigidbody2D.MovePosition)

Тогда для пули вы почти никогда не захотите использовать AddForce, который потребовал бы знать массу пуль и вычислить требуемуюсила соответственно.

Вы мгновенно меняете его velocity, поэтому лучше сделать что-то вроде

// Having the correct type allows you only to reference
// Object that actually have this type
// And second you don't need `GetComponent` on runtime
public Rigidbody2D PrefabOfBullet;

// Set the speed you want in Unity Units / second
public float BulletSpeed = 1f;

...

var bullet = Instantiate (PrefabOfBullet, Bullet position.position, Turell.rotation);
bullet.velocity = bullet.transform.up * BulletSpeed;

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...