Это не то, как правильно снимать сборный дом. Используйте для этого встроенную физику. Прикрепите 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;
}