PlayMaker Feedback > Feature Requests

Variable Editor and Variables Exporter/Importer suggestions

<< < (3/3)

jeanfabre:

--- Quote from: Gustav on November 09, 2017, 01:58:39 PM ---Hi Jean,

I would like to know, how you use XML in your own projects. You create a XML file and fill it with the needed data. After that do you implement this XML file in the unity app and parse it every time it is running? Or do you load the XML one time a change was made and convert it in another format for further use at runtime? I have the feeling parsing a big XML all runtime isn't the best way. But I have no clue.

Or do you use a XML for an at runtime populated database?

--- End quote ---


Hi,

 Very good questions :)

There is two cases for xml usage, you'll extrapolate on use case, but lets take level management and User Progress


Level Management: you have an Xml file that is part of your assets, it helps define the level content, where objects are, their setup.


-- Level Management

- This xm is generated during editing.
- you load it as is only at the very beginning of the game and keep it in a xml proxy
- everytime you need to build a level, you query that xml proxy with xpath, ask for the level data, save that in a memory reference ( in xml actions you can always save in memory)
- Use this memory reference in all related fsm to build up that level

- NEVER save xpath searched as string for using in game, string conversion is very performent sensitive, always use memory reference when in game.

-- User Progress

- That xml doesn't exist during editing, you create it from scratch the first time the user plays your game
- you save it and load it from the PlayerPrefs. Here you will need to parse it from and to string. So only save in player prefs when not in the game loop, like during the finished menu, pause menu.
- add new nodes related to a particular level and its user progress, when your user comes back, read that particular level node, and update player position, and level data ( some stars may be already picked up, don't show them, some items may be picked up, set them up accordingly)

To give you some numbers so that you understand the power behind this. I have helped game developers with this methods, and their xml level data was over 36Mb of xml in one single file, spanning across 100.000 lines of xml, all in plain english, defining each level ( 6 chapters if I recall properly, 16 levels per chapter). It loads on iPhone at the very beginning of the game, you just simply don't notice it, it takes less than half a second to load up in memory and become available for INSTANT queries using xpath throughout the game.

that same game is using xml for user progress, keeping track of all features, score, per level, total score, all the stars, bonuses, etc etc, and that data leaves in the playerPref under ONE key only! and totally spittable in the console or sent over the network to a server or mailed for debugging on actual existing players, agian because xml is plain english, you have a huge advantage for analysis over messed up multi key setup for playerprefs or database with obscur tables and difficult to retrieve overview of everything.

Bottom line: Xml rocks :) cons, .Net framework messed up big time so xml is not available on windows mobile... so be careful if you plan on porting to windows, which is unlikely but still a possibility. If that's the case, make sure to raise your voice for this total non sense to microsoft, they need to put it back.


as for sample, I am currently working on a mii character setup system, which will be using Xml for saving the user data, you will be able to load up other faces from other people as well, so the whole thing will be running as I explained above, follow me on Twitter for news: https://twitter.com/JeanAtPlayMaker/status/928546642420289537

I'll make that sample available on the ecosystem soon ( it will be iterative, this is fairly advanced project that will take some time to complete)

 Bye,

 Jean

jeanfabre:

--- Quote from: krmko on November 09, 2017, 03:43:32 PM ---I'm quite a noob for using xml in game design, but i reckon it would be cool if it could use some sort of nested structure like class inheritance. Something like this:

<EnemyType>
   <EnemyType1>
      <Weapon>Blaster</Weapon>
      <Armor>Adamantium</Armor>
      <Sprite>image.png</Sprite>
      <EngineAnimation>Animation.anim</EngineAnimation>
      <LocalWeaponPosition>(x,y,z)</LocalWeaponPosition>
   </EnemyType1>
</EnemyType>

I suppose you could get data on either runtime or populate some sort of data structure like array or hashtable and then draw data on runtime.

--- End quote ---

Hi,

 yes totally. I have done that many times. you'll have a manager for your ennemy sitting at the root object of your ennemy instance, then several fsm are going to use this data on command. read the post above for more infos, but basically, each ennemy will be able to build itself based on that xml. you can save data in hashtable for later usage, or use the memory reference, I prefer not having every fsm using xml and indeed have a manager injecting data on other meta fsm ( the fsm that only host data, not doing anything), or hashtables indeed. then you fire a global event to that ennemy including children "SET YOURSELF UP" or something and every fsm will get the data they want, either from their meta data fsm companion, or hashtable or xml directly.

Bye,

 Jean

Gustav:
Jean, thank you for this extensive and useful insight.

Very much appreciated. :)

Regards
Gustav

Navigation

[0] Message Index

[*] Previous page

Go to full version