【问题标题】:Bullet Prefab ScriptBullet 预制脚本
【发布时间】:2014-05-08 10:05:57
【问题描述】:

我在此脚本中遇到错误?

UnityEngine 不包含刚体的定义(第 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--;
    }
}

【问题讨论】:

    标签: c# unity3d rigid-bodies


    【解决方案1】:

    在这种情况下,var 意味着创建的实例是 UnityEngine.Object 类型。您需要明确指定类型转换:

    var bullet = Instantiate(BulletPrefab) as GameObject;
    

    var bullet = (GameObject) Instantiate(BulletPrefab);
    

    一般来说,最好使用显式类型,因为它可以增加可读性(我的观点),例如:

    GameObject bullet = Instantiate(BulletPrefab) as GameObject;
    

    【讨论】:

      【解决方案2】:

      在 Unity 中,您需要像 thisbullet.GetComponent<Rigidbody >().AddForce(...) 那样抓取刚体——这是 c# 顺便说一句,我不确定它在 JavaScript 中有何不同。

      【讨论】:

        【解决方案3】:

        使用GetComponent 获得类似这样的刚体。

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

        【讨论】:

          猜你喜欢
          • 2023-02-20
          • 1970-01-01
          • 2016-03-10
          • 1970-01-01
          • 1970-01-01
          • 2018-11-28
          • 1970-01-01
          • 2016-01-04
          • 2019-03-09
          相关资源
          最近更新 更多