Bullet Prefab Script

2019-03-05 03:26发布

问题:

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--;
    }
}

回答1:

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;


回答2:

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.



回答3:

Use GetComponent to get the RigidBody something like this.

gameObject.GetComponent<Rigidbody>().AddForce(transform.forward * BulletSpeed);