Paket jendela Manifest
Aset paket akses

Scripting API untuk paket

Anda dapat menggunakan Paket Manager scripting API untuk berinteraksi dengan Paket Manager menggunakan C# 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
. Misalnya, Anda mungkin ingin menginstal paket atau versi tertentu tergantung pada platform mesin target.

Sistem bergantung pada kelas PaketManager.Client, yang dapat Anda gunakan untuk menemukan paket, menelusuri daftar paket, dan menginstal dan menghapus paket melalui scripting.

Kelas penting lainnya adalah WordPress.org, yang mengandung keadaan paket, termasuk metadata yang diperoleh dari package manifestSetiap paket memiliki manifest, yang menyediakan informasi tentang paket ke Manajer Paket. Manifest mengandung informasi seperti nama paket, versinya, deskripsi untuk pengguna, ketergantungan pada paket lain (jika ada), dan rincian lainnya. More info
Lihat di Glossary
dan registry. Misalnya, Anda bisa mendapatkan Daftar versi yang tersedia untuk paket, atau daftar kesalahan yang mungkin terjadi saat mencari atau menginstal paket.

Menambahkan paket ke proyek

Contoh ini menunjukkan cara menggunakan kelas Client untuk menginstal atau menambahkan paket ke proyek.

Anda dapat menggunakan Login Login untuk menambahkan paket. Ketika Anda memanggil metode Client.Add, Anda dapat menentukan hanya nama paket, atau nama dengan versi tertentu. Misalnya, menggunakan instalasi Client.Add("com.unity.textmeshpro") (atau pembaruan) versi terbaru dari paket TextMesh Pro; menggunakan versi Client.Add("com.unity.textmeshpro@1.3.0") 1.3.0 dari paket TextMesh Pro.

