我最近开始在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);
有关我可能做错的任何建议吗?
答案 0 :(得分:4)
Instantiate
的返回类型为Transform
,无法直接投放到GameObject
(as GameObject
)
您的代码应为:
void Shoot() {
Transform bullet;
bullet = Instantiate(bulletPrefab,
transform.Find("BulletSpawn").position,
transform.Find("BulletSpawn").rotation);
bullet.rigidbody.AddForce(transform.forward * bulletSpeed);
}