codecamp

Unity 包的脚本API

您可以使用 Package Manager 脚本 API 以编程方式与 Package Manager 进行交互。例如,可能需要根据目标机器的平台来安装特定的包或版本。

系统的核心是 PackageManager.Client 类,可使用该类来查找包、浏览包列表以及通过脚本安装和卸载包。

另一个重要的类是 PackageManager.PackageInfo,其中包含包的状态,包括从包清单和注册表获取的元数据。例如,可获取适用于包的版本列表,或者获取在查找或安装包时可能发生的所有错误的列表

将包添加到项目

以下示例演示了如何使用 Client 类来安装包或者将包添加到项目中。

在调用 Client.Add 方法时,您可以指定包名称或具有特定版本的名称。例如,如果使用 Client.Add("com.unity.textmeshpro@1.3.0"),则会安装 TextMesh Pro 包版本 1.3.0,但如果仅使用 Client.Add("com.unity.textmeshpro"),则会安装(或更新到)该包的最新版本。

Client.Add 方法将返回 AddRequest 实例,可以用来获取状态、任何错误或 Request 响应(包含新添加的包的 PackageInfo 信息)。

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()
       {
           // 将包添加到项目
           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;
           }
       }
   }
}

浏览项目中的包列表

以下示例演示了如何使用 Client 类来遍历项目中的包。

Client.List 方法将返回 ListRequest 实例,可以用来获取 List 操作的状态、任何错误或者 Request 响应(包含您可以遍历的 PackageCollection)。

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();    // 列出已为项目安装的包
           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;
           }
       }
   }
}

在项目中嵌入包

以下示例演示了如何使用 Client 类来嵌入您的项目中已经安装的某个包。主方法是 Client.Embed 方法,可生成包的副本并存储在项目的 Packages 文件夹下面。

Client.Embed 方法将返回 EmbedRequest 实例,可以用来获取 Embed 操作的状态、任何错误或 Request 响应(包含新嵌入的包的 PackageInfo 信息)。

此示例还使用 Client.List 方法来访问项目中当前安装的包的集合,并选择第一个既不是嵌入式包也不是内置包的包。

Client.List 方法将返回 ListRequest 实例,可以用来获取 List 操作的状态、任何错误或者 Request 响应(包含您可以遍历的 PackageCollection)。

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()
        {
            // 首先获取一个已安装的包的名称
            LRequest = Client.List();
            EditorApplication.update += LProgress;
        }


        static void LProgress()
        {
            if (LRequest.IsCompleted)
            {
                if (LRequest.Status == StatusCode.Success)
                {
                    foreach (var package in LRequest.Result)
                    {
                        // 仅获取项目中当前安装的包
                        //(既不是内置的包也不是已嵌入的包)
                        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)
        {
            // 将包嵌入项目中
            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;
            }
        }
    }
}
Unity 添加和移除包
Unity 项目清单
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Unity 包

Unity 的 Package Manager

Unity Configuration

Unity Package Manage 窗口

Unity 查找包

Unity 添加和移除包

Unity 检查包

Unity 包的脚本API

Unity Resolution and conflict

Unity 项目清单

Unity 故障排除

Unity 创建自定义包

Unity 包清单

使用Unity

安装 Unity

Unity 许可证和激活

启动 Unity

Unity Upgrading Unity

Unity Legacy Upgrade Guides

升级到 Unity 5.4

升级到 Unity 5.0

Unity 的界面

Unity Scene 视图

Unity 游戏对象定位

Unity Inspector 窗口

Unity 资源工作流程

Unity 使用 Asset Store

Unity 资源数据库

Unity AssetBundle

Unity 脚本与资源

Unity 创建游戏玩法

Uinty 场景

Unity Scene Templates

Unity 游戏对象

Unity 原始对象和占位对象

Unity 预制件

Unity 层

Unity 约束

Unity 发布构建

Unity 编辑器功能

Unity Project Settings

Unity 版本控制

无标题文章

