Стреляй пулями по диагонали - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть космический корабль, который стреляет прямо перед собой.Это работает до сих пор.Но я хочу, чтобы некоторые кадры тоже двигались по диагонали.

Это скрипт-пуля:

public float damage = 25f;

float speed;

// Use this for initialization
void Start () {
    speed = 8f;
}

// Update is called once per frame
void Update () {
    //get the bullet's current position
    Vector2 position = transform.position;

    //compute the bullet's new position
    position = new Vector2(position.x, position.y + speed * Time.deltaTime);

    //update the bullet's position
    transform.position = position;

    //this is the top right point of the screen
    Vector2 max = Camera.main.ViewportToWorldPoint(new Vector2(1, 1));

    //if the bullet went outside the screen on the top, then destroy the bullet
    if (transform.position.y > max.y) {
    // this is just an object-pool
        PlayerControl.bulletPool.ReturnInstance(gameObject);
    }
}

Это скрипт-стрельба игроков:

public GameObject bulletPosition01;
public GameObject playerShotsGO;

void Update () {
    //fire bullets when the spacebar is pressed
    if (Input.GetKeyDown ("space")) {
        Shoot();
    }

//function to make the player shoot
public void Shoot () {
    //play the laser sound effect
    SoundManager.PlaySFX (shootAudio);

    //get bullet from object-pool
    GameObject bullet01 = bulletPool.GetInstance (playerShotsGO);
    bullet01.transform.position = bulletPosition01.transform.position;

    bullet01.transform.SetParent (playerShotsGO.transform, true);
}

1 Ответ

0 голосов
/ 25 апреля 2018

Это не то, как правильно снимать сборный дом. Используйте для этого встроенную физику. Прикрепите Rigidbody к вашему GameObject, если это 3D-объект. Если это 2D объект, прикрепите к нему Rigidbody2D. Вы используете Rigidbody.AddForce или Rigidbody.velcociy, чтобы стрелять в Объект. Чтобы заставить его стрелять в направлении, в котором он стоит, используйте transform.forward и умножьте его на некоторое усилие.

Очень простой сценарий 2D-съемки:

public float speed = 100;
//Assign from the Editor
public GameObject bulletPrefab;


void Update()
{
    if (Input.GetKeyDown("space"))
    {
        GameObject bullet = Instantiate(bulletPrefab);
        ShootBullet(bullet);
    }
}

void ShootBullet(GameObject rb)
{
    Rigidbody2D bulletRb = rb.GetComponent<Rigidbody2D>();

    //The direction to shoot the bullet
    Vector3 pos = bulletRb.transform.forward * speed;
    //Shoot
    bulletRb.velocity = pos;
}

Как "Гуннар Б" упомянул , Если вы стреляете несколькими (2) пулями с космического корабля, тогда создайте два пустых Объекта на стороне космического корабля, чтобы пуля вышла от. Также поместите эти два объекта под космический корабль, а затем используйте их как место для создания экземпляра пули

public float speed = 100;
//Assign bulletPrefab from the Editor
public GameObject bulletPrefab;
//Assign ship from the Editor
public Transform spaceShip;

//[Empty GameObject] Assign from the Editor
public Transform leftBarrel;
//[Empty GameObject] Assign from the Editor
public Transform rightBarrel;


void Update()
{
    if (Input.GetKeyDown("space"))
    {
        //Instantiate left and right bullets
        GameObject leftBullet = Instantiate(bulletPrefab, leftBarrel.position, spaceShip.rotation);
        GameObject rightBullet = Instantiate(bulletPrefab, rightBarrel.position, spaceShip.rotation);

        //Shoot left and right bullets
        ShootBullet(leftBullet);
        ShootBullet(rightBullet);
    }
}

void ShootBullet(GameObject obj)
{
    Rigidbody2D bulletRb = obj.GetComponent<Rigidbody2D>();

    //The direction to shoot the bullet
    Vector3 pos = spaceShip.up * speed;
    //Shoot
    bulletRb.velocity = pos;
}
...