我正在尝试创建一个静态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"关键字的静态类的实例,所以我真的不知道如何使其正常工作