Search Unity

  1. Get all the Unite Berlin 2018 news on the blog.
    Dismiss Notice
  2. Unity 2018.2 has arrived! Read about it here.
    Dismiss Notice
  3. We're looking for your feedback on the platforms you use and how you use them. Let us know!
    Dismiss Notice
  4. The Unity Pro & Visual Studio Professional Bundle gives you the tools you need to develop faster & collaborate more efficiently. Learn more.
    Dismiss Notice
  5. Improve your Unity skills with a certified instructor in a private, interactive classroom. Learn more.
    Dismiss Notice
  6. ARCore is out of developer preview! Read about it here.
    Dismiss Notice
  7. Magic Leap’s Lumin SDK Technical Preview for Unity lets you get started creating content for Magic Leap One™. Find more information on our blog!
    Dismiss Notice
  8. Want to see the most recent patch releases? Take a peek at the patch release page.
    Dismiss Notice

[Released] Bolt, The new generation of networking solution for unity!

Discussion in 'Assets and Asset Store' started by fholm, May 30, 2014.

  1. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798

    Bolt is a new generation of networking middleware for the Unity3D game engine. It revolutionizes development of multiplayer games in Unity by exposing several complex features behind a simple to use visual interface. Bolt allows you to replicate both transform and mecanim animations automatically, but on top of that it also allows you to define your own state properties which too will be replicated automatically for you across the network.

    Features

    Powerful Event System - Bolt has a built-in event system which automatically distributes the event to the correct receivers, highly configurable of course. Events can also be targeted at a specific game object or globally. Three delivery modes: Unreliable, Unreliable Synced and Reliable.

    Authoritative movement - Built-in support for input and player controller state synchronization allows you to easily implement custom authoritative movement that suits your game.

    Both dedicated and listen server - Bolt supports both the classic dedicated server and listen servers where the server is just another player.

    Prioritization and scoping - Bolt supports both scoping of entities (which entities should a player be aware of) and prioritization of scoped entities (of two entities A and B that are scoped, which one is the most important for a player).

    Hit-box recording - Bolt has built-in support for recording hit-boxes and rewinding and ray-casting against them, allowing you to implement complex techniques like lag compensation in first person shooters in just a few lines of code.

    Synchronized map loading - Bolt support loading maps from the server and have all the clients load the same map, and then provide custom hooks telling the server when the client is ready and vice verse.

    Full source code - Bolt comes with full source code, including all project files and other utilities for modifying and building Bolt binaries yourself.

    Supports all major unity platforms - Bolt runs on Windows, OSX, iOS and Android. Support for Linux and Windows Phone 8 coming soon.

    Does not require Unity Pro - Bolt does not require Unity Pro for any platform and will run without problems on the free iOS and Android version of Unity.

    Videos








    Purchase

    You can purchase directly from us: http://www.boltengine.com/Buy.aspx, or through the asset store: https://www.assetstore.unity3d.com/en/#!/content/18358 The current price during the beta is $65.


    Information

    Want more information on how bolt works and what you can do with it? Check out our lengthy tutorial over at http://www.boltengine.com/Tutorial.aspx or our API documentation http://www.boltengine.com/Api.aspx.
     
    Last edited: May 31, 2014
  2. mgear

    mgear

    Joined:
    Aug 3, 2010
    Posts:
    4,542
    hi,

    Would this be easy to get working with company firewalls/proxies..?
    (we have tried photon cloud, but cannot get it to connect..ports are open, but there is no clear info if/what else is needed to open/allow..)

    and is the beta price still available in asset store?

    (also, some kind of lobby demo scene or tutorial could be nice..to save some time)
     
  3. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    We are launching NAT punch through before the final version goes live, but sadly company firewalls and proxies are notoriously difficult to handle since they often block *everything*, it's a case-by-case basis if it works or not.

    The price will be the same in the asset store, yes. We are waiting for the asset store approval process.

    There is a long tutorial on the main site, www.boltengine.com which goes through everything there is to know about Bolt top to bottom.
     
  4. hopeful

    hopeful

    Joined:
    Nov 20, 2013
    Posts:
    4,303
    This looks pretty cool. I'm going to have to start digging into the docs. :)
     
  5. CLW-Game

    CLW-Game

    Joined:
    Jul 3, 2012
    Posts:
    19
    Hey looks promising.

    But is there any authorative movement Demo? As I found no documentation about it. Would prefer some information before buy :).
     
  6. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
  7. CLW-Game

    CLW-Game

    Joined:
    Jul 3, 2012
    Posts:
    19
    Okay thanks. Gonna order it later when at home.
     
  8. BFGames

    BFGames

    Joined:
    Oct 2, 2012
    Posts:
    1,543
    It is looking really really great fholm - as soon as i get some more time on my hand i will certainly buy it and play around with it.
     
  9. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Thanks, I hope you'll get some good use out of it :)
     
  10. Tiny-Tree

    Tiny-Tree

    Joined:
    Dec 26, 2012
    Posts:
    1,205
    this look really great, the inspector, the callback methods, the demo scene, you raised the bar high and left tnet and photon far away.

    will you provide a generic server executable?

    will you manage with built in functions pooling/spawn/despawn?

    do you have something equivalent to room and player custom properties from photon?

    any roadmap?
     
    Last edited: May 30, 2014
  11. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Thank you for the kind words :)

    Bolt is intended to run both the server and client inside of Unity, maybe in the future we could look at building an external executable.

    We intend to expose the internal create/destroy mechanism so that you can plug any pooling system into Bolt and use whatever you want. This is one of the first things on our "TODO" list, and it will be ready in a few weeks.

    Bolt doesn't have the concept of a 'room', so nothing there. For player properties you can just spawn a separate prefab entity in bolt without a model, etc. and turn of the transform and mecanim replication and just define your own properties there, which will be synced to all others connected.
     
  12. John-G

    John-G

    Joined:
    Mar 21, 2013
    Posts:
    1,097
  13. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    I see no reason that the streaming system would not work with Bolt, as long as all the network prefabs are in the main executable/non-streamed part, it should be fine.
     
  14. Tiny-Tree

    Tiny-Tree

    Joined:
    Dec 26, 2012
    Posts:
    1,205
    will you provide a way to define region ?
    like player A and B are in region (1: it has monster 1A) player C is in region (2) A and B and monster 1A receive mutual sync but not C
     
  15. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Currently you would have to define this yourself by overloading two methods called InScope and CalculatePriority on the BoltEntitySerializer object which lets you do completely custom scoping and priority.

    We are planning to have a pre-packaged solution for this before the final release (which is scheduled at some point in august), so you can define regions in your scene and calculate PVS data for it.
     
  16. ZJP

    ZJP

    Joined:
    Jan 22, 2010
    Posts:
    2,642
    Woo!!
    Bookmarked. Congrats for the release. :cool:
    BTW, you should keep the link to your GitHub in your signature.
     
  17. BFGames

    BFGames

    Joined:
    Oct 2, 2012
    Posts:
    1,543
    Any smart solution for load-balancing on the road map? :D
     
  18. dreamlarp

    dreamlarp

    Joined:
    Apr 22, 2011
    Posts:
    841
    "Synchronized map loading - Bolt support loading maps from the server and have all the clients load the same map, and then provide custom hooks telling the server when the client is ready and vice verse."

    What database solution does this use like mysql?
    What method do you us to save data?
    How will this support player created maps? Saving and loading them?
     
  19. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    I think I've been unclear with this text, bolt has a concept called "maps" in tandems with scenes, this simply lets you load a scene in a specific way which makes sure it is synchronized on the server and all clients. It has nothing to do with mysql, databases or player created content.
     
  20. GCat

    GCat

    Joined:
    Jul 31, 2012
    Posts:
    163
    Great to see your knowledge on networking is being put into a complete server,
    any info yet on the CCU it can hold ?
     
  21. BFGames

    BFGames

    Joined:
    Oct 2, 2012
    Posts:
    1,543
    Pretty sure that will depend on the requirements of the game (on the server side)
     
  22. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
  23. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    I thank you kindly for these words :)

    Like BFGames stated this depends heavily on your game, since Bolt allows a very high degree of configuration for different send rates, prioritization schemes and compression levels. The tests we have been running during our closed alpha tests have been with 2 to 128 players, with varying levels of game complexity.

    There is a sample in the bolt package called 'prioritization' which demonstrates how the priority algorithm can be used, it synchronizes 128 moving spheres to all connected players using about 20kb/s per player, that is 150 bytes/second per sphere (which has position + rotation synced), which is very low - but can be pressed even further down depending a bit on what level of accuracy you need on positions, the lowest we have gotten is about 90 bytes/sec per entity while still retaining a playable simulation.
     
  24. Glentved

    Glentved

    Joined:
    Oct 30, 2013
    Posts:
    10
    I am a noob at this, so this is proberley a very basic problem. But when I follow the instructions and get to the first Bolt compile point I get a lot of CS2001: Source file ´\Temp\bolt\xxx.cs´ could not be found.

    The files are there at the correct locations.
    What am I missing? I have tried to start a new project and reimporting bolt a few times without luck
     
  25. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    What platform are you on? And could you copy the complete error message (and all of them)?
     
  26. Glentved

    Glentved

    Joined:
    Oct 30, 2013
    Posts:
    10
    My platform is 4.3.3 free, I am updating it now to see if it helps
     
  27. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    4.3.3 should be fine, its what I developed Bolt on. I should have been more clear, I meant what OS you are using (what version of it), and also if you can give me the FULL path on disk to your project? It looks like something in the path-resolver isn't correct in Bolt.
     
  28. Glentved

    Glentved

    Joined:
    Oct 30, 2013
    Posts:
    10
    I run Windows 7 64bit

    this is my complete editor log
    Code (csharp):
    1. Built from '' repo; Version is '4.3.3f1 (c8ca9b6b9936) revision 96362'; Using compiler version '160040219'
    2. BatchMode: 0, IsHumanControllingUs: 1, StartBugReporterOnCrash: 1, shouldGiveDebuggerChanceToAttach: 0
    3. Initialize mono
    4. Mono path[0] = 'C:/Program Files (x86)/Unity/Editor/Data/Managed'
    5. Mono path[1] = 'C:/Program Files (x86)/Unity/Editor/Data/Mono/lib/mono/2.0'
    6. Mono path[2] = 'C:/Program Files (x86)/Unity/Editor/Data/UnityScript'
    7. Mono config path = 'C:/Program Files (x86)/Unity/Editor/Data/Mono/etc'
    8. Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,defer=y
    9. IsTimeToCheckForNewEditor: Update time 1401545967 current 1401543043
    10. C:/Users/Brian/Documents/New Unity Project 19
    11. Loading GUID <-> Path mappings ... 0.039665 seconds.
    12. Loading Asset Database ...  0.002614 seconds
    13. AssetDatabase consistency checks ...  0.035724 seconds
    14. Initialize engine version: 4.3.3f1 (c8ca9b6b9936)
    15. GfxDevice: creating device client; threaded=1
    16. Direct3D:
    17.     Version:  Direct3D 9.0c [aticfx32.dll 8.17.10.1172]
    18.     Renderer: AMD Radeon HD 6800 Series
    19.     Vendor:   ATI
    20.     VRAM:     1002 MB (via DXGI)
    21.     Caps:     Shader=30 DepthRT=1 NativeDepth=1 NativeShadow=1 DF16=1 INTZ=1 RAWZ=0 NULL=1 RESZ=1 SlowINTZ=1
    22. Registering custom dll's ...
    23. Register platform support module: C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/iPhonePlayer/EditorExtensions/UnityEditor.iOS.Extensions.dll
    24. Register platform support module: C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/WP8Support/EditorExtensions/UnityEditor.WP8.Extensions.dll
    25. Register platform support module: C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/MetroSupport/EditorExtensions/UnityEditor.Metro.Extensions.dll
    26. Register platform support module: C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/BB10Player/EditorExtensions/UnityEditor.BB10.Extensions.dll
    27. Register platform support module: C:/Program Files (x86)/Unity/Editor/Data/PlaybackEngines/AndroidPlayer/EditorExtensions/UnityEditor.Android.Extensions.dll
    28. Registered in 0.049957 seconds.
    29. Begin MonoManager ReloadAssembly
    30. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEngine.dll (this message is harmless)
    31. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.dll (this message is harmless)
    32. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\Unity.Locator.dll (this message is harmless)
    33. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\I18N.dll (this message is harmless)
    34. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\I18N.West.dll (this message is harmless)
    35. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\Unity.DataContract.dll (this message is harmless)
    36. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\System.Core.dll (this message is harmless)
    37. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\Unity.IvyParser.dll (this message is harmless)
    38. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\System.dll (this message is harmless)
    39. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\System.Xml.dll (this message is harmless)
    40. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\System.Configuration.dll (this message is harmless)
    41. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PackageManager\Unity\PackageManager\4.3.3\Unity.PackageManager.dll (this message is harmless)
    42. Initializing Unity.PackageManager (PackageManager) v4.3.3 for Unity v4.3.3
    43.  
    44. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Library\ScriptAssemblies\Assembly-CSharp.dll (this message is harmless)
    45. Loading C:\Users\Brian\Documents\New Unity Project 19\Library\ScriptAssemblies\Assembly-CSharp.dll into Unity Child Domain
    46. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Library\ScriptAssemblies\Assembly-CSharp-Editor.dll (this message is harmless)
    47. Loading C:\Users\Brian\Documents\New Unity Project 19\Library\ScriptAssemblies\Assembly-CSharp-Editor.dll into Unity Child Domain
    48. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\bolt.dll (this message is harmless)
    49. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\bolt.dll into Unity Child Domain
    50. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\bolt.user.dll (this message is harmless)
    51. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\bolt.user.dll into Unity Child Domain
    52. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\editor\bolt.editor.dll (this message is harmless)
    53. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\editor\bolt.editor.dll into Unity Child Domain
    54. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.dll (this message is harmless)
    55. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.dll into Unity Child Domain
    56. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.android.dll (this message is harmless)
    57. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.android.dll into Unity Child Domain
    58. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.ios.dll (this message is harmless)
    59. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.ios.dll into Unity Child Domain
    60. Non platform assembly: C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.managed.dll (this message is harmless)
    61. Loading C:\Users\Brian\Documents\New Unity Project 19\Assets\bolt\assemblies\udpkit\udpkit.platform.managed.dll into Unity Child Domain
    62. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.Graphs.dll (this message is harmless)
    63. Loading C:\Program Files (x86)\Unity\Editor\Data\Managed\UnityEditor.Graphs.dll into Unity Child Domain
    64. Non platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\iPhonePlayer\EditorExtensions\UnityEditor.iOS.Extensions.dll (this message is harmless)
    65. Loading C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\iPhonePlayer\EditorExtensions\UnityEditor.iOS.Extensions.dll into Unity Child Domain
    66. Non platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\WP8Support\EditorExtensions\UnityEditor.WP8.Extensions.dll (this message is harmless)
    67. Loading C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\WP8Support\EditorExtensions\UnityEditor.WP8.Extensions.dll into Unity Child Domain
    68. Non platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\MetroSupport\EditorExtensions\UnityEditor.Metro.Extensions.dll (this message is harmless)
    69. Loading C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\MetroSupport\EditorExtensions\UnityEditor.Metro.Extensions.dll into Unity Child Domain
    70. Non platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\BB10Player\EditorExtensions\UnityEditor.BB10.Extensions.dll (this message is harmless)
    71. Loading C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\BB10Player\EditorExtensions\UnityEditor.BB10.Extensions.dll into Unity Child Domain
    72. Non platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\EditorExtensions\UnityEditor.Android.Extensions.dll (this message is harmless)
    73. Loading C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\EditorExtensions\UnityEditor.Android.Extensions.dll into Unity Child Domain
    74. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\PackageManager\Unity\PackageManager\4.3.3\Unity.PackageManager.dll (this message is harmless)
    75. Loading C:\Program Files (x86)\Unity\Editor\Data\PackageManager\Unity\PackageManager\4.3.3\Unity.PackageManager.dll into Unity Child Domain
    76. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\Mono.Cecil.dll (this message is harmless)
    77. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\UnityScript.dll (this message is harmless)
    78. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\ICSharpCode.NRefactory.dll (this message is harmless)
    79. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\Boo.Lang.Compiler.dll (this message is harmless)
    80. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\Boo.Lang.dll (this message is harmless)
    81. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\Boo.Lang.Parser.dll (this message is harmless)
    82. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\UnityScript.Lang.dll (this message is harmless)
    83. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\Mono.Security.dll (this message is harmless)
    84. Mono: successfully reloaded assembly
    85. - Completed reload, in  0.576 seconds
    86. System memory in use before: 13.2 MB.
    87. Unloading 35 Unused Serialized files (Serialized files now loaded: 0 / Dirty serialized files: 0)
    88. System memory in use after: 11.0 MB.
    89.  
    90. Unloading 13 unused Assets to reduce memory usage. Loaded Objects now: 85.
    91. Total: 6.220902 ms (FindLiveObjects: 0.016761 ms CreateObjectMapping: 0.006984 ms MarkObjects: 0.564317 ms  DeleteObjects: 0.361498 ms)
    92.  
    93. Validating Project structure ... 0.001847 seconds.
    94. Requesting http://update.unity3d.com/4.3/ivy.xml
    95.  
    96. Refresh, detecting if any assets need to be imported or removed ... Downloading into C:\Users\Brian\AppData\Local\Temp\unity\3201a684-23e7-491e-8f70-13d83c7c3f4a\ivy.xml
    97.  
    98. 0.030329 seconds
    99.  
    100. ----- Total AssetImport time: 0.030105s, Asset Import: 0.000002s, CacheServerIntegrate: 0.000000s, CacheServer Download: 0.000000s [0 B, -1.#IND00 mb/s], CacheServer Hashing: 0.000000s [0 B, -1.#IND00 mb/s]
    101.  
    102. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0\System.Xml.Linq.dll (this message is harmless)
    103. Platform assembly: C:\Program Files (x86)\Unity\Editor\Data\Managed\nunit.framework.dll (this message is harmless)
    104. System memory in use before: 14.4 MB.
    105. Unloading 3 Unused Serialized files (Serialized files now loaded: 0 / Dirty serialized files: 0)
    106. System memory in use after: 12.5 MB.
    107.  
    108. Unloading 0 unused Assets to reduce memory usage. Loaded Objects now: 378.
    109. Total: 6.980496 ms (FindLiveObjects: 0.031847 ms CreateObjectMapping: 0.006984 ms MarkObjects: 1.541816 ms  DeleteObjects: 0.008101 ms)
    110.  
    111. <RI> Initializing input.
    112.  
    113. <RI> Input initialized.
    114.  
    115. Native extension for build target not found
    116. No scene found for map 'Assets/Tutorial/New BoltMap.asset'
    117. UnityEngine.Debug:Internal_Log(Int32, String, Object)
    118. UnityEngine.Debug:LogWarning(Object)
    119. BoltLog:<.cctor>b__2(String) (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt\BoltLog.cs:36)
    120. BoltLog:Warning(String) (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt\BoltLog.cs:127)
    121. BoltLog:Warning(String, Object) (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt\BoltLog.cs:136)
    122. BoltCompiler:CompileMaps(BoltCompilerOperation) (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt.editor\Compiler\BoltCompiler.CompileMaps.cs:22)
    123. BoltCompiler:Run(BoltCompilerOperation) (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt.editor\Compiler\BoltCompiler.cs:21)
    124. BoltUserAssemblyCompiler:Run() (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt.editor\BoltUserAssemblyCompiler.cs:213)
    125. BoltMenuItems:RunCompiler() (at c:\Users\Fredrik\Documents\GitHub\bolt\src\bolt\bolt.editor\BoltMenuItems.cs:60)
    126.  
    127. (Filename: c:/Users/Fredrik/Documents/GitHub/bolt/src/bolt/bolt/BoltLog.cs Line: 36)
    128.  
    129. warning CS2002: Source file `Unity' specified multiple times
    130.  
    131.  
    132. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    133.  
    134. warning CS2002: Source file `Project' specified multiple times
    135.  
    136.  
    137. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    138.  
    139. warning CS2002: Source file `Unity' specified multiple times
    140.  
    141.  
    142. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    143.  
    144. warning CS2002: Source file `Project' specified multiple times
    145.  
    146.  
    147. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    148.  
    149. warning CS2002: Source file `Unity' specified multiple times
    150.  
    151.  
    152. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    153.  
    154. warning CS2002: Source file `Project' specified multiple times
    155.  
    156.  
    157. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    158.  
    159. warning CS2002: Source file `Unity' specified multiple times
    160.  
    161.  
    162. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    163.  
    164. warning CS2002: Source file `Project' specified multiple times
    165.  
    166.  
    167. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    168.  
    169. warning CS2002: Source file `Unity' specified multiple times
    170.  
    171.  
    172. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    173.  
    174. warning CS2002: Source file `Project' specified multiple times
    175.  
    176.  
    177. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    178.  
    179. warning CS2002: Source file `Unity' specified multiple times
    180.  
    181.  
    182. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    183.  
    184. warning CS2002: Source file `Project' specified multiple times
    185.  
    186.  
    187. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    188.  
    189. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    190.  
    191.  
    192. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    193.  
    194. warning CS2002: Source file `Unity' specified multiple times
    195.  
    196.  
    197. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    198.  
    199. warning CS2002: Source file `Project' specified multiple times
    200.  
    201.  
    202. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    203.  
    204. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    205.  
    206.  
    207. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    208.  
    209. warning CS2002: Source file `Unity' specified multiple times
    210.  
    211.  
    212. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    213.  
    214. warning CS2002: Source file `Project' specified multiple times
    215.  
    216.  
    217. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    218.  
    219. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    220.  
    221.  
    222. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    223.  
    224. warning CS2002: Source file `Unity' specified multiple times
    225.  
    226.  
    227. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    228.  
    229. warning CS2002: Source file `Project' specified multiple times
    230.  
    231.  
    232. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    233.  
    234. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    235.  
    236.  
    237. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    238.  
    239. warning CS2002: Source file `Unity' specified multiple times
    240.  
    241.  
    242. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    243.  
    244. warning CS2002: Source file `Project' specified multiple times
    245.  
    246.  
    247. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    248.  
    249. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    250.  
    251.  
    252. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    253.  
    254. warning CS2002: Source file `Unity' specified multiple times
    255.  
    256.  
    257. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    258.  
    259. Compilation failed: 17 error(s), 33 warnings
    260.  
    261.  
    262. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    263.  
    264. warning CS2002: Source file `Project' specified multiple times
    265.  
    266.  
    267. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    268.  
    269. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    270.  
    271.  
    272. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    273.  
    274. warning CS2002: Source file `Unity' specified multiple times
    275.  
    276.  
    277. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    278.  
    279. warning CS2002: Source file `Project' specified multiple times
    280.  
    281.  
    282. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    283.  
    284. warning CS2002: Source file `C:\Users\Brian\Documents\New' specified multiple times
    285.  
    286.  
    287. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    288.  
    289. warning CS2002: Source file `Unity' specified multiple times
    290.  
    291.  
    292. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    293.  
    294. warning CS2002: Source file `Project' specified multiple times
    295.  
    296.  
    297. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    298.  
    299. error CS2001: Source file `Unity' could not be found
    300.  
    301.  
    302. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    303.  
    304. error CS2001: Source file `Project' could not be found
    305.  
    306.  
    307. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    308.  
    309. error CS2001: Source file `19\Assets\bolt\assemblies\bolt.user.dll' could not be found
    310.  
    311.  
    312. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    313.  
    314. error CS2001: Source file `19\Assets\bolt\assemblies\bolt.dll;C:\Users\Brian\Documents\New' could not be found
    315.  
    316.  
    317. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    318.  
    319. error CS2001: Source file `19\Assets\bolt\assemblies\udpkit\udpkit.dll;C:\Users\Brian\Documents\New' could not be found
    320.  
    321.  
    322. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    323.  
    324. error CS2001: Source file `19\Assets\bolt\assemblies\udpkit\udpkit.platform.android.dll;C:\Users\Brian\Documents\New' could not be found
    325.  
    326.  
    327. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    328.  
    329. error CS2001: Source file `19\Assets\bolt\assemblies\udpkit\udpkit.platform.ios.dll;C:\Users\Brian\Documents\New' could not be found
    330.  
    331.  
    332. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    333.  
    334. error CS2001: Source file `19\Assets\bolt\assemblies\udpkit\udpkit.platform.managed.dll;' could not be found
    335.  
    336.  
    337. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    338.  
    339. error CS2001: Source file `C:\Users\Brian\Documents\New' could not be found
    340.  
    341.  
    342. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    343.  
    344. error CS2001: Source file `19\Temp\bolt\events.cs' could not be found
    345.  
    346.  
    347. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    348.  
    349. error CS2001: Source file `19\Temp\bolt\network.cs' could not be found
    350.  
    351.  
    352. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    353.  
    354. error CS2001: Source file `19\Temp\bolt\states.cs' could not be found
    355.  
    356.  
    357. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    358.  
    359. error CS2001: Source file `19\Temp\bolt\prefabs.cs' could not be found
    360.  
    361.  
    362. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    363.  
    364. error CS2001: Source file `19\Temp\bolt\maps.cs' could not be found
    365.  
    366.  
    367. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    368.  
    369. error CS2001: Source file `19\Temp\bolt\mecanim.cs' could not be found
    370.  
    371.  
    372. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    373.  
    374. error CS2001: Source file `19\Temp\bolt\commands.cs' could not be found
    375.  
    376.  
    377. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    378.  
    379. error CS2001: Source file `19\Temp\bolt\assemblyinfo.cs' could not be found
    380.  
    381.  
    382. (Filename: C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/UnityEngineDebug.cpp Line: 53)
    383.  
    384.  
     
  29. Glentved

    Glentved

    Joined:
    Oct 30, 2013
    Posts:
    10
    Hi fholm
    I solved it
    The project name must not contain spaces like in my project name "New Unity Project 19"
     
  30. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Ah, but it's definately a bug in bolt and I will make sure this gets fixed, thank you!
     
  31. Dabeh

    Dabeh

    Joined:
    Oct 26, 2011
    Posts:
    1,598
    I will be definitely picking up this and evaluating it for my next project, pretty much any time I've see you talk about networking you're well informed.

    Any plans for standalone in the near future?
     
    Last edited: May 31, 2014
  32. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Thanks for your kind words :)

    There's been a few requests for this, and my feelings on it are mixed at best. First of all what sets bolt apart right now is that it can do so much automatically for you (transform, animation, authoritative movement, etc.) and the reason it can do this is because of everything on both server and client existing inside Unity. Secondly, there are already so many good unity stand-alone server solutions available, I don't see the need to throw Bolt into the ring.

    However, we are planning to make a "forward" server that you can host yourself, allowing you to setup the same architecture as Photon Cloud where you have a "dumb" server which forwards data between players, and maybe perform some more things like authentication, etc.
     
  33. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Hi fholm,
    Thanks so much for releasing this. I've purchased it and have gone through the tutorial and am ready to start integrating it into a small project.

    I have two things I want to ask you.

    Firstly, I have a few bugs I've found while going through the tutorial, is there a good way to let you know about them (you might already know about these bugs, but just in case).
    Should I post them in the feedback part of the boltengine.com website or here?

    Secondly, in the project I am making players are children of ships which are moving in the world (so the "world" is non-static).

    I have solved this in my tests with basic Unity3d networking by syncronising the local position and rotation of players rather than their global position/rotation, and the world position/rotation of the ships they are parented to.

    Is there any way I can request a checkbox be made for Transform state sync to use the local properties and not the world properties on a State definition?
    Alternatively if I do the state replication myself, is there any code I can access to do interpolation of state info using the local position/rotation of entities?

    Thanks again for this awesome library!
    Alister.
     
  34. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    THInteractive: The best way to submit bugs is to do it on http://feedback.boltengine.com/, through the "Contact Support" link. Or you can click on the little "Speech-Bubble" with a question mark in it on the www.boltengine.com site directly.

    About the local position thing, I will be releasing a new version of bolt today which fixes a few bugs here and there, what you are asking for (local vs. world position) is a very quick fix, so I will make sure to include that in the update later today so you don't have to do any codeing yourself.

    But, on the topic of synchronizing a bit more complex data, you can create a custom class which inherits from "IBoltStateProperty", and implement all of the methods on it. You can then set a property in the state editor to "Custom", and then in the Attached(IMyState state) callback on the Serializer (which is the first Attached callback which executes) you assign your property a new instance of your custom class. Take note that you need to call PropertyChanged method on IMyState to notify the state that your custom/complex property is "dirty" and needs syncing. This is exactly how the existing transform and mecanim replication properties work.

    Anyhow, I will make sure that there will be a World/Local switch on the transform property available to you within a few hours.
     
  35. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    TH Interactive, I assume something like this is what you meant:

    $inspector_preview.png

    There is a new "Space" option, which lets you switch between World and Local
     
  36. ZJP

    ZJP

    Joined:
    Jan 22, 2010
    Posts:
    2,642
    Like Rewinder?! :confused:
     
  37. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Amazing! You are a genius!
    Thanks so much Fholm.
    Yeah I was looking through the source code and sweating thinking.. how am I going to add this without ruining everything?!
    Thanks again and I'll be sure to retest the new version and see if the bugs I found are still there before reporting them.
     
  38. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    Yes, like Rewinder, but Rewinder is a generic implementation and the one in Bolt is specific to Bolt and works better with its internal structures. Also rewinder is getting removed as I feel I only have time to give support on one major asset (Bolt) and want to focus on it.
     
  39. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Hi Fholm,
    Sorry to bug you again, but I was looking through the code for Bolt and I would really like to extend BoltStateTransformInterpolatedSnapshots for my player's transform but make some additions to it (particularly in AfterStep, BeforeStep, Pack and Read).
    Is it possible to make them virtual for extending in the next version you are uploading, or would that have performance implications or other reasons why that wouldn't be a good idea/not possible?
     
  40. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    I could make them virtual, and it wouldn't really matter as far as I can tell. You would have to extend it, and then set it yourself to an ICustomProperty field, and disable the default transform property. I made everything in both of the DR and InterpolatedSnapshots classes extendable by marking all methods as virtual and exposing all internal data as "protected" instead of private/internal.

    I could also expose public event callbacks on the classes which would be something "OnAfterStep", "OnBeforeStep", "OnPack", "OnRead", etc. which way would you prefer?
     
  41. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Hi Fholm,
    Yes I noticed that some parts were protected instead of being private, so that's why I asked :)
    Both methods are great, and either will work for me, so please go with whatever you think is best and fits best with the library.

    All I need is to be able to pack/read my own data before/after the transform does, and control the states internally for when the player teleports or changes ship (reparenting - for that I plan on clearing out previous lerping states, so that the player teleports cleanly to the new location).
     
  42. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    I am leaning towards the inheritance approach, as it will give you full customization and the ability to override *any* part of it, there will be some thing that the events wont let you do for example.

    I actually thought about this also right around now, that the world/local thing isn't fine-grained enough, and I would like functionality which lets you do SetParent(BoltEntity entity); and that the entity always is synced in it's parents coordinate system.

    I will expose the IS/DR classes for you right now, and then I'll try to get the SetParent thing ASAP (maybe today also, but probably tomorrow).
     
  43. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Thanks Fholm, amazing as always!
    Can't wait to get the next update and put it in what I'm building!
     
  44. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    By the way, does this mean I can call SetParent() on the controller of the entity and it will cleanly set parent and new localposition through the network, to the proxies, or will I still have to hook it up with events to cleanly parent through the network?
     
  45. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    That's the idea yes, that you'd call SetParent() on either the controller or the owner and that it will cleanly propagate through the network.

    I also want to break the functionality into two different functions, first SetParent(BoltEntity parent) which we already talked about, and that sets/clears the parent of the object. And then to do the clean Teleport I want to simply to Teleport(Vector3 position). What this allows is that you can then use this for things like elevators and other things which shouldn't "teleport" you into them but simply re-parent you so that you move with them (but retain the same position in the world), and it also allows you to do what you want to do by "switching ships" and then teleport to a specific position on that ship.
     
  46. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Awesome, just what I need! Thanks!
     
  47. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    1,798
    It looks like I should be able to get both SetParent and Teleport in for tonights update, I'm not sure what timezone you are in (I'm in CET+1, Sweden to be precise) and I expect the update to land around 6-7 pm my time. (in about 6-7 hours, that is).
     
  48. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    I'm in Australia, so GMT +10, so it should be ready for me for work tomorrow morning!
    Thanks Fholm :)
     
  49. MattMcg.GameDev

    MattMcg.GameDev

    Joined:
    Jan 8, 2014
    Posts:
    8
    I purchased Bolt a couple of days ago and I must say I'm very impressed, bit of a bumpy start but those issues have already been fixed in 0.2.0.1 and 0.2.0.2.

    I tried the built in Unity networking and disliked it, I tried Photon and disliked it too due to having to jump through their hoops. I wanted a simple way to connect a server and a client directly, so I attempted to use UdpKit but never got very far as low level networking is not my strong point. Luckily Bolt came out and I purchased it straight away as it was a great price for what it promises.

    I've followed through the tutorial and it all works great, there's been a few issues/bugs but Fholm helped directly to identify and fix them that there are now no issues. I have a working Dedicated Server <-> Clients environment and it works flawlessy, I've tested it over the internet with friends and I can't find any faults.

    The automatic handling of serializing and syncing things like transform and mecanim are amazing, plus the fact I can configure it to synch whatever I want makes this a very powerful and high-level friendly approach to networking. My favourite part though is probably the custom Event system, it is very easy to set up an event to be sent and received wherever you like, on server and/or clients. There's really been a lot of thought in to the kind of things people would want from a networking solution.

    As someone without the time to deal with low-level networking, Bolt is a must buy. You still get plenty of control in the code by being able to extend and override various classes functions. The compilation of your Bolt Assets into accessible classes/objects in the code is very developer friendly and intuitive. I'm very eager to continue my project to see what I can do with it :)
     
    Last edited: Jun 1, 2014
  50. John-G

    John-G

    Joined:
    Mar 21, 2013
    Posts:
    1,097
    @mattmcg thanks for that review, you have sold it for me. Will definitely be picking this up.