为什么我的JS脚本工作但不是相同的C#?

时间:2014-03-09 19:00:05

标签: unity3d

我最近开始在unity3d中工作,我在教程后遇到了以下问题。

本教程使用了unity-javascript,但我更喜欢使用C#。

我在Javascript中获得了以下代码

function Shoot() {
    var bullet = Instantiate(bulletPrefab, 
                             transform.Find("BulletSpawn").position,
                             transform.Find("BulletSpawn").rotation);
    bullet.rigidbody.AddForce(transform.forward * bulletSpeed);                      
}

并将其重写为C#-code as

    void Shoot() {
    GameObject bullet;
    bullet = Instantiate(bulletPrefab, 
                         transform.Find("BulletSpawn").position,
                         transform.Find("BulletSpawn").rotation) as GameObject;
    bullet.rigidbody.AddForce(transform.forward * bulletSpeed); 
}

我的问题是JS脚本有效,但我的C#代码

NullReferenceException:未将对象引用设置为对象的实例

bullet.rigidbody.AddForce(transform.forward * bulletSpeed);

有关我可能做错的任何建议吗?

1 个答案:

答案 0 :(得分:4)

Instantiate的返回类型为Transform,无法直接投放到GameObjectas GameObject

您的代码应为:

void Shoot() {
    Transform bullet;
    bullet = Instantiate(bulletPrefab, 
                         transform.Find("BulletSpawn").position,
                         transform.Find("BulletSpawn").rotation);
    bullet.rigidbody.AddForce(transform.forward * bulletSpeed); 
}