Shield Aryan – Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
«قهوه داغ ، کتاب خوب 📖 و یه پنجره رو به بارون 🌧
بعضی روزا همینا کافیه برای خوشحالی 🤍
تو امروزت چطور می‌گذره؟»
یلدا همه مبارک
2
این روز ها همه حالشون بده
💔1
با این حال
شروع سال جدید میلادی 2026 رو به همه مسیحیان داخل ایران تبریک میگم
امیدوارم شروع امسال با خبر های خوب برای همه همراه باشه!
❤‍🔥3👏2
مطلب جدید
دوستان من یه موردی رو در مورد memory توی پروژه متوجه شدم! که مشخصا لازمه بگم! شاید یه سری هاتون این رو بدونید! وظیفه RAM یا همون memory تو یه بازی ذخیره تسکچر و مدل و Asset bundle هستش!
یه مشکلی در این زمینه وجود داره!
اونم اینه که وقتی دارید از یک scene به scene دیگه ای لود میشید این حافظه بصورت خودکار آزاد نمیشه و محتوای scene قبلی که دیگه داخلش نیستید رو نگه میداره و تبدیل به یه بار اضافی تو حافظه Memory میشه
1
با تسک منیجر این رو باید چک کنید!
فرض کنید ما دو Scene با اسم های Menu و level 1 داریم!
حافظه ای که menu در Memory اشغال میکنه 350 مگابایت و حافظه level 1 قراره بگیره 600 مگابایت هستش!
بصورت اصولی و درست وقتی که شما از Menu به level 1 لود میشید! حافظه ای که menu اشغال کرده باید ازاد بشه! اما این اتفاق نمی افته و باعث میشه حجمی که بعد لود در Memory اشغال میشه 950 مگابایت (جمع هر دو scene) بشه!
🔥1
و از همه بد تر وقتی دوباره از level 1 به menu برگردید این حجم باز هم افزایش پیدا میکنه!
با وجود اینکه یک بار دیتا های تکسچر ، مدل و Asset bundle در Memory ذخیره شدن , ولی ازشون استفاده نمیکنه و دوباره دیتا ها رو در RAM تولید میکنه! و اگر این حرکت چند دور تکرار بشه حافظه Memory RAM پر میشه و شاهد افت فریم خواهید بود!
1
پس در یک نتیجه کلی:
وقتی SceneManager.LoadScene() رو صدا می‌زنی، Unity به طور پیش‌فرض همه GameObjectها رو نابود می‌کنه، اما:

تکسچرها و مدل‌ها تو مموری می‌مونن

Asset Bundle‌ها آزاد نمی‌شن

منابعی که بهشون reference دارن باقی می‌مونن

Garbage Collection به طور خودکار کار نمی‌کنه
راه حلی که من فعلا دارم تست میکنم به این کد ها خلاصه میشه که دارم تست میکنم👇🏻
کد اصلی:
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;

public class SquirrelySceneManager : MonoBehaviour
{
// به جای LoadScene معمولی، از این استفاده کن
public void LoadSceneWithMemoryCleanup(string sceneName)
{
StartCoroutine(LoadSceneAndCleanup(sceneName));
}

IEnumerator LoadSceneAndCleanup(string sceneName)
{
// 1. Load Scene جدید
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);

// 2. نگهداری Scene قبلی رو غیرفعال کن (برای جلوگیری از Drop فریم)
asyncLoad.allowSceneActivation = false;

// 3. منتظر بمون تا Loading تموم شه
while (!asyncLoad.isDone)
{
// فریم ریت رو نگه دار - اینجا می‌تونی Loading Screen نشون بدی
yield return null;
}

// 4. حالا Scene جدید رو فعال کن
asyncLoad.allowSceneActivation = true;

// 5. بعد از Load، Cleanup رو شروع کن
yield return new WaitForSeconds(0.1f); // کمی صبر کن

// 6. مهم‌ترین قسمت - آزاد کردن منابع استفاده‌نشده
Resources.UnloadUnusedAssets();

// 7. فراخوانی اجباری Garbage Collection
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.Collect();

Debug.Log(" Scene loaded & memory cleaned!");
}

// برای آنلود کردن دستی Assetهای بزرگ
public void UnloadBigAssets()
{
// مثال: آنلود تکسچرهای بزرگ که دیگه نیاز نداری
var bigTextures = Resources.FindObjectsOfTypeAll<Texture2D>();
foreach (var tex in bigTextures)
{
if (tex.name.Contains("Squirrely_Large"))
{
Resources.UnloadAsset(tex);
}
}
}
}
نگه داری فریم ریت:
public class SquirrelyLoadingScreen : MonoBehaviour
{
public Image loadingBar;
public Text loadingText;
public string[] squirrelFacts = {
"سنجاب‌ها می‌تونن 15 ساعت بخوابن...",
"دندونای سنجاب همیشه در حال رشدن..."
};

void Update()
{
// نمایش فکت‌های ترسناک سنجابی
loadingText.text = squirrelFacts[Random.Range(0, squirrelFacts.Length)];
}
}
دیباگ مموری:
void Update()
{
if (Input.GetKeyDown(KeyCode.M))
{
// نمایش مموری فعلی
long memory = System.GC.GetTotalMemory(false) / 1024 / 1024;
Debug.Log($"Memory Usage: {memory} MB");

// نمایش تعداد Textureهای لود شده
var textures = Resources.FindObjectsOfTypeAll<Texture2D>();
Debug.Log($"Loaded Textures: {textures.Length}");
}
}
این سه کد تو تست اولیه هست تا بتونم این مشکل رو تو بحث Memory RAM حل کنم!
1🔥1
🚨اینترنت ها هم داره ضعیف میشه ناجور 🚨

🛜 حالا باید دوباره بگردیم دنبال فیلترشکن جوابگو📉
امروز اومدم کارکتر جدید بازی رو از روی مدل پروتوتایپش که خیلی زیادی سنگینه تکمیل کنم! 50 درصد کار رفته! بنظرتون تا امشب تکمیل میشه؟
امروز برای ناهار خانواده دور هم جمع شدن!
خونه فامیل این رو پیدا کردیم!
کیا این رو یادشونه
80 درصد کاراکتر جدید ساخته شده!
حالا بگید کاراکتر جدید چه موجودیه!؟😊
1