Profiler Modul Editor
rendah-level asli plug-in Profiler API

Membuat panel detail modul kustom

Panel detail modul muncul di bagian bawah jendela ProfilerJendela yang membantu Anda untuk mengoptimalkan permainan Anda. Ini menunjukkan berapa banyak waktu yang dihabiskan di berbagai bidang permainan Anda. Sebagai contoh, dapat melaporkan persentase waktu yang dihabiskan rendering, aimating, atau dalam logika permainan Anda. More info
Lihat di Glossary
ketika Anda memilih modul. Anda dapat menyesuaikan bagian ini untuk menunjukkan rincian tambahan yang relevan dengan modul Anda atau untuk menampilkan visualisasi kustom data kinerja Anda.

Untuk membuat panel detail modul kustom untuk modul Profiler Anda:

Membuat skrip untuk mengontrol panel detail modul

Anda dapat menggunakan kelas dasar untuk menyesuaikan panel detail modul di jendela profiler. Untuk melakukan ini, buat skrip yang mengontrol apa yang muncul di panel detail modul ketika Anda memilih modul tertentu.

Script yang Anda buat untuk menyesuaikan panel detail modul harus:

  • Tentukan konstruktor publik untuk pengontrol tampilan yang memanggil konstruktor dasar base(profilerWindow).
  • Override CreateView untuk membangun panel detail modul kustom.

Contoh:


 public class CustomDetailsViewController : ProfilerModuleViewController
 {   
    public CustomDetailsViewController(ProfilerWindow profilerWindow) : base(profilerWindow) { }

    protected override VisualElement CreateView()
    {
        // Create your UI.
    }
}

Sebagai contoh dari modul lengkap detail panel controller script, lihat modul rincian panel controller script contoh.

Detail modul panel controller script contoh

Skrip contoh di bawah ini menciptakan pengontrol panel detail modul yang menarik label tunggal di panel detail modul yang menampilkan teks:

Detail modul ini panel controller script contoh melakukan berikut:

  • Tentukan dan buat label untuk menampilkan nilai yang ingin Anda ambil, dan tambahkan label ini ke panel detail modul.
  • Tentukan konstruktor untuk mengontrol panel detail modul dan menggunakan CreateView untuk membangun panel detail modul kustom.
  • Populasi label dengan data dari bingkai saat ini, dan memperbarui label setelah setiap bingkai.
  • Fetches nilai counter sebagai string yang dapat Anda tampilkan di panel detail modul.
  • Tentukan teks untuk ditampilkan di panel detail modul, dan beri tahu Profiler untuk secara otomatis memperbaruinya setiap bingkai.

 using UnityEditor;
 using UnityEditorInternal;
 using Unity.Profiling.Editor;
 using UnityEngine.UIElements;
 
 public class TankEffectsDetailsViewController : ProfilerModuleViewController
 {
    // Define a label, which will display the total particle count for tank trails in the selected frame.
    Label m_TankTrailParticleCountLabel;


    // Define a constructor for the view controller, which calls the base constructor with the Profiler Window passed from the module.
    public TankEffectsDetailsViewController(ProfilerWindow profilerWindow) : base(profilerWindow) { }
 
    // Override CreateView to build the custom module details panel.6666666667reateView()
    {
        var view = new VisualElement();

        // Create the label and add it to the view.
        m_TankTrailParticleCountLabel = new Label() { style = { paddingTop = 8, paddingLeft = 8 } };
        view.Add(m_TankTrailParticleCountLabel);

        // Populate the label with the current data for the selected frame. 
        ReloadData();

        // Be notified when the selected frame index in the Profiler Window changes, so we can update the label.
        ProfilerWindow.SelectedFrameIndexChanged += OnSelectedFrameIndexChanged;

        return view;
    }

    // Override Dispose to do any cleanup of the view when it is destroyed. This is a standard C# Dispose pattern.
    protected override void Dispose(bool disposing)
    {
        if (!disposing)
            return;

        // Unsubscribe from the Profiler window event that we previously subscribed to.
        ProfilerWindow.SelectedFrameIndexChanged -= OnSelectedFrameIndexChanged;

        base.Dispose(disposing);
    }

    void ReloadData()
    {
        // Retrieve the TankTrailParticleCount counter value from the Profiler as a formatted string.
        var selectedFrameIndexInt32 = System.Convert.ToInt32(ProfilerWindow.selectedFrameIndex);
        var value = ProfilerDriver.GetFormattedCounterValue(selectedFrameIndexInt32, GameStatistics.TanksCategory.Name, GameStatistics.TankTrailParticleCountName);

        // Update the label's text with the value.
        m_TankTrailParticleCountLabel.text = $"The value of '{GameStatistics.TankTrailParticleCountName}' in the selected frame is {value}.";
    }

    void OnSelectedFrameIndexChanged(long selectedFrameIndex)
    {
        // Update the label with the current data for the newly selected frame.
        ReloadData();
    }
}

