当前上下文中不存在名称为'Instantiate'的内容。

3

我正在学习Unity C#,我正在跟随Unity的2D roguelike教程,我们尝试实例化地板瓷砖,我按照视频中的步骤做了一遍(甚至连代码都复制了),但是在这一行代码上却出现了错误:

GameObject instance = Instantiate(toInstantiate, new Vector3(x, y, 0f), 
    Quaternion.identity) as GameObject; 

具体来说,涉及到Instantiate(toInstantiate)

你能帮我吗?

using UnityEngine;
using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;

public class BoardManager : MonoBehaviour 
{
    // Other class code omitted

    void BoardSetup()
    {
        boardHolder = new GameObject("Board").transform;

        for (int x = -1; x < columns + 1; x++)
        {
            for (int y = -1; y < rows + 1; y++)
            {
                GameObject toInstantiate = floorTiles[Random.Range(0, floorTiles.Length)];

                if (x == -1 || x == columns || y == -1 || y == rows)
                    toInstantiate = outerWallTiles[Random.Range(0, outerWallTiles.Length)];

                GameObject instance = Instantiate(toInstantiate, new Vector3(x, y, 0f), 
                    Quaternion.identity) as GameObject;

                instance.transform.SetParent(boardHolder);
            }
        }
    }
}

8
你的类是否继承了 MonoBehaviour - Haytam
是的,我想是这样,你指的是开头的这部分吧? 公共类 BoardManager:MonoBehaviour { - Esteban
3个回答

6
Instantiate通常是对Object.Instantiate的引用,所以您编写代码的类需要派生自Unity的Object类;这通常通过继承MonoBehaviour来实现,后者又从Object继承。请记住,任何您仅通过名称引用的方法都需要存在于同一类或继承中。

嘿!我把它改成了 GameObject instance = GameObject.Instantiate (toInstantiate, new Vector3(x, y, 0f), Quaternion.identity) as GameObject; 这样应该可以了吧?还是应该像这样? UnityEngine.Object.Instantiate (toInstantiate, new Vector3(x, y, 0f), Quaternion.identity) as GameObject; - Esteban
其实这是一个很好的发现 - 因为所涉及的方法都是静态的,所以您不需要实际的实例来调用它们。 我通常不会在实例化调用期间混合设置位置和旋转,但api看起来应该是后者。 - David

3

请检查您的代码中是否正确包含了所需的“using directive”语句,此外,请按照@Haytam所说的方式检查您的代码是否像这样(请注意MonoBehaviour):

using UnityEngine;
using System.Collections;

public class YourTutorialClass : MonoBehaviour {

你可以从关于实例化的文档中尝试一个例子,以找到你的问题。

对不起,我还是个新手,如何检查“using directive”,是的,这个类是 using UnityEngine; System; System.Collections.Generic; Random = UnityEngine.Random;public class BoardManager:MonoBehaviour { - Esteban
不确定关于 using Random = UnityEngine.Random。我所说的“包含”是指 using UnityEngine 行。这不像 C++ 中的 #include library.h,而是称为“使用指令”,你可以使用 using 代替 #include。就是这样。 - KYL3R
你确定你百分之百拼对了 Instantiate 吗? - KYL3R

3
你也可以在非MonoBehaviour的C#类中像这样调用它:UnityEngine.Object.Instantiate。但是,在类定义的顶部必须包含 using UnityEngine;

通过 JsonUtility.FromJson 读取的 JSON 实例化的类由于某种原因不能具有 MonoBehaviour。这个解决方案无需 MonoBehaviour 即可工作。 - J. McNerney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接