“Are there any ways to load an asset with Resources.Load() as TextAsset with a file that is not a common file extension for text?”
I’m currently working on a small localization system for my web game and a friend told me about .resx files. I kind of liked how easy it was to edit and add text strings with that.(and it’s really simple to add another language with this)
I’ve been trying to get a system around that file format in my game system the last few hours. Since .resx is basically an .xml file, I’ve been parsing the file as one and I got everything working just fine.
My problem is that I’m currently using the WWW - class to read the file into my system as plain text like this:
WWW www = new WWW("file://" + Application.dataPath + resourceFile + "." + language + ".resx");
This will only work in the editor for now, but to make it work I could host the
.resx files on a server and make the www command point there, but I don’t really want that.
Since I’m not changing anything in the
.resx file at runtime, I would like to load the file in a way that looks something like this:
TextAsset textDocument = Resources.Load("/Localization/GameResources." + language) as TextAsset;
So I only want the
.resx file to load from resources as plain text, but
Resources.Load() don’t like that command.
Does anyone know a way to make that happen?
I solved it by creating a
.txt file in a subfolder when the
.resx file changed. I created this editor script to solve it:
// Creates or rewrites a .txt file for each .resx file in the same folder
// whenever the .resx changes
public class CustomResxImporter : AssetPostprocessor
public static void OnPostprocessAllAssets(string importedAssets, string deletedAssets, string movedAssets, string movedFromAssetPaths)
foreach (string asset in importedAssets)
string filePath = asset.Substring(0, asset.Length - Path.GetFileName(asset).Length) + "Generated Assets/";
string newFileName = filePath + Path.GetFileNameWithoutExtension(asset) + ".txt";
StreamReader reader = new StreamReader(asset);
string fileData = reader.ReadToEnd();
FileStream resourceFile = new FileStream(newFileName, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter writer = new StreamWriter(resourceFile);
This way, I can still have the
.resx functionality that I want. I anyone is interested, I did a small writeup on how to use this with a localization system here:
Expanded version, which also supports .bytes