对于敌人的统计和其他类型的信息,我决定不使用检查器字段或硬编码值,而是将值存储到某些XML和其他类型的文件中,并从脚本中读取值,从而获得所需的值。我希望这些文件保存在游戏文件夹中,而不是打包到*.assets文件中,因为我希望能够快速修改这个值,而不需要重新构建整个游戏。
那么,我如何在编辑器中标记资产,使其不应包含在*.assets中,而在游戏文件夹中保持不变的形式?
更新:我会稍微修改一下我想要达到的目标。我需要在游戏目录中有文件的可能性,所以我可以从游戏中读取它,我希望在编辑器和构建的游戏中都有这种可能性。因此,至于答案,我也将收到关于哪个文件夹被认为是在编辑器中的游戏文件夹。
发布于 2016-08-25 11:30:32
您需要将您的东西保存在流资产文件夹中:
http://docs.unity3d.com/Manual/StreamingAssets.html
如果在第4版下面使用的是统一,那么使用一些序列化程序时,应该使用whydoidoit序列化程序:
https://www.assetstore.unity3d.com/en/#!/content/3675
如果您使用的是更高的版本,您可以尝试使用TheSniperFan中的一个名为unity序列化-ng的改编版本:
https://gitgud.io/TheSniperFan/unityserializer-ng/tree/master-pre-5.4
或者是我的API,它是一个分叉和简化的版本,还有一些更多的东西,但是它仍然是非常无文档化和混乱的:
https://github.com/Ikillnukes/Lerp2API (它没有场景保护程序,但我会实现它)
您可以通过这样做来实现这一点,假设您有一个名为"myobject“的游戏对象,您可以执行myobject.SaveTreeObject();将其转换为一个byte[]变量(您可以使用System.IO.File.WriteAllBytes保存它),并使用LevelLoader.LoadObhectTree(动作)小心加载它,因为操作表示加载对象的函数。
我的API目前是这样做的。
祝好运。
发布于 2016-08-25 08:54:12
将其放入资产文件夹中的编辑器文件夹中。
using System.Diagnostics;
using UnityEditor;
public class CustomBuild {
[MenuItem("MyTools/Windows Build With Postprocess")]
public static void BuildGame()
{
// Get filename.
string path = EditorUtility.SaveFolderPanel("Choose Location of Built Game", "", "");
string[] levels = new string[] { "Assets/Scene1.unity"};
// Build player.
BuildPipeline.BuildPlayer(levels, path + "/BuiltGame.exe", BuildTarget.StandaloneWindows, BuildOptions.None);
// Copy a file from the project folder to the build folder, alongside the built game.
//This does not check if the file already exist or not you need to do this by yourself.
FileUtil.CopyFileOrDirectory("Assets/test.txt", path + "/test.txt");
// Run the game (Process class from System.Diagnostics).
Process proc = new Process();
proc.StartInfo.FileName = path + "/BuiltGame.exe";
proc.Start();
}
}
我不知道你怎么能在手机上做到这一点。例如,在Android上,当您的游戏第一次启动到设备上的某个外部目录时,您可能想要创建该文件,然后从那里修改它。也不确定它将如何在Mac上工作,因为我对Mac几乎一无所知。玩得开心;)
https://gamedev.stackexchange.com/questions/128878
复制相似问题