Using HingeJoints in TrueSync?

Options
Hi, for my Unity multiplayer game I need some HingeJoints to be synced. Since there is no "TSHingeJoint" in TrueSync (at least I don't know about it): What is the best way to implement a Hinge Joint into TrueSync?

Comments

  • JeffersonHenrique
    Options
    Hi @airborne,

    For now you could do it manually adjusting body positions, but it is a feature that we should add in the future.
  • airborne
    airborne
    edited January 2017
    Options
    Hmm, that's a little bit disappointing. Implementing a Hinge Joint algorithm is not straightforward, especially in a code environment I'm not familiar with. May I ask: Is it a feature you are already working on and can be expected to be released soon or is it not in the foreseeable future?
  • JeffersonHenrique
    Options
    Yes @airborne, I agree with you. About what you ask you have an implementation for 2D physics but it is not tested yet, we should do it soon.
  • airborne
    airborne
    edited January 2017
    Options
    Hmm, too bad I'm working on a 3D game :( . Maybe I'll give it a try to write my own HingeJoint implementation. I actually worked for several years as a programmer of scientifical software, so I don't think it's impossible for me. Do you think it's possible for you to help me out with some advice? Maybe some pseudo code, paper about the theoratical background etc. I'd appreciate it
  • JeffersonHenrique
    Options
    Hello @airborne, I have two good news for you, one is that this feature can be included in next releases first for 3D physics and second is that you can check HERE an implementation of HingeJoint that may help you if you want to try by yourself.
  • airborne
    airborne
    edited January 2017
    Options
    Hi @JeffersonHenrique, that's great to hear. Can you tell me when approximately the release date is gonne be? I'm gonna have a look into the the jitterphysics HingeJoint implementation. Is TrueSyncs Physics Engine based on jitterphysics?
  • JeffersonHenrique
    Options
    Hi @airborne, yes we have a 3D physics based on Jitter. The release (1.0.9) possibly including a HingeJoint can be released next week (first week of February).
  • airborne
    Options
    Hi @JeffersonHenrique . Thx, great news. Just one more question ;) Will the HingeJoint have the option to implement min and max limits? Because in jitter physics there are two kind of Hinge Joints: One without limits and one with limits.
  • JeffersonHenrique
    Options
    We will try to include both types @airborne :)
  • airborne
    Options
    @JeffersonHenrique . I just installed version 1.0.9. I've noticed that there is no new component called "TSHingeJoint" or similar. In the change log though I found the note "Added "HingeJoint.Create" to allow creation of simple hinge joints between two 3D bodies"
    Since I couldn't find much documentation on ow to use it correctly I just gave it a shot attaching the following script to a GameObject containing a TSRigidbody:
    using UnityEngine; using TrueSync; public class AddJoint : TrueSyncBehaviour { TSRigidBody thisBody; [SerializeField] TSRigidBody otherRigidbody; void Start() { thisBody = GetComponent<TSRigidBody>(); TrueSync.HingeJoint.Create(PhysicsWorldManager.instance.GetWorld(), thisBody.tsCollider.Body, otherRigidbody.tsCollider.Body, new TSVector(1, 0.5, 0), TSVector.up); } }
    Unfortunately I doesn't work as expected. Could you guid me a little bit how to use it correctly (or give me a link to some documentation). And will there be a TSHingeJoint Component in a future release which can be used similar to a Unity builtin HingeJoint?
  • airborne
    Options
    @JeffersonHenrique . I just installed version 1.0.9. I've noticed that there is no new component called "TSHingeJoint" or similar. In the change log though I found the note "Added "HingeJoint.Create" to allow creation of simple hinge joints between two 3D bodies"
    Since I couldn't find much documentation on ow to use it correctly I just gave it a shot attaching the following script to a GameObject containing a TSRigidbody:
    using UnityEngine; using TrueSync; public class AddJoint : TrueSyncBehaviour { TSRigidBody thisBody; [SerializeField] TSRigidBody otherRigidbody; void Start() { thisBody = GetComponent<TSRigidBody>(); TrueSync.HingeJoint.Create(PhysicsWorldManager.instance.GetWorld(), thisBody.tsCollider.Body, otherRigidbody.tsCollider.Body, new TSVector(1, 0.5, 0), TSVector.up); } }
    Unfortunately I doesn't work as expected. Could you guid me a little bit how to use it correctly (or give me a link to some documentation). And will there be a TSHingeJoint
  • airborne
    Options
    @JeffersonHenrique . I just installed version 1.0.9. I've noticed that there is no new component called "TSHingeJoint" or similar. In the change log though I found the note "Added "HingeJoint.Create" to allow creation of simple hinge joints between two 3D bodies"
    Since I couldn't find much documentation on ow to use it correctly I just gave it a shot attaching the following script to a GameObject containing a TSRigidbody:
    using UnityEngine; using TrueSync; public class AddJoint : TrueSyncBehaviour { TSRigidBody thisBody; [SerializeField] TSRigidBody otherRigidbody; void Start() { thisBody = GetComponent<TSRigidBody>(); TrueSync.HingeJoint.Create(PhysicsWorldManager.instance.GetWorld(), thisBody.tsCollider.Body, otherRigidbody.tsCollider.Body, new TSVector(1, 0.5, 0), TSVector.up); } }
    Unfortunately I doesn't work as expected. Could you guid me a little bit how to use it correctly (or give me a link to some documentation). And will there be a TSHingeJoint
  • airborne
    Options
    @JeffersonHenrique . I just installed version 1.0.9. I've noticed that there is no new component called "TSHingeJoint" or similar. In the change log though I found the note "Added "HingeJoint.Create" to allow creation of simple hinge joints between two 3D bodies"
    Since I couldn't find much documentation on ow to use it correctly I just gave it a shot attaching the following script to a GameObject containing a TSRigidbody:
    using UnityEngine; using TrueSync; public class AddJoint : TrueSyncBehaviour { TSRigidBody thisBody; [SerializeField] TSRigidBody otherRigidbody; void Start() { thisBody = GetComponent<TSRigidBody>(); TrueSync.HingeJoint.Create(PhysicsWorldManager.instance.GetWorld(), thisBody.tsCollider.Body, otherRigidbody.tsCollider.Body, new TSVector(1, 0.5, 0), TSVector.up); } }
    Unfortunately I doesn't work as expected. Could you guid me a little bit how to use it correctly (or give me a link to some documentation). And will there be a TSHingeJoint
  • airborne
    Options
    Sorry for the multi-post, don't know what happened.
  • JeffersonHenrique
    Options
    Hello @airborne, you are right, there is no related TSHingeJoint yet, I decided to not put there because the implementation of HingeJoint doesn't completely match with Unity's version. If you add this lines on the script SimpleControl you will create a HingeJoint between two of the blue boxes created on the scene after you press the space button.

    // Instantiates a new ball belonging to current player if the following criteria is true if (!lastCreateState && currentCreateState && !createdRuntime) { GameObject go1 = GameObject.Find("Box(Clone)"); go1.name = "Cube1"; GameObject go2 = GameObject.Find("Box(Clone)"); go2.name = "Cube2"; TrueSync.HingeJoint.Create(PhysicsWorldManager.instance.GetWorld(), go1.GetComponent<TSCollider>().Body, go2.GetComponent<TSCollider>().Body, TSVector.zero, TSVector.up); (....)
  • airborne
    airborne
    edited February 2017
    Options
    Thanks. I think the "position" parameter in HingeJoint.Create is in world coordinates in contrast to Unitys HingeJoint where you enter the position of the anchor in local coordinates, right? I added these three lines in order to match better with Unitys Hinge Joint input:
    Vector3 localPos = new Vector3(-0.5f, 0, 0); //(local) anchor position, later from inspector Vector3 worldPos=go2.transform.TransformPoint(localPos); TSVector TSworldPos = worldPos.ToTSVector();
    And then use TSworldPos as the parameter when creating the hinge joint.
    Using Limits is not possible right now?
  • JeffersonHenrique
    Options
    Hello @airborne, you are totally right about world coordinates, currently the use of limits it is not implemented on the HingeJoint.
  • airborne
    Options
    Is there any reason why the HingeJoint constructor has been declared private in the new TrueSync version? It's a little bit annoying that I can't create my own instance of HingeJoint (HingeJoint.Create has return type void) in order to use tha class methods (like Deactivate() when trying to implement some break force behaviour)
  • airborne
    airborne
    edited February 2017
    Options
    Hi, I decided to write my own HingeJoint implementation after all. I've uploaded a sample project here https://github.com/LudwigK84/TrueSyncHingeJoint . It's a very simple implementation but its fine for what I need. You can enter Limits, breakforce and spring values. The input matches with Unitys builtin Hinge Joint, though it has less features. Everyone is free to use it as a baseline for their own implementation or contribute, I can't give any guarantee that it works of course. For more infos read the readme file
  • JeffersonHenrique
    Options
    Hello @airborne, congrats, thanks for sharing.
  • afa
    Options
    airborne wrote: »
    Hi, I decided to write my own HingeJoint implementation after all. I've uploaded a sample project here https://github.com/LudwigK84/TrueSyncHingeJoint . It's a very simple implementation but its fine for what I need. You can enter Limits, breakforce and spring values. The input matches with Unitys builtin Hinge Joint, though it has less features. Everyone is free to use it as a baseline for their own implementation or contribute, I can't give any guarantee that it works of course. For more infos read the readme file

    i tested it and it doesnot work