C# Unity3d c“;对象引用未设置为对象的实例";?
`公共课拍摄:单一行为{C# Unity3d c“;对象引用未设置为对象的实例";?,c#,unity3d,instantiation,C#,Unity3d,Instantiation,`公共课拍摄:单一行为{ 在Unity3d中,我所要做的就是实例化一个shell并启动它。当我播放时,它会实例化shell,但它不会启动它,它只会下降。我不明白为什么我会不断出现这个错误。显然,我已经创建了一个对象的实例,对吗?非常感谢任何帮助!你的问题是你没有实例化一个shell刚体,您正在实例化一个游戏对象,其中包含一个刚体,作为一个组件 当您将用作并尝试将其强制转换为对象不是的对象时,它会设置强制转换空值。将强制转换为游戏对象,然后使用获取刚体,它应该可以工作 projectile = I
在Unity3d中,我所要做的就是实例化一个shell并启动它。当我播放时,它会实例化shell,但它不会启动它,它只会下降。我不明白为什么我会不断出现这个错误。显然,我已经创建了一个对象的实例,对吗?非常感谢任何帮助!你的问题是你没有实例化一个shell<代码>刚体,您正在实例化一个
游戏对象
,其中包含一个刚体
,作为一个组件
当您将用作
并尝试将其强制转换为对象不是的对象时,它会设置强制转换空值
。将强制转换为游戏对象
,然后使用获取刚体
,它应该可以工作
projectile = Instantiate(shell, barrelEnd.position, barrelEnd.rotation) as GameObject;
Rigidbody rb = projectile.GetComponent<Rigidbody>();
rb.AddForce(0, 0, launchForce);
sparlode=实例化(shell,barrelEnd.position,barrelEnd.rotation)为游戏对象;
刚体rb=射弹。GetComponent();
rb.AddForce(0,0,launchForce);
出现此错误的原因有很多
确保在编辑器中指定了shell
和barrelEnd
。如果这样做,则需要从刚刚实例化的对象中获取组件
除非您的相机始终朝向Z轴,否则这行代码sparket.AddForce(0,0,launchForce);
中会出现问题
如果这是一个FPS游戏,相机可以四处移动,请使用cameraTransform.forward
使子弹始终向前/远离相机
public GameObject shell;
public Transform barrelEnd;
public float launchForce = 200;
Transform cameraTransform;
void Start()
{
cameraTransform = Camera.main.transform;
}
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Fire();
}
}
void Fire()
{
GameObject tempObj;
tempObj = Instantiate(shell, barrelEnd.position, barrelEnd.rotation) as GameObject;
Rigidbody projectile = tempObj.GetComponent<Rigidbody>();
projectile.velocity = cameraTransform.forward * launchForce;
}
公共游戏对象外壳;
公共贷款;
公共浮动发射力=200;
变换摄像机变换;
void Start()
{
cameraTransform=Camera.main.transform;
}
无效更新()
{
if(Input.GetButtonDown(“Fire1”))
{
火();
}
}
虚火
{
游戏对象tempObj;
tempObj=实例化(shell,barrelEnd.position,barrelEnd.rotation)为游戏对象;
刚体投射物=tembobj.GetComponent();
射弹速度=摄像机转换向前*发射力;
}
shell
和barrellEnd
的值。您可以从unity编辑器或从code启动函数中执行此操作rb.AddForce(0,0,launchForce);
检查rb
是否为null
。如果为null,Scott的方法将更有意义它给出了错误还是实例化了外壳或者两者都有?如果给出了错误,那么它不应该实例化任何东西。你能给我们提供更多细节吗?我们知道
shell
是可以的,因为它确实在播放器内创建了一个新的外壳,但是barrelEnd
的优点忽略了这一点。但是我不同意使用t他是向前的,barrelEnd。向前的
看起来更像是一个合乎逻辑的选择。谢谢你给我关于前进方向的提示。这也是一个问题
public GameObject shell;
public Transform barrelEnd;
public float launchForce = 200;
Transform cameraTransform;
void Start()
{
cameraTransform = Camera.main.transform;
}
void Update()
{
if (Input.GetButtonDown("Fire1"))
{
Fire();
}
}
void Fire()
{
GameObject tempObj;
tempObj = Instantiate(shell, barrelEnd.position, barrelEnd.rotation) as GameObject;
Rigidbody projectile = tempObj.GetComponent<Rigidbody>();
projectile.velocity = cameraTransform.forward * launchForce;
}