Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by Whiskey68 · Dec 08, 2018 at 04:26 PM · networkingnavmeshnavmeshagentpathfindingsync

How to serialize NavMeshPath to sync across network?

How can NavMeshPath be serialized in order to sync it across the network with other clients? Currently I'm using Vector3 positions and SetDestination, but this does not guarantee the same path on every client. Hence I'd like to use a path calculated on the server and sync that instead...

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by hexagonius · Dec 08, 2018 at 05:41 PM

You could turn the Vector3 array into a list und use the SyncListStruct class to create the network syncable container:
https://docs.unity3d.com/ScriptReference/Networking.SyncListStruct_1.html

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Whiskey68 · Dec 08, 2018 at 05:46 PM 1
Share

@hexagonius Nav$$anonymous$$eshAgent.SetPath and Nav$$anonymous$$eshAgent.path only allow me to set a Nav$$anonymous$$eshPath, so how would I set the path with the Vector3 array?

avatar image sonderistic · Jun 04, 2019 at 06:20 PM 0
Share

I have this exact question. Could you please clarify? @hexagonius

avatar image
0

Answer by muzboz · Nov 22, 2020 at 05:55 AM

I did this for my Save & Load system (for NPC nav mesh paths), and I think it works OK, and I hope it might be useful to some other people out there. Or even give people a start on how to do it even better than my version! :)


It's a little bit chopped up to fit in the relevant stuff, without too much other guff. Hopefully the useful bits are all there. :)


These methods are in a UTILS SCRIPT (for serializing Vector3's and things)

 // you can't directly serialize a Vector3, so make a struct to store the relevant info
 [System.Serializable]
 public struct SerializedVector3
 {
     public float x;
     public float y;
     public float z;
 }
 // this method converts a Vector3 into a SerializedVector3
 public static SerializedVector3 SerializeVector3(Vector3 v3)
 {
     SerializedVector3 sv3;
     sv3.x = v3.x;
     sv3.y = v3.y;
     sv3.z = v3.z;
     return sv3;
 }
 // this method converts a SerializedVector3 into a Vector3
 public static Vector3 DeserializeVector3(SerializedVector3 sv3)
 {
     Vector3 v3;
     v3.x = sv3.x;
     v3.y = sv3.y;
     v3.z = sv3.z;
     return v3;
 }


 // this method converts a path into an array of SerializedVector3's based on the path corners array.
 public static SerializedVector3[] SerializeNavPath(NavMeshPath path)
     {
         SerializedVector3[] pathCorners = new SerializedVector3[path.corners.Length];
         for (int i = 0; i < path.corners.Length; i++)
         { pathCorners[i] = Utils.SerializeVector3(path.corners[i]); }
         return pathCorners;
     }
 
 // this method converts the array of SerializedVector3's back into a normal Vector3 array, then turns that into a path using the GetCornersNonAlloc method
     public static NavMeshPath DeserializeNavPath(SerializedVector3[] sPathCorners)
     {
         NavMeshPath path = new NavMeshPath();
         Vector3[] pathCorners = new Vector3[sPathCorners.Length];
 
         for (int i = 0; i < pathCorners.Length; i++)
         { pathCorners[i] = Utils.DeserializeVector3(sPathCorners[i]); }
             
         path.GetCornersNonAlloc(pathCorners);
         return path;
     }
 

These methods are in my NPC script, for saving and loading the nav mesh path

 // this method passes the path into my save & load system
 public NPCData PrepareSaveDataForSelf()
     {
         myNPCData.savedPath = Utils.SerializeNavPath(path);
 
         return myNPCData;
     }
 
 
 // this method takes the saved path, and turns it back into a nav mesh path
 public void LoadEntityData()
     {
         path = Utils.DeserializeNavPath(myNPCData.savedPath);
     }

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

146 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to set NavMeshAgent Path with Vector3[] ? 2 Answers

Trouble with Navmesh Agent and Navmesh Obstacle 0 Answers

Navigation Mesh + Doors 0 Answers

How to prevent a NavMeshAgent to constantly spin along its y axis? 1 Answer

Unity Pathfinding One Way 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges