unity3d 示例化2D对象时无法从“UnityEngine.Vector2”转换为“UnityEngine.Transform”

am46iovg  于 2023-01-09  发布在  其他
关注(0)|答案(2)|浏览(355)

所以我尝试克隆游戏对象,但我一直得到以下错误:
方框复制. cs(18,60):错误CS1503:论据二:无法从"UnityEngine.Vector2"转换为"UnityEngine. Transform"
下面是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BoxDuplication : MonoBehaviour
{
    public GameObject boxOriginal;

    void Start()
    {
        CreateBox(3);
    }

    void CreateBox(int boxNum)
    {
        for (int i = 0; i < boxNum; i ++)
        {
            GameObject boxClone = Instantiate(boxOriginal, new Vector2(boxOriginal.transform.position.x, i));
        }
    }
}

我试过使用set coordinates来放置instantiate standalone:

GameObject boxClone = Instantiate(boxOriginal, new Vector2(1, 1));

但这个也不行所以我的方法有问题
我试着通过浏览视频和其他堆栈溢出的帖子来找出我做错了什么,但是由于我对c#不太了解,我不知所措。有一些类似的帖子,但是我不认为它们能回答我的问题。如果它们能回答,那么我想我不理解这个概念。
谢谢,任何帮助都是非常感谢!

r3i60tvu

r3i60tvu1#

Unity文档中的示例化减速为:
1.第一个月

  1. public static Object Instantiate(Object original, Transform parent);
  2. public static Object Instantiate(Object original, Transform parent, bool instantiateInWorldSpace);
  3. public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
  4. public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);
    因此,在您的示例中,Instantiate方法需要一个父对象Transform,您还必须包含rotation和父对象。
    所以你的台词变成了:
GameObject boxClone = Instantiate(boxOriginal, new Vector2(1, 1), Quaternion.identity, transform);
    • 编辑:**

transform被用作父对象。如果需要,它可以被省略。将对象作为子对象来派生总是一个好主意。为了使层次结构清晰。

fkaflof6

fkaflof62#

您的问题是您没有设置新游戏对象的旋转。如果您想使用Instantiate(boxOriginal, transform)将其设置为脚本所连接的对象的子对象。这将起作用,您只需添加boxClone.transform.position += Vector3(1,1);将其移动到所需的位置。* 注意 * boxClone.transform.localPosition可能是您想要的。
如果您使用GameObject boxClone = Instantiate(boxOriginal, new Vector2(1, 1), Quaternion.identity);,则应该没有问题。

相关问题