Unity 3D, как порождать объекты и изменять их значения? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь сделать простой 3D Rail Shooter, и в настоящее время я застрял в том, как порождать пули для моего корабля.

enter image description here

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

Проблема в том, что я застрял и не могу понять, как это сделать. Поэтому я прошу помощи, что я пропустил, что я не так сделал?

Вот сценарий, который я придумал:

public Rigidbody rb;

private bool isMoving = false;
private bool isFirePressed = false;


void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.useGravity = false;
}

void Update()
{
    isFirePressed = Input.GetButtonDown("Fire1");
}

void FixedUpdate()
{
    if (Input.GetButtonDown("Fire1"))
    {
        // the cube is going to move upwards in 10 units per second
        rb.velocity = new Vector3(0, 0, 100);
        isMoving = true;
        Debug.Log("fire");
    }
}

enter image description here

1 Ответ

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

Сначала, я думаю, вы хотели использовать вашу переменную isFirePressed.

Затем, если это префаб, я думаю, вы скорее захотите Instantiate новую пулю:

if (isFirePressed)
{
    var newBullet = Instantiate (rb, transform);
    // the cube is going to move upwards in 10 units per second
    newBullet.velocity = new Vector3(0, 0, 100);
    newBullet.useGravity = false;
    isMoving = true;
    Debug.Log("fire");
}

Вы изменили скорость на префабе, которая не работает.


Кроме того, обратите внимание, что velocity находится в координатах мирового пространства. Поэтому в настоящее время вы снимаете в направлении мира Z независимо от того, куда направлен ваш самолет.

Я бы предпочел использовать, например,

newBullet.velocity = transform.forward * 100;

, чтобы стрелять в направлении, к которому направлен ваш BulletEmitter.

...