Unity 基于文本的场景文件

Unity 扩展编辑器

无标题文章

Uinty Profiler overview

Uinty The Profiler window

Uinty 了解 Unity 中的优化

Unity 导入

Unity 导入模型

Unity Model Import Settings 窗口

Unity Rig 选项卡

UnityAnimation 选项卡

Unity SpeedTree Import Settings 窗口

Unity 在 Unity 外部创建资源

Unity 输入

Unity 移动设备输入

Unity 2D

Unity 精灵

Unity Sprite Editor

Unity 精灵图集

Unity 主精灵图集和变体精灵图集

Unity 准备要分发的精灵图集

Unity Tilemap

Unity Tilemap workflow

Unity 在瓦片地图上绘制

Unity 等距瓦片地图

Unity 可编程瓦片

Unity 可编程画笔

Unity 2D 物理系统参考

Unity 2D 碰撞体

Unity 2D 关节

Unity 2D 效应器

Unity 图形

Unity 渲染管线

Unity 内置渲染管线

Unity 内置渲染管线中的渲染路径

Unity 可编程渲染管线

Unity 摄像机

Unity 摄像机技巧

Unity 遮挡剔除

Unity 摄像机参考

Unity 光照

Unity 光源

Unity 光源

Unity 光照模式

Unity Cookies (filename: Cookies.md)

Unity 阴影

Unity Lighting Settings Asset

Unity 光照模式

Unity Light Explorer 窗口

Unity 光照贴图

Unity 渐进光照贴图程序

Unity 光照贴图 UV

Unity 使用 Enlighten(已弃用)的实时全局光照

Unity 光照探针

Unity 反射探针

Unity 预计算的光照数据

Unity 网格、材质、着色器和纹理

Unity 网格组件

Unity 文本网格

Unity 程序化网格几何体

Unity 创建和使用材质

Unity 纹理

Unity 导入纹理

Unity Texture compression formats

Unity 编写着色器

Unity 标准着色器

Unity 材质参数

Unity 旧版着色器

Unity 普通着色器系列

Unity 透明着色器系列

Unity 透明镂空着色器系列

Unity 自发光着色器系列

Unity 反光着色器系列

Unity 着色器参考

Unity 编写表面着色器

Unity 编写顶点和片元着色器

Unity ShaderLab 语法

ShaderLab:SubShader

Unity 高级 ShaderLab 主题

Unity 粒子系统

Unity 创建环境

Unity 天空

Unity 视觉效果组件

Unity 高级渲染功能

Unity 优化图形性能

Unity 颜色空间

Unity 图形教程

Unity 物理系统

Unity Scripting

Unity Setting Up SCripting Environment

Unity Scripting concepts

Unity Important Classes

Unity architecture

Unity Overview of .NET in Unity

Unity Scripting backends

Unity Code reloading in the Unity Editor

Unity 脚本序列化

Unity Script compilation

Unity Assembly definitions

Unity 多玩家和联网

Unity 音频

Unity 动画

Unity 用户界面 (UI)

Unity 导航和寻路

Unity 服务

Unity Setting up your project for Unity services

Unity Organizations

Unity Analytics

Unity Analytics Dashboard

Unity Analytics 事件

Unity 自定义事件

Unity Remote Settings

Unity 在 Unity 项目中使用 Remote Settings

Unity 变现

Unity 升级 Unity Analytics

Unity Analytics 和欧盟一般数据保护条例 (GDPR)

Unity Cloud Build

Unity Cloud Content Delivery

Unity IAP

Unity 设置 Unity IAP

Unity 跨平台指南

Unity 应用商店指南

Unity 实现应用商店

Unity 应用商店模块

Unity Collaborate

Unity XR

Unity 单通道立体渲染(双宽渲染)

Unity XR SDK

Unity Provider setup

Unity Subsystems

Unity Interfaces

Unity 开源代码仓库

Unity Asset Store 发布

Unity 平台开发

Unity 实验性

Unity 旧版主题

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }