یونیتی

اسکریپت پیدا کردن فایل های حجیم پروژه یونیتی

برای استفاده از این اسکریپت، ابتدا آن را در پوشه Editor پروژه خود قرار دهید. اسکریپت‌های موجود در این پوشه فقط در محیط ویرایشگر یونیتی اجرا می‌شوند و امکان دسترسی به ابزارهای پیشرفته و عملکردهای داخلی مانند MenuItem و ShaderUtil را فراهم می‌کنند.

پس از قرار دادن اسکریپت، می‌توانید آن را از طریق منوی بالای یونیتی در مسیر Tools اجرا کنید. این ابزار به صورت خودکار فایل‌های استفاده‌شده در صحنه یا پروژه را جستجو می‌کند و اطلاعاتی مانند نام فایل، سایز آن و نوع فایل را در کنسول نمایش می‌دهد.

با این ابزار، به راحتی می‌توانید فایل‌های پرحجم را شناسایی کرده و اقدام به کاهش سایز یا تغییر تنظیمات آن‌ها کنید تا عملکرد پروژه بهبود یابد.

 

پیدا کردن فایل های حجیم پنجره Project :

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Linq;
using NUnit.Framework;
using System;
using System.Collections.Generic;
public class FindHeavyObjects
{

    [MenuItem("Tools/Analyze Build Size")]
    public static void AnalyzeBuildSize()
    {
        string buildPath = EditorUtility.OpenFolderPanel("Select Build Folder", "", "");
        if (!string.IsNullOrEmpty(buildPath) && Directory.Exists(buildPath))
        {
            var files = Directory.GetFiles(buildPath, "*.*", SearchOption.AllDirectories);
            List<FileInfo> fileInfoList = new List<FileInfo>();
            foreach (var file in files)
            {
                FileInfo info = new FileInfo(file);
                fileInfoList.Add(info);
            }
            foreach (var item in fileInfoList.OrderByDescending(r => r.Length))
            {
                Debug.Log($"{item.Name}: {item.Length / 1024f:F2} KB");
            }
        }
        else
        {
            Debug.LogError("Invalid build path.");
        }
    }

}

 

 

اسکریپت پیدا کردن تکسچر های حجیم در Hierachy :

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;

public class TextureFinder : MonoBehaviour
{
    [MenuItem("Tools/List Textures in Hierarchy")]
    public static void ListTexturesInHierarchy()
    {
        HashSet<Texture> textureSet = new HashSet<Texture>();

        // Iterate through all GameObjects in the active scene
        GameObject[] allGameObjects = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects();

        foreach (var rootObject in allGameObjects)
        {
            TraverseHierarchy(rootObject, textureSet);
        }

        // Log the found textures
        Debug.Log($"Found {textureSet.Count} unique textures in the hierarchy:");
        foreach (var texture in textureSet)
        {
            Debug.Log($"Texture: {texture.name}, Size: {texture.width}x{texture.height}");
        }
    }

    private static void TraverseHierarchy(GameObject obj, HashSet<Texture> textureSet)
    {
        // Check if the GameObject has components with textures
        Renderer renderer = obj.GetComponent<Renderer>();
        if (renderer != null)
        {
            foreach (var material in renderer.sharedMaterials)
            {
                if (material != null)
                {
                    CollectTexturesFromMaterial(material, textureSet);
                }
            }
        }

        // Check for UI Images (Unity UI)
        var image = obj.GetComponent<UnityEngine.UI.Image>();
        if (image != null && image.sprite != null && image.sprite.texture != null)
        {
            textureSet.Add(image.sprite.texture);
        }

        // Recursively check children
        foreach (Transform child in obj.transform)
        {
            TraverseHierarchy(child.gameObject, textureSet);
        }
    }

    private static void CollectTexturesFromMaterial(Material material, HashSet<Texture> textureSet)
    {
        // Collect all textures from the material's properties
        Shader shader = material.shader;
        int propertyCount = ShaderUtil.GetPropertyCount(shader);

        for (int i = 0; i < propertyCount; i++)
        {
            if (ShaderUtil.GetPropertyType(shader, i) == ShaderUtil.ShaderPropertyType.TexEnv)
            {
                Texture texture = material.GetTexture(ShaderUtil.GetPropertyName(shader, i));
                if (texture != null)
                {
                    textureSet.Add(texture);
                }
            }
        }
    }
}

 

اشتراک گذاری

امید توانا

امید توانا

ثبت دیدگاه

جهت درج نظر باید وارد سایت شوید

0 دیدگاه