Bullet Prefab Script

2019-03-05 03:09发布

I am getting an error in this script?

UnityEngine does not contain a definition for rigid body (Lines: 22,24)

public class GunShoot : MonoBehaviour
{
    public GameObject BulletPrefab;
    public float BulletSpeed;
    public int BulletsInClip;
    public AudioClip GunshotSound;

    void Update () {

        if (Input.GetButtonDown("Shoot")){

            Shoot();
        }
    }

    void Shoot() {

        var bullet = Instantiate(BulletPrefab, transform.Find("BulletSpawn").position, transform.Find("BulletSpawn").rotation);
        bullet.rigidbody.AddForce(transform.forward * BulletSpeed);
        audio.PlayOneShot(GunshotSound);
        BulletsInClip--;
    }
}

3条回答
放我归山
2楼-- · 2019-03-05 03:36

In Unity you need to grab the rigidbody like thisbullet.GetComponent<Rigidbody >().AddForce(...) -- this is c# btw I'm not sure how different it is in JavaScript.

查看更多
Anthone
3楼-- · 2019-03-05 03:44

A var in this case means that the created instance is of type UnityEngine.Object. You need to specify a type cast explicitly:

var bullet = Instantiate(BulletPrefab) as GameObject;

or

var bullet = (GameObject) Instantiate(BulletPrefab);

In general it is preferrable to use an explicit type as it increases readability (my oppinion) like:

GameObject bullet = Instantiate(BulletPrefab) as GameObject;
查看更多
成全新的幸福
4楼-- · 2019-03-05 03:46

Use GetComponent to get the RigidBody something like this.

gameObject.GetComponent<Rigidbody>().AddForce(transform.forward * BulletSpeed);
查看更多
登录 后发表回答