【问题标题】:Unity FPS Game Error [duplicate]Unity FPS游戏错误[重复]
【发布时间】:2014-05-08 10:34:25
【问题描述】:

我在此脚本中遇到错误。

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

请告诉我要编辑什么,而不是只编辑脚本。

【问题讨论】:

  • 您是在询问您是否在此脚本中遇到错误?此外,如果错误告诉您某些类型不包含刚体的定义,则意味着它不包含刚体的定义。
  • 这就是它所说的。 bullet 对象的类型不包含名称为 rigidbody 的成员。
  • 它上面有一个刚体组件??
  • @Polynomial 请详细说明我需要做什么。

标签: c# unity3d game-engine


【解决方案1】:

您对Instantiate() 的调用不会导致GameObject。它将返回一个普通的Object。因此,随后您尝试访问 RigidBody - 使用 bullet.rigidbody - Object 对此一无所知。

因此在实例化时执行显式转换:

var bullet = (GameObject) Instantiate(BulletPrefab, transform.Find("BulletSpawn").position, transform.Find("BulletSpawn").rotation);

或者甚至明确写GameObject bullet = ... 以避免这样的错误。如果你这样做了,如果你忘记了强制转换,编译器就会在真正错误的位置开始抱怨。

【讨论】:

  • GameObject bullet = ... 在没有强制转换的情况下仍然会导致编译器错误..
  • 是的@Joe,但关键是错误会更清楚。我说得更清楚了(我希望)。感谢您指出。
  • 是的,现在清楚多了。感谢更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2012-02-28
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多