错误“InvalidCastException:无法从源类型转换为目标类型。”在Unity中使用Instantiate时

时间:2016-01-16 19:45:38

标签: javascript unity3d

好的,所以我正在制作一个2D游戏,当我运行代码时,我收到了这个错误:

InvalidCastException: Cannot cast from source type to destination type.
ToastSpawn.spawnToast () (at Assets/Scripts/ToastSpawn.js:11)

ToastSpawn.js文件中的代码如下:

#pragma strict

var Toast : Rigidbody;
var ToastSpawner : GameObject;

function Start() {
    InvokeRepeating("spawnToast", 3, 1);
}

function spawnToast() {
    var toastClone = Instantiate(Toast, GameObject.Find("ToastSpawner").transform.position, Quaternion.identity);
    toastClone.AddForce(Vector2 (0,1) * 1000);
}

我昨天刚刚开始使用Unity,所以这可能就是我收到此错误的原因。 :)

2 个答案:

答案 0 :(得分:0)

您正在尝试在Rigidbody类型对象(Toast:Rigidbody)上使用Object.Instantiate,它是一个组件,而不是GameObject。只能使用GameObject.AddComponent将组件添加到现有的GameObject中。您需要为Toast项目创建一个预制件(此预制件上有一个Rigidbody组件)并在Instantiate方法中使用预制件。

另外,你不应该在属性的名称上使用大写字母。

答案 1 :(得分:0)

嗯,如果你从C#开始会更好:P虽然我不是一个JavaScript人,但仍然可以看到一些故障。

  • 您实际上是在实例化Rigidbody而不是GameObject。取GameObject而不是Rigidbody,然后从该对象获取Rigidbody的组件以施加力。
  • 你有ToastSpawner作为GameObject所以为什么或你使用GameObject.Find?就是那个GameObject。

类似的东西,

var Toast : GameObject;
var ToastSpawner : GameObject;
...
... 
var toastClone = Instantiate(Toast, ToastSpawner.transform.position, Quaternion.identity);
var rb : Rigidbody = toastClone.GetComponent("Rigidbody");
rb.AddForce(...);