我的GameAssets的静态实例没有正确实例化|Unity 3D



我正在尝试创建一个静态GameAssets类,在那里我可以拖动到它的引用中,以管理我游戏中的每个GameObject。

我在这里遇到的问题是,当我开始游戏时,我的GameAssets实例为null(我不想要(,它正在实例化一个没有链接到它的引用的GameAssets.

GameAssets类的代码

public class GameAssets : MonoBehaviour
{
private static GameAssets _i;
public static GameAssets i
{
get
{   
if (_i == null)
_i =  Instantiate(Resources.Load<GameAssets>("GameAssets"));
return _i;
}
}
public GameObject ProjectileLaserBall;
}

层次结构&检查员

我们可以看到,我有一个名为GameAssets的空GameObject,它的引用已经链接了预制件!我如何让Unity理解使用现有的GameAssets,而不是在没有参考的情况下创建它的克隆?

(正如我的脚本中所要求的,创建了一个克隆(类的克隆

在这种情况下,如层次结构图所示,您不需要创建类的新实例。场景中已经有一个实例。

因此,当你开始游戏时,你希望静态引用指向Unity在场景加载后已经创建的已经实例化的类。

代码看起来像:

public class GameAssets : MonoBehaviour
{
private static GameAssets _i;
public static GameAssets i
{
get
{   
if (_i == null)
_i = this;
return _i;
}
}
public GameObject ProjectileLaserBall;
}

您的代码确实使用了Resources文件夹。这让我认为,如果这个GameAssets项目也在那里,你也有一个预制件。在这种情况下,您的意图可能不是在场景中定义GamesAssets对象,而是在运行时加载一个对象。

使用预制件,不能添加对场景对象的引用(在常识中(,但可以添加对其他预制件的引用。因此,如果您想以这种方式进行操作,请确保您的ProjectileLaserBall也是一个预制对象,实例化GameAssets对象,添加并确保场景中没有GameAssets对象(因为将创建一个新对象(。这个类的代码仍然与我上面显示的相同,但您将从不同的类实例化资产。如果你做的每件事都正确,你应该在层次结构中有一个GameAssets项目,GameAssets.i可以访问它

我找到了解决这个问题的方法,但它并没有解决它

因此,我没有将我的GameAssets直接包含在场景中,而是将其保留在项目文件夹中,并在预制的GameAssets中指定引用。当我调用它时,它正在创建一个带有引用的GameAssets的克隆。

这里的问题是,当我从脚本中调用它时,因为它没有实例化,所以函数不会在GameAssets.I.之后显示

我们无法获得带有"this"关键字的静态类的实例,所以我真的不知道如何使其正常工作

最新更新