Search Unity

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

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

  1. radimoto

    radimoto

    Joined:
    Aug 23, 2012
    Posts:
    257
    Hi fholm. If a player is hosting a multiplayer game as the server (for example in a racing game), what happens if they disconnect or get cut off the network? Is there any way of another client to take over as the server to ensure the game continues?
     
  2. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    What you are talking about is called Host Migration, currently Bolt does not support this (and neither does any other networking solution for Unity atm, but that's besides the point). However, we are planning to build it at some time after we are out of our beta period (which is around august), I think realistically we could look at having host migration done end of this year.
     
  3. radimoto

    radimoto

    Joined:
    Aug 23, 2012
    Posts:
    257
    Reading through the previous threads I see that there is no server executable (yet). So basically the entire multiplayer game will depend on the player that is hosting the game. This seems OK for small games, but what happens once you get into larger games? :confused:
     
  4. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    You can run an instance of Unity in headless mode as a dedicated server, and this is how most (all?) games do it except for hugely large MMO-type of deals, and Bolt really isn't targeted at "MMO" games with thousands of players.

    I usually quote that bolt is built for about 2-128 players.
     
  5. MattMcg-GameDev

    MattMcg-GameDev

    Joined:
    Jan 8, 2014
    Posts:
    8
    Radimoto: You can just code the Unity project to launch as a dedicated server. I'm using bolt and the server is not a player.
     
  6. radimoto

    radimoto

    Joined:
    Aug 23, 2012
    Posts:
    257
    Sounds OK although I would need to wait until Linux support is ready.

    Will Bolt support Web Player?
     
  7. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Yes, it already supports webplayer - but like all other networking solutions you can not host a server in the webplayer.
     
  8. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Beta 0.2.0.2 is out!

    Fixed: TutorialPlayerMotor.cs script now correctly applies gravity to the character.
    Fixed: Compiler can now handle paths with space characters in them.
    Fixed: Disabling the built-in transform or mecanim properties in the state editor will not disable the rest of the properties below them anymore.
    Fixed: The BoltNetwork class now correctly exposes the Destroy(GameObject go) and Destroy(BoltEntity entity) methods.
    Fixed: Queueing an unreliable event that was raised on the server to all connected clients should now work properly.

    Changed: Renamed several labels of settings in the state editor. 'Mode' on each property is now called 'Sync When'. The 'Once' option on 'Sync When' is now called 'Once On Init'. 'Notify' is now called 'Changed Callback', 'Smooth Time' on mecanim float properties are now called 'Damping', 'Smooth' in Float, Vector2, Vector3, Vector4 and Quaternion properties is now called 'Interpolate'.
    Changed: Removed the ability to accidentaly create new properties of the transform, mecanim and trigger types. This would break the state asset making it unusable.
    Changed: All methods in the BoltStateTransformDeadReckoning and BoltStateTransformInterpolatedSnapshots are now public/protected and virtual to allow for easier extension of the classes.
    Changed: All internal fields and properties in the BoltStateTransformDeadReckoning, BoltStateTransformInterpolatedSnapshots and BoltStateTransform classes are now protected or public, to allow for easier extending of these classes.

    Feature: Added the ability to teleport entities to a new location, which gives a clean transition from the old to the new position without any interpolation. Two new methods called Teleport(Vector3 pos, Quaternion rot) and Teleport(Vector3 pos) are available on the BoltEntity class.

    http://www.boltengine.com/Releases.aspx#Beta_0_2_0_2
     
  9. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    TH Interactive: The "SetParent" is coming tomorrow, 0.2.0.3 - sorry I could not get it ready today.
     
  10. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    No worries Fholm, I'll have plenty to do today elsewhere so no stress :)
    Looking forward to trying it out when it's ready.
     
  11. John-G

    John-G

    Joined:
    Mar 21, 2013
    Posts:
    1,122
    Hi fholm, any chance you could make the Tutorial and API Documentation into PDF's for download on the site.
    Purchased the Asset and going thru the Tutorial on the site, but switching back and forth between Unity and the website is slow.
    Can't beat having a nice printed user guide to follow :) Cheers so far very easy to follow, fantastic networking solution.
     
  12. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Hey FHolm,
    I want to send a global Event with an arbitrary number of strings to a newly connecting client.

    So I thought creating an Event with a "Custom" data type would be a good fit - that way I can pack the number of strings I need.

    I could not find any mention of how to use custom data types with events in the documentation, and when I select a custom type in the inspector for an Event I'm making and hit compile I get a couple of errors - which make sense - there is nowhere I can tell that it knows what data type I need and the compiler doesn't understand what the data type 'Custom' is.

    I had a fumble around with the source and couldn't find a solution so my question is, are custom data types implemented for global Events and if so, how do I create them properly?

    Here is my events.cs file from the temp folder and I've attached a screenshot of the errors I have. Thanks heaps!



    Code (csharp):
    1. using System;
    2. using System.Collections.Generic;
    3. using UdpKit;
    4.  
    5. using Int = System.Int32;
    6. using Bool = System.Boolean;
    7. using Long = System.Int64;
    8. using UShort = System.UInt16;
    9. using Float = System.Single;
    10. using Vector2 = UnityEngine.Vector2;
    11. using Vector3 = UnityEngine.Vector3;
    12. using Vector4 = UnityEngine.Vector4;
    13. using Quaternion = UnityEngine.Quaternion;
    14. using Entity = BoltEntity;
    15. using Custom = IBoltStateProperty;
    16. using Mecanim = IBoltStateProperty;
    17. using Transform = IBoltStateProperty;
    18.  
    19. public abstract class BoltCallbacks : BoltCallbacksBase , IChatMsgReceiver, IJoinLobbyReceiver, INewPlayerConnectedReceiver {
    20.   public virtual void OnEvent(IChatMsg evnt, BoltConnection cn) { }
    21.   public virtual void OnEvent(IJoinLobby evnt, BoltConnection cn) { }
    22.   public virtual void OnEvent(INewPlayerConnected evnt, BoltConnection cn) { }
    23. }
    24. public abstract class BoltEntityBehaviour : BoltEntityBehaviourBase {
    25. }
    26. public abstract class BoltEntityBehaviour<TSerializer> : BoltEntityBehaviour where TSerializer : BoltEntitySerializer {
    27.   public new TSerializer boltSerializer { get { return (TSerializer) base.boltSerializer; } }
    28. }
    29. public abstract class BoltEntityBehaviour<TSerializer, TState> : BoltEntityBehaviour<TSerializer> where TSerializer : BoltEntitySerializer<TState> where TState : class, IBoltState {
    30.   public TState boltState { get { return boltSerializer.boltState; } }
    31. }
    32. public interface IChatMsg : IBoltEvent {
    33.   String text { get; set; }
    34.   Bool teamOnly { get; set; }
    35. }
    36. public interface IChatMsgReceiver {
    37.   void OnEvent (IChatMsg evnt, BoltConnection connection);
    38. }
    39. class ChatMsg : BoltEvent, IChatMsg {
    40.   String __text__;
    41.   public String text { get { return __text__; } set { __text__  = value; } }
    42.   Bool __teamOnly__;
    43.   public Bool teamOnly { get { return __teamOnly__; } set { __teamOnly__  = value; } }
    44.   internal ChatMsg () : base(16, false, BoltEventDeliveryMode.Reliable) { }
    45.   public override bool FilterInvoke () {
    46.     if (ReferenceEquals(_connection, null)) {
    47.       return true;
    48.     }
    49.     else {
    50.        if (BoltCore.isServer) { return true; }
    51.        if (BoltCore.isClient) { return true; }
    52.     }
    53.     return false;
    54.   }
    55.   public override bool FilterSend (BoltConnection cn) {
    56.     if (ReferenceEquals(_connection, cn)) return false;
    57.     if (cn.udpConnection.IsServer) { return true; }
    58.     if (cn.udpConnection.IsClient) { return true; }
    59.     return false;
    60.   }
    61.   public override void Pack (UdpStream stream, BoltConnection cn) {
    62.     stream.WriteString(__text__, System.Text.Encoding.UTF8, 256);
    63.     stream.WriteBool(__teamOnly__);
    64.   }
    65.   public override void Read (UdpStream stream, BoltConnection cn) {
    66.     __text__ = stream.ReadString(System.Text.Encoding.UTF8);
    67.     __teamOnly__ = stream.ReadBool();
    68.   }
    69.   public override void Free () {
    70.     __text__ = default(String);
    71.     __teamOnly__ = default(Bool);
    72.   }
    73. }
    74. class ChatMsgHandler : IBoltEventFactory {
    75.   public Type eventType { get { return typeof(IChatMsg); } }
    76.   public ushort eventId { get { return 16; } }
    77.   public object Create () {
    78.     return new ChatMsg();
    79.   }
    80.   public void Dispatch (object @event, object target) {
    81.     ChatMsg evnt = (ChatMsg)@event;
    82.     IChatMsgReceiver receiver = target as IChatMsgReceiver;
    83.     if (receiver != null) {
    84.       receiver.OnEvent(evnt, evnt._connection);
    85.     }
    86.   }
    87. }
    88. public interface IJoinLobby : IBoltEvent {
    89.   Custom joinInfo { get; set; }
    90. }
    91. public interface IJoinLobbyReceiver {
    92.   void OnEvent (IJoinLobby evnt, BoltConnection connection);
    93. }
    94. class JoinLobby : BoltEvent, IJoinLobby {
    95.   Custom __joinInfo__;
    96.   public Custom joinInfo { get { return __joinInfo__; } set { __joinInfo__  = value; } }
    97.   internal JoinLobby () : base(17, false, BoltEventDeliveryMode.Reliable) { }
    98.   public override bool FilterInvoke () {
    99.     if (ReferenceEquals(_connection, null)) {
    100.     }
    101.     else {
    102.        if (BoltCore.isClient) { return true; }
    103.     }
    104.     return false;
    105.   }
    106.   public override bool FilterSend (BoltConnection cn) {
    107.     if (ReferenceEquals(_connection, cn)) return false;
    108.     if (cn.udpConnection.IsServer) { return true; }
    109.     return false;
    110.   }
    111.   public override void Pack (UdpStream stream, BoltConnection cn) {
    112.     __joinInfo__.Pack(info, stream);
    113.   }
    114.   public override void Read (UdpStream stream, BoltConnection cn) {
    115.     __joinInfo__.Read(info, stream);
    116.   }
    117.   public override void Free () {
    118.     __joinInfo__ = default(Custom);
    119.   }
    120. }
    121. class JoinLobbyHandler : IBoltEventFactory {
    122.   public Type eventType { get { return typeof(IJoinLobby); } }
    123.   public ushort eventId { get { return 17; } }
    124.   public object Create () {
    125.     return new JoinLobby();
    126.   }
    127.   public void Dispatch (object @event, object target) {
    128.     JoinLobby evnt = (JoinLobby)@event;
    129.     IJoinLobbyReceiver receiver = target as IJoinLobbyReceiver;
    130.     if (receiver != null) {
    131.       receiver.OnEvent(evnt, evnt._connection);
    132.     }
    133.   }
    134. }
    135. public interface INewPlayerConnected : IBoltEvent {
    136.   String name { get; set; }
    137. }
    138. public interface INewPlayerConnectedReceiver {
    139.   void OnEvent (INewPlayerConnected evnt, BoltConnection connection);
    140. }
    141. class NewPlayerConnected : BoltEvent, INewPlayerConnected {
    142.   String __name__;
    143.   public String name { get { return __name__; } set { __name__  = value; } }
    144.   internal NewPlayerConnected () : base(18, false, BoltEventDeliveryMode.Reliable) { }
    145.   public override bool FilterInvoke () {
    146.     if (ReferenceEquals(_connection, null)) {
    147.     }
    148.     else {
    149.        if (BoltCore.isServer) { return true; }
    150.     }
    151.     return false;
    152.   }
    153.   public override bool FilterSend (BoltConnection cn) {
    154.     if (ReferenceEquals(_connection, cn)) return false;
    155.     if (cn.udpConnection.IsClient) { return true; }
    156.     return false;
    157.   }
    158.   public override void Pack (UdpStream stream, BoltConnection cn) {
    159.     stream.WriteString(__name__, System.Text.Encoding.UTF8, 50);
    160.   }
    161.   public override void Read (UdpStream stream, BoltConnection cn) {
    162.     __name__ = stream.ReadString(System.Text.Encoding.UTF8);
    163.   }
    164.   public override void Free () {
    165.     __name__ = default(String);
    166.   }
    167. }
    168. class NewPlayerConnectedHandler : IBoltEventFactory {
    169.   public Type eventType { get { return typeof(INewPlayerConnected); } }
    170.   public ushort eventId { get { return 18; } }
    171.   public object Create () {
    172.     return new NewPlayerConnected();
    173.   }
    174.   public void Dispatch (object @event, object target) {
    175.     NewPlayerConnected evnt = (NewPlayerConnected)@event;
    176.     INewPlayerConnectedReceiver receiver = target as INewPlayerConnectedReceiver;
    177.     if (receiver != null) {
    178.       receiver.OnEvent(evnt, evnt._connection);
    179.     }
    180.   }
    181. }
     

    Attached Files:

    Last edited: Jun 2, 2014
  13. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Hey THInteractive, sorry I didn't see this question before the forums shutdown for the day. Yes, this is correct - custom properties are not implemented for events at the moment. If you need to send custom data you can extend event interfaces and classes by hand, and register a handler for it also in code.

    I will post an example on how to do this.

    The release with SetParent (has been renamed to SetOrigin, but it does the same thing) is coming tonight (2-3 hours from now), I got it working splendidly.
     
    Last edited: Jun 2, 2014
  14. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    THInteractive: I should also say that being able to select "Custom" on anything but states, is a bug - which I have fixed in the comming 0.2.0.3 update.
     
  15. TS42

    TS42

    Joined:
    Nov 7, 2013
    Posts:
    13
    Bolt looks very promising!

    I purchased it yesterday in the AssetStore. Is there a way to link the unity-account (invoice number + name) with an account on your website, so I could get the current build? If there is no way, I have to life with the weekly(?) AssetStore update schedule. Which is fine too, but these updates in the early stage are nice and "game breaking" ;).

    I've just updated Unity and started a new small tech demo project... can't wait to integrate Bolt.
     
  16. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    TS42: Send an email to support@boltengine.com and attach the asset store receipt PDF, we will send you a download link back to you ASAP.
     
    TS42 likes this.
  17. TVE

    TVE

    Joined:
    Oct 15, 2012
    Posts:
    379
    Bolt looks amazing! I am actually very interested in getting this. Does this feature lobby builds with separate room selections, so you can host multiple matches? I noticed you said right now it features 2-128 people, how would it do with say, 10 rooms of 10 people, does having the separate rooms optimize it at all or does it stress the server the same amount?
     
  18. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Note that when I say that Bolt is built for 2-128 players that means *per* running instance of Bolt, not "in total amount of players that can play over multiple instances", you can have as many players as you have machines.

    Right now Bolt does not have any type of room-feature, the way this would be solved with Bolt is to have an arbiter software which spins up/down instance of bolt (one for each room) as required.
     
  19. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    The 0.2.0.3 release is ready, here is the change-log, the release will be available tonight 8pm CET.

    Beta 0.2.0.3
    Fixed: Bolt will now properly save the current scene before starting through the Map Launcher.
    Fixed: Default configuration doesn't have 150ms simulated ping and 2% simulated packet loss anymore.
    Fixed: Resolved a bug in the transform snapshot interpolator that would cause entities to stop updating their position when using a very low de-jitter delay and a specific timing occured.
    Fixed: Resolved a bug where you would sometimes execute the same command twice when you were controlling the an entity you were also the owner of.

    Changed: Damping parameter on float properties on mecanim assets now use the built in damping functionality of mecanim instead of it's own logic. This makes sure that animations replicated through Bolt produce the exact same result as animations played locally with mecanim.
    Changed: Renamed the 'Type' setting in the event editor to 'Target', so it's not confused with the 'Type' setting for properties.
    Changed: Corrected the name of the file BoltGUII.cs to BoltGUI.cs
    Changed: Non-state assets will not let you select the "Custom" property type anymore, as they are only supported in 'State' assets.
    Changed: BoltRingBuffer<T> now implements IEnumerable<T>.

    Feature: The BoltNetwork class now exposes a 'serverTime' propery which on the server returns the local frame count translated to seconds. On clients it returns the estimated server frame translated to seconds.
    Feature: The BoltEntity class now exposes a method called SetOrigin(Transform origin), this method allows you to set the origin transform of an entity. Bolt requires the transform to be mapped to an integer value for serialization over the network, by default Bolt allows you to add a BoltOrigin component to your transform and then assign it a unique id. If you don't want to use the BoltOrigin component and prefer to do the tansform to id mapping yourself you can set the two callbacks available on BoltNetwork called resolveTransform and resolveTransformId. See the new sample called 'TeleportAndElevators" found in bolt/samples.
     
    Last edited: Jun 3, 2014
  20. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    So awesome.
    Thanks Fholm!
     
  21. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    TH Interactive: As I'm sure you realized, SetOrigin is the SetParent thing we talked about. I made it a bit more generic so the parent doesn't have to be another entity, it can be any type of transform in the world. The caveat is that it has to be possible for Bolt to look it up by id.

    The default functionality by adding a "BoltOrigin" component to the transforms you need and then setting the ID works well for anything which has "levels" or "maps". If you are doing some open world thing you might need to do the mapping yourself by replacing the two callbacks on BoltNetwork.
     
  22. Skyfly

    Skyfly

    Joined:
    Jan 25, 2014
    Posts:
    110
    Is Playmaker support planned?
     
  23. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    It is, the three major features planned to come before "final" release is done are: LAN Discovery, NAT Punch-through and PlayMaker support. Linux and WindowsPhone8 support is also on this list, but they are in final testing now and requires no further dev almost.

    I think that PlayMaker support will be the first one to come, hoping we can get it out the door in ~2 weeks.
     
  24. TH-Interactive

    TH-Interactive

    Joined:
    May 26, 2013
    Posts:
    34
    Fholm: Thanks for the explanation - it makes more sense now. I'll be sure to check out the example too.
     
  25. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    I decided to make it a bit more generic and have it deal with "transforms only", because if say you wanted an elevator which goes up/down - you shouldn't have to make all of your elevators separate entities.
     
  26. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
    Looks superb! Very well polished website, documentation and from what I can tell the editor integration looks great as well! Any idea on what the price will change to out of beta? And when the beta will end? I am very interested in this, but would like to budget when I can purchase it.
     
  27. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    The current plan is for the beta to over june + july, giving us enough time to finish the main features we're lacking and polish the little details.

    The price range we're looking at when beta is over hovers somewhere around $100
     
  28. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
    Brilliant thanks for the quick reply. I should be able to get this next month then :)

    Another question for Mobile use, does this support 3G connections as they usually have issues with UDP being sent over them
     
  29. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    It supports 3G connection in the same manner as all other networking libraries: it depends on your specific carrier. We're working on developing a "forwarding" server which works the way Photon Cloud does and just lets you forward messages between two players playing on their phones. We're looking at launching the forward-server during mid-to-end august atm.
     
  30. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
    Ok thanks. From testing networking before its been pretty unreliable with sending UDP packets over 3G as carriers mostly block it, and using this on mobile would be my main focus. Still, I think this is looking to be a purchase :)
     
  31. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Yeah, there is little we can do about that. We're also looking at implementing a TCP back-end to allow us better 3G-QoS.

    ps, check your PMs here on the forum.
     
  32. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
    Ive just replied :)

    It would be great if you could come up with a more reliable solution, would be a huge plus in the mobile networking department!
     
  33. fvde

    fvde

    Joined:
    May 15, 2014
    Posts:
    19
    Just completed the purchase.

    I wanted to compliment you for your excellent Customer Feedback. To be honest I made the purchase decision 40% based on your history in this community, 40% because of your answers (both here and on reddit) to questions and about 20% based on how the actual product looks like. I'm sure it's amazing, but that's always hard to judge from the outside. I'll give it a spin in the days to come.

    I'll be implementing a listen server, like you suggested, a couple of days ago. So get ready for the feedback! ;-)
     
  34. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    fvde likes this.
  35. ivendar

    ivendar

    Joined:
    Feb 18, 2010
    Posts:
    242
    May have overlooked it but I really can't find the answer to my question.

    Does this allow for direct ip connection too or would I need to have a server set up to allow finding existing games ?

    Thank you
     
  36. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Yes it allows for direct IP connection :)
     
  37. TVE

    TVE

    Joined:
    Oct 15, 2012
    Posts:
    379
    Thanks for answering my questions so fast! I'm afraid I have a few more before I buy it. Is there any security built into bolt, or will it have to be custom made. If there isn't do you plan to add that? I have noticed that network solutions like photon do not while ulink does or at least make it easier to do so.
     
  38. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    TVE: It depends a bit on what you mean by security, Bolt does a few things to make a few obvious thing harder. For example the "network id" of each entity replicated over the network is unique to each connection, so "id:1" is not the same entity on two different clients, etc.

    What exactly in terms of security features are you looking for?
     
  39. TVE

    TVE

    Joined:
    Oct 15, 2012
    Posts:
    379
    I know you said you can have a dummy server that's not a player which would in most ways be secure on its own, but if you allow players to act as server or host, that person has direct access to all server code, correct? I know in photon if that happens, hacking the variables is not very hard. If created properly, the clients cant do anything but the server can, which kinda worries me about having a player as the server.
     
  40. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    TVE: Well if you make a player the server they naturally have access to everything, there's no two ways about that, in any networking solution. It's the same as if you make one client the "masterclient" in Photon.

    You can protect your game a bit with things like Anti-Cheat Toolkit, etc. but in general anything that runs on someone elses computer they have full access to, very little we can do about that sadly.
     
  41. TVE

    TVE

    Joined:
    Oct 15, 2012
    Posts:
    379
    Alright, I was afraid that would be the case, thank you for taking time to answer all my questions! :]
     
  42. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    No problem at all, and yes that's the case for pretty much every networking solution in existence, sorry :)
     
  43. Yukichu

    Yukichu

    Joined:
    Apr 2, 2013
    Posts:
    420
    Well, this looks pretty promising and awesome.

    - Will there be a method to transfer data and/or between Unity Scenes (bolt server instances)? Going to a new scene will destroy all server data for that object. I mean, I could write it all to a file or something, then read it on the next scene, but...

    - On a similar note, will there be a method to transfer a handover of a client between Unity Scenes (bolt server instances)? Expansion of previous question, but I presume a client leaving the bolt server will destroy the server instance altogether.

    - Approval callback for connecting to a server, so you can deny a connection before it's made?

    Overall, this is very nice. I love that you've included all the perks for handling state and collisions and whatnot. Basically, my desires stem from what I'm doing with uLink. I love it, but... your stuff seems more like a uLink-lite-plus-built-in-interpolation... which is lovely.

    On one hand, I'd have to scrap all the uLink stuff I've done... but on the other, I think it would be beneficial to switch. I almost feel dirty saying that. I could do workarounds for transferring between scenes, but having a client disconnect then reconnect to a new server scene just seems weirdly wrong.

    Anyhow, this package looks most excellent.
     
  44. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Yukichu: Could you explain in detail what you mean by transfering data/clietns between unity scenes? You mean running several instances of bolt, running different scenes of the same game ("zones" in an MMO maybe? something like that), and then transfer people between them?

    Sadly, the short answer to this question is that no, bolt does not support this natively. I honestly don't think it'd be to hard to build on-top, but there is no built in support.

    On approval callback, there actually is one already, it's just not exposed to the user-land code yet, good that you reminded me to make it available.

    Thanks for your kind words about Bolt :)
     
  45. AgusB

    AgusB

    Joined:
    Jun 20, 2013
    Posts:
    65
    I'm don't know too much about Networking, will this allow me to setup a LAN multiplayer for Android with the free license?
    I want someone to be able to start a game and other people on the same wifi network to be able to see the game and join, all this without having an internet connection needed.
     
  46. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    In one short word: Yes. Bolt will do this very easily for you.
     
  47. ivendar

    ivendar

    Joined:
    Feb 18, 2010
    Posts:
    242
    Bought. Thanks much for taking time answering all those questions. :)
     
  48. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Thanks, and no problem at all :)
     
  49. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    So, 0.2.0.3 is done... but Azure is refusing to let me upload it, it keeps timing out. I might have to do it tomorrow morning from my offices instead.
     
  50. fholm

    fholm

    Joined:
    Aug 20, 2011
    Posts:
    2,052
    Bolt 0.2.0.3 is finally out, I am so sorry for the ~1 day delay, you can find the complete change notes here: http://www.boltengine.com/Releases.aspx#Beta_0_2_0_3

    If you bought through our own site, you can use the same link as before to download the new version.
    If you bought through the asset store, email support@boltengine.com with your asset store receipt in PDF form and we will send you a download link.
     
    Last edited: Jun 4, 2014