Metode Client.Add mengembalikan instance AddRequest, yang dapat Anda gunakan untuk mendapatkan status, kesalahan, atau respons Request yang mengandung informasi PackageInfo untuk paket baru ditambahkan.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class AddPackageExample
   {
       static AddRequest Request;

       [MenuItem("Window/Add Package Example")]
       static void Add()
       {
           // Add a package to the project
           Request = Client.Add("com.unity.textmeshpro");
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   Debug.Log("Installed: " + Request.Result.packageId);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}

Menjelajahi daftar paket dalam proyek

Contoh ini menunjukkan bagaimana cara menggunakan kelas Client untuk menjauhkan paket dalam proyek.

Metode Login Login mengembalikan instance ListRequest, yang dapat Anda gunakan untuk mendapatkan status operasi Daftar, kesalahan, atau respons Request yang mengandung PaketCollection yang dapat Anda iterate.

using System;
using UnityEditor;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example {
   static class ListPackageExample
   {
       static ListRequest Request;

       [MenuItem("Window/List Package Example")]
       static void List()
       {
           Request = Client.List();    // List packages installed for the project
           EditorApplication.update += Progress;
       }

       static void Progress()
       {
           if (Request.IsCompleted)
           {
               if (Request.Status == StatusCode.Success)
                   foreach (var package in Request.Result)
                       Debug.Log("Package name: " + package.name);
               else if (Request.Status >= StatusCode.Failure)
                   Debug.Log(Request.Error.message);

               EditorApplication.update -= Progress;
           }
       }
   }
}

Menyiapkan paket dalam proyek

Contoh ini menunjukkan cara menggunakan kelas Client ke embed salah satu paket yang telah diinstal dalam proyek Anda. Metode utama adalah metode Login Login, yang membuat salinan paket dan menyimpannya di bawah folder Packages proyek Anda.

Metode Login Login mengembalikan instance EmbedRequest, yang dapat Anda gunakan untuk mendapatkan status operasi Embed, kesalahan, atau respons Request yang mengandung informasi PackageInfo untuk embedded packagePaket embedded adalah paket yang Anda simpan di bawah direktori Packages di akar proyek Unity. Ini berbeda dari sebagian besar paket yang Anda unduh dari server paket. More info
Lihat di Glossary
baru.

Contoh ini juga menggunakan metode Login Login untuk mengakses koleksi paket saat ini dipasang di proyek Anda dan memilih yang pertama yang tidak tertanam atau dibangun.

Metode Login Login mengembalikan instance ListRequest, yang dapat Anda gunakan untuk mendapatkan status operasi Daftar, kesalahan, atau respons Request yang mengandung PaketCollection yang dapat Anda iterate.

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

namespace Unity.Editor.Example
{
    static class EmbedPackageExample
    {
        static String targetPackage;
        static EmbedRequest Request;
        static ListRequest LRequest;

        [MenuItem("Window/Embed Package Example")]
        static void GetPackageName()
        {
            // First get the name of an installed package
            LRequest = Client.List();
            EditorApplication.update += LProgress;
        }

        static void LProgress()
        {
            if (LRequest.IsCompleted)
            {
                if (LRequest.Status == StatusCode.Success)
                {
                    foreach (var package in LRequest.Result)
                    {
                        // Only retrieve packages that are currently installed in the
                        // project (and are neither Built-In nor already Embedded)
                        if (package.isDirectDependency && package.source
                            != PackageSource.BuiltIn && package.source
                            != PackageSource.Embedded)
                        {
                            targetPackage = package.name;
                            break;
                        }
                    }

                }
                else
                    Debug.Log(LRequest.Error.message);

                EditorApplication.update -= LProgress;

                Embed(targetPackage);

            }
        }

        static void Embed(string inTarget)
        {
            // Embed a package in the project
            Debug.Log("Embed('" + inTarget + "') called");
            Request = Client.Embed(inTarget);
            EditorApplication.update += Progress;

        }

        static void Progress()
        {
            if (Request.IsCompleted)
            {
                if (Request.Status == StatusCode.Success)
                    Debug.Log("Embedded: " + Request.Result.packageId);
                else if (Request.Status >= StatusCode.Failure)
                    Debug.Log(Request.Error.message);

                EditorApplication.update -= Progress;
            }
        }
    }
}


Program Manager Paket

Gunakan kelas Events untuk mendaftarkan pegangan acara dengan Manajer Paket. Kelas Events berisi dua peristiwa yang dapat Anda berlangganan, yang Manajer Paket menaikkan poin-poin ini:

Contoh berikut menunjukkan cara menggunakan kedua peristiwa ini.

Contoh menggunakan register Paket

using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example
{
    public class EventSubscribingExample_RegisteringPackages
    {
        public EventSubscribingExample_RegisteringPackages()
        {
            // Subscribe to the event using the addition assignment operator (+=).
            // This executes the code in the handler whenever the event is fired.
            Events.registeringPackages += RegisteringPackagesEventHandler;
        }

        // The method is expected to receive a PackageRegistrationEventArgs event argument.
        void RegisteringPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)
        {
            Debug.Log("The list of registered packages is about to change!");

           foreach (var addedPackage in packageRegistrationEventArgs.added)
            {
                Debug.Log($"Adding {addedPackage.displayName}");
            }

            foreach (var removedPackage in packageRegistrationEventArgs.removed)
            {
                Debug.Log($"Removing {removedPackage.displayName}");
            }

            // The changedFrom and changedTo collections contain the packages that are about to be updated.
            // Both collections are guaranteed to be the same size with indices matching the same package name.
            for (int i = 0; i <= packageRegistrationEventArgs.changedFrom.Count; i++)
            {
                var oldPackage = packageRegistrationEventArgs.changedFrom[i];
                var newPackage = packageRegistrationEventArgs.changedTo[i];

                Debug.Log($"Changing ${oldPackage.displayName} version from ${oldPackage.version} to ${newPackage.version}");
            }
        }
    }
}

Contoh menggunakan terdaftar Paket

using UnityEditor;
using UnityEditor.PackageManager;
using UnityEngine;

namespace Unity.Editor.Example
{
    public class EventSubscribingExample_RegisteredPackages
    {
        // You must use '[InitializeOnLoadMethod]' or '[InitializeOnLoad]' to subscribe to this event.
        [InitializeOnLoadMethod]
        static void SubscribeToEvent()
        {
            // This causes the method to be invoked after the Editor registers the new list of packages.
            Events.registeredPackages += RegisteredPackagesEventHandler;
        }

        static void RegisteredPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)
        {
            // Code executed here can safely assume that the Editor has finished compiling the new list of packages
            Debug.Log("The list of registered packages has changed!");
        }
    }
}
Paket jendela Manifest
Aset paket akses