- Home /
Building custom Font with script, can not change CharacterInfo
I wanted to make several custom bitmap fonts for my game, and after looking into it I realized that this is a painstaking process to set up in Unity. So I decided to write an editor script to automatically generate the rects for my characters. The problem is, whenever I try to set the CharacterInfo struct inside my fonts, the change doesn't seem to actually happen. Here's the relevant code:
if(changed) {
var nci = new CharacterInfo();
nci.minX = (int)currentRect.xMin;
nci.maxX = (int)currentRect.xMax;
nci.minY = (int)currentRect.yMax;
nci.maxY = (int)currentRect.yMin;
nci.index = ci.index;
currentFont.characterInfo[currentChar] = nci;
Debug.Log(currentFont.characterInfo[currentChar].minX);
}
After having set the new CharacterInfo struct, the value of the old CharacterInfo is always logged. Is this something new in Unity 5? It seems some things have changed, such as the way the uv and vertex rects are represented, but I don't see how that should affect the behaviour. Is there something else I'm missing?
$$anonymous$$y current tentative solution involves using Shoebox with this script, but I have many other reason to want my own editor script to do the same thing. The linked script uses the old UV and verts rects, which are deprecated and throw warnings, so an up-to-date solution would still be nice! However, I am able to proceed with this, albeit with annoying warning.
Total shot in the dark here, but based on similar problems I've had- all those turned out to be accessor vs ACTUAL variables issues. Though the more I think about it, the less I think this is the issue. If the characterInfo array in the font is an accessor into an array, rather than the array itself, you may wish to created an entirely NEW ARRAY, and when all setup, assign THAT to your currentFont.
So, rather than assigning each element individually like this:
currentFont.characterInfo[currentChar] = nci;
Ins$$anonymous$$d, setup your own local array:
CharacterInfo[] myCharInfo= new CharacterInfo[currentFont.characterInfo.length];
...
loop
....
myCharInfo[currentChar] = nci;
....
endloop
....
currentFont.characterInfo = myCharInfo
Answer by vitorlanna · Jun 15, 2019 at 09:09 PM
Probably not revelant to @limez anymore, but to anyone else who finds this topic in the future - while I wasn't able to solve the problem, setting the characterInfo's array size to 0 in the inspector makes it so you can edit it through script and the changes will stick. Otherwise they reset to a previous logged value like limez said.
Your answer
Follow this Question
Related Questions
How can you change the font of options in a UI dropdown 1 Answer
Font Render Issue Unity 5.3.4f1 on Samsung devices 1 Answer
Any way to use multiple font styles within a single UI Text component? 1 Answer
Dynamic font with no material turns black after update (sometimes) 1 Answer
Fill Font Characters with White? 0 Answers