Unity实例化2D对象报错:无法将Vector2转换为Transform
解决Unity中Instantiate的CS1503类型转换错误
错误原因
你遇到的CS1503错误,是因为调用Instantiate时参数类型不匹配:你传入的第二个参数是Vector2,但编译器匹配到的Instantiate重载要求第二个参数是Transform(作为克隆对象的父物体),所以出现了类型转换失败的问题。
修复代码
你需要调用带位置和旋转参数的Instantiate重载,因为Unity场景中的物体位置本质是三维的Vector3,同时要指定旋转信息(无旋转就传Quaternion.identity)。修改后的CreateBox方法如下:
void CreateBox(int boxNum) { for (int i = 0; i < boxNum; i ++) { // 把Vector2转为Vector3,保持原物体的z轴位置,2D项目可直接设为0 Vector3 spawnPos = new Vector3(boxOriginal.transform.position.x, i, boxOriginal.transform.position.z); GameObject boxClone = Instantiate(boxOriginal, spawnPos, Quaternion.identity); } }
如果是2D项目,z轴可以简化为0:
Vector3 spawnPos = new Vector3(boxOriginal.transform.position.x, i, 0f);
为什么之前的尝试也失败
你单独用Instantiate(boxOriginal, new Vector2(1, 1))时,Unity并没有Instantiate(GameObject, Vector2)这个重载方法,编译器会自动匹配到Instantiate(GameObject, Transform),把Vector2当成Transform类型处理,自然还是报错。必须明确传入旋转参数,让编译器匹配正确的重载。
内容的提问来源于stack exchange,提问作者PickledPie
相关产品推荐
相关产品推荐

