【发布时间】:2020-01-30 04:02:08
【问题描述】:
我正在开发一个统一项目,其中游戏场景被下载并在运行时运行。我通过制作场景的资产包并加载它来使其工作,但我面临的问题是场景所需的脚本不包含在资产包中。我刚被困在这里,谁能帮我,我如何下载/加载所需的脚本或我如何将它们包含在资产包中。以便我可以加载它们也在运行时。
抱歉英语不好。 谢谢。
【问题讨论】:
标签: c# unity3d assetbundle
我正在开发一个统一项目,其中游戏场景被下载并在运行时运行。我通过制作场景的资产包并加载它来使其工作,但我面临的问题是场景所需的脚本不包含在资产包中。我刚被困在这里,谁能帮我,我如何下载/加载所需的脚本或我如何将它们包含在资产包中。以便我可以加载它们也在运行时。
抱歉英语不好。 谢谢。
【问题讨论】:
标签: c# unity3d assetbundle
您可以在资产包中添加任何类型的资产。
脚本(.cs 文件)将无法包含在资产包中。
添加所有 脚本/materials/.. 您需要的方式取决于场景中包含的内容,将它们全部存储在一个文件夹中。然后,您可以将整个文件夹分配给 AssetBundle tag,就像您的场景一样。
客户端需要下载的场景必须在同一个asset-bundle标签中。
注意:如果您不能将它们全部存储在同一个文件夹中,只需为要添加到捆绑包中的每个资产(或子文件夹)手动分配其资产包标签。 p>
现在您可以运行一个方法来为您创建捆绑包,如下所示:
[MenuItem("Bundles/Create all bundles")]
static void BuildAllAssetBundles()
{
BuildPipeline.BuildAssetBundles(Path.Combine(Application.dataPath, "AssetBundleLocation"), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
There 是关于如何构建资产包的更多信息。
现在所有需要的文件都应该存储在资产包文件中,“编辑”除了脚本文件。查看UnityEngine.AssetBundle 类以加载和卸载包/资产。
编辑
将脚本文件包含在资产包中的实际工作是将代码写入 TextAsset 文件 (.txt)。
一旦从资产包加载,这些文件会给你一个字符串。
AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "StreamingAssets/exampleassetbundle")); // Your asset-bundle path
TextAsset textAsset = ab.LoadAsset<TextAsset>(ab.GetAllAssetNames()[0]); // In my example I only have 1 file in the asset-bundle, the TextAsset
string flatCode = textAsset.text;
现在问题是,您必须将平面字符串代码编译为实际的 C# 类。 这称为运行时编译。
有很多关于如何做的教程,as this stackexchange post。
这有点棘手,但会做你想做的。
注意: IOS 和 Android 可能不允许您在运行时编译代码,因此取决于您的目标平台,您需要进一步调查。
【讨论】: