چند وقت پیش مطلبی رو در سایتی در این مورد خونده بودم .
فرض کنید ما در انجینی مثل یونیتی می خوایم از قابلیت های شبکه استفاده کنیم . همونطور که میدونید اساس کار شبکه اونطور که خود سایت یونیتی هم نوشته بر اساس تکنولوژی UDP به زبان ساده تر یعنی شما یک پیغام رو می فرستین و دریافت کننده خاصی وجود نداره البته این رو بگم که مگر میشه UDP باشد و TCP نباشد ؟ :D (نگین یارو اومد حرف بزنه هیچی بلد نیست)خب نکته مهم این وسط اینه که حجم پیغام ارسالی چقدر باشه که مشکلی در پهنای باند دریافت کننده و ارسال کننده پیش نیاد ! نکته جالب تر اینه که اگه سورس مربوط به پلاگین های اماده شبکه در یونیتی مثل Photon cloud - tnet و غیره ... رو دیده باشین بعضا دیده شده که از سریالیز کردن هم استفاده می کنن . سوال اینجاست همه اینا قبول ولی چه راه هایی واسه بهینه سازی یا نه کمتر کردن حجم این پیغام های ارسال وجود داره .
با توجه به چیزی که من خونده بودم می گفتن سعی کنین در شبکه اکثر کارها رو خود بازی انجام بده یعنی صرف کاری که شما می کنین دستور دادن برای انجام کاری باشه .
مثال بازی اندروید clash of clans رو میزنم . همونطور که می بینید توی این بازی ما تقریبا هیچ کار ریل تایمی به جز چت نداریم . حمله رو که خود سیستم انجام میده ما شاید فقط spwn کردن یونیت ها رو به عهده داشته باشیم ولی خب تنها چیزهایی که ارسال و دریافت میشه فقط مقادیر پول و یونیت و اینجور چیزهاست .
فرض کنید ما قطعه دستوری برای اجرای انیمشن تغییر رنگ - حرکت هرچی داریم
مثل زیر :

GameObject.transform.position = new vector3(x,y,z(


توصیه ای که این سایت کرده اینه که به جای اینکه بیاین این رو مثلا در قالب SerializeView خود یونیتی یا در قالب single message به وسیله RPC ارسال کنید بیاین فقط با یه دستور این رو اجرا کنین
مثلا این دستور رو به قالب یک متد جدا در اورده و فق در شبکه بگین اگر فلان مقدار بود بیا این رو اجرا کن . در حالی که ارسالی که ما در شبکه داریم فقط یک دستور اشاره است به این متد !


یه مثال دیگه :


[RPC]
public void StageSelect(string Command)
{
if(Command=="MasterClient")
{
StartCoroutine(MasterClient());
}
else if (Command == "OtherClient")
{
StartCoroutine(OtherPlayer());
}
}
IEnumerator MasterClient()
{
LeftOnline.SetActive(false);
RightOnline.SetActive(true);
yield return new WaitForSeconds(0.01f);
}
IEnumerator OtherPlayer()
{
LeftOnline.SetActive(true);
RightOnline.SetActive(false);
yield return new WaitForSeconds(0.01f);
}


عزیزانی که تجربه ای در این مورد دارن ازتون می خوام اگه میشه نظراتشون رو در این مورد بگن ببینیم مشکلی این روش داره یا نه