{"id":220,"date":"2021-01-30T06:55:22","date_gmt":"2021-01-29T19:55:22","guid":{"rendered":"https:\/\/studios.nomoss.co\/blog\/?p=220"},"modified":"2023-12-12T16:41:29","modified_gmt":"2023-12-12T05:41:29","slug":"pun-basics-simple-synchronization","status":"publish","type":"post","link":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/","title":{"rendered":"PUN Basics: Simple Synchronization"},"content":{"rendered":"\n<p>Networking is hard and time consuming. That&#8217;s been true for a long time, and still is. But, due to tools like Photon, it is easier than it has ever been to make a networked game. Having said that &#8211; Photon has pretty terrible documentation, so implementing networking can feel tough, even when it&#8217;s not. That&#8217;s where we come in. On our <a href=\"https:\/\/noblesteedgames.com\/culture\/\">mission to democratize all game dev information<\/a>, I thought it might be fun to give a rundown of how to do synchronization in PUN, and what options are available, to help demonstrate (with code samples) that it&#8217;s not that hard.<\/p>\n\n\n\n<p>Lets dive in. First off &#8211; what is synchronization? To put it bluntly &#8211; synchronization is making sure different players see the same thing. While some updates will happen on different player&#8217;s devices, you want to make sure that everybody sees (more or less) the same thing, giving a seamless networked experience.<\/p>\n\n\n\n<p>So &#8211; lets talk about how that happens, first theoretically, and then tangibly, in Photon Unity Networking (Pun for short). In the theoretical, how could we ensure everything is synchronised? The first option is to ensure all of our important information is sent, constantly, across the network. Then, all players will constantly know what&#8217;s going on. But, of course, the downside to that is you&#8217;re sending a potentially large amount of information, constantly.<\/p>\n\n\n\n<p>Ok &#8211; so what if instead we just send information when it changes? When something important happens, we notify all the players that it has happened, and keep them up to date? Well &#8211; that makes sense sometimes, but has problems for things like networked clients who join late -&gt; they might have missed some of these messages! In truth, a mix of these options (and other options that are&#8230; sort of hybrids) is how good networking works. So &#8211; lets see what these look like in PUN, and when we should use them<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PUN Observable Components<\/h2>\n\n\n\n<p>In PUN, we have the idea of observable components. By default, you get a lot of these out of the box, such as things like the Photon Transform View, or the Photon Animation View. These are bundled components that automatically sync data over the network. But, you can also write your own!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"763\" height=\"876\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-5.png\" alt=\"Some code demonstrating an IPunObservable script\" class=\"wp-image-221\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-5.png 763w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-5-600x689.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-5-261x300.png 261w\" sizes=\"(max-width: 763px) 100vw, 763px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/pastebin.pl\/view\/2c6808e6\">See the source code here<\/a><\/figcaption><\/figure><\/div>\n\n\n<p>By implementing the IPunObservable interface, you gain access to the OnPhotonSerializeView function. This lets you send data over the network as much as you want. Bear in mind, it comes with the same downsides as the theoretical constant sync we mentioned before. You don&#8217;t want to send too much data using this method &#8211; only the things that should be kept constantly up to date on all clients.<\/p>\n\n\n\n<p>In the above image, you can see what we&#8217;re sending over the network. Most of it is fairly simple information, like the amount of time remaining in the game, or the amount of gold that the players collectively have. It&#8217;s small bits and bobs, nothing too major. But &#8211; what if we need to send something only once, or need to send something large?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Remote Procedure Calls<\/h2>\n\n\n\n<p>Remote Procedure Calls (or RPCs) is how PUN does its event or notification based networking. By setting the RPC attribute on a function, you become able to call it over the network very easily.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"828\" height=\"444\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-6.png\" alt=\"Code demonstrating a PUN RPC\" class=\"wp-image-223\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-6.png 828w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-6-600x322.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-6-300x161.png 300w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-6-768x412.png 768w\" sizes=\"(max-width: 828px) 100vw, 828px\" \/><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/pastebin.pl\/view\/acdd6538\">Source code here!<\/a><\/figcaption><\/figure><\/div>\n\n\n<p>With the above example, we are spawning random customers at regular intervals. When they are spawned, we want to give them a random head and body. These are randomly allocated on the Master client (responsible for all the game logic processing), and then sent via RPC to each other client. That way, they all get the notification of what head and body each customer should have.<\/p>\n\n\n\n<p>RPCs are a great way to send information that only needs to be sent once. The head and body of a customer isn&#8217;t likely to change, so we don&#8217;t need to be constantly sending it. Instead, we just send it once, and then don&#8217;t worry about it.<\/p>\n\n\n\n<p>Or do we!? As mentioned before, this runs into problems when we have things like players who join a game late, or players who need to reconnect. How do we get around this?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Buffered RPCs<\/h2>\n\n\n\n<p>PUN has thought of this (sort of), and gives you the Buffered RPC. We&#8217;re actually using one of these in our above example. Because this is buffered, it is stored in a list, and each new player who joins is able to execute the RPC when they connect, thereby ensuring that new players are kept up to date with our RPC.<\/p>\n\n\n\n<p>Of course, buffering an RPC takes up memory, which means you only want to do it for things that are important to remember. You definitely don&#8217;t want to buffer all your RPCs. It also has another issue &#8211; it&#8217;s not perfect for disconnection and reconnection.<\/p>\n\n\n\n<p>Since PUN doesn&#8217;t run on a server, there is no central location to store all the buffered requests. This means that each player stores the requests that they have buffered. The downside to this is that if a player disconnects, all the RPC calls that they have buffered are lost. If our master client disconnects, then reconnects, they will no longer have a buffer of important information.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"280\" src=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-7.png\" alt=\"An example of getting around Buffered RPC limitations in PUN\" class=\"wp-image-224\" srcset=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-7.png 891w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-7-600x189.png 600w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-7-300x94.png 300w, https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2021\/01\/image-7-768x241.png 768w\" sizes=\"(max-width: 891px) 100vw, 891px\" \/><figcaption class=\"wp-element-caption\">Getting around our Buffered RPC problems<\/figcaption><\/figure><\/div>\n\n\n<p>The above image is how we get around this. It&#8217;s not perfect, and there may even be a better option that I&#8217;m not familiar with, but this one works. When our master client (who controls all of our RPCs) disconnects, those RPCs are lost. So &#8211; our new master client (the player who becomes the new master), simply re-sends that information. As people disconnect and reconnect, as long as there is at least one player still in the game, there will always be somebody maintaining the &#8220;buffer&#8221; list.<\/p>\n\n\n\n<p>So &#8211; there are some of the ways you can easily get synchronised using Photon Unity Networking. Hope it&#8217;s been helpful! We may dive into some other networking concepts in the future, so make sure you leave us a comment letting us know what you&#8217;d like to hear more about!<\/p>\n\n\n\n<p>We hope you enjoyed reading this! Have a question or want to chat more about game development?&nbsp;<a href=\"mailto:hello@noblesteed.games\" data-type=\"mailto\" data-id=\"mailto:hello@noblesteed.games\"><strong>Reach out to us!<\/strong><\/a><\/p>\n\n\n\n<p>Other places you can find us:<\/p>\n\n\n\n<ul>\n<li>Our other&nbsp;<a href=\"https:\/\/noblesteedgames.com\/blog\/category\/gamedev-resources\/\">game development resources<\/a><\/li>\n\n\n\n<li>Join our<a href=\"https:\/\/discord.com\/invite\/Ka8suskKcs\">&nbsp;Discord serve<\/a>r<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!<\/p>\n","protected":false},"author":1,"featured_media":662,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[48,40,46],"tags":[28,23,39,24],"ppma_author":[65],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PUN Basics: Simple Synchronization | Dev Blog<\/title>\n<meta name=\"description\" content=\"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PUN Basics: Simple Synchronization | Dev Blog\" \/>\n<meta property=\"og:description\" content=\"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\" \/>\n<meta property=\"og:site_name\" content=\"Noble Steed Games\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/NobleSteedAU\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-29T19:55:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-12T05:41:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"900\" \/>\n\t<meta property=\"og:image:height\" content=\"378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Reuben\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NobleSteedAU\" \/>\n<meta name=\"twitter:site\" content=\"@NobleSteedAU\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Reuben\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\"},\"author\":{\"name\":\"Reuben\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9\"},\"headline\":\"PUN Basics: Simple Synchronization\",\"datePublished\":\"2021-01-29T19:55:22+00:00\",\"dateModified\":\"2023-12-12T05:41:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\"},\"wordCount\":1022,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg\",\"keywords\":[\"game development\",\"Networking\",\"photon fusion\",\"Photon PUN\"],\"articleSection\":[\"E-Books &amp; Downloadable Resources\",\"Gamedev Resources\",\"Multiplayer Game Networking Resources\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\",\"name\":\"PUN Basics: Simple Synchronization | Dev Blog\",\"isPartOf\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg\",\"datePublished\":\"2021-01-29T19:55:22+00:00\",\"dateModified\":\"2023-12-12T05:41:29+00:00\",\"description\":\"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!\",\"breadcrumb\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg\",\"width\":900,\"height\":378,\"caption\":\"Screenshot of Hexgrove Books, our Photon PUN Networked simulation game.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/noblesteedgames.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PUN Basics: Simple Synchronization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#website\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/\",\"name\":\"Noble Steed Games\",\"description\":\"Stories from Development\",\"publisher\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/noblesteedgames.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#organization\",\"name\":\"Noble Steed Games\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg\",\"width\":1374,\"height\":1374,\"caption\":\"Noble Steed Games\"},\"image\":{\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/NobleSteedAU\",\"https:\/\/x.com\/NobleSteedAU\",\"https:\/\/www.instagram.com\/noblesteedau\/\",\"https:\/\/www.linkedin.com\/company\/18263569\/\",\"https:\/\/www.youtube.com\/channel\/UC-CE2Op8dEH0LET0t9Zw79g\",\"https:\/\/twitter.com\/NobleSteedAU\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9\",\"name\":\"Reuben\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/image\/b281395bed28c3024dda9576a32f5794\",\"url\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg\",\"contentUrl\":\"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg\",\"caption\":\"Reuben\"},\"sameAs\":[\"https:\/\/noblesteedgames.com\/blog\/\"],\"url\":\"https:\/\/noblesteedgames.com\/blog\/author\/studios-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PUN Basics: Simple Synchronization | Dev Blog","description":"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/","og_locale":"en_US","og_type":"article","og_title":"PUN Basics: Simple Synchronization | Dev Blog","og_description":"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!","og_url":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/","og_site_name":"Noble Steed Games","article_publisher":"https:\/\/www.facebook.com\/NobleSteedAU","article_published_time":"2021-01-29T19:55:22+00:00","article_modified_time":"2023-12-12T05:41:29+00:00","og_image":[{"width":900,"height":378,"url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg","type":"image\/jpeg"}],"author":"Reuben","twitter_card":"summary_large_image","twitter_creator":"@NobleSteedAU","twitter_site":"@NobleSteedAU","twitter_misc":{"Written by":"Reuben","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#article","isPartOf":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/"},"author":{"name":"Reuben","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9"},"headline":"PUN Basics: Simple Synchronization","datePublished":"2021-01-29T19:55:22+00:00","dateModified":"2023-12-12T05:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/"},"wordCount":1022,"commentCount":1,"publisher":{"@id":"https:\/\/noblesteedgames.com\/blog\/#organization"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage"},"thumbnailUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg","keywords":["game development","Networking","photon fusion","Photon PUN"],"articleSection":["E-Books &amp; Downloadable Resources","Gamedev Resources","Multiplayer Game Networking Resources"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/","url":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/","name":"PUN Basics: Simple Synchronization | Dev Blog","isPartOf":{"@id":"https:\/\/noblesteedgames.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage"},"thumbnailUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg","datePublished":"2021-01-29T19:55:22+00:00","dateModified":"2023-12-12T05:41:29+00:00","description":"A 101 on how to fix Photon PUN synchronisation issues, walkthrough on implementing networking into your multiplayer game and code samples!","breadcrumb":{"@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#primaryimage","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/06\/hexgrovebooks.jpg","width":900,"height":378,"caption":"Screenshot of Hexgrove Books, our Photon PUN Networked simulation game."},{"@type":"BreadcrumbList","@id":"https:\/\/noblesteedgames.com\/blog\/pun-basics-simple-synchronization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/noblesteedgames.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PUN Basics: Simple Synchronization"}]},{"@type":"WebSite","@id":"https:\/\/noblesteedgames.com\/blog\/#website","url":"https:\/\/noblesteedgames.com\/blog\/","name":"Noble Steed Games","description":"Stories from Development","publisher":{"@id":"https:\/\/noblesteedgames.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/noblesteedgames.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/noblesteedgames.com\/blog\/#organization","name":"Noble Steed Games","url":"https:\/\/noblesteedgames.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/PFP.jpg","width":1374,"height":1374,"caption":"Noble Steed Games"},"image":{"@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/NobleSteedAU","https:\/\/x.com\/NobleSteedAU","https:\/\/www.instagram.com\/noblesteedau\/","https:\/\/www.linkedin.com\/company\/18263569\/","https:\/\/www.youtube.com\/channel\/UC-CE2Op8dEH0LET0t9Zw79g","https:\/\/twitter.com\/NobleSteedAU"]},{"@type":"Person","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/72236c3fe545f797cc0ce4635c1ca1a9","name":"Reuben","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/noblesteedgames.com\/blog\/#\/schema\/person\/image\/b281395bed28c3024dda9576a32f5794","url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","contentUrl":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","caption":"Reuben"},"sameAs":["https:\/\/noblesteedgames.com\/blog\/"],"url":"https:\/\/noblesteedgames.com\/blog\/author\/studios-admin\/"}]}},"authors":[{"term_id":65,"user_id":1,"is_guest":0,"slug":"studios-admin","display_name":"Reuben","avatar_url":{"url":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg","url2x":"https:\/\/noblesteedgames.com\/blog\/wp-content\/uploads\/2023\/12\/IMG_20231006_131634.jpg"},"user_url":"https:\/\/noblesteedgames.com\/blog\/","last_name":"Moorhouse","first_name":"Reuben","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/220"}],"collection":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":8,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"predecessor-version":[{"id":1217,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/posts\/220\/revisions\/1217"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/media\/662"}],"wp:attachment":[{"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/tags?post=220"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/noblesteedgames.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}