Membuat elemen UI kustom di panel detail modul

Anda dapat menggunakan UIToolkit Unity untuk membangun UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary
kustom untuk panel detail modul. Untuk informasi lebih lanjut, lihat UI Toolkit.

Gambar berikut menunjukkan panel detail modul kustom yang termasuk modul kustom:

Hubungkan panel detail modul kustom ke modul Profiler

Untuk menampilkan panel detail modul kustom, Anda perlu mengulangi pengontrol panel detail modul Anda ketika Anda memilih modul Profiler Anda. Untuk melakukan ini, override CreateDetailsViewController untuk membuat dan menarik modul baru detail panel controller. Unity kemudian memanggil metode ini ketika menampilkan panel detail modul Anda.

Contoh kode berikut menyusut panel detail modul kustom untuk modul yang disebut TankEffectsProfilerModule:


 using Unity.Profiling.Editor;

 [System.Serializable]
 [ProfilerModuleMetadata("Tank Effects")]
 public class TankEffectsProfilerModule : ProfilerModule
 {
    static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]
    {
        new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, GameStatistics.TanksCategory),
        new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, GameStatistics.TanksCategory),
        new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, GameStatistics.TanksCategory),
    };

    public TankEffectsProfilerModule() : base(k_Counters) { }

    public override ProfilerModuleViewController CreateDetailsViewController()
    {
        return new TankEffectsDetailsViewController(ProfilerWindow);
    }
}

Visualisasi counter tambahan di panel detail modul

Anda dapat menampilkan counter di panel detail modul yang tidak disertakan dalam tampilan grafik modul Anda. Ini berguna ketika Anda ingin menunjukkan data tambahan untuk bingkai yang Anda pilih.

Profiler secara otomatis menangkap kategori semua counter yang termasuk tampilan grafik modul saat modul aktif. Untuk menangkap counter tambahan, tulis skrip untuk memberitahu Profiler untuk menangkap kategori tertentu ketika modul Anda aktif.

Sebagai contoh, script di bawah ini menggunakan argumen konstror autoEnabledCategoryNames untuk menentukan kategori ScriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
dan Memori. Ini memungkinkan kategori ini ketika modul aktif:

 
 using Unity.Profiling;
 using Unity.Profiling.Editor;

 [System.Serializable]
 [ProfilerModuleMetadata("Tank Effects")]
 public class TankEffectsProfilerModule : ProfilerModule
 {
    static readonly ProfilerCounterDescriptor[] k_Counters = new ProfilerCounterDescriptor[]
    {
        new ProfilerCounterDescriptor(GameStatistics.TankTrailParticleCountName, ProfilerCategory.Scripts),
        new ProfilerCounterDescriptor(GameStatistics.ShellExplosionParticleCountName, ProfilerCategory.Scripts),
        new ProfilerCounterDescriptor(GameStatistics.TankExplosionParticleCountName, ProfilerCategory.Scripts),
    };

    // Enable the ProfilerCategory.Scripts and ProfilerCategory.Memory categories when the module is active.
    static readonly string[] k_AutoEnabledCategoryNames = new string[]
    {
        ProfilerCategory.Scripts.Name,
        ProfilerCategory.Memory.Name
    };

    // Pass the auto-enabled category names to the base constructor.
    public TankEffectsProfilerModule() : base(k_Counters, autoEnabledCategoryNames: k_AutoEnabledCategoryNames) { }
Profiler Modul Editor
rendah-level asli plug-in Profiler API