<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Document on 陈巧倩</title>
    <link>https://www.chenqiaoqian.com/tags/document/</link>
    <description>Recent content in Document on 陈巧倩</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 31 Oct 2023 11:13:34 +0800</lastBuildDate><atom:link href="https://www.chenqiaoqian.com/tags/document/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-UI Toolkit project settings(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/31/2023-10-31-unity-document-99/</link>
      <pubDate>Tue, 31 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/31/2023-10-31-unity-document-99/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;ui-toolkit-project-settings&#34;&gt;UI Toolkit project settings &lt;a href=&#34;#ui-toolkit-project-settings&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要查看 UI Toolkit 项目设置，请转到&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;UI Toolkit&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;ui-builder&#34;&gt;UI Builder &lt;a href=&#34;#ui-builder&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 UI Builder 中创建新的&lt;strong&gt;UI&lt;/strong&gt;文档（UXML）时，默认设置了某些功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UI 文档被设置为适用于运行时 UI。&lt;/li&gt;
&lt;li&gt;UI Builder 库仅显示适用于运行时 UI 的 UI 控件。&lt;/li&gt;
&lt;li&gt;您可以使用鼠标滚轮或轨迹板轻松缩放 UI Builder 中&lt;strong&gt;视口&lt;/strong&gt;窗口的画布。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了确保新创建的文档默认与编辑器 UI 兼容，并且 UI Builder 库显示用于编辑器 UI 的其他控件，请选择&lt;strong&gt;默认启用编辑器扩展编写&lt;/strong&gt;。有关更多信息，请参阅为 UI 文档（UXML）启用编辑器扩展编写。&lt;/p&gt;
&lt;p&gt;为了禁用使用鼠标滚轮或轨迹板缩放画布，请选择&lt;strong&gt;禁用鼠标滚轮 / 轨迹板缩放视口&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;高级&#34;&gt;高级 &lt;a href=&#34;#%e9%ab%98%e7%ba%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;UI Toolkit 事件调试器是一个实验性功能，可以帮助您了解如何处理各种 UI Toolkit 事件，例如输入、布局和绘制。&lt;strong&gt;UI Toolkit 事件调试器&lt;/strong&gt;窗口默认处于禁用状态。要启用它，请选择&lt;strong&gt;启用事件调试器&lt;/strong&gt;。一旦启用，可以通过选择&lt;strong&gt;Windows&lt;/strong&gt; &amp;gt; &lt;strong&gt;UI Toolkit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Event Debugger&lt;/strong&gt;来访问它。&lt;/p&gt;
&lt;p&gt;UI Toolkit 布局调试器是一种实验性功能，可以帮助您了解哪些样式和设置会影响屏幕上的元素。&lt;strong&gt;UI Toolkit 布局调试器&lt;/strong&gt;窗口默认处于禁用状态。要启用它，请选择&lt;strong&gt;启用布局调试器&lt;/strong&gt;。一旦启用，可以通过选择 &lt;strong&gt;Windows&lt;/strong&gt; &amp;gt; &lt;strong&gt;UI Toolkit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Layout Debugger&lt;/strong&gt;来访问它。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Time(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/30/2023-10-30-unity-document-98/</link>
      <pubDate>Mon, 30 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/30/2023-10-30-unity-document-98/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;time&#34;&gt;Time &lt;a href=&#34;#time&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;时间&lt;/strong&gt;设置（菜单： &lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;em&gt;时间&lt;/em&gt;类别）允许您设置一些控制游戏时间的属性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-30-unity-document-98/TimeSet.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fixed Timestep&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一个与帧率无关的间隔，用于控制执行物理计算和 &lt;strong&gt;FixedUpdate ()&lt;/strong&gt; 事件的时机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Maximum Allowed Timestep&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一个与帧率无关的间隔，用于限制在帧率低时的最差情况。物理计算和 &lt;strong&gt;FixedUpdate ()&lt;/strong&gt; 事件在超过指定时间时不会执行。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Time Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;时间推进的速度。更改此值以模拟子弹时间效果。值为 1 表示实时。值为 0.5 表示减速一半；值为 2 表示加速两倍。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Maximum Particle Timestep&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一个与帧率无关的间隔，用于控制粒子模拟的精度。当帧时间超过此值时，粒子更新会在一帧中执行多次，以使每个步骤的持续时间不超过此值。例如，以 30fps 运行的游戏（每帧 0.03 秒）可以以 60fps（步长为 0.0167 秒）运行粒子更新，以获得更准确的模拟，但可能会牺牲性能。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;详细信息&#34;&gt;详细信息 &lt;a href=&#34;#%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;时间管理器&lt;/strong&gt;允许您全局设置属性，但在游戏进行中，通过脚本设置这些属性通常比较有用（例如，将&lt;strong&gt;时间缩放&lt;/strong&gt;设置为零是暂停游戏的一种有效方式）。请参阅有关时间和帧率管理的页面，了解如何在 Unity 中管理时间的完整详细信息。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Tags and Layers(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/29/2023-10-29-unity-document-97/</link>
      <pubDate>Sun, 29 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/29/2023-10-29-unity-document-97/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;tags-and-layers&#34;&gt;Tags and Layers &lt;a href=&#34;#tags-and-layers&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;标签和图层&lt;/strong&gt;设置（主菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;标签和图层&lt;/strong&gt;类别）允许您设置标签、排序图层和图层。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/TagManager55.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Tags and Layers 管理器，在定义任何自定义标签或图层之前&lt;/p&gt;
&lt;h2 id=&#34;tags&#34;&gt;Tags &lt;a href=&#34;#tags&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;标签&lt;/strong&gt;是您可以用来识别项目中对象的标记值（有关详细信息，请参阅关于标签的文档）。要添加新的标签，请点击列表底部右侧的加号按钮（+），然后为新标签命名。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/TagManagerAddNew.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请注意，一旦为标签命名，就无法更改名称。要删除标签，点击标签，然后点击列表底部右侧的减号按钮（-）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/TagManagerAddedNew.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;sorting-layers&#34;&gt;Sorting Layers &lt;a href=&#34;#sorting-layers&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;排序图层与 2D 系统中的 Sprite 图形一起使用。&lt;strong&gt;排序&lt;/strong&gt;指的是不同 Sprite 的覆盖顺序。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/SortingLayerManagerAddNew.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要添加和删除排序图层，请使用列表底部右侧的加号和减号按钮（+/-）。要更改它们的顺序，请拖动每个图层项目左侧的手柄。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/SortingLayerManagerAddedNew.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;layers&#34;&gt;Layers &lt;a href=&#34;#layers&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Unity 编辑器中使用图层作为创建具有共同特征的对象组的方式（有关详细信息，请参阅关于图层的文档）。主要使用图层来限制射线投射或渲染等操作，以仅应用于相关的对象组。标记为&lt;strong&gt;Builtin Layer&lt;/strong&gt;的图层是 Unity 使用的默认图层，无法编辑。您可以自定义标记为&lt;strong&gt;User Layer&lt;/strong&gt;的图层。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-29-unity-document-97/LayerManagerAddNew.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要自定义&lt;strong&gt;User Layers&lt;/strong&gt;，请为每个要使用的图层输入自定义名称。请注意，无法增加图层的数量，但与标签不同，可以重命名图层。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Script Execution Order settings(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/28/2023-10-28-unity-document-96/</link>
      <pubDate>Sat, 28 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/28/2023-10-28-unity-document-96/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;script-execution-order-settings&#34;&gt;Script Execution Order settings &lt;a href=&#34;#script-execution-order-settings&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用&lt;strong&gt;脚本执行顺序&lt;/strong&gt;设置来指定 Unity 调用不同 MonoBehaviour 类的事件函数的相对顺序。例如，您可以指定 Unity 在运行您的&lt;code&gt;Rotation&lt;/code&gt; MonoBehaviour 脚本的事件函数之前先运行您的&lt;code&gt;MoveForward&lt;/code&gt; MonoBehaviour 脚本的事件函数。&lt;/p&gt;
&lt;p&gt;顺序适用于每个事件函数类别，因此 Unity 会按照指定的顺序调用帧中需要调用的任何 Awake 函数，并在同样的顺序中调用活动的&lt;strong&gt;游戏对象&lt;/strong&gt;的任何 Update 函数。&lt;/p&gt;
&lt;p&gt;您可以在项目设置检查器中调整脚本执行顺序。转到菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;脚本执行顺序&lt;/strong&gt;类别。&lt;/p&gt;
&lt;p&gt;**注意：**如果将多个脚本类型分配给多个游戏对象，脚本执行顺序指定一种类型的所有脚本在另一种类型的所有脚本之前执行，而不考虑它们附加到的游戏对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-28-unity-document-96/ScriptExecSet.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用 “加号（+）” 按钮将脚本添加到设置的&lt;strong&gt;检查器&lt;/strong&gt;窗口中，并选择类名。要删除脚本，请使用列表中每个项目右侧的减号（-）按钮。&lt;/p&gt;
&lt;p&gt;要指定执行顺序，请将列表中的项目拖动到所需的位置或编辑列表中类的顺序数字。分配的数字表示相对顺序。Unity 从上到下按顺序执行列表（从具有较负数顺序数字的脚本到具有较高正数数字的脚本）。Unity 在列表之外的任何脚本在&lt;strong&gt;默认时间&lt;/strong&gt;段执行，该时间段在具有负数顺序数字的脚本之后，并在具有正数顺序数字的脚本之前。&lt;/p&gt;
&lt;p&gt;顺序数字是任意的，不代表任何物理数量。编辑器将这些值存储在脚本元数据文件中。在列表中添加或移动其他脚本时，可以留出顺序数字之间的间隔，以避免不必要的文件更改。&lt;/p&gt;
&lt;p&gt;当多个场景被附加加载时，配置的脚本执行顺序会逐个应用于一个场景。例如，如果配置的执行顺序是&lt;code&gt;Script1&lt;/code&gt; &amp;gt; &lt;code&gt;Script2&lt;/code&gt; &amp;gt; &lt;code&gt;Script3&lt;/code&gt;，则 Unity 会先更新第一个场景中所有&lt;code&gt;Script1&lt;/code&gt;的实例，然后更新第一个场景中所有&lt;code&gt;Script2&lt;/code&gt;的实例，然后更新第一个场景中所有&lt;code&gt;Script3&lt;/code&gt;的实例，然后才会运行下一个场景中的任何更新。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 此设置窗口中指定的执行顺序不影响标有 RuntimeInitializeOnLoadMethod 属性的函数的顺序。（无法为运行时初始化指定顺序。）&lt;/p&gt;
&lt;p&gt;有关 Unity 在每帧中调用不同类别的事件函数的时机的信息，请参阅事件函数的执行顺序。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Quality(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/27/2023-10-27-unity-document-95/</link>
      <pubDate>Fri, 27 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/27/2023-10-27-unity-document-95/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;quality&#34;&gt;Quality &lt;a href=&#34;#quality&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity 允许您设置尝试呈现的图形质量级别。一般来说，图形质量会以帧率为代价，因此在移动设备或旧硬件上，最好不要追求最高质量，因为它往往会对游戏性产生不利影响。可以使用&lt;strong&gt;质量设置&lt;/strong&gt;（菜单：&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Quality&lt;/strong&gt;类别）在编辑器中为所选择的设备选择&lt;strong&gt;质量级别&lt;/strong&gt;。它分为两个主要部分：质量矩阵位于顶部；在其下方，显示活动&lt;strong&gt;质量级别&lt;/strong&gt;的设置。&lt;/p&gt;
&lt;p&gt;Unity 允许您为给定质量选项的组合分配一个名称，以便于参考。矩阵的行让您选择每个&lt;strong&gt;质量级别&lt;/strong&gt;适用于哪个平台。矩阵底部的&lt;strong&gt;默认&lt;/strong&gt;行本身并不是一个&lt;strong&gt;质量级别&lt;/strong&gt;，而是为每个平台设置默认的&lt;strong&gt;质量级别&lt;/strong&gt;（列中的绿色复选框表示该平台当前选择的级别）。Unity 预先启用了六个&lt;strong&gt;质量级别&lt;/strong&gt;，但您可以添加自己的级别。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-27-unity-document-95/quality-settings-panel.png&#34; alt=&#34;&#34;&gt;
A: 在此项目中定义的&lt;strong&gt;质量级别&lt;/strong&gt;。
B: 当前的活动&lt;strong&gt;质量级别&lt;/strong&gt;。
C: 当前&lt;strong&gt;质量级别&lt;/strong&gt;的配置。&lt;/p&gt;
&lt;p&gt;要删除不需要的&lt;strong&gt;质量级别&lt;/strong&gt;，请使用垃圾桶图标（最右侧的列）。&lt;/p&gt;
&lt;p&gt;要选择编辑一个&lt;strong&gt;质量级别&lt;/strong&gt;，请在矩阵中点击其名称。&lt;/p&gt;
&lt;p&gt;要定义一个新的&lt;strong&gt;质量级别&lt;/strong&gt;，请单击&lt;strong&gt;添加质量级别&lt;/strong&gt;按钮，并在&lt;strong&gt;名称&lt;/strong&gt;属性框中键入新级别的名称。&lt;/p&gt;
&lt;p&gt;然后，您可以选择需要更新或设置的以下文档中记录的质量选项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;渲染&lt;/li&gt;
&lt;li&gt;纹理&lt;/li&gt;
&lt;li&gt;粒子&lt;/li&gt;
&lt;li&gt;地形&lt;/li&gt;
&lt;li&gt;阴影&lt;/li&gt;
&lt;li&gt;异步资源上传&lt;/li&gt;
&lt;li&gt;细节级别&lt;/li&gt;
&lt;li&gt;网格&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;渲染&#34;&gt;渲染 &lt;a href=&#34;#%e6%b8%b2%e6%9f%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Render Pipeline（渲染流水线）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于此&lt;strong&gt;质量级别&lt;/strong&gt;的渲染流水线资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pixel Light Count（像素光数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当 Unity 使用正向渲染时，设置&lt;strong&gt;像素光&lt;/strong&gt;的最大数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;AntiAliasing（抗锯齿）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 GPU 执行的多重采样抗锯齿（MSAA）级别。选项有&lt;em&gt;Disabled&lt;/em&gt;、&lt;em&gt;2x Multi Sampling&lt;/em&gt;、&lt;em&gt;4x Multi Sampling&lt;/em&gt;和&lt;em&gt;8x Multi Sampling&lt;/em&gt;。抗锯齿平滑了多边形边缘的外观。随着抗锯齿级别的增加，图形平滑度会增加，对 GPU 的性能成本也会增加。MSAA 仅与正向渲染兼容。有关其他类型抗锯齿和兼容性的更多信息，请参见后期处理。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Realtime Reflection Probes（实时反射探针）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可在游戏过程中更新反射探针。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Resolution Scaling Fixed DPI Factor（分辨率缩放固定 DPI 因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将设备的屏幕分辨率缩小到其本机分辨率以下。详细信息请参阅 Android 播放器设置和 iOS 播放器设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;V Sync Count（垂直同步计数）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择是否与垂直消隐同步渲染，或者不进行任何同步。Unity 可以根据显示设备的刷新率与呈现进行同步，以避免撕裂伪影。可用的选项有&lt;em&gt;Every V Blank&lt;/em&gt;、&lt;em&gt;Every Second V Blank&lt;/em&gt;或&lt;em&gt;Don&amp;rsquo;t Sync&lt;/em&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Realtime GI CPU Usage（实时 GI CPU 使用）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在运行时允许 Enlighten 实时全局光照使用的 CPU 计算资源。增加此值可以让系统更快地响应光照变化，但会增加 CPU 的使用时间开销。**注意：**某些平台允许所有 CPU 被工作线程占用，而某些平台则实行最大限制。例如，某些游戏主机最多允许使用 4 个 CPU 核心。对于 Android 设备，如果是 bigLittle 架构，则只使用小型 CPU；否则，最大值为总 CPU 数减 1。请注意，此属性仅适用于可编写脚本的渲染流水线。如果使用内建渲染流水线，则可以在图形设置中找到该属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;撕裂问题&#34;&gt;撕裂问题 &lt;a href=&#34;#%e6%92%95%e8%a3%82%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;显示设备上的图像并不是连续更新的，而是在固定时间间隔内更新，类似于 Unity 中帧的更新。然而，Unity 的更新不一定与显示器的更新同步，因此可能在显示器仍在渲染上一帧时，Unity 发出一个新的帧。这会在屏幕上的帧变换位置产生一种视觉伪影，称为 “撕裂”。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-27-unity-document-95/Tearing.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;撕裂的模拟示例。在放大的部分，图片的位移是明显可见的。&lt;/p&gt;
&lt;p&gt;可以让 Unity 仅在显示设备不更新的时间段内切换帧，即所谓的 “垂直消隐” 期间。在&lt;strong&gt;质量设置&lt;/strong&gt;中的&lt;strong&gt;V Sync Count（垂直同步计数）&lt;/strong&gt; 选项可以将帧切换与设备的垂直消隐同步，或者选项为每隔一个垂直消隐同步一次切换。如果游戏需要超过一个设备更新来完成一帧的渲染，后者可能会很有用。&lt;/p&gt;
&lt;h2 id=&#34;纹理&#34;&gt;纹理 &lt;a href=&#34;#%e7%ba%b9%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Global Mipmap Limit（全局 mipmap 级别限制）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity 在渲染纹理时使用的最高分辨率 mipmap 级别。较高的 mipmap 级别具有较低的分辨率，这意味着它们需要更少的 GPU 内存和 GPU 处理时间。此属性仅影响纹理形状为 2D 或 2D Array 的纹理。选项有：&lt;strong&gt;0：完全分辨率&lt;/strong&gt;; &lt;strong&gt;1：一半分辨率&lt;/strong&gt;; &lt;strong&gt;2：四分之一分辨率&lt;/strong&gt;; &lt;strong&gt;3：八分之一分辨率&lt;/strong&gt;。有关这些分辨率的详细信息，请参见 mipmap 介绍。不具有 mipmap 的纹理会以其完全分辨率渲染，而不管您选择的选项如何。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mipmap Limit Groups（mipmap 级别限制组）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用这些组来指定特定的纹理应忽略全局 TextureMipmapLimit 或添加偏差。这样可以使您更多地分配内存预算以用于重要纹理，并减少用于不太重要纹理的内存分配。此属性仅影响纹理形状为 2D 或 2D Array 的纹理。选项有：&lt;strong&gt;Offset Global Mipmap Limit：–3&lt;/strong&gt;；&lt;strong&gt;Offset Global Mipmap Limit：–2&lt;/strong&gt;；&lt;strong&gt;Offset Global Mipmap Limit：–1&lt;/strong&gt;；&lt;strong&gt;Use Global Mipmap Limit&lt;/strong&gt;；&lt;strong&gt;Offset Global Mipmap Limit：+1&lt;/strong&gt;；&lt;strong&gt;Offset Global Mipmap Limit：+2&lt;/strong&gt;；&lt;strong&gt;Offset Global Mipmap Limit：+3&lt;/strong&gt;；&lt;strong&gt;Override Global Mipmap Limit：Full Resolution&lt;/strong&gt;；&lt;strong&gt;Override Global Mipmap Limit：Half Resolution&lt;/strong&gt;；&lt;strong&gt;Override Global Mipmap Limit：Quarter Resolution&lt;/strong&gt;；&lt;strong&gt;Override Global Mipmap Limit：Eighth Resolution&lt;/strong&gt;。偏移量会对适用的纹理组的 Mipmap Limit 值进行偏置。例如，如果&lt;strong&gt;Global Texture Mipmap Limit（全局纹理 mipmap 级别限制）**为**Half Resolution（一半分辨率）&lt;/strong&gt;，并选择&lt;strong&gt;Offset Global Mipmap Limit：–1（偏移全局 mipmap 级别限制：–1）&lt;/strong&gt;，则适用的纹理组的新 Mipmap Limit 为&lt;strong&gt;Full Resolution（完全分辨率）&lt;/strong&gt;。覆盖值将替换适用的纹理组的&lt;strong&gt;Global Mipmap Limit（全局 mipmap 级别限制）&lt;/strong&gt;。例如，如果&lt;strong&gt;Global Texture Mipmap Limit（全局纹理 mipmap 级别限制）**为**Half Resolution（一半分辨率）&lt;/strong&gt;，并选择&lt;strong&gt;Override Global Mipmap Limit：Full Resolution（覆盖全局 mipmap 级别限制：完全分辨率）&lt;/strong&gt;，则适用的纹理组的新 Mipmap Limit 为&lt;strong&gt;Full Resolution（完全分辨率）&lt;/strong&gt;。 ** 注意：** 如果删除或重命名 Mipmap Limit Group（mipmap 级别限制组），将触发对话框，提供重新导入该组中纹理的选项。撤消操作不会还原这些导入更改。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Anisotropic Textures（各向异性纹理）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity 是否以及如何使用各向异性纹理。选项有：&lt;em&gt;Disabled（禁用）&lt;/em&gt;、&lt;em&gt;Per Texture（每个纹理）*和&lt;/em&gt;Forced On（始终启用）*。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Texture Streaming（纹理流式传输）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此复选框以使用 Mipmap 流式传输。如果您不打算使用 Mipmap 流式传输系统，请禁用此功能以避免任何额外开销。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Add All Cameras（添加所有相机）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此复选框可使 Unity 为项目中的所有活动相机计算 Mipmap 流式传输。默认情况下启用此选项。有关详细信息，请参阅 Mipmap 流式传输系统：配置相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Memory Budget（内存预算）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在使用 Mipmap 流式传输系统时为所有加载的纹理分配的总内存量（以 MB 为单位）。默认设置为 512 MB。有关详细信息，请参阅 Mipmap 流式传输系统：设置内存预算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Renderers Per Frame（每帧渲染的渲染器数量）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此属性控制 Mipmap 流式传输系统对主线程和关联作业的 CPU 处理开销。默认值为 512（即每帧处理 512 个网格渲染器）。较低的值会减少处理时间，但会增加 Unity 加载 mipmap 的延迟。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Max Level Reduction（最大级别减少）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Mipmap 流式传输系统在达到&lt;strong&gt;内存预算&lt;/strong&gt;时可以丢弃的最大 mipmap 数量。默认设置为 2（这意味着系统最多丢弃两个 mipmap）。此值也是 Mipmap 流式传输系统在启动时初始化的 mipmap 级别。例如，当该值设置为 2 时，Unity 在初始加载时跳过两个最高级别的 mipmap。有关详细信息，请参阅 Mipmap 流式传输系统：设置内存预算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Max IO Requests（最大 IO 请求数量）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Mipmap 流式传输系统同时处于活动状态的纹理文件输入 / 输出（IO）请求数量的最大值。默认设置为 1024。此默认值已足够高，以防止超过由异步上传流水线或文件系统本身活动生成的 IO 上限。如果场景纹理内容发生显著且快速的变化，系统可能会尝试加载比文件 IO 跟得上的纹理 mipmap 更多。降低此值可以减少 Mipmap 流式传输系统生成的 IO 带宽。结果是更快响应变化的 mipmap 需求。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;粒子系统&#34;&gt;粒子系统 &lt;a href=&#34;#%e7%b2%92%e5%ad%90%e7%b3%bb%e7%bb%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Soft Particles（软粒子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指示是否在透明&lt;strong&gt;GameObject&lt;/strong&gt;的边缘处淡化粒子。更多信息，请参见软粒子。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Particle Raycast Budget（粒子射线投射预算）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于近似&lt;strong&gt;粒子系统&lt;/strong&gt;碰撞（中等或低质量的碰撞）的最大射线投射次数。请参见粒子系统碰撞模块。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;软粒子&#34;&gt;软粒子 &lt;a href=&#34;#%e8%bd%af%e7%b2%92%e5%ad%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;软粒子在与其他&lt;strong&gt;场景&lt;/strong&gt;几何体相交的区域附近淡出。这样看起来更漂亮，但处理资源更多，仅在支持深度纹理的平台上有效。此外，您必须使用延迟渲染路径，或者使相机从脚本渲染深度纹理。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-27-unity-document-95/SoftParticlesOff.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;没有软粒子 - 与场景的相交处可见&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-27-unity-document-95/SoftParticlesOn.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用软粒子 - 相交处平滑淡出。&lt;/p&gt;
&lt;h2 id=&#34;地形&#34;&gt;地形 &lt;a href=&#34;#%e5%9c%b0%e5%bd%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Billboards Face Camera Position（广告牌面向相机位置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项，强制广告牌在渲染时面向相机位置而不是相机平面。这会产生更好、更逼真的图像，但渲染成本更高。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Legacy Details Distribution（使用旧版细节分布）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项，使用先前支持的分布算法，该算法经常导致细节重叠。用于向后兼容 Unity 2022.1 及更早版本中的地形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Terrain Setting Overrides（地形设置覆盖）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用时，各种覆盖设置会覆盖所有活动地形的值（除了启用了 “忽略质量设置” 设置的地形）。有关这些设置的更多信息，请参见地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Pixel Error（像素误差）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形像素误差的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Base Map Dist（基础贴图距离）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形基础贴图距离的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Detail Density Scale（细节密度缩放）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形细节密度缩放的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Detail Distance（细节距离）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形细节距离的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Tree Distance（树木距离）思路&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形树木距离的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Billboard Start（广告牌起始距离）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形广告牌起始距离的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Fade Length（淡出长度）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形淡出长度的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Max Mesh Trees（最大网格树木数量）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置地形最大网格树木数量的值。请参阅地形设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;阴影&#34;&gt;阴影 &lt;a href=&#34;#%e9%98%b4%e5%bd%b1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadowmask Mode（阴影遮罩模式）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在使用 Shadowmask 混合照明模式时选择阴影遮罩的行为。使用照明窗口（菜单：&lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;Rendering&lt;/strong&gt; &amp;gt; &lt;strong&gt;Lighting&lt;/strong&gt;）在场景中设置此选项。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Distance Shadowmask（距离阴影遮罩）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 在 &lt;strong&gt;Shadow Distance（阴影距离）&lt;/strong&gt; 内使用实时阴影，超过该距离使用烘焙阴影。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadowmask（阴影遮罩）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;投射阴影的静态 GameObject 始终投射烘焙阴影。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadows（阴影）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的阴影类型。可用的选项有Hard and Soft Shadows（硬阴影和软阴影）、Hard Shadows Only（仅硬阴影）和Disable Shadows（禁用阴影）。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadow Resolution（阴影分辨率）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择以哪种分辨率渲染阴影。可用的选项有Low Resolution（低分辨率）*、*Medium Resolution（中等分辨率）、High Resolution（高分辨率）和Very High Resolution（非常高分辨率）。分辨率越高，处理开销越大。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadow Projection（阴影投影）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择从平行光源投射阴影的方法。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Close Fit（紧密拟合）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;渲染更高分辨率的阴影，但如果相机移动，有时会稍微抖动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Stable Fit（稳定拟合）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;渲染较低分辨率的阴影，但它们不会随相机的移动而抖动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadow Distance（阴影距离）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入从相机可见的阴影的最大距离。Unity 不渲染超出此距离的阴影。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadow Near Plane Offset（阴影近平面偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入近平面的偏移量，以解决大三角形被阴影煎饼效应扭曲的问题。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shadow Cascades（阴影级联）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的阴影级联数量。可用的选项有&lt;em&gt;No Cascades（没有级联）&lt;/em&gt;、Two Cascades（两个级联）或Four Cascades（四个级联）。级联数量越高，质量越好，但处理开销也越大（有关详细信息，请参阅阴影级联）。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cascade splits（级联分割）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过移动每个级联之间的垂直线条，调整级联阴影分割。根据 &lt;strong&gt;Shadow Cascades（阴影级联）&lt;strong&gt;设置的值，可以看到两种或四种不同的颜色。如果&lt;/strong&gt;Shadow Cascades（阴影级联）&lt;/strong&gt; 设置为&lt;em&gt;No Cascades（没有级联）&lt;/em&gt;，则此整个控件将被隐藏。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;异步资源上传&#34;&gt;异步资源上传 &lt;a href=&#34;#%e5%bc%82%e6%ad%a5%e8%b5%84%e6%ba%90%e4%b8%8a%e4%bc%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Time Slice（时间片）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每帧 Unity 在将缓冲的纹理和网格数据上传到 GPU 的 CPU 时间量（以毫秒计）。请参阅加载纹理和网格数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Buffer Size（缓冲区大小）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Unity 用于将纹理和网格数据流式传输到 GPU 的 Async Upload Buffer 的大小（以兆字节为单位）。请参阅加载纹理和网格数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Persistent Buffer（持久缓冲区）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指示上传缓冲区是否应在没有剩余要上传的内容时仍然存在。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;细节级别&#34;&gt;细节级别 &lt;a href=&#34;#%e7%bb%86%e8%8a%82%e7%ba%a7%e5%88%ab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lod Bias（LOD 偏差）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置细节级别（LOD）偏差。根据对象在屏幕上的大小选择 LOD 级别。当大小介于两个 LOD 级别之间时，可以有偏向于较少详细或较多详细的两个可用模型之一。此属性设置为从 0 到 + 无穷大的分数。当设置在 0 和 1 之间时，更侧重于较少的细节。大于 1 的设置更偏重于更多的细节。例如，将 LOD 偏差设置为 2，并在 50% 距离处进行切换，实际上只有在 25% 上进行了 LOD 切换。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Maximum LOD Level（最大 LOD 级别）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置游戏使用的最高 LOD 级别。有关更多信息，请参见最大 LOD 级别。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;最大-lod-级别&#34;&gt;最大 LOD 级别 &lt;a href=&#34;#%e6%9c%80%e5%a4%a7-lod-%e7%ba%a7%e5%88%ab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 不使用低于最大 LOD 级别的模型，并在构建时将它们省略（从而节省存储和内存空间）。Unity 从与目标平台的&lt;strong&gt;质量&lt;/strong&gt;设置关联的所有最大 LOD 值中选择最小的 LOD 值。如果包含一个 LOD 级别，则该 LODGroup 中的模型会在构建中被包括，并且始终在运行时加载该 LODGroup 中的模型，而不管所使用的质量设置如何。例如，如果在任何质量设置中使用 LOD 级别 0，则所有 LOD 级别都包含在构建中，并且所有引用的模型都会在运行时加载。&lt;/p&gt;
&lt;h2 id=&#34;网格&#34;&gt;网格 &lt;a href=&#34;#%e7%bd%91%e6%a0%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Skin Weights（蒙皮权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择在动画中可以影响给定顶点的骨骼数。可用选项为&lt;em&gt;1 个骨骼&lt;/em&gt;、&lt;em&gt;2 个骨骼&lt;/em&gt;、&lt;em&gt;4 个骨骼&lt;/em&gt;和&lt;em&gt;无限制&lt;/em&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Preset Manager(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/26/2023-10-26-unity-document-94/</link>
      <pubDate>Thu, 26 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/26/2023-10-26-unity-document-94/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;预设管理器&#34;&gt;预设管理器 &lt;a href=&#34;#%e9%a2%84%e8%ae%be%e7%ae%a1%e7%90%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;预设管理器&lt;/strong&gt;是项目设置中的一个窗口（菜单：&lt;strong&gt;Edit &amp;gt; Project Settings &amp;gt; Preset Manager&lt;/strong&gt;），允许您管理自定义的预设。通过创建预设，您可以为将组件添加到游戏对象或将新资源添加到项目时指定默认属性。您定义的默认预设会覆盖 Unity 的默认设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：您无法设置项目设置、首选项设置或原生资源（如材质、动画或精灵表）的默认属性。&lt;/p&gt;
&lt;p&gt;除了在创建新的组件和导入资源时使用默认预设之外，当您在检查器窗口的组件上下文菜单中使用&lt;strong&gt;重置&lt;/strong&gt;命令时，Unity 还会应用默认预设。&lt;/p&gt;
&lt;h2 id=&#34;预设管理器参考&#34;&gt;预设管理器参考 &lt;a href=&#34;#%e9%a2%84%e8%ae%be%e7%ae%a1%e7%90%86%e5%99%a8%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-26-unity-document-94/preset-reference.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;筛选&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用&lt;strong&gt;筛选&lt;/strong&gt;字段来定义预设适用于哪些组件或导入器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;预设&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用&lt;strong&gt;预设&lt;/strong&gt;字段设置要使用的预设。默认情况下，预设在创建后适用于该预设类型的所有组件或资源导入器。如果您只想将其应用于特定的组件或资源类型，请使用&lt;strong&gt;筛选&lt;/strong&gt;字段定义何时应用预设。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;添加默认预设&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此按钮来选择要添加预设的&lt;strong&gt;导入器&lt;/strong&gt;、&lt;strong&gt;组件&lt;/strong&gt;或&lt;strong&gt;ScriptableObject&lt;/strong&gt;。如果选择&lt;strong&gt;导入器&lt;/strong&gt;或&lt;strong&gt;组件&lt;/strong&gt;，请选择要为其创建预设的资源导入器或组件类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;为默认设置分配预设&#34;&gt;为默认设置分配预设 &lt;a href=&#34;#%e4%b8%ba%e9%bb%98%e8%ae%a4%e8%ae%be%e7%bd%ae%e5%88%86%e9%85%8d%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要指定在预设管理器中使用的默认设置预设，请按以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果您的项目中尚未有可用于默认设置的预设，请创建一个预设。&lt;/li&gt;
&lt;li&gt;通过选择&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Preset Manager&lt;/strong&gt;，打开预设管理器。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;添加默认预设&lt;/strong&gt;，然后选择默认类型。您选择的预设类型将显示在&lt;strong&gt;预设管理器&lt;/strong&gt;列表中。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-26-unity-document-94/preset-manager-add-type.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;在预设字段中，单击&lt;strong&gt;预设选择器&lt;/strong&gt;（圆形图标）。&lt;/li&gt;
&lt;li&gt;从&lt;strong&gt;选择预设&lt;/strong&gt;窗口中，选择此预设类型的预设。或者，您还可以从&lt;strong&gt;项目&lt;/strong&gt;窗口将预设拖放到预设字段中。&lt;/li&gt;
&lt;li&gt;如果要将其他预设字段添加到列表中，请单击&lt;strong&gt;添加&lt;/strong&gt;（&lt;strong&gt;+&lt;/strong&gt;）选项卡。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-26-unity-document-94/preset-manager-add-default-presets.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果为变换组件设置了默认预设，当您创建新的&lt;strong&gt;GameObject&lt;/strong&gt;时，Unity 不会使用 Position 值。相反，它会将默认 Position 值设置为&lt;strong&gt;场景&lt;/strong&gt;视图的中心。要将 Position 值设置为默认预设值，请选择&lt;strong&gt;变换组件&lt;/strong&gt;的&lt;strong&gt;更多项&lt;/strong&gt;按钮（&lt;strong&gt;⋮&lt;/strong&gt;），然后选择&lt;strong&gt;重置&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;通过检查器窗口分配预设&#34;&gt;通过检查器窗口分配预设 &lt;a href=&#34;#%e9%80%9a%e8%bf%87%e6%a3%80%e6%9f%a5%e5%99%a8%e7%aa%97%e5%8f%a3%e5%88%86%e9%85%8d%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您还可以通过&lt;strong&gt;检查器&lt;/strong&gt;窗口添加和删除用于默认设置的预设。&lt;/p&gt;
&lt;p&gt;添加默认预设:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;项目&lt;/strong&gt;窗口中选择一个预设。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;检查器&lt;/strong&gt;窗口中，单击&lt;strong&gt;添加到默认&lt;/strong&gt;。Unity 将您的默认预设添加到&lt;strong&gt;预设管理器&lt;/strong&gt;中。&lt;/li&gt;
&lt;li&gt;打开&lt;strong&gt;预设管理器&lt;/strong&gt;，为预设添加筛选器或重新排序预设列表。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-26-unity-document-94/presets-add-to-default-from-inspector.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;删除默认预设：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;项目&lt;/strong&gt;窗口中选择一个预设。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;检查器&lt;/strong&gt;窗口中，单击&lt;strong&gt;从默认中删除&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;添加筛选器&#34;&gt;添加筛选器 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e7%ad%9b%e9%80%89%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，一旦创建了预设，它就会应用于该预设类型的所有组件或资源导入器。如果您只想将其应用于特定的组件或资源类型，可以使用筛选器字段来定义何时应用预设。&lt;/p&gt;
&lt;p&gt;通过筛选器，您可以为给定类型创建多个预设，并根据组件和导入器是否符合筛选条件，将它们应用于特定的组件或导入器。您可以使用文件名、目录和文件扩展名来进行筛选。&lt;/p&gt;
&lt;p&gt;您还可以应用部分预设，只影响在组件或资源中指定的属性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：预设类型中的默认预设按照从上到下的顺序应用。这意味着列表底部的筛选器如果没有逻辑排序，则可能会覆盖之前的筛选器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过选择&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Preset Manager&lt;/strong&gt;类别，打开预设管理器。&lt;/li&gt;
&lt;li&gt;找到要筛选的默认预设，并在&lt;strong&gt;筛选&lt;/strong&gt;字段中输入搜索字符串。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;高级筛选器搜索&#34;&gt;高级筛选器搜索 &lt;a href=&#34;#%e9%ab%98%e7%ba%a7%e7%ad%9b%e9%80%89%e5%99%a8%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;预设可以使用通配符搜索，这是一种在筛选器中使用符号的方式，以允许更广泛的导入筛选。请参考下表中可使用的符号列表。通配符搜索筛选器区分大小写。
要创建通配符搜索筛选器，语法是 &lt;code&gt;glob:&amp;quot;你的搜索模式&amp;quot;&lt;/code&gt;。筛选器字段必须以 &lt;code&gt;glob:&lt;/code&gt; 开头，并且搜索项必须在引号字符内。例如，&lt;code&gt;glob:&amp;quot;example-folder/*.fbx&amp;quot;&lt;/code&gt; 筛选在名为 example-folder 的文件夹中的任何 .fbx 文件。&lt;/p&gt;
&lt;p&gt;支持的符号：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;符号&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;描述&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;*&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;匹配单个路径部分中的 0 个或多个字符（单个路径部分定义为除 / 之外的任何字符组合）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;glob:&amp;quot;foldername/*.fbx&amp;quot;&lt;/code&gt; 搜索位于名为 &lt;em&gt;foldername&lt;/em&gt; 的文件夹中的任何 .fbx 文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;?&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;匹配单个字符&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;glob:&amp;quot;foldername/filename-?.fbx&amp;quot;&lt;/code&gt; 搜索位于名为 &lt;em&gt;foldername&lt;/em&gt; 的文件夹中，名称以 &lt;em&gt;filename-&lt;/em&gt; 开头，紧跟一个字符的 .fbx 文件（例如，这将包括 &lt;em&gt;filename–1.fbx&lt;/em&gt;，&lt;em&gt;filename–2.fbx&lt;/em&gt;，但不包括 &lt;em&gt;filename–01.fbx&lt;/em&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;[…]&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;匹配一系列字符，类似于正则表达式范围。如果范围的第一个字符是!或^，则匹配不在范围内的任何字符。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;glob:&amp;quot;foldername/file[...]1.fbx&amp;quot;&lt;/code&gt; 搜索位于名为 &lt;em&gt;foldername&lt;/em&gt; 的文件夹中的任何 .fbx 文件，名称以 &lt;em&gt;file&lt;/em&gt; 开头，以 &lt;em&gt;1&lt;/em&gt; 结尾（例如，这将包括 &lt;em&gt;file–1.fbx&lt;/em&gt;，&lt;em&gt;file–01.fbx&lt;/em&gt;，但不包括 &lt;em&gt;file–2.fbx&lt;/em&gt;）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;(pattern|pat*|pat?erN)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用圆括号包围的搜索项，用竖线字符（表示“或”）分隔，表示筛选结果可以匹配其中一个搜索模式。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;`glob:(&amp;ldquo;foldername/*.fbx&amp;rdquo;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;**&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;匹配零个或多个目录和子目录，进行匹配搜索。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;编辑默认预设列表&#34;&gt;编辑默认预设列表 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e9%bb%98%e8%ae%a4%e9%a2%84%e8%ae%be%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本节介绍如何在预设管理器的每个预设类型的默认预设列表中切换、移动和删除预设。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**重新排序预设列表：**选择要移动的默认预设的手柄（=），并将其拖动到新位置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;删除预设：&lt;strong&gt;选择要删除的默认预设的手柄（=），然后单击删除按钮（&lt;/strong&gt;-&lt;/strong&gt;）以删除所选预设。&lt;/li&gt;
&lt;li&gt;**删除预设类型：**删除分配给该默认预设类型的所有预设。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;禁用和启用默认预设&#34;&gt;禁用和启用默认预设 &lt;a href=&#34;#%e7%a6%81%e7%94%a8%e5%92%8c%e5%90%af%e7%94%a8%e9%bb%98%e8%ae%a4%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以临时禁用/启用默认预设，而无需丢失筛选设置。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过选择&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Preset Manager&lt;/strong&gt;类别，打开预设管理器。&lt;/li&gt;
&lt;li&gt;取消选中默认预设左侧的复选框以禁用预设。选中复选框以启用预设。&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-26-unity-document-94/preset-manager-enable-preset.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Player(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/25/2023-10-25-unity-document-93/</link>
      <pubDate>Wed, 25 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/25/2023-10-25-unity-document-93/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;player&#34;&gt;Player &lt;a href=&#34;#player&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;**玩家（Player）**设置窗口（菜单：&lt;strong&gt;Edit &amp;gt; Project Settings &amp;gt; Player&lt;/strong&gt;）包含确定 Unity 如何构建和显示最终应用程序的设置。您可以使用 PlayerSettings API 来控制此窗口中可用的大多数设置。&lt;/p&gt;
&lt;h2 id=&#34;通用设置&#34;&gt;通用设置 &lt;a href=&#34;#%e9%80%9a%e7%94%a8%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;玩家设置&lt;/strong&gt;在安装的平台模块之间有所不同。每个平台都有自己的玩家设置，您需要为要构建的每个应用程序版本设置这些设置。要在它们之间导航，请单击带有平台操作系统图标的选项卡。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-25-unity-document-93/player-settings-window.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;但是，所有平台共享一些通用设置，您只需要设置一次：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;公司名称&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入您公司的名称。Unity 使用此名称来定位首选项文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;产品名称&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入应用程序运行时出现在菜单栏的名称。Unity 还使用此名称来定位首选项文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入应用程序的版本号。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认图标&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在每个平台上用作应用程序默认图标的 2D 纹理文件。您可以为特定平台覆盖此设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认光标&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在每个支持的平台上用作应用程序默认光标的 2D 纹理文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;光标热点&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置光标热点位置与默认光标左上角之间的像素偏移值。光标热点是 Unity 根据光标位置触发事件的位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;特定于平台的设置&#34;&gt;特定于平台的设置 &lt;a href=&#34;#%e7%89%b9%e5%ae%9a%e4%ba%8e%e5%b9%b3%e5%8f%b0%e7%9a%84%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;特定于平台的设置分为以下几个部分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;图标（Icon）&lt;/strong&gt;：在桌面上显示的游戏图标。您可以从项目中的 2D 图像资源（如精灵或导入的图像）中选择图标。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分辨率和展示（Resolution and Presentation）&lt;/strong&gt;：屏幕分辨率和其他展示细节的设置，例如游戏是否默认全屏模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;闪屏图片（Splash Image）&lt;/strong&gt;：在游戏启动时显示的图片。此部分还包括创建闪屏屏幕的常见设置。有关详情，请参阅闪屏图片（Splash Image）文档。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;其他设置（Other Settings）&lt;/strong&gt;：特定于平台的任何其他设置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;发布设置（Publishing Settings）&lt;/strong&gt;：构建应用程序并准备从应用商店或主机网页上提供的详细信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XR 设置（XR Settings）&lt;/strong&gt;：专为虚拟现实（VR）、增强现实（AR）和混合现实（MR）应用程序的设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以在各个平台的手册部分找到有关特定于各个平台的设置的详细信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Android&lt;/strong&gt;：Android 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChromeOS&lt;/strong&gt;：ChromeOS 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;专用服务器（Dedicated Server）&lt;/strong&gt;：专用服务器玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iOS&lt;/strong&gt;：iOS 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;：Linux 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;：macOS 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tvOS&lt;/strong&gt;：tvOS 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web&lt;/strong&gt;：Web 玩家设置&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;：Windows 玩家设置&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;闪屏图片玩家设置&#34;&gt;闪屏图片玩家设置 &lt;a href=&#34;#%e9%97%aa%e5%b1%8f%e5%9b%be%e7%89%87%e7%8e%a9%e5%ae%b6%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;玩家设置&lt;/strong&gt;窗口的&lt;strong&gt;闪屏图片&lt;/strong&gt;部分（菜单：&lt;strong&gt;Edit &amp;gt; Project Settings &amp;gt; Player &amp;gt; Splash Image&lt;/strong&gt;）允许您为项目配置一个闪屏。闪屏会在应用程序启动时显示。&lt;/p&gt;
&lt;p&gt;您可以使用&lt;strong&gt;闪屏图片&lt;/strong&gt;窗口中的设置来自定义闪屏在应用程序中的显示方式，包括禁用 Unity 标志、添加自己的标志或完全禁用闪屏。然而，完全自定义闪屏只适用于 Plus、Pro 或企业版 Unity 计划的用户。如果您使用个人计划，闪屏图片设置的以下限制将适用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无法禁用&lt;strong&gt;显示闪屏屏幕&lt;/strong&gt;设置以禁用闪屏&lt;/li&gt;
&lt;li&gt;无法禁用&lt;strong&gt;显示 Unity 标志&lt;/strong&gt;设置以禁用 Unity 标志&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;叠加透明度&lt;/strong&gt;设置的最小值为 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity 的闪屏屏幕在所有平台上都是相同的。它在应用程序的第一个&lt;strong&gt;场景&lt;/strong&gt;异步加载到后台时立即显示。然而，如果您使用自己的引导屏幕或动画，由于 Unity 必须加载整个引擎和第一个场景才能显示您自定义的闪屏屏幕，这可能需要更长的时间才能显示。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：Unity 将这些选项直接复制到&lt;code&gt;Package.appxmanifest&lt;/code&gt;文件。&lt;/p&gt;
&lt;h2 id=&#34;unity-闪屏图片设置&#34;&gt;Unity 闪屏图片设置 &lt;a href=&#34;#unity-%e9%97%aa%e5%b1%8f%e5%9b%be%e7%89%87%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要为应用程序的闪屏屏幕配置选项，请打开玩家设置窗口（菜单：&lt;strong&gt;Edit &amp;gt; Project Settings &amp;gt; Player &amp;gt; Splash Image&lt;/strong&gt;）。您也可以使用 SplashScreen API 来控制闪屏屏幕设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-25-unity-document-93/player-settings-splash-image.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;虚拟现实&lt;/strong&gt;闪屏图片&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置要为使用虚拟现实的应用程序使用的图像。图像必须是 2D 纹理。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;闪屏屏幕&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示闪屏屏幕的设置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;显示闪屏屏幕&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;已启用。禁用此设置以在应用程序启动时不显示闪屏屏幕。 &lt;strong&gt;重要提示&lt;/strong&gt;：如果您使用的是 Unity 个人计划，无法禁用此设置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;预览&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&lt;strong&gt;预览&lt;/strong&gt;按钮以在游戏视图中查看闪屏屏幕的预览。预览反映了游戏视图的分辨率和&lt;strong&gt;宽高比&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;闪屏样式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity 标志的颜色样式的设置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;黑底白标&lt;/td&gt;
&lt;td&gt;适用于显示在深色背景上的 Unity 标志的浅色版本。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;白底黑标&lt;/td&gt;
&lt;td&gt;适用于显示在浅色背景上的 Unity 标志的深色版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;动画&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;闪屏屏幕在屏幕上如何出现和消失的设置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;静止&lt;/td&gt;
&lt;td&gt;没有应用任何动画效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;平移&lt;/td&gt;
&lt;td&gt;标志和背景缩放以创建视觉平移效果。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;自定义&lt;/td&gt;
&lt;td&gt;选择此设置来配置背景和标志缩放量以修改平移效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;标志缩放&lt;/td&gt;
&lt;td&gt;标志在动画总持续时间结束时达到的目标缩放（0 到 1 之间）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;背景缩放&lt;/td&gt;
&lt;td&gt;当闪屏屏幕动画总持续时间结束时，背景达到的目标缩放（0 到 1 之间）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;标志&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;自定义闪屏屏幕中的标志的设置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;显示 Unity 标志&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;已启用。禁用此选项以在闪屏屏幕上不显示 Unity 标志。 &lt;strong&gt;重要提示&lt;/strong&gt;：如果您使用的是 Unity 个人计划，无法禁用此设置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;绘制模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择标志在闪屏屏幕上出现的顺序模式&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity 标志在底部&lt;/td&gt;
&lt;td&gt;将 Unity 标志显示在&lt;strong&gt;标志&lt;/strong&gt;列表中的所有标志下方。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;顺序显示所有标志&lt;/td&gt;
&lt;td&gt;将 Unity 标志顺序显示在&lt;strong&gt;标志&lt;/strong&gt;列表中的所有标志之后。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;标志&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;闪屏屏幕上要包含的标志。每个标志必须是 Sprite Asset。将 Sprite Mode 设置为&lt;strong&gt;Single&lt;/strong&gt;，以将整个精灵用作标志。如果要更改标志的纵横比，请将 Sprite Mode 设置为 Multiple，并使用 Sprite Editor 编辑维度。要添加和删除标志，请使用加号（+）和减号（-）按钮。要重新排序标志，请将其拖动到列表中。要在标志之间创建延迟，请在标志列表中添加一个没有分配 Sprite Asset 的条目。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;标志持续时间&lt;/td&gt;
&lt;td&gt;设置每个&lt;strong&gt;Sprite&lt;/strong&gt;资产在屏幕上显示的时间长度。使用 2 到 10 秒之间的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;闪屏屏幕持续时间&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示闪屏屏幕序列的总持续时间，单位为秒。这是所有标志加 0.5 秒淡出时间的总和。 &lt;strong&gt;注意&lt;/strong&gt;：如果第一个场景尚未准备好播放，则应用程序的闪屏屏幕可能显示更长时间。在这种情况下，闪屏屏幕只显示背景图像或颜色，并在第一个场景准备好播放时淡出。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;背景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;自定义应用程序闪屏屏幕的背景的设置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;覆盖不透明度&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;调整&lt;strong&gt;覆盖不透明度&lt;/strong&gt;设置的值以突出显示标志。这会基于您设置的&lt;strong&gt;闪屏样式&lt;/strong&gt;（黑底白标或白底黑标）来影响背景颜色和图像颜色。将不透明度设置为较低的值可减小此效果。您也可以通过将其设置为 0 来禁用此效果。例如，如果&lt;strong&gt;闪屏样式&lt;/strong&gt;为&lt;strong&gt;黑底白标&lt;/strong&gt;，具有白色背景，则如果将&lt;strong&gt;覆盖不透明度&lt;/strong&gt;设置为 1，背景将变为灰色；如果将其设置为 0，则背景将变为白色。&lt;strong&gt;重要提示&lt;/strong&gt;：如果您使用的是 Unity 个人计划，此设置的最小值为 0.5。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;背景颜色&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为闪屏屏幕设置一种颜色。如果您没有设置&lt;strong&gt;背景图像&lt;/strong&gt;，Unity 将使用此颜色。 &lt;strong&gt;注意&lt;/strong&gt;：覆盖不透明度设置会影响背景颜色的显示，并可能与指定的颜色不匹配。 &lt;strong&gt;注意&lt;/strong&gt;：在 Android 上，Unity 还使用此颜色来隐藏在 Android 12 + 设备上显示的默认自动闪屏屏幕。即使正在设置&lt;strong&gt;背景图像&lt;/strong&gt;，这也会发生，请确保此颜色与&lt;strong&gt;背景图像&lt;/strong&gt;匹配。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;模糊背景图像&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以模糊您设置的背景图像。如果禁用此设置，则以无模糊效果显示背景图像。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;背景图像&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;将 Sprite 图像的引用设置为用作背景。Unity 会调整背景图像，以使其填充屏幕。它会均匀缩放图像，直到它适应屏幕的宽度和高度。这意味着在某些宽高比下，图像的某些部分可能延伸到屏幕边缘之外。要调整背景图像对宽高比的响应，请在 Sprite Editor 中更改 Sprite 的&lt;strong&gt;Position&lt;/strong&gt;值。 &lt;strong&gt;注意&lt;/strong&gt;：闪屏背景不支持 HDR 图像。请避免使用 HDR 图像格式（如 RGBA16）作为闪屏背景图像。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;备用纵向图像&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置一个替代图像，用于纵向宽高比（例如，纵向模式的移动设备）。如果不分配备用纵向图像 Sprite，则 Unity 编辑器将为纵向和横向模式均使用&lt;strong&gt;背景图像&lt;/strong&gt;中分配的 Sprite。您可以在 Sprite Editor 中调整 Sprite 的&lt;strong&gt;Position&lt;/strong&gt;和维度，以控制闪屏屏幕上背景图像的宽高比和位置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Physics 2D reference(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/24/2023-10-24-unity-document-92/</link>
      <pubDate>Tue, 24 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/24/2023-10-24-unity-document-92/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;2d-物理参考&#34;&gt;2D 物理参考 &lt;a href=&#34;#2d-%e7%89%a9%e7%90%86%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;以下的 项目设置**（Project settings）**用于管理 2D 物理的全局设置，这些设置定义了 Unity 物理系统中 2D GameObject 的物理模拟的准确性限制。一个更准确的模拟需要更多的处理开销，而这些设置允许您调整准确性和性能之间的权衡，以适应您的项目需求。&lt;/p&gt;
&lt;p&gt;要打开 2D 物理项目设置窗口，请转到&lt;strong&gt;编辑（Edit）&lt;/strong&gt; &amp;gt; &lt;strong&gt;项目设置（Project Settings…）&lt;/strong&gt; &amp;gt; &lt;strong&gt;物理 2D（Physics 2D）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意： 如果要管理 3D 物理的全局设置，请参考物理项目设置参考页面。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-24-unity-document-92/Physics2D_properties.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;通用设置选项卡&#34;&gt;通用设置选项卡 &lt;a href=&#34;#%e9%80%9a%e7%94%a8%e8%ae%be%e7%bd%ae%e9%80%89%e9%a1%b9%e5%8d%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下是**通用设置（General Settings）**选项卡中可用的属性。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;功能&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Gravity（重力）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置应用于所有 Rigidbody 2D 游戏对象的重力大小。通常只在 y 轴的负方向上设置重力。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Material（默认材质）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置一个默认的 Physics Material 2D 来在没有为单个 Collider 2D 分配材质时使用。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Velocity Iterations（速度迭代次数）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置物理系统用于解决速度影响的迭代次数。较高的值可以得到更准确的物理计算结果，但编辑器需要更多的 CPU 时间。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Position Iterations（位置迭代次数）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置物理系统用于解决位置变化的迭代次数。较高的值可以得到更准确的物理计算结果，但也需要更多的 CPU 时间。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Bounce Threshold（反弹阈值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置弹性碰撞的阈值。如果两个发生碰撞的物体的相对线性速度低于此阈值，它们会被视为非弹性碰撞，因此不会产生弹跳。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Linear Correction（最大线性纠正值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在解决约束时使用的最大线性位置纠正值（范围从 0.0001 到 1000000）。这有助于防止过冲。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Angular Correction（最大角度纠正值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在解决约束时使用的最大角度纠正值（范围从 0.0001 到 1000000）。这有助于防止过冲。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Translation Speed（最大线性速度）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置任何物理更新期间 Rigidbody 2D 游戏对象的最大线性速度。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Rotation Speed（最大旋转速度）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置任何物理更新期间 Rigidbody 2D 游戏对象的最大旋转速度。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Baumgarte Scale（Baumgarte 缩放因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置确定 Unity 解决碰撞重叠速度的缩放因子。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Baumgarte Time of Impact Scale（Baumgarte 碰撞判定缩放因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置确定 Unity 解决碰撞时间重叠速度的缩放因子。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Time to Sleep（睡眠时间）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在 Rigidbody 2D 停止运动后进入睡眠状态之前经过的时间（以秒为单位）。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Linear Sleep Tolerance（线性睡眠容差）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Rigidbody 2D 在经过 ** 睡眠时间（Time to Sleep）** 后，当线性速度低于此容差时进入睡眠状态。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Angular Sleep Tolerance（角度睡眠容差）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Rigidbody 2D 在经过 ** 睡眠时间（Time to Sleep）** 后，当角度速度低于此容差时进入睡眠状态。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Contact Offset（默认接触偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为碰撞器设置接触的接近距离，即使它们实际上没有发生接触。距离小于它们的&lt;code&gt;contactOffset&lt;/code&gt;之和的碰撞器会生成接触，这会使得碰撞检测系统在物体稍微分离时预测性地执行接触限制。** 注意：** 将此值太低可能会减慢 Unity 计算连续多边形碰撞的能力。相反，将该值增加太多可能会导致顶点碰撞产生伪影。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Simulation Mode（模拟模式）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity 执行 2D 物理模拟的方式。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fixed Update（固定更新）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以在 MonoBehaviour.FixedUpdate 被调用后立即执行物理模拟。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Update（更新）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以在 MonoBehaviour.Update 被调用后立即执行物理模拟。选择此模式时，会显示其他属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Script（脚本）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以通过 Physics2D.Simulate 手动执行物理模拟。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Simulation Layers（模拟图层）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在&lt;strong&gt;Simulation Mode（模拟模式）**设置为**FixedUpdate（固定更新）**或**Update（更新）**时，选择 Unity 进行模拟的图层。默认选择选项是**Everything（所有图层）&lt;/strong&gt;，它会自动选择所有图层并将它们包含在物理模拟中。您可以选择要包含在模拟中的特定图层，Unity 只会模拟所选择图层上的 Rigidbody2D、关节、效应器和 Collider2D 之间的接触。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Queries Hit Triggers（命中触发器查询）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果希望标记为 ** 触发器（Trigger）** 的 Collider 2D 在任何物理查询（如 Linecast 或 Raycast）与它们相交时返回命中，请启用此选项。默认启用。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Queries Start In Colliders（起始于碰撞器查询）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果希望从 Collider 2D 内部开始的物理查询检测到它们所在的 Collider ，请启用此选项。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Callbacks On Disable（禁用时回调）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可在禁用具有接触的 Collider 时产生碰撞回调。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reuse Collision Callbacks（重用碰撞回调）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项，物理系统将为所有碰撞回调重用单个 Collision2D 实例。禁用此选项后，物理系统将为每个碰撞回调创建一个新的 Collision2D 实例。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Auto Sync Transforms（自动同步变换）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可自动将变换更改与物理系统同步。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Gizmos（图形化调试工具）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在编辑器中绘制的 2D 物理图形化调试工具的类型。可以选择多个选项。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Nothing（无）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;取消选择此选项，不绘制任何 2D 物理图形化调试工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Everything（所有）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以选择所有选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;All Colliders（所有碰撞器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以在不必在 Hierarchy 窗口中选择它们的情况下，绘制所有碰撞器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Colliders Outlined（碰撞器轮廓）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以外轮廓的方式绘制所有碰撞器（可以在 2D 物理首选项中定制轮廓颜色）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Colliders Filled（填充碰撞器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以使用 2D 物理首选项中指定的填充颜色绘制所有碰撞器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Colliders Sleeping（睡眠碰撞器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以使用 2D 物理首选项中指定的 ** 唤醒（Awake）&lt;strong&gt;和&lt;/strong&gt;睡眠（Asleep）** 颜色绘制在休眠状态的碰撞器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Collider Contacts（碰撞器接触点）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以将碰撞器接触点显示为从接触点沿接触法线方向的方向箭头。可以在 2D 物理首选项中指定箭头的接触颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Collider Bounds（碰撞器边界）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以为碰撞器创建的所有 PhysicsShape2D 绘制碰撞器边界。边界是一个轴对齐的边界框（AABB）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Multithreading（多线程）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;展开此项来调整多线程设置。请参考多线程以了解每个属性的详细信息。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;更新模式&#34;&gt;更新模式 &lt;a href=&#34;#%e6%9b%b4%e6%96%b0%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下属性仅在您选择 **更新（Update）或脚本（Script）作为模拟模式（Simulation Mode）**时可见。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-24-unity-document-92/Physics2D-simmode-update.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Sub Stepping（使用子步骤）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此属性可使编辑器在模拟步骤中使用模拟的子步骤。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Sub Step Count（使用子步骤数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此属性可使编辑器在所有模拟的子步骤中计算碰撞。这样可以为每个子步骤提供更精确的模拟，但会降低性能。禁用此属性只会在第一个模拟子步骤中计算碰撞。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Sub Step Count（最大子步骤数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在模拟子步骤启用并正在运行时每帧允许的最大模拟子步骤数量。这还将限制编辑器在模拟子步骤上花费的时间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Min Sub Step FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在模拟步骤的当前帧率低于此值时，设置模拟开始使用子步骤。如果启用了&lt;strong&gt;Use Sub Stepping&lt;/strong&gt;，则在当前帧率低于此值时编辑器将使用模拟的子步骤。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;多线程&#34;&gt;多线程 &lt;a href=&#34;#%e5%a4%9a%e7%ba%bf%e7%a8%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Multithreading（多线程）&lt;/strong&gt; 部分的设置允许您使用 C# Job System 来配置多线程物理。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-24-unity-document-92/Physics2DManager-Jobs.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;功能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Multithreading（使用多线程）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以使用作业系统执行模拟步骤，并使用其余选项来控制如何实现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Consistency Sorting（使用一致性排序）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果保持一致的处理顺序变得重要，则启用此选项。在多个 CPU 线程上执行模拟步骤会产生单独的数据批处理。处理这些单独的批处理会降低处理的决定性，但会提高性能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interpolation Poses Per Job（每个作业的插值位姿数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中进行插值的 Rigidbody 2D 对象的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;New Contacts Per Job（每个作业的新接触点数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要查找的新接触点的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Collide Contacts Per Job（每个作业的碰撞接触点数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要处理的碰撞接触点的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Clear Flags Per Job（每个作业的清除标志数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要清除的标志的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Clear Body Forces Per Job（每个作业的清除刚体力数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要清除力作用于的刚体的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sync Discrete Fixtures Per Job（每个作业的同步离散 Fixture 数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要在离散岛屿求解期间同步的 Fixture 的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sync Continuous Fixtures Per Job（每个作业的同步连续 Fixture 数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要在连续岛屿求解期间同步的 Fixture 的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Find Nearest Contacts Per Job（每个作业的查找最近接触点数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要查找的最近接触点的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Update Trigger Contacts Per Job（每个作业的更新触发器接触点数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置每个模拟作业中要更新的触发器接触点的最小数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Cost Threshold（岛屿求解的成本阈值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在离散岛屿求解过程中，所有刚体、接触点和关节的最小成本阈值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Body Cost Scale（岛屿求解的刚体成本缩放因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在离散岛屿求解过程中，每个刚体的成本缩放因子。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Contact Cost Scale（岛屿求解的接触点成本缩放因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在离散岛屿求解过程中，每个接触点的成本缩放因子。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Joint Cost Scale（岛屿求解的关节成本缩放因子）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在离散岛屿求解过程中，每个关节的成本缩放因子。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Bodies Per Job（每个作业的岛屿求解刚体数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在执行岛屿求解时每个模拟作业中要求解的最小刚体数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Island Solver Contacts Per Job（每个作业的岛屿求解接触点数量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在执行岛屿求解时每个模拟作业要求解的最小接触点数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;图层碰撞矩阵选项卡&#34;&gt;图层碰撞矩阵选项卡 &lt;a href=&#34;#%e5%9b%be%e5%b1%82%e7%a2%b0%e6%92%9e%e7%9f%a9%e9%98%b5%e9%80%89%e9%a1%b9%e5%8d%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;图层碰撞矩阵（Layer Collision Matrix）&lt;/strong&gt; 选项卡的设置控制 Colliders（附加到不同 Rigidbody 2D 上的 Colliders）能否基于所分配的图层与彼此接触。矩阵显示每个图层与其他每个图层的对应关系，允许您选择哪些特定图层可以与另一个图层发生接触。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-24-unity-document-92/physics2d-layer-collision-matrix.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;两个图层之间的交集处有一个复选标记表示允许这两个图层之间的接触，而清除的复选框表示这两个图层之间的接触永远不被允许。当您将鼠标悬停在图层的名称或复选框上时，其所在的行和列会突出显示，以便更容易看出它影响的图层是哪些。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：为了优化性能，您应该确保只选择最少数量的潜在接触，只选择您希望与其他图层发生接触的特定图层，并禁用所有其他不必要的接触。为了方便操作，您可以选择 &lt;strong&gt;全部禁用&lt;/strong&gt;（Disable All）或 &lt;strong&gt;全部启用&lt;/strong&gt;（Enable All）来一次性快速选择或取消选择所有选项，然后再选择具体的图层。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Physics(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/23/2023-10-23-unity-document-91/</link>
      <pubDate>Mon, 23 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/23/2023-10-23-unity-document-91/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;physics&#34;&gt;Physics &lt;a href=&#34;#physics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用物理（Physics）设置（主菜单：&lt;strong&gt;Edit（编辑） &amp;gt; Project Settings（项目设置）&lt;/strong&gt;，然后选择&lt;strong&gt;Physics（物理）&lt;/strong&gt; 类别）来应用全局的 3D 物理设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果要管理 2D 物理的全局设置，请使用 Physics 2D 设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-23-unity-document-91/PhysicsSet.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这些设置定义了物理模拟的准确性限制。一般来说，更准确的模拟需要更多的处理开销，因此这些设置提供了在准确性和性能之间进行权衡的方式。有关更多信息，请参阅手册中的物理部分。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Gravity（重力）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用 x、y 和 z 轴设置应用于所有刚体组件的重力大小。对于真实的重力设置，请在 y 轴上应用一个负数。重力以每秒平方米的世界单位来定义。&lt;strong&gt;注意&lt;/strong&gt;：如果增加重力，可能需要增加 &lt;strong&gt;Default Solver Iterations（默认求解迭代次数）&lt;/strong&gt; 的值，以保持稳定的接触。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Material（默认材质）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置对默认的物理材质的引用，如果没有为单个 &lt;strong&gt;Collider（碰撞器）&lt;/strong&gt; 分配材质，则使用该默认材质。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Bounce Threshold（反弹阈值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置一个速度值。如果两个碰撞物体的相对速度低于此值，它们将不会相互弹开。此值还可以减少抖动，因此不建议将其设置为非常低的值。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Max Depenetration Velocity（默认最大去重叠速度）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义用于从与其他物体重叠中拉出一个物体时，求解器可以对其设置的最大去重叠速度。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sleep Threshold（休眠阈值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置全局的能量阈值，低于该阈值的非运动的&lt;strong&gt;Rigidbody（刚体）&lt;/strong&gt;（即不受物理系统控制的刚体）可能会进入休眠状态。当一个刚体休眠时，它不会每帧更新，这样可以减少资源的使用。如果一个刚体的动能除以质量值小于此阈值，它就有可能进入休眠状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Contact Offset（默认接触偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置碰撞检测系统用于生成碰撞接触的距离。该值必须是正值，如果设置得太接近零，可能会导致抖动。默认值为 0.01。只有在它们的距离小于它们的接触偏移值之和时，碰撞器才会生成碰撞接触。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Solver Iterations（默认求解迭代次数）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义 Unity 在每个物理帧上运行的求解器进程数量。求解器是小型物理引擎任务，用于确定一些物理交互，如连接物体的运动或管理重叠的刚体组件之间的接触。这会影响求解器输出的质量，建议在使用非默认&lt;code&gt;Time.fixedDeltaTime&lt;/code&gt;或对配置要求较高时进行更改。通常用于减少由关节或接触引起的抖动。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Solver Velocity Iterations（默认求解速度迭代次数）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置求解器在每个物理帧中执行的速度进程数量。求解器执行的进程越多，Rigidbody 弹回后的出射速度越高。如果在碰撞后遇到连接的 Rigidbody 组件或 Ragdoll 过度移动的问题，请尝试增加此值。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Queries Hit Backfaces（查询命中背面）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果要使物理查询（如&lt;code&gt;Physics.Raycast&lt;/code&gt;）检测到与 MeshCollider 的背面三角形的碰撞，请启用此选项。默认情况下，此设置为禁用状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Queries Hit Triggers（查询命中触发器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果要使物理命中测试（如 Raycast、SphereCast 和 SphereTest）在与标记为触发器的 Collider 相交时返回碰撞，请启用此选项。单个射线可以覆盖此行为。默认情况下，此设置为启用状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Adaptive Force（启用自适应力）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以启用自适应力。自适应力影响力在物体的堆栈或堆中传递的方式，以提供更逼真的行为。默认情况下，此设置为禁用状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Auto Simulation（自动模拟）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以自动运行物理模拟，或允许对其进行显式控制。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Auto Sync Transforms（自动同步变换）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以在 &lt;strong&gt;Transform 组件（变换组件）&lt;/strong&gt; 更改时自动将变换更改与物理系统同步。默认情况下，此设置为禁用状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Contact Pairs Mode（接触对模式）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的接触对生成类型。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Contact Pairs（默认接触对）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;除了运动 - 运动和运动 - 静态对，接收所有接触对的碰撞和触发事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Kinematic Kinematic Pairs（启用运动 - 运动对）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;接收运动 - 运动接触对的碰撞和触发事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Kinematic Static Pairs（启用运动 - 静态对）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;接收运动 - 静态接触对的碰撞和触发事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable All Contact Pairs（启用所有接触对）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;接收所有接触对的碰撞和触发事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Broadphase Type（粗相位算法类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择在物理模拟中使用哪种粗相位算法。参考 NVIDIA 关于 PhysX SDK 和 Rigid Body Collision 的文档。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sweep and Prune Broadphase（扫描和修剪粗相位法）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用扫描和修剪的粗相位碰撞方法（即，沿着一个轴对对象进行排序，以排除检查远离的成对对象）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Automatic Box Pruning（自动盒修剪）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;此算法类似于多盒修剪算法，除了它还可以自动计算世界边界和子分区的数量。它维护网格单元的集合，并使用常规的扫描和修剪方法来确定可能重叠的碰撞器成对。通常在场景较大且单一扫描和修剪会产生大量额外误报的情况下使用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Friction Type（摩擦类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择用于模拟的摩擦算法。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Patch Friction Type（块摩擦类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一种基本的强摩擦算法，通常在较低的求解迭代次数下获得最稳定的结果。该方法每对接触对象仅使用最多四个标量求解器约束。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;One Directional Friction Type（单向摩擦类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;应用于接触点的摩擦力在接触法线的交替切线方向上应用了库仑摩擦模型的简化。这需要比块摩擦更多的求解迭代次数，但不如双向模型准确。要使 Articulation 体与此摩擦类型配合工作，请将&lt;strong&gt;Solver Type（求解器类型）**设置为**Temporal Gauss Seidel（时间高斯赛德尔）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Two Directional Friction Type（双向摩擦类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;类似于单向模型，但同时在两个切线方向上应用摩擦力。这需要更多的求解迭代次数，但更准确。与块摩擦相比，在具有许多接触点的情况下更费时，因为它在每个接触点都应用。要使 Articulation 体与此摩擦类型配合工作，请将&lt;strong&gt;Solver Type（求解器类型）**设置为**Temporal Gauss Seidel（时间高斯赛德尔）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Enhanced Determinism（启用增强确定性）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;提供一种确定性的途径，以使场景中的模拟结果始终保持一致，前提是游戏以确定的顺序插入角色。这种模式会牺牲一些性能以确保额外的确定性。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Unified Heightmaps（启用统一高度图）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以以与 Mesh 碰撞相同的方式处理 Terrain 碰撞。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Solver Type（求解器类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在模拟中使用的 PhysX 求解器类型。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Projected Gauss Seidel（投影高斯赛德尔）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;默认的 PhysX 求解器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Temporal Gauss Seidel（时间高斯赛德尔）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;该求解器提供更好的收敛性，以及处理高质量比和校正穿透时引入的能量，提高关节对过度拉伸的抗性。通常在使用默认求解器时遇到某些不稳定行为时会有所帮助。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Layer Collision Matrix（图层碰撞矩阵）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义基于图层的碰撞检测系统的行为。通过选中相互作用的碰撞矩阵上的层，选择哪些层与其他层进行碰撞。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cloth Inter-Collision（布料互穿）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过指定一组用于布料互相碰撞的粒子，使游戏中的布料移动更逼真。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Distance（距离）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;定义每个互相碰撞的布料粒子周围的球的直径。Unity 确保这些球在模拟过程中不重叠。距离应小于配置中两个粒子之间的最小距离。如果距离较大，则布料碰撞可能会违反一些距离约束，并导致抖动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Stiffness（刚度）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;指定互相碰撞的布料粒子之间的分离脉冲有多强。布料求解器计算此值，并且它应足以将粒子分离开来。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Package Manager(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/22/2023-10-22-unity-document-90/</link>
      <pubDate>Sun, 22 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/22/2023-10-22-unity-document-90/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;package-manager&#34;&gt;Package Manager &lt;a href=&#34;#package-manager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要访问&lt;strong&gt;Package Manager设置，请打开Edit菜单，然后选择Project Settings&lt;/strong&gt;，然后选择 &lt;strong&gt;Package Manager&lt;/strong&gt; 类别。这些设置可以让您管理范围注册表并更改当前项目的高级设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-22-unity-document-90/class-PackageManager.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 在&lt;strong&gt;高级设置&lt;/strong&gt;部分，切换预发布包在 Package Manager（包管理器）窗口中是否可见。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; 在 &lt;strong&gt;Scoped Registries（作用域注册表）&lt;/strong&gt; 组下，添加、更改和删除项目的范围注册表，其中包含以下区域：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt; 当前为该项目定义的作用域注册表列表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt; 所选作用域注册表的详细信息。&lt;/p&gt;
&lt;h2 id=&#34;高级设置&#34;&gt;高级设置 &lt;a href=&#34;#%e9%ab%98%e7%ba%a7%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;strong&gt;高级设置&lt;/strong&gt;组来切换当前项目的&lt;strong&gt;启用预发布包&lt;/strong&gt;设置。&lt;/p&gt;
&lt;h3 id=&#34;启用预发布包&#34;&gt;启用预发布包 &lt;a href=&#34;#%e5%90%af%e7%94%a8%e9%a2%84%e5%8f%91%e5%b8%83%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;启用&lt;strong&gt;启用预发布包&lt;/strong&gt;设置可以在 Package Manager（包管理器）窗口中显示预发布包。预发布包在列表面板中显示 Pre 标签，详细面板中显示 Pre-Release 标签。这些标签用于提醒您哪些包将在下一个长期支持（LTS）版本的 Unity 编辑器中发布。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;: 默认情况下，此设置被禁用，因为预发布包仍在验证稳定性是否足以用于生产，但尚未完全发布。有关包的生命周期的更多信息，请参阅 Package states and lifecycle。&lt;/p&gt;
&lt;h2 id=&#34;scoped-registries作用域注册表&#34;&gt;Scoped Registries（作用域注册表） &lt;a href=&#34;#scoped-registries%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;作用域注册表&lt;/strong&gt;组显示了当前项目中添加的作用域注册表的列表，列表位于设置组的左侧，并显示所选注册表的详细信息。&lt;/p&gt;
&lt;p&gt;有关作用域注册表的详细信息，包括如何在 Unity Package Manager 中使用和配置它们，请参阅 Scoped Registries。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: 在添加作用域注册表时，您可能会遇到一个问题，即作用域注册表未列在 &lt;strong&gt;My Registries（我的注册表）&lt;strong&gt;上下文中，或者根本没有&lt;/strong&gt;My Registries（我的注册表）&lt;/strong&gt; 上下文可用。这可能是因为您添加的包注册表服务器未实现&lt;code&gt;/-/v1/search&lt;/code&gt;或&lt;code&gt;/-/all&lt;/code&gt;端点。Unity 的包管理器需要这些端点。&lt;/p&gt;
&lt;h3 id=&#34;添加新的注册表&#34;&gt;添加新的注册表 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%9a%84%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要向项目中添加新的作用域注册表，请按照以下步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在作用域注册表列表底部选择 &lt;strong&gt;+&lt;strong&gt;按钮。一个新条目将出现在列表中，该条目名称为&lt;/strong&gt;New Scoped Registry&lt;/strong&gt;，右侧的详细信息为空。&lt;/li&gt;
&lt;li&gt;输入名称、URL 和作用域属性的值。&lt;/li&gt;
&lt;li&gt;如果需要指定多个作用域，请在最后一个&lt;strong&gt;作用域&lt;/strong&gt;的值下方选择 &lt;strong&gt;+&lt;/strong&gt; 按钮。将会出现另一个文本框。&lt;/li&gt;
&lt;li&gt;输入所选作用域注册表的信息后，单击&lt;strong&gt;Save&lt;/strong&gt;保存。要取消添加新的作用域注册表，请单击&lt;strong&gt;Cancel&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;修改现有注册表&#34;&gt;修改现有注册表 &lt;a href=&#34;#%e4%bf%ae%e6%94%b9%e7%8e%b0%e6%9c%89%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要修改现有的作用域注册表，请按照以下步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在左侧的列表中选择要修改的注册表。现有的信息将显示在右侧。&lt;/li&gt;
&lt;li&gt;更改名称、URL 和作用域属性中的任何一项。&lt;/li&gt;
&lt;li&gt;在更新所选作用域注册表的信息后，单击&lt;strong&gt;Apply&lt;/strong&gt;以应用更改。要取消更新，单击&lt;strong&gt;Revert&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;删除注册表&#34;&gt;删除注册表 &lt;a href=&#34;#%e5%88%a0%e9%99%a4%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要删除现有的作用域注册表，请按照以下步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从列表中选择要删除的注册表。&lt;/li&gt;
&lt;li&gt;单击列表下方的 &lt;strong&gt;-&lt;/strong&gt; 按钮。出现一个对话框询问您确认删除。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;Ok&lt;/strong&gt;以删除注册表，或单击&lt;strong&gt;Cancel&lt;/strong&gt;保留注册表。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Project Settings-Graphics(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/21/2023-10-21-unity-document-89/</link>
      <pubDate>Sat, 21 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/21/2023-10-21-unity-document-89/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;graphics&#34;&gt;Graphics &lt;a href=&#34;#graphics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Graphics&lt;/strong&gt;设置（主菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Graphics&lt;/strong&gt;类别）用于应用全局的图形设置。&lt;/p&gt;
&lt;p&gt;本部分提供了以下属性组的文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;脚本化渲染管线设置&lt;/li&gt;
&lt;li&gt;摄像机设置&lt;/li&gt;
&lt;li&gt;分层设置&lt;/li&gt;
&lt;li&gt;内置着色器设置&lt;/li&gt;
&lt;li&gt;始终包含的着色器&lt;/li&gt;
&lt;li&gt;着色器剥离&lt;/li&gt;
&lt;li&gt;着色器加载&lt;/li&gt;
&lt;li&gt;裁剪设置&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;脚本化渲染管线设置&#34;&gt;脚本化渲染管线设置 &lt;a href=&#34;#%e8%84%9a%e6%9c%ac%e5%8c%96%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bf%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;允许您设置 Unity 在渲染项目时使用的默认渲染管线。要基于脚本化渲染管线设置渲染一个管线，请在此处分配所需的渲染管线资源。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅如何获取、设置和配置活动的渲染管线。&lt;/p&gt;
&lt;h2 id=&#34;摄像机设置&#34;&gt;摄像机设置 &lt;a href=&#34;#%e6%91%84%e5%83%8f%e6%9c%ba%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些属性控制各种渲染设置。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transparency Sort Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义按照特定轴向对象的距离对其进行渲染的顺序。在 Unity 中，渲染器按照多个标准对其进行排序，例如它们的图层编号或它们与摄像机的距离。这通常只在 2D 开发中有用：例如根据高度或 Y 轴对 Sprites 进行排序。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Default&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;根据摄像机模式对对象进行排序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Perspective&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;根据透视视图对对象进行排序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Orthographic&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;根据正交视图对对象进行排序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Custom Axis&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用定义的&lt;strong&gt;Transparency Sort Axis&lt;/strong&gt;的排序模式对对象进行排序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transparency Sort Axis&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义自定义的&lt;strong&gt;Transparency Sort Mode&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;层级设置&#34;&gt;层级设置 &lt;a href=&#34;#%e5%b1%82%e7%ba%a7%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-21-unity-document-89/GraphicsSettings2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在通用渲染管线中，你可以使用&lt;strong&gt;层级设置&lt;/strong&gt;来更改不同类型硬件的渲染和着色器编译设置。详情请参阅 Graphics tiers。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Standard Shader Quality&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将标准着色器的质量设置为高、中、低。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Reflection Probes Box Projection&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在反射探头上启用反射 UV 映射投影。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Reflection Probes Blending&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用反射探头上的混合。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Detail Normal Map&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用细节法线贴图的采样（如果有分配）。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Enable Semitransparent Shadows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用半透明阴影。这将添加或移除 UNITY_USE_DITHER_MASK_FOR_ALPHABLENDED_SHADOWS 着色器编译定义。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Enable Light Probe Proxy Volume&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用渲染插值的光探头体积。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Cascaded Shadows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用使用级联阴影贴图。这将添加或移除 UNITY_NO_SCREENSPACE_SHADOWS 着色器编译定义。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Prefer 32 bit shadow maps&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在针对使用 DX11 或 DX12 的平台时启用 32 位浮点深度图。大多数平台具有固定的阴影贴图格式，无法调整。这些格式会有所不同，可以是 16 位、24 位或 32 位，也可以是浮点数或整数格式。32 位的阴影贴图比 16 位更高质量，但在 GPU 上使用的内存和带宽更多。** 注意：** 要使用 32 位阴影贴图，请确保深度缓冲区也设置为 32 位。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Use HDR&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此层级的高动态范围渲染。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;HDR Mode&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在启用&lt;strong&gt;HDR&lt;/strong&gt;时，选择要在当前层级的 HDR 缓冲区中使用的格式。默认情况下，设置为&lt;em&gt;FP16&lt;/em&gt;（每个通道 16 位浮点数的颜色渲染纹理格式）。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;FP16&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;16 位浮点数颜色&lt;strong&gt;渲染纹理格式&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;R11G11B10&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;颜色&lt;strong&gt;渲染纹理格式&lt;/strong&gt;。R 和 G 通道为 11 位浮点数，B 通道为 10 位浮点数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Rendering Path&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity 应该如何渲染图形。不同的渲染路径会影响游戏的性能，以及光照和阴影的计算方式。某些渲染路径更适用于不同的平台和硬件。当使用正交投影时，不支持&lt;em&gt;Deferred&lt;/em&gt;渲染。如果相机的投影模式设置为正交投影，这些值将被覆盖，相机始终使用&lt;em&gt;Forward&lt;/em&gt;渲染。详情请参阅渲染路径。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Forward&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;传统的渲染路径。支持所有典型的 Unity 图形特性（法线贴图、每像素光照、阴影等）。然而，在默认设置下，只有少数最亮的灯光以每像素光照模式渲染。其他灯光在物体顶点或物体级别进行计算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Deferred&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;延迟渲染，具有最高的光照和阴影保真度，最适合有许多实时灯光的场景。它需要一定的硬件支持。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Legacy Vertex Lit&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;传统顶点光照，具有较低的光照保真度，不支持实时阴影。它是&lt;em&gt;Forward&lt;/em&gt;渲染路径的子集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Realtime Global Illumination CPU Usage&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设定 Enlighten 实时全局光照在运行时使用的 CPU 计算量。增加此值可以使系统更快地对光照变化做出反应，但会增加 CPU 使用时间。** 注意：** 某些平台允许所有 CPU 核心都被工作线程占用，而某些平台则有最大限制。例如，一些游戏主机最多允许 4 个 CPU 核心。对于 Android 设备，如果是 bigLittle 架构，则只使用较小的 CPU 核心；否则，最大数量为总 CPU 核心数减 1。如果你使用了 URP 或 HDRP 渲染管线，可以在质量设置中配置此属性。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Low&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用允许的 CPU 线程数量的 25% 作为工作线程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Medium&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用允许的 CPU 线程数量的 50% 作为工作线程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;High&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用允许的 CPU 线程数量的 75% 作为工作线程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;Unlimited&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用允许的 CPU 线程数量的 100% 作为工作线程。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;内置着色器设置&#34;&gt;内置着色器设置 &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e7%9d%80%e8%89%b2%e5%99%a8%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用这些设置来指定通用渲染管线中所列功能的着色器类型。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;渲染路径&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;所使用的着色器&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Deferred&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于 Deferred 渲染。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Deferred Reflection&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于延迟渲染中的反射探头。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Screen Space shadows&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于 PC / 主机平台上定向光的级联阴影贴图。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Motion vectors&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于基于对象的运动向量计算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lens Flare&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于光晕效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Light Halo&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于光晕效果中的光圈效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;对于每个功能，你可以选择使用哪种类型的着色器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Support&lt;/strong&gt;（无支持）禁用此计算。如果不使用延迟渲染，请使用此设置。这将节省内置游戏数据文件中的一些空间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in Shader&lt;/strong&gt;（内置着色器）使用 Unity 的内置着色器进行计算。这是默认设置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Shader&lt;/strong&gt;（自定义着色器）使用自定义的兼容着色器进行计算。这使你能够深度定制延迟渲染。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当选择&lt;strong&gt;Custom shader&lt;/strong&gt;（自定义着色器）时，会在功能属性下方显示一个&lt;strong&gt;Shader&lt;/strong&gt;引用属性，你可以在那里设置要使用的着色器的引用。&lt;/p&gt;
&lt;h2 id=&#34;始终包含的着色器&#34;&gt;始终包含的着色器 &lt;a href=&#34;#%e5%a7%8b%e7%bb%88%e5%8c%85%e5%90%ab%e7%9a%84%e7%9d%80%e8%89%b2%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这是一个列表，列出了 Unity 在每个构建中包含了所有可能变体的着色器。这在以下情况下非常有用：如果你想在运行时使用否则不会包含在构建中的着色器或变体，例如如果你使用依赖于这些着色器或变体的 AssetBundles 或 Addressables，或者如果你使用着色器关键字在运行时更改变体。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt; 不建议对具有大量变体的着色器（如标准着色器）使用此功能，否则可能导致严重的运行时和构建时性能问题。你应该创建只包含所需变体的着色器变体集合，并将其包含在构建中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 此设置会覆盖着色器关键字声明设置。对于列表中的每个着色器，Unity 都会包含所有关键字的所有组合，即使你使用的是 “shader feature” 声明类型。&lt;/p&gt;
&lt;p&gt;要将着色器添加到列表中，请增加&lt;strong&gt;Size&lt;/strong&gt;属性的值。要删除列表中的最后一个着色器，请减少&lt;strong&gt;Size&lt;/strong&gt;属性的值。要删除不是最后一个着色器的着色器，可以将该值设置为&lt;strong&gt;None&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;着色器剥离&#34;&gt;着色器剥离 &lt;a href=&#34;#%e7%9d%80%e8%89%b2%e5%99%a8%e5%89%a5%e7%a6%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些属性允许你配置构建中的着色器变体剥离。&lt;/p&gt;
&lt;p&gt;默认情况下，Unity 会检查构建中的&lt;strong&gt;场景&lt;/strong&gt;并自动去除在这些场景中未使用的着色器变体。但是，如果你想在运行时使用否则不会包含在构建中的着色器或变体，例如如果你使用依赖于这些着色器或变体的 AssetBundles 或 Addressables，或者如果你使用着色器关键字在运行时更改变体，则可能会出现问题。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;光照图模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定与光照图相关的着色器变体剥离行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;自动&lt;/em&gt;（Automatic）&lt;/td&gt;
&lt;td&gt;Unity 检查构建中的场景并自动去除在这些场景中未使用的变体。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;自定义&lt;/em&gt;（Custom）&lt;/td&gt;
&lt;td&gt;选择手动包含或排除以下光照图模式的变体：&lt;strong&gt;烘焙非定向烘焙定向实时非定向实时定向烘焙影子掩码烘焙减法&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;雾模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定与 Unity 内置雾效果相关的着色器变体剥离行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;自动&lt;/em&gt;（Automatic）&lt;/td&gt;
&lt;td&gt;Unity 检查构建中的场景并自动去除在这些场景中未使用的变体。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;自定义&lt;/em&gt;（Custom）&lt;/td&gt;
&lt;td&gt;选择手动包含或排除以下雾模式的变体：&lt;strong&gt;线性指数平方指数&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;实例化变体&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定与 GPU 实例化相关的着色器变体剥离行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;去除未使用&lt;/em&gt;（Strip Unused）&lt;/td&gt;
&lt;td&gt;Unity 仅在至少有一个使用了该着色器且启用了&lt;strong&gt;启用实例化&lt;/strong&gt;的材质时，才会包含用于 GPU 实例化的着色器变体。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;去除所有&lt;/em&gt;（Strip All）&lt;/td&gt;
&lt;td&gt;去除所有用于 GPU 实例化的变体，即使它们正在使用中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;保留所有&lt;/em&gt;（Keep All）&lt;/td&gt;
&lt;td&gt;包含所有用于 GPU 实例化的变体，即使它们正在使用中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;shader-加载&#34;&gt;Shader 加载 &lt;a href=&#34;#shader-%e5%8a%a0%e8%bd%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些属性允许您配置 Unity 在应用程序中 “预加载” 着色器变体集合的方式。&lt;/p&gt;
&lt;p&gt;有关预加载的信息，包括有关图形 API 支持的重要信息，请参阅《Shader 加载：预加载着色器变体》。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Renderer Light Probe Selection（渲染器光探头选择）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在 Renderer 接收到来自光探头的全局照明但不在任何光探头群组的影响范围（四面体）内时，选择 Unity 使用的探头类型。默认情况下，选择 “查找最近的光探头（Find closest Light Probe）”，表示 Unity 会搜索最近的光探头，这会消耗大量系统资源。&lt;strong&gt;Renderer Light Probe Selection（渲染器光探头选择）&lt;/strong&gt; 提供了另一种选择。选择 “使用环境探头（Use Ambient Probe）” 以使 Unity 在这些情况下退回到环境探头，这样可以节省系统资源。选项：&lt;strong&gt;查找最近的光探头（Find closest Light Probe） 使用环境探头（Use Ambient Probe）&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preloaded shaders（预加载的着色器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;应用程序启动时预加载的着色器变体集合。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preload shaders after showing first scene（在显示第一个场景后预加载着色器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity 在 &lt;strong&gt;Preloaded shaders（预加载的着色器）&lt;/strong&gt; 中指定的着色器变体的预加载时间。如果启用，Unity 会在第一个场景完全加载后加载和预加载它们。否则，Unity 会在显示第一个场景之前加载和预加载它们。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preload variants within frame（在帧内预加载变体）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果启用了&lt;strong&gt;Preload shaders after showing first scene（在显示第一个场景后预加载着色器）&lt;/strong&gt;，则 Unity 会在显示第一个场景后的下一帧预加载 &lt;strong&gt;Preloaded shaders（预加载的着色器）&lt;/strong&gt; 中指定的着色器变体。如果值为 0，则 Unity 会在显示第一个场景后的下一帧预加载所有着色器变体。否则，Unity 会在显示第一个场景后的多个帧中预加载新的着色器变体。在给定的帧中，它会预加载着色器变体，直到达到此处设置的时间限制。之后，直到下一帧，它才会开始预加载新的着色器变体。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;跟踪的着色器变体&#34;&gt;跟踪的着色器变体 &lt;a href=&#34;#%e8%b7%9f%e8%b8%aa%e7%9a%84%e7%9d%80%e8%89%b2%e5%99%a8%e5%8f%98%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 编辑器可以在应用程序运行时跟踪应用程序使用的着色器变体。您可以利用此信息构建着色器变体集合。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;控制&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建资源&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用当前跟踪的着色器变体创建新的着色器变体集合资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;清除&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;清除已跟踪的着色器变体。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;裁剪设置&#34;&gt;裁剪设置 &lt;a href=&#34;#%e8%a3%81%e5%89%aa%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;相对于相机的裁剪&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定 Unity 是否将相机位置作为裁剪的参考点。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;灯光（Lights）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将相机位置作为裁剪灯光的参考点，而不是世界空间原点。启用 灯光**（Lights）**可减少如果灯光远离相机时的闪烁。更多信息，请参阅了解视锥体。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;阴影（Shadows）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将相机位置作为裁剪阴影的参考点，而不是世界空间原点。启用&lt;strong&gt;阴影（Shadows）可减少如果阴影远离相机时的闪烁。更多信息，请参阅了解视锥体。&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Project Settings-Editor(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/20/2023-10-20-unity-document-88/</link>
      <pubDate>Fri, 20 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/20/2023-10-20-unity-document-88/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;editor&#34;&gt;Editor &lt;a href=&#34;#editor&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Editor&lt;/strong&gt;设置（主菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Editor&lt;/strong&gt;类别）用于在 Unity 编辑器中应用全局设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-20-unity-document-88/EditorSettings2023_1a.png&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-20-unity-document-88/EditorSettings2023_1b.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity Remote&lt;/strong&gt; &lt;strong&gt;Note&lt;/strong&gt;: Unity Remote 在 2020.1 版本及以后的版本中已经被弃用。要在移动设备上测试应用程序，请使用 Device Simulator 包。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Device&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要用于 Unity Remote 测试的设备类型。Unity Remote 是一个可下载的应用程序，旨在帮助 Android、iOS 和 tvOS 开发。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Compression&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择通过 Unity Remote 将游戏画面传输到设备时使用的图像压缩类型。默认为&lt;strong&gt;JPEG&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JPEG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JPEG 通常具有更高的压缩和性能，但图形质量稍低。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;PNG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PNG 会更准确地显示游戏画面，但可能导致性能下降。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Resolution&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity Remote 上游戏运行的分辨率。默认为&lt;strong&gt;Downsize&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Downsize&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;以较低的分辨率显示游戏。这会提供更好的性能，但图形精度较低。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Normal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;以正常分辨率显示游戏。这会提供更高的图形精度，但性能较低。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Joystick Source&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择所使用的摇杆的连接来源。默认为&lt;strong&gt;Remote&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Remote&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用连接到运行 Unity Remote 的设备上的摇杆。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Local&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用连接到运行 Editor 的计算机上的摇杆。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Version Control&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择元文件的可见性。您可以将 Unity 与包括 Perforce 和 PlasticSCM 在内的大多数常用版本控制工具配合使用。默认为&lt;strong&gt;Hidden Meta Files&lt;/strong&gt;。有关显示或隐藏元文件的更多信息，请参阅 Unity Answers 中的 Visible or hidden meta files。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Hidden Meta Files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;隐藏元文件。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Visible Meta Files&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;显示元文件。当使用版本控制时很有用，因为它允许其他用户和机器查看这些元文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Perforce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 Perforce 版本控制系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;PlasticSCM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 PlasticSCM 版本控制系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Asset Serialization&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择用于存储序列化资产的格式。默认为&lt;strong&gt;Force Text&lt;/strong&gt;。Unity 使用序列化将资产和 AssetBundle 从计算机的硬盘加载和保存。为了帮助版本控制合并，Unity 可以使用文本格式存储场景文件。如果您不合并场景，Unity 可以使用更节省空间的二进制格式存储场景，或者同时允许存在文本和二进制场景文件。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mixed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;二进制模式中的资产仍保持二进制模式，文本模式中的资产仍保持文本模式。Unity 默认情况下使用二进制模式来处理新的资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Force Binary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将所有资产都转换为二进制模式，包括新的资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Force Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;将所有资产都转换为文本模式，包括新的资产。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Serialize Inline Mappings On One Line&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置可以使 Unity 在一行上写入引用和内联映射。如果禁用此设置，当一行中的字符超过 80 个字符时，Unity 会将文本序列化的引用拆分成多行。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Behavior Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择默认的 2D 或 3D 开发模式。根据您选择的模式，Unity 会设置某些默认行为，以使开发更容易。默认为&lt;strong&gt;3D&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;3D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;为 3D 开发设置 Unity。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;2D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;为 2D 开发设置 Unity。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Asset Pipeline&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的 Asset Pipeline 版本。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Version 1 (deprecated)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 Asset Pipeline 版本 1。此功能已被弃用，不再受支持。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Version 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 Asset Pipeline 版本 2。这是默认选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Active version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示活动的 Asset Pipeline 版本。要使更改生效，您必须保存并重新启动项目。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cache Server (project specific)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的缓存服务器。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use global settings (stored in preferences)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用在&lt;strong&gt;首选项&lt;/strong&gt;窗口中设置的默认缓存服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选择要使用的特定缓存服务器，而不是默认缓存服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不使用缓存服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Prefab Editing Environments&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Regular Environment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将场景分配为在 Prefab 模式下为&lt;em&gt;常规&lt;/em&gt;Prefab（即具有常规 Transform 组件的 Prefab）编辑环境。这样，您可以根据选择的背景而不是空场景来编辑 Prefab。有关更多信息，请参阅 Prefab Mode 中的 Editing a Prefab。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;UI Environment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将场景分配为在 Prefab 模式下为&lt;em&gt;UI&lt;/em&gt;Prefab（即具有 Rect Transform 组件的 Prefab）编辑环境。这样，您可以根据选择的背景而不是空场景来编辑 Prefab。有关更多信息，请参阅 Prefab Mode 中的 Editing a Prefab。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use legacy Light Probe sample counts&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在使用 Progressive Lightmapper 进行烘焙时，使用固定的 Light Probe 采样计数。采样计数为：64 个直接采样、2048 个间接采样和 2048 个环境采样。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable baked cookies support&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对于在 Unity 2020.1 或更高版本中创建的项目，默认情况下，Progressive Lightmapper 中的 Baked Lights 和 Mixed Lights 启用了烘焙的 cookie。对于在 2020.1 之前的 Unity 版本创建的项目，默认情况下，Progressive Lightmapper 中的 Baked Lights 和 Mixed Lights 禁用了烘焙的 cookie，以实现向后兼容性。启用此项可在 Progressive Lightmapper 中启用烘焙的 cookie，以用于 Baked Lights 和 Mixed Lights。有关更多信息，请参见 Cookie。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Atlas&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择一种模式来配置&lt;strong&gt;Sprite Atlas&lt;/strong&gt;工具。默认情况下，此设置为&lt;strong&gt;Disabled&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 不会打包 Sprite Atlas。这是默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Atlas V1 - Enabled For Builds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 只在构建时打包 Sprite Atlas。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Atlas V1 - Always Enabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 在构建和进入播放模式之前都会打包 Sprite Atlas。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Atlas V2 (Experimental) - Enabled&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 在构建和进入播放模式之前都会打包 Sprite Atlas。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Atlas V2 (Experimental) - Enabled For Builds&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unity 只在构建时打包 Sprite Atlas。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;C# Project Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Additional extensions to include&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包含要添加到 C# 项目中的附加文件类型列表。每个文件类型之间用分号分隔。默认情况下，此字段包含&lt;code&gt;txt;xml;fnt;cd&lt;/code&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Root namespace&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;填写用于 C# 项目的&lt;code&gt;RootNamespace&lt;/code&gt;属性的命名空间。有关更多信息，请参阅公共 MSBuild 项目属性。默认情况下，此字段为空。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;ETC Texture Compressor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Behavior&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定在不同的 ETC 纹理压缩质量下使用的压缩工具。可用的压缩工具包括 etcpak、ETCPACK 和 Etc2Comp。这些都是第三方压缩器库。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Legacy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 ETC 纹理压缩可以进行配置的 ETC 纹理压缩之前可用的配置。这些设置如下:-&lt;strong&gt;Fast&lt;/strong&gt;：ETCPACK Fast-&lt;strong&gt;Normal&lt;/strong&gt;：ETCPACK Fast-&lt;strong&gt;Best&lt;/strong&gt;：ETCPACK Best&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;使用 Unity 的默认配置。这些设置如下：-&lt;strong&gt;Fast&lt;/strong&gt;：etcpack-&lt;strong&gt;Normal&lt;/strong&gt;：ETCPACK Fast-&lt;strong&gt;Best&lt;/strong&gt;：Etc2Comp Best&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Custom&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;自定义 ETC 纹理压缩配置。选择此选项后，将启用&lt;strong&gt;Fast&lt;/strong&gt;、&lt;strong&gt;Normal&lt;/strong&gt;和&lt;strong&gt;Best&lt;/strong&gt;属性。它与支持的平台上的 Texture Importer 中的&lt;strong&gt;Compressor Quality&lt;/strong&gt;设置相对应。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fast&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义 Fast 压缩的压缩质量工具。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Normal&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义 Normal 压缩的压缩质量工具。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Best&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义 Best 压缩的压缩质量工具。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Line Endings For New Scripts&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择应用于在编辑器中创建的新脚本的文件行结束符。请注意，配置这些设置不会转换现有的脚本。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;OS Native&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;根据编辑器运行的操作系统应用行结束符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;根据 Unix 操作系统应用行结束符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;根据 Windows 操作系统应用行结束符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Streaming Settings&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enable Texture Streaming in Play Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用 Play Mode 中的 Mipmap Streaming。还必须启用质量管理&lt;strong&gt;Texture Streaming&lt;/strong&gt;设置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shader Compilation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Asynchronous Shader Compilation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此复选框可以使 Unity 在后台编译着色器。编译时，Unity 引擎使用虚拟着色器来渲染编辑器中的几何体。当 Shader 编译完成后，引擎将您的着色器变体替换回来。这意味着在渲染之前，编辑器可以无缝运行，而不必等待 Unity 引擎编译每个单独的着色器变体。有关更多信息，请参见 Asynchronous Shader compilation。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Numbering Scheme&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Game Object Naming&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;重复的或实例化的 GameObject 的命名方案。重复或实例化的 GameObject 的命名是将连续的数字附加到原始对象名称中。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Game Object Digits&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于重复的 GameObject 数字的位数。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Space Before Number in Asset Names&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控制是否在重复的资源名称中在数字前插入空格。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Project Settings-Audio(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/19/2023-10-19-unity-document-87/</link>
      <pubDate>Thu, 19 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/19/2023-10-19-unity-document-87/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;audio&#34;&gt;Audio &lt;a href=&#34;#audio&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Audio&lt;/strong&gt;设置（主菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Audio&lt;/strong&gt;类别）允许您微调场景中所有正在播放的声音的最大音量。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-19-unity-document-87/AudioSet.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Global Volume&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置播放期间所有声音的音量。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Volume Rolloff Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置基于对数衰减的源的全局衰减系数。值越大，音量衰减越快。相反，值越小，衰减越慢。&lt;strong&gt;提示&lt;/strong&gt;：1 的值模拟 “真实世界”。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Doppler Factor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置多普勒效应的听觉效果。使用 0 禁用。使用 1 使其对快速移动的对象可听。&lt;strong&gt;提示&lt;/strong&gt;：将&lt;strong&gt;Doppler Factor&lt;/strong&gt;设置为 1 后，您可以微调&lt;strong&gt;Speed of Sound&lt;/strong&gt;和&lt;strong&gt;Doppler Factor&lt;/strong&gt;直到满意为止。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Speaker Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置项目的默认扬声器模式。默认值为 2，对应立体声扬声器。有关模式的完整列表，请参阅 AudioSpeakerMode API 参考。&lt;strong&gt;注意&lt;/strong&gt;：您还可以通过脚本在运行时更改扬声器模式。有关详细信息，请参阅 Audio Settings。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;System Sample Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置输出采样率。如果设置为 0，Unity 将使用系统的采样率。&lt;strong&gt;注意&lt;/strong&gt;：这只是一个参考，因为某些平台允许您更改采样率，例如 iOS 或 Android。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;DSP Buffer Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 DSP 缓冲区的大小，以优化延迟或性能。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;默认缓冲区大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Best Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在性能和延迟之间权衡。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Good Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在延迟和性能之间取得平衡。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Best Performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在性能和延迟之间权衡。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Virtual Voices&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置音频系统管理的虚拟声音数的最大数量。该值应始终大于游戏播放的声音数量。如果不是，Unity 会在控制台显示警告。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Real Voices&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置同时播放的真实声音数的最大数量。在每一帧中选择最响亮的声音。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spatializer Plugin&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的本地音频插件，以对 3D 声源执行空间化滤波。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ambisonic Decoder Plugin&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要使用的本地音频插件，以执行源的全景声到双声道滤波。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disable Unity Audio&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用后，禁用独立构建中的音频系统。在编辑器中，音频系统仍然开启，并支持预览音频剪辑，但 Unity 不处理对 AudioSource.Play 和 AudioSource.playOnAwake 的调用，以模拟独立构建的行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Virtualize Effect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用后，动态关闭在被剔除的 AudioSource 上的效果和空间化器，以节省 CPU。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Project Settings(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/18/2023-10-18-unity-document-86/</link>
      <pubDate>Wed, 18 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/18/2023-10-18-unity-document-86/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;项目设置&#34;&gt;项目设置 &lt;a href=&#34;#%e9%a1%b9%e7%9b%ae%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用 “项目设置” 窗口来定义项目的设置。要打开 “项目设置” 窗口，请转到 &lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-18-unity-document-86/Settings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;A &lt;em&gt;搜索框&lt;/em&gt;允许您在左侧筛选设置类别列表，并在右侧的详细面板中突出显示关键字。&lt;/p&gt;
&lt;p&gt;B 所有设置按类别组织，类别显示在左侧的&lt;em&gt;类别列表&lt;/em&gt;中。当您从列表中选择一个类别时，详细面板会显示关联的设置。&lt;/p&gt;
&lt;p&gt;C &lt;em&gt;详细面板&lt;/em&gt;显示所选类别的所有可用设置。&lt;/p&gt;
&lt;p&gt;下面列出了 “项目设置” 窗口中默认提供的设置类别。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adaptive Performance&lt;/li&gt;
&lt;li&gt;Audio&lt;/li&gt;
&lt;li&gt;Editor&lt;/li&gt;
&lt;li&gt;Graphics&lt;/li&gt;
&lt;li&gt;Input Manager&lt;/li&gt;
&lt;li&gt;Package Manager&lt;/li&gt;
&lt;li&gt;Physics&lt;/li&gt;
&lt;li&gt;Physics 2D&lt;/li&gt;
&lt;li&gt;Player&lt;/li&gt;
&lt;li&gt;Preset Manager&lt;/li&gt;
&lt;li&gt;Quality&lt;/li&gt;
&lt;li&gt;Scene Template&lt;/li&gt;
&lt;li&gt;Script Execution Order&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Tags and Layers&lt;/li&gt;
&lt;li&gt;TextMesh Pro&lt;/li&gt;
&lt;li&gt;Time&lt;/li&gt;
&lt;li&gt;Timeline&lt;/li&gt;
&lt;li&gt;UI Toolkit&lt;/li&gt;
&lt;li&gt;Version Control&lt;/li&gt;
&lt;li&gt;XR Plugin Management&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;根据您安装的包，项目设置窗口还可以显示其他类别和设置。有关特定于包的设置的更多信息，请参阅相应的包文档。&lt;/p&gt;
&lt;h2 id=&#34;查找设置&#34;&gt;查找设置 &lt;a href=&#34;#%e6%9f%a5%e6%89%be%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您需要找到一个设置时，您可以在 “项目设置” 窗口顶部的搜索框中输入一个关键字（可以是部分或全部关键字）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-18-unity-document-86/Settings-filter.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;通过在搜索框中输入关键字来限定范围&lt;/p&gt;
&lt;p&gt;当您在搜索框中输入关键字时，类别列表会动态变化。在上面的示例中，当用户输入单词 “mode” 时，类别列表会缩小为六个匹配项。这意味着 Unity 在仅六个范围类别的项目设置中找到了该关键字。同时，详细面板会突出显示任何匹配的关键字。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以使用相同的步骤来查找和过滤首选项。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Incremental build pipeline(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/17/2023-10-17-unity-document-85/</link>
      <pubDate>Tue, 17 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/17/2023-10-17-unity-document-85/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;增量构建流水线&#34;&gt;增量构建流水线 &lt;a href=&#34;#%e5%a2%9e%e9%87%8f%e6%9e%84%e5%bb%ba%e6%b5%81%e6%b0%b4%e7%ba%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;为了在开发过程中加快迭代速度，Unity 使用增量构建流水线，只在应用程序的部分内容自上次构建以来发生更改时重新构建。这包括资产序列化、代码编译、数据压缩和签名等构建步骤。默认情况下，Unity 对发布构建和开发构建都使用增量构建流水线。&lt;/p&gt;
&lt;p&gt;增量构建流水线还自动执行仅脚本构建（Scripts Only Build）功能。因此，仅当平台不使用增量构建时，才可以在构建设置窗口中找到&lt;strong&gt;仅脚本构建&lt;/strong&gt;选项。&lt;/p&gt;
&lt;p&gt;增量构建流水线适用于 Mono 和 IL2CPP 脚本后端。但是，输出文件结构会根据项目使用的脚本后端而改变。&lt;/p&gt;
&lt;h2 id=&#34;平台兼容性&#34;&gt;平台兼容性 &lt;a href=&#34;#%e5%b9%b3%e5%8f%b0%e5%85%bc%e5%ae%b9%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity 支持以下平台的增量构建流水线&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;独立应用程序（Windows、Mac 和 Linux）&lt;/li&gt;
&lt;li&gt;Web&lt;/li&gt;
&lt;li&gt;Xbox One&lt;/li&gt;
&lt;li&gt;Xbox Series X and Xbox Series S&lt;/li&gt;
&lt;li&gt;Android&lt;/li&gt;
&lt;li&gt;iOS&lt;/li&gt;
&lt;li&gt;tvOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;创建非增量构建&#34;&gt;创建非增量构建 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e9%9d%9e%e5%a2%9e%e9%87%8f%e6%9e%84%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在某些情况下，创建不使用增量构建流水线的构建可能是有用或必要的。&lt;/p&gt;
&lt;p&gt;要创建干净的、非增量构建：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开构建设置窗口。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;构建&lt;/strong&gt;按钮旁边，选择下拉菜单。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;清理构建&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;通常情况下，如果在增量构建后没有预期的更改，并且您认为增量构建流水线存在问题，则应创建一个干净的构建。最常见的原因是，当您实现或更改影响资产的构建过程回调时。&lt;/p&gt;
&lt;p&gt;由于构建过程无法知道您实现的回调如何影响资产，因此无法确定如何重新构建资产。只有在文件的依赖关系发生变化时，Unity 才会重新生成文件。这意味着，如果回调修改了 Unity 生成的文件，并且文件的依赖关系没有发生变化，回调可以将修改应用于已经修改过的文件。例如，如果回调向 Android 应用清单添加新条目，并且 Android 应用清单的依赖关系未更改，则回调仍会添加新条目，从而导致生成无效的文件。&lt;/p&gt;
&lt;p&gt;如果更改回调或其输入数据，并且希望 Unity 重新构建受回调影响的资产，请创建干净的构建。回调的示例包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PostProcessSceneAttribute&lt;/li&gt;
&lt;li&gt;IPreprocessShaders.OnProcessShader&lt;/li&gt;
&lt;li&gt;IPreprocessComputeShaders.OnProcessComputeShader&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果对资产进行更改，Unity 会在构建应用程序时重新构建该资产。这还包括对受其影响的任何回调进行处理，这意味着如果对资产进行更改，不需要创建干净的构建，只需在对构建过程的回调进行更改时创建干净的构建。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Build Settings(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/16/2023-10-16-unity-document-84/</link>
      <pubDate>Mon, 16 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/16/2023-10-16-unity-document-84/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;构建设置&#34;&gt;构建设置 &lt;a href=&#34;#%e6%9e%84%e5%bb%ba%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity 可以为不同的平台和不同的设置构建您的应用程序。这份文档描述了如何定义构建的场景、目标平台和设置。&lt;/p&gt;
&lt;p&gt;要选择您的平台和设置，并开始构建过程，请使用 “构建设置” 窗口。要打开 “构建设置” 窗口：从 Unity 的主菜单中，选择  &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Build Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;理解构建&#34;&gt;理解构建 &lt;a href=&#34;#%e7%90%86%e8%a7%a3%e6%9e%84%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity 生成两种构建类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“发布” 构建，仅包括运行应用程序所需的部分。这是默认的构建类型。&lt;/li&gt;
&lt;li&gt;“开发” 构建，包括脚本调试符号和 “Profiler”。选择 “开发” 构建选项可以启用额外的选项，如深度分析支持和脚本调试。这些选项在通用平台设置部分中有解释。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了在开发过程中进行更快的迭代，Unity 使用增量构建流水线，只重新构建自上次构建以来发生更改的构建组件。了解更多信息，请参阅增量构建流水线。&lt;/p&gt;
&lt;h2 id=&#34;管理构建中的场景&#34;&gt;管理构建中的场景 &lt;a href=&#34;#%e7%ae%a1%e7%90%86%e6%9e%84%e5%bb%ba%e4%b8%ad%e7%9a%84%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您构建应用程序时，Unity 会在 “构建中的场景” 窗格中构建所有已选场景。Unity 按照场景在列表中的顺序进行构建。&lt;/p&gt;
&lt;p&gt;您可以向列表中添加、排除、删除和重新排序场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“将当前打开的所有场景添加到列表中”：选择 “添加打开的场景”。您还可以从 “Project” 窗口将场景拖放到列表中。&lt;/li&gt;
&lt;li&gt;“将列表中的场景排除在构建之外”：取消选中该场景旁边的复选框。这会将场景从构建中移除，但不会从列表中移除。&lt;/li&gt;
&lt;li&gt;“从列表中删除场景”：选择场景并按下 “Delete” 键。&lt;/li&gt;
&lt;li&gt;“调整场景顺序”：在列表中拖放场景以重新排序。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-16-unity-document-84/build-settings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;平台列表&#34;&gt;平台列表 &lt;a href=&#34;#%e5%b9%b3%e5%8f%b0%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每个构建必须有一个目标平台。平台窗格列出了您可以构建的所有平台。&lt;/p&gt;
&lt;p&gt;计算机上安装的每个 Unity 版本都有其自己的平台列表。&lt;/p&gt;
&lt;p&gt;如果列表中没有您需要的平台，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 “构建设置” 窗口中：
&lt;ol&gt;
&lt;li&gt;选择要添加的平台。&lt;/li&gt;
&lt;li&gt;选择 “安装” 或 “下载”。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;在 “Unity Hub”&amp;gt;“Installs” 中：
&lt;ol&gt;
&lt;li&gt;选择您正在使用的 Unity 版本的三个点。&lt;/li&gt;
&lt;li&gt;选择  &lt;strong&gt;Add Modules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;按照说明安装平台模块。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要更改构建的目标平台：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择要切换到的平台。
提示：列表中显示的 Unity 图标表示当前选定的平台是目标平台。&lt;/li&gt;
&lt;li&gt;选择 “切换平台”。
如果 Unity 需要重新导入与目标平台匹配的格式的资源，则切换过程可能需要很长时间。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;构建设置-1&#34;&gt;构建设置 &lt;a href=&#34;#%e6%9e%84%e5%bb%ba%e8%ae%be%e7%bd%ae-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您选择平台时，Unity 会显示一个可供构建调整的选项列表。某些设置适用于所有平台，而某些设置则是特定于平台的。&lt;/p&gt;
&lt;h3 id=&#34;通用平台设置&#34;&gt;通用平台设置 &lt;a href=&#34;#%e9%80%9a%e7%94%a8%e5%b9%b3%e5%8f%b0%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下设置适用于所有平台。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;开发人员构建&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在您的构建中包括调试脚本符号和 Profiler。当您想要测试应用程序时，应使用此设置。选择此选项后，Unity 会设置&lt;code&gt;DEVELOPMENT_BUILD&lt;/code&gt;脚本定义。然后，您的构建将包括设置&lt;code&gt;DEVELOPMENT_BUILD&lt;/code&gt;作为条件的预处理指令（请参阅平台相关编译）。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;自动连接 Profiler&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;自动将 Unity Profiler 连接到您的构建中。仅在您选择了&lt;strong&gt;开发人员构建&lt;/strong&gt;时才可用。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;深度分析支持&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在 Profiler 中启用深度分析。这使得 Profiler 会对应用程序中的每个函数调用进行仪器化，以便返回更详细的分析数据。此选项可能会减慢脚本执行速度。仅在您选择了&lt;strong&gt;开发人员构建&lt;/strong&gt;时才可用。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;脚本调试&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;允许对脚本代码进行调试。仅在您选择了开发人员构建时才可用。Web 平台不支持此选项。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;等待托管调试器&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使播放器在执行任何脚本代码之前等待调试器连接。仅在您选择了&lt;strong&gt;脚本调试&lt;/strong&gt;时才可用。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;IL2CPP 代码生成&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义 Unity 如何管理 IL2CPP 代码生成。此选项仅适用于使用 IL2CPP 作为脚本后端的情况，不适用于 Mono。要更改脚本后端，请转到&lt;strong&gt;Player Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Configuration&lt;/strong&gt; &amp;gt; &lt;strong&gt;Scripting Backend&lt;/strong&gt;，并从&lt;strong&gt;Mono&lt;/strong&gt;改为&lt;strong&gt;IL2CPP&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;更快的运行时&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;生成针对运行时性能进行优化的代码。这是默认设置，也是先前版本 Unity 的行为。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;更快（较小的构建）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;生成针对构建大小和迭代进行优化的代码。它生成较少的代码并产生较小的构建，但可能对运行时性能产生影响，特别是对于泛型代码。当构建时间重要时，例如在迭代更改时，您可能希望使用此选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;压缩方法&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在构建 Player 时压缩项目中的数据，包括 Assets、Scenes、Player 设置和 GI 数据。Web 平台不支持此选项。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在 PC、Mac、Linux Standalone 和 iOS 上，没有默认压缩。在 Android 上，默认压缩格式为 ZIP，相较于 LZ4HC 具有稍好的压缩效果。然而，ZIP 数据的解压缩速度较慢。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;LZ4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一种快速的压缩格式，在开发构建中非常有用。有关详细信息，请参阅 BuildOptions.CompressWithLz4。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;LZ4HC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;LZ4 的高压缩变体，构建速度较慢，但适用于发布构建的效果更好。有关详细信息，请参阅 BuildOptions.CompressWithLz4HC。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;资产导入覆盖&#34;&gt;资产导入覆盖 &lt;a href=&#34;#%e8%b5%84%e4%ba%a7%e5%af%bc%e5%85%a5%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;为了加快导入和平台切换时间，您可以本地覆盖所有纹理导入设置。通常情况下，您不会在最终构建中使用任何导入覆盖，但在开发过程中，它们可以用来加快迭代时间，特别是如果您不关心资产（在这种情况下是纹理）的最佳外观。&lt;/p&gt;
&lt;p&gt;要为初始项目导入设置设置资产导入覆盖，请使用编辑器的命令行参数&lt;code&gt;-overrideMaxTextureSize&lt;/code&gt;和&lt;code&gt;-overrideTextureCompression&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;两个覆盖选项的默认值都是&lt;strong&gt;无覆盖&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;纹理最大尺寸&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;覆盖最大导入纹理尺寸。Unity 按照两个值中较小的一个值进行纹理导入：此值，或 Texture 导入设置中指定的最大尺寸值。导入纹理所需的时间与其包含的像素数量大致成正比，因此较低的最大允许纹理尺寸可以加快导入时间。然而，生成的纹理分辨率较低，因此仅在开发过程中使用此设置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;纹理压缩&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;覆盖 Texture 导入设置中设置的纹理压缩选项。仅影响导入到压缩纹理格式之一的纹理。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;强制使用快速压缩器&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;对支持的格式（BC7、BC6H、ASTC、ETC、ETC2）使用速度更快但质量较低的纹理压缩模式。通常，这导致更多的压缩伪影，但对于许多格式，压缩本身的速度是原来的 2 到 20 倍左右。此设置还会禁用任何具有 Crunch 纹理压缩格式的纹理上的压缩。此设置的效果与所有纹理的平台的 Texture 导入设置中将其&lt;strong&gt;压缩器质量&lt;/strong&gt;设置为&lt;strong&gt;Fast&lt;/strong&gt;相同。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;强制不使用压缩&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不对纹理进行压缩；而是使用未压缩的格式。这样做的导入速度更快（因为跳过了纹理压缩过程），但生成的纹理占用更多内存和游戏数据大小，并且可能会影响渲染性能。此设置的效果与所有纹理的平台的 Texture 导入设置中将其&lt;strong&gt;压缩&lt;/strong&gt;设置为&lt;strong&gt;None&lt;/strong&gt;相同。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;特定于平台的设置&#34;&gt;特定于平台的设置 &lt;a href=&#34;#%e7%89%b9%e5%ae%9a%e4%ba%8e%e5%b9%b3%e5%8f%b0%e7%9a%84%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;每个平台还有特定的构建设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PC、Mac 和 Linux Standalone&lt;/strong&gt;：请参阅 “PC、Mac 和 Linux 构建设置”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal Windows Platform&lt;/strong&gt;：请参阅 “Universal Windows Platform 构建设置”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tvOS&lt;/strong&gt;：请参阅为 tvOS 构建应用程序。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;iOS&lt;/strong&gt;：请参阅 iOS 构建设置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Android&lt;/strong&gt;：请参阅 Android 构建设置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web&lt;/strong&gt;：请参阅构建和运行 Web 项目。&lt;/li&gt;
&lt;li&gt;关于&lt;strong&gt;封闭平台&lt;/strong&gt;开发的构建设置，请参阅 Unity 安装程序中的文档，或请咨询 Unity 论坛。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;构建应用程序&#34;&gt;构建应用程序 &lt;a href=&#34;#%e6%9e%84%e5%bb%ba%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要构建应用程序，请选择以下之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Build&lt;/strong&gt;：编译一个 Player，然后不执行其他操作。默认构建是增量构建，除了第一个构建总是一个完整的非增量构建。要强制进行非增量构建而不是增量构建，请从下拉菜单中选择&lt;strong&gt;清理构建&lt;/strong&gt;。 &lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-16-unity-document-84/clean-build.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;构建并运行&lt;/strong&gt;：编译一个 Player 并在目标平台上打开它（有关详细信息，请查看各个平台页面）。此选项始终使用增量构建。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Shortcuts Manager(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/15/2023-10-15-unity-document-83/</link>
      <pubDate>Sun, 15 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/15/2023-10-15-unity-document-83/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;快捷键管理器&#34;&gt;快捷键管理器 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae%e7%ae%a1%e7%90%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;快捷键管理器允许您查看和管理 Unity 中的键盘快捷键。&lt;/p&gt;
&lt;p&gt;快捷键是绑定到 Unity 命令的任何键或键组合。命令是在编辑器中执行的操作。例如，“R” 键绑定到在 “场景” 视图中激活 “缩放” 工具的命令。&lt;/p&gt;
&lt;p&gt;您可以从 Unity 的主菜单中访问快捷键管理器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Windows 和 Linux 上，选择 &lt;strong&gt;Edit &amp;gt; Shortcuts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;在 macOS 上，选择 &lt;strong&gt;Unity &amp;gt; Shortcuts&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManager.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;配置文件下拉菜单：&lt;/strong&gt; 允许您管理和在不同的快捷键配置文件之间切换。有关详细信息，请参见快捷键配置文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;键位映射：&lt;/strong&gt; 显示分配给命令的键以及它们所分配的命令。有关详细信息，请参见键位映射。您还可以使用键位映射来管理快捷键。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;类别列表：&lt;/strong&gt; 命令按类别排序，这些类别显示在 “类别” 列表中。当您选择一个类别时，它的命令将出现在右侧的 “命令” 列表中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;命令和快捷键列表：&lt;/strong&gt; 列出了所选类别中的所有命令及其分配的快捷键。有关详细信息，请参见命令列表。您还可以使用命令列表来管理快捷键。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;将快捷键分配给全局命令和上下文命令&#34;&gt;将快捷键分配给全局命令和上下文命令 &lt;a href=&#34;#%e5%b0%86%e5%bf%ab%e6%8d%b7%e9%94%ae%e5%88%86%e9%85%8d%e7%bb%99%e5%85%a8%e5%b1%80%e5%91%bd%e4%bb%a4%e5%92%8c%e4%b8%8a%e4%b8%8b%e6%96%87%e5%91%bd%e4%bb%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 命令可以是全局的或上下文的。&lt;/p&gt;
&lt;p&gt;全局命令始终可用。例如，默认情况下，撤消操作的命令分配给&lt;strong&gt;Ctrl/Cmd + Z&lt;/strong&gt;快捷键。使用该快捷键始终撤消最后的操作，而不管哪些窗口打开和哪些工具处于活动状态。&lt;/p&gt;
&lt;p&gt;上下文命令仅在使用特定视图或工具集时起作用。例如，默认情况下，方括号键 “[” 和 “]” 在 “地形” 工具中分配了一组命令，在网格绘制工具中分配了另一组命令。当您按下这两个键时，Unity 会执行活动工具的命令。&lt;/p&gt;
&lt;p&gt;通常情况下，您将为一个全局命令分配一个快捷键，或者为多个上下文命令（来自不同上下文）分配一个快捷键。其他多命令组合（例如，两个全局命令，或来自同一上下文的两个上下文命令）会创建冲突，您需要进行管理。有关快捷键冲突以及如何管理它们的信息，请参见快捷键冲突。&lt;/p&gt;
&lt;p&gt;Unity 还有一些特殊的全局命令，可以与其他全局命令共享快捷键而不会创建冲突。例如，“Q”、“W” 和 “E” 键分别分配给视图、移动和旋转工具，但当您激活 “飞行模式” 时，您可以使用这些键向下、向前和向上移动。&lt;/p&gt;
&lt;h3 id=&#34;键位映射&#34;&gt;键位映射 &lt;a href=&#34;#%e9%94%ae%e4%bd%8d%e6%98%a0%e5%b0%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本节将介绍如何使用键位映射查看快捷键分配情况。有关如何使用键位映射添加、删除和修改快捷键的信息，请参见管理快捷键。&lt;/p&gt;
&lt;p&gt;键位映射显示了分配给命令的键和键组合。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerGlobalKey.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;粉色键分配给全局命令。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerContextKey.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;蓝色键分配给上下文命令。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerUnassignedKey.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;白色键未分配给任何命令。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerGreyKey.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;灰色键是不能分配给命令的特殊键。例如，修饰键如&lt;strong&gt;Shift&lt;/strong&gt;和&lt;strong&gt;Ctrl/Cmd&lt;/strong&gt;，或实用键如&lt;strong&gt;Return&lt;/strong&gt;和&lt;strong&gt;Esc&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;选择修饰键，如&lt;strong&gt;Shift&lt;/strong&gt;、&lt;strong&gt;Ctrl/Cmd&lt;/strong&gt;和&lt;strong&gt;Alt&lt;/strong&gt;，可以更新键位映射，显示哪些快捷键和修饰键的组合被分配给命令。激活的修饰键在键位映射中显示为蓝色。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortCutManagerModifiers.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;激活修饰键会更改键位映射，显示键的组合方式&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示：&lt;/strong&gt; 要在键位映射中临时激活修饰键，在键盘上按住它们。&lt;/p&gt;
&lt;p&gt;要查看某个键分配给哪些命令，请将鼠标指针悬停在快捷键上。工具提示中列出了该键分配给的命令。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerHover.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;“A” 键分配给 3D 视口的 “飞行模式向左” 命令。&lt;/p&gt;
&lt;p&gt;对于键组合，通过在键盘上按住修饰键或在键位映射上单击修饰键，然后将鼠标指针悬停在快捷键上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerHoverMod.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ctrl/Cmd + A&lt;/strong&gt; 的键组合分配给 &lt;strong&gt;Edit &amp;gt; Select All&lt;/strong&gt; 命令&lt;/p&gt;
&lt;p&gt;您可以将单个快捷键分配给多个命令。只要 Unity 不能同时执行这些命令，快捷键就可以透明地工作。但是，如果您将快捷键映射到可以同时执行的多个命令，就会创建冲突。要了解有关冲突以及如何管理它们的信息，请参见下面的快捷键冲突部分。&lt;/p&gt;
&lt;h3 id=&#34;命令列表&#34;&gt;命令列表 &lt;a href=&#34;#%e5%91%bd%e4%bb%a4%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本节将介绍如何使用 “命令” 列表查看快捷键分配情况。有关如何使用 “命令” 列表添加、删除和修改快捷键的信息，请参见管理快捷键。&lt;/p&gt;
&lt;p&gt;“命令” 列表显示了分配给特定命令的快捷键。从 “类别” 列表中选择一个类别，以在 “命令” 列表中显示该类别的命令和快捷键。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerLists.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您还可以使用搜索框搜索 “命令” 列表。在输入搜索词时，“命令” 列表会自动缩小范围，以显示与搜索词匹配的命令。&lt;/p&gt;
&lt;p&gt;如果您在特定类别中搜索，可以通过在 “搜索” 行中设置范围，在所选类别和 “所有 Unity 命令” 类别之间切换结果。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerSearch.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;管理快捷键&#34;&gt;管理快捷键 &lt;a href=&#34;#%e7%ae%a1%e7%90%86%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;快捷键管理器提供了几种方式来分配、修改、取消分配和重置快捷键。&lt;/p&gt;
&lt;p&gt;您可以通过以下方式之一来分配或修改快捷键：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 “命令” 列表拖放命令到键位映射中。&lt;/li&gt;
&lt;li&gt;在 “命令” 列表中键入快捷键。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以通过以下方式来取消分配或重置快捷键：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在键位映射或 “命令” 列表中使用上下文菜单。&lt;/li&gt;
&lt;li&gt;直接在 “命令” 列表中删除快捷键分配。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;为命令分配快捷键&#34;&gt;为命令分配快捷键 &lt;a href=&#34;#%e4%b8%ba%e5%91%bd%e4%bb%a4%e5%88%86%e9%85%8d%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以使用键位映射或 “命令” 列表为命令分配快捷键。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用键位映射分配快捷键：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;单击要在快捷键中使用的任何修饰键（例如&lt;strong&gt;Shift&lt;/strong&gt;或&lt;strong&gt;Ctrl/Cmd&lt;/strong&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将命令从 “命令” 列表拖放到主快捷键上。&lt;/p&gt;
&lt;p&gt;当您在键位映射上悬停时，光标会更改，指示可能的分配方式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerDnDAssign.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;使用 “命令” 列表分配快捷键：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;双击列表中的命令以编辑其快捷键字段。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入键盘上常规方式按下所需快捷键的键。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerListAssign.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;确保按住您希望包括在快捷键中的任何修饰键（例如&lt;strong&gt;Shift&lt;/strong&gt;或&lt;strong&gt;Alt/Option&lt;/strong&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果快捷键已分配给命令，新的分配将会创建冲突。有关管理冲突的信息，请参见快捷键冲突。&lt;/p&gt;
&lt;h3 id=&#34;取消分配和重置快捷键&#34;&gt;取消分配和重置快捷键 &lt;a href=&#34;#%e5%8f%96%e6%b6%88%e5%88%86%e9%85%8d%e5%92%8c%e9%87%8d%e7%bd%ae%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用键位映射或 “命令” 列表可以删除命令的分配快捷键，或将修改的快捷键重置为其默认映射方式。&lt;/p&gt;
&lt;p&gt;**注意：**Unity 将默认快捷键分配存储在默认配置文件中。有关详细信息，请参见快捷键配置文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从键位映射中取消分配或重置快捷键：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;右键单击要取消分配或重置的快捷键。&lt;/p&gt;
&lt;p&gt;如果您要取消分配或重置的是键组合，请在右键单击快捷键之前单击包含的修饰键（例如&lt;strong&gt;Shift&lt;/strong&gt;或&lt;strong&gt;Ctrl/Cmd&lt;/strong&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从上下文菜单中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择**[COMMAND] &amp;gt; Reset to default** 将默认快捷键重新分配给命令。&lt;/li&gt;
&lt;li&gt;选择**[COMMAND] &amp;gt; Remove shortcut** 将快捷键从命令中取消分配。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerUnassignKeyMap.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从命令列表中取消分配或重置快捷键：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;右键单击要取消分配或重置快捷键的命令。&lt;/li&gt;
&lt;li&gt;从上下文菜单中：
&lt;ul&gt;
&lt;li&gt;选择**[COMMAND] &amp;gt; Reset to default** 将默认快捷键重新分配给命令。&lt;/li&gt;
&lt;li&gt;选择**[COMMAND] &amp;gt; Remove shortcut** 将快捷键从命令中取消分配。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutMangerUnassignList.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;或者：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;双击要取消分配快捷键的命令，然后按下&lt;strong&gt;Return/Enter&lt;/strong&gt;键从快捷键字段中删除快捷键。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerListUnassign.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;快捷键冲突&#34;&gt;快捷键冲突 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae%e5%86%b2%e7%aa%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以将相同的快捷键分配给多个命令，前提是这些命令不能同时执行。例如，可以将单个快捷键分配给 “场景视图” 中的一个命令和 “动画” 窗口中的另一个命令。因为这两个窗口不能同时获得焦点，所以在使用快捷键时，Unity 会执行哪个命令是明确的。&lt;/p&gt;
&lt;p&gt;将快捷键分配给可以同时执行的两个命令会创建冲突。例如，当您将单个快捷键分配给：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;来自同一上下文的一个或多个上下文命令。&lt;/li&gt;
&lt;li&gt;多个全局命令。&lt;/li&gt;
&lt;li&gt;全局和上下文命令组合。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在创建新的快捷键分配时，快捷键管理器提供了处理冲突的选项，以及在使用分配给冲突命令的快捷键时的选项。&lt;/p&gt;
&lt;h3 id=&#34;在快捷方式管理器中查看冲突&#34;&gt;在快捷方式管理器中查看冲突 &lt;a href=&#34;#%e5%9c%a8%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f%e7%ae%a1%e7%90%86%e5%99%a8%e4%b8%ad%e6%9f%a5%e7%9c%8b%e5%86%b2%e7%aa%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在快捷键管理器的 “命令” 列表中，具有快捷键冲突的命令会显示一个 “警告” 图标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerConflictCat.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以通过在 “类别” 列表中选择 “绑定冲突” 类别来获取具有冲突快捷键的命令的完整列表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortctManagerBindingConflicts.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;在创建快捷键时管理冲突&#34;&gt;在创建快捷键时管理冲突 &lt;a href=&#34;#%e5%9c%a8%e5%88%9b%e5%bb%ba%e5%bf%ab%e6%8d%b7%e9%94%ae%e6%97%b6%e7%ae%a1%e7%90%86%e5%86%b2%e7%aa%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;将快捷键分配给两个冲突的命令会打开 “绑定冲突” 对话框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerDlgBindingConflict.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;选择 “创建冲突” 将快捷键分配给命令，以及所有现有的命令分配。&lt;/p&gt;
&lt;p&gt;Unity 将快捷键的所有分配命令添加到 “绑定冲突” 类别中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 “重新分配” 将快捷键重新分配给冲突的命令。这将清除任何其他命令分配。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 “取消” 以退出而不执行任何操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;在使用快捷键时管理冲突&#34;&gt;在使用快捷键时管理冲突 &lt;a href=&#34;#%e5%9c%a8%e4%bd%bf%e7%94%a8%e5%bf%ab%e6%8d%b7%e9%94%ae%e6%97%b6%e7%ae%a1%e7%90%86%e5%86%b2%e7%aa%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您在 Unity 中使用分配给冲突命令的快捷键时，会打开快捷键冲突对话框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerDlgShortcutConflict.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;从列表中选择一个命令，并单击 “执行所选” 按钮执行该命令。&lt;/p&gt;
&lt;p&gt;在执行命令之前启用 “重新绑定到所选命令” 选项，以清除任何其他分配，使快捷键仅分配给所选命令。这相当于删除其他分配。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 “解决冲突” 以打开快捷键管理器，在其中可以修改快捷键以消除冲突。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 “取消” 以退出而不执行任何操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;快捷键配置文件&#34;&gt;快捷键配置文件 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;快捷键存储在配置文件中。每个配置文件是 Unity 快捷键的完整集合，您可以根据需要进行修改。您可以创建任意数量的配置文件，并根据需要在它们之间进行切换。除了默认配置文件（见下文）之外，可以在任何活动配置文件中添加、删除或修改快捷键。对活动配置文件的更改是即时的。Unity 会自动保存这些更改，并不提示您接受或拒绝它们。&lt;/p&gt;
&lt;p&gt;Unity 将快捷键配置文件存储在项目之外的 Unity 首选项目录中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Windows 上：&lt;code&gt;%APPDATA%/Unity\Editor-5.x\Preferences\shortcuts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在 macOS 上：&lt;code&gt;~/Library/Preferences/Unity/Editor-5.x/shortcuts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在 Linux 上：&lt;code&gt;~/.config/unity3d/Preferences/Editor-5.x/shortcuts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着您创建的任何配置文件都可在所有项目中使用。&lt;/p&gt;
&lt;p&gt;升级：当您从较旧的 Unity 版本升级时，Unity 会将您在首选项中配置的任何快捷键迁移到一个名为 UserProfile 的新快捷键配置文件中。&lt;/p&gt;
&lt;h3 id=&#34;管理快捷方式配置文件&#34;&gt;管理快捷方式配置文件 &lt;a href=&#34;#%e7%ae%a1%e7%90%86%e5%bf%ab%e6%8d%b7%e6%96%b9%e5%bc%8f%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以通过快捷键管理器顶部的配置文件下拉菜单来管理配置文件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-15-unity-document-83/ShortcutManagerProfileMenu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;配置文件列表：列出所有可用的配置文件。选择一个配置文件使其成为活动配置文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;配置文件选项：用于创建新配置文件或重命名或删除活动配置文件的选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;默认配置文件&#34;&gt;默认配置文件 &lt;a href=&#34;#%e9%bb%98%e8%ae%a4%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Unity 有一个默认配置文件，其中包含 “出厂” 设定的快捷键。当您创建一个新的配置文件时，Unity 会复制默认配置文件。&lt;/p&gt;
&lt;p&gt;您无法修改默认配置文件。如果您尝试进行修改，Unity 会自动创建一个副本（称为 “默认副本”），将这个副本作为活动配置文件，并将您的更改应用于该副本。&lt;/p&gt;
&lt;h2 id=&#34;跳过快捷键管理器使用自定义工具&#34;&gt;跳过快捷键管理器使用自定义工具 &lt;a href=&#34;#%e8%b7%b3%e8%bf%87%e5%bf%ab%e6%8d%b7%e9%94%ae%e7%ae%a1%e7%90%86%e5%99%a8%e4%bd%bf%e7%94%a8%e8%87%aa%e5%ae%9a%e4%b9%89%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您在键盘上选择一个键或键组合时，Unity 会生成一个键盘事件，并将该事件发送到活动视图。如果活动视图可以使用该事件，例如触发一个操作，则会这样做。如果不能，该事件将发送到快捷键管理器，并且 Unity 会执行分配给该快捷键的命令。&lt;/p&gt;
&lt;p&gt;在开发自定义工具时，您可以在它们到达快捷键管理器之前以编程方式拦截键盘事件。例如，您可能希望自定义工具以比使用快捷键管理器配置更复杂的方式对按键进行响应。&lt;/p&gt;
&lt;p&gt;拦截键盘事件的方式取决于您用于创建自定义工具界面的系统。&lt;/p&gt;
&lt;p&gt;如果您使用的是 IMGUI 系统，请参阅以下脚本参考主题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Event.current&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您使用的是 UI Elements 系统，请参阅以下脚本参考主题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KeyDownEvent&lt;/li&gt;
&lt;li&gt;CallbackEventHandler.RegisterCallback&lt;/li&gt;
&lt;li&gt;CallbackEventHandler.HandleEvent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;用户定义的快捷键&#34;&gt;用户定义的快捷键 &lt;a href=&#34;#%e7%94%a8%e6%88%b7%e5%ae%9a%e4%b9%89%e7%9a%84%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;除了从快捷键管理器修改快捷键之外，您还可以使用 UnityEditor.ShortcutManagement 命名空间中的类来定义其他位置（如脚本和包）的自定义快捷键。例如，您可以使用 ShortcutAttribute 和 ClutchShortcutAttribute 属性创建新的快捷键。&lt;/p&gt;
&lt;p&gt;当 Unity 加载来自其他来源的命令和快捷键时，它会执行以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将主菜单中的任何新命令添加到 “命令” 列表中的 “所有 Unity 命令” 类别，以便您可以使用快捷键管理器为它们创建快捷键。&lt;/li&gt;
&lt;li&gt;将自定义命令类别添加到 “类别” 列表中。&lt;/li&gt;
&lt;li&gt;将自定义键盘快捷键添加到快捷键数据库中，以便它们出现在所有快捷键配置文件中。&lt;/li&gt;
&lt;li&gt;在 “命令” 列表中的 “快捷键冲突” 类别中显示自定义快捷键与当前配置文件中的快捷键之间的冲突。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - Preferences(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/14/2023-10-14-unity-document-82/</link>
      <pubDate>Sat, 14 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/14/2023-10-14-unity-document-82/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;偏好设置&#34;&gt;偏好设置 &lt;a href=&#34;#%e5%81%8f%e5%a5%bd%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用偏好设置自定义 Unity 编辑器的行为。&lt;/p&gt;
&lt;p&gt;要打开&lt;strong&gt;偏好设置&lt;/strong&gt;窗口，转到主菜单中的&lt;strong&gt;Edit &amp;gt; Preferences&lt;/strong&gt;（macOS：&lt;strong&gt;Unity &amp;gt; Settings&lt;/strong&gt;）。&lt;/p&gt;
&lt;p&gt;要在&lt;strong&gt;偏好设置&lt;/strong&gt;窗口中导航，使用搜索框过滤设置类别列表，并在&lt;strong&gt;偏好设置&lt;/strong&gt;窗口右侧的详细信息窗格中突出显示关键字。&lt;/p&gt;
&lt;p&gt;以下是可用的偏好设置类别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通用&lt;/li&gt;
&lt;li&gt;2D&lt;/li&gt;
&lt;li&gt;分析&lt;/li&gt;
&lt;li&gt;资源管道&lt;/li&gt;
&lt;li&gt;颜色&lt;/li&gt;
&lt;li&gt;诊断&lt;/li&gt;
&lt;li&gt;显示设置&lt;/li&gt;
&lt;li&gt;外部工具&lt;/li&gt;
&lt;li&gt;作业&lt;/li&gt;
&lt;li&gt;GI 缓存&lt;/li&gt;
&lt;li&gt;包管理器&lt;/li&gt;
&lt;li&gt;场景视图&lt;/li&gt;
&lt;li&gt;搜索&lt;/li&gt;
&lt;li&gt;自定义包偏好设置&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;通用&#34;&gt;通用 &lt;a href=&#34;#%e9%80%9a%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;通用&lt;/strong&gt;偏好设置允许您自定义 Unity 的整体行为。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;启动时加载上一个项目&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以始终在启动时加载上一个项目。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;禁用编辑器分析&lt;/strong&gt;（仅 Pro 版本）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以停止编辑器自动将信息发送回 Unity。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;脚本更改时播放行为&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择脚本在游戏在编辑器中运行时更改时 Unity 的行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;重新编译并继续播放&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;重新编译脚本并继续运行场景。这是默认行为，但如果您的脚本依赖于任何非可序列化数据，则可能需要更改它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;完成播放后重新编译&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;推迟重新编译，直到手动停止场景，避免任何中断。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;停止播放并重新编译&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;立即停止场景以进行重新编译，使您能够快速重新开始测试。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;启动时代码优化&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在 Unity 编辑器启动时选择将代码优化模式设置为&lt;strong&gt;调试&lt;/strong&gt;或&lt;strong&gt;发布&lt;/strong&gt;。&lt;strong&gt;调试&lt;/strong&gt;模式允许您附加外部调试器软件，但在编辑器中以播放模式运行项目时会导致 C# 性能较慢。&lt;strong&gt;发布&lt;/strong&gt;模式在编辑器中以播放模式运行项目时提供更快的 C# 性能，但不能附加任何外部调试器。有关详细信息，请参阅代码优化模式。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;编辑器主题&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择在 Unity 编辑器中使用的背景。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;亮色&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;应用浅灰色背景和黑色文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;暗色&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;应用深色主题和白色文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;编辑器字体&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在 Unity 编辑器中显示的字体。默认字体为 Inter。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;启用字母数字排序&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以在 Hierarchy 窗口的右上角显示一个按钮，用于在 Transform 排序（默认）和字母数字排序之间切换。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;交互模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定编辑器在空闲多长时间后更新。每当一个帧结束时，编辑器会在下一个帧开始之前等待指定的时间。这允许您控制编辑器的性能，并减少 CPU 资源和功耗的消耗。例如，如果您想测试编辑器的性能，请将此属性设置为&lt;strong&gt;无节流&lt;/strong&gt;。如果您想节省电量（例如，延长笔记本电脑的电池寿命），请将此属性设置为节流模式之一。在节流模式下，如果您与编辑器进行交互（例如，在场景视图中进行平移），编辑器将停止空闲。** 注意：** 在播放模式下，Unity 会忽略您使用此偏好设置施加的任何节流。编辑器将以尽可能快的速度更新，除非您在游戏视图中启用了 VSync 选项，或者将&lt;code&gt;Application.targetFrameRate&lt;/code&gt;设置为不等于 - 1 的值。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;默认&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;编辑器每个周期最多空闲 4 毫秒。如果一帧需要 5 毫秒或更长时间，编辑器将不会空闲，并且下一帧将自动开始。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;不节流&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;每当一帧结束时，立即开始下一帧。编辑器永不等待，尽可能快地更新。这种模式消耗大量 CPU 资源。如果您使用的是笔记本电脑，可能会导致电池快速耗尽。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;监视器刷新率&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;编辑器每个周期最多空闲到监视器的刷新率。大多数显示器的刷新率为 16 毫秒。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;自定义&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;您指定应用程序可以空闲的最长时间。选择此选项后，将显示 ** 帧节流（毫秒）** 属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;帧节流（毫秒）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当&lt;strong&gt;交互模式&lt;/strong&gt;设置为&lt;strong&gt;自定义&lt;/strong&gt;时，此属性指定编辑器在帧之间空闲的时间长度。该值可以介于 0 和 33 毫秒之间。0 等同于将&lt;strong&gt;交互模式&lt;/strong&gt;设置为&lt;strong&gt;不节流&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;包管理器日志级别&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要将 Package Manager 日志报告的&lt;strong&gt;详细程度&lt;/strong&gt;。选项为：&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;错误&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;仅显示意外错误和故障。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;警告&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;显示可能引发问题的异常情况。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;信息&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;仅显示高级信息性消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;详细&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;显示详细信息性消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;调试&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;显示高级调试消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;em&gt;傻瓜&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;显示详细的调试消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;启用扩展动态提示&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以启用扩展的动态提示，当鼠标停留在属性、对象或工具上足够长时间，或者出现动态提示时，显示更多信息。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;执行凹凸贴图检查&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此选项以在导入材质时启用凹凸贴图检查，帮助检查在&lt;strong&gt;凹凸贴图&lt;/strong&gt;材质槽中使用的纹理是否实际上定义为凹凸贴图。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2d&#34;&gt;2D &lt;a href=&#34;#2d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;2D&lt;/strong&gt;偏好设置允许您定义与 2D 相关的功能和包的设置。当您将 2D 相关包（如 Tilemap Editor 包）安装到项目中时，它们的偏好设置将显示在此部分中。&lt;/p&gt;
&lt;h3 id=&#34;物理&#34;&gt;物理 &lt;a href=&#34;#%e7%89%a9%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用&lt;strong&gt;物理&lt;/strong&gt;偏好设置来配置 2D 物理设置，例如在 UI 中使用的颜色。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;碰撞体&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置以下 UI 元素的颜色。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;唤醒颜色（轮廓）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置当附加的&lt;strong&gt;刚体 2D&lt;/strong&gt;处于&lt;strong&gt;唤醒&lt;/strong&gt;状态时，碰撞体 2D 的轮廓颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;唤醒颜色（填充）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置当附加的&lt;strong&gt;刚体 2D&lt;/strong&gt;处于&lt;strong&gt;唤醒&lt;/strong&gt;状态时，碰撞体 2D 的填充颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;休眠颜色（轮廓）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置当附加的&lt;strong&gt;刚体 2D&lt;/strong&gt;处于&lt;strong&gt;休眠&lt;/strong&gt;状态时，碰撞体 2D 的轮廓颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;休眠颜色（填充）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置当附加的&lt;strong&gt;刚体 2D&lt;/strong&gt;处于&lt;strong&gt;休眠&lt;/strong&gt;状态时，碰撞体 2D 的填充颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;范围颜色&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置所有 PhysicsShape2D 创建的碰撞体 2D 的限制框的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;接触点&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置以下 UI 元素使用的颜色。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;接触点颜色&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置碰撞体 2D 的接触点的颜色，以箭头形式显示，箭头从接触点开始沿接触法线方向。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;接触点箭头比例&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置碰撞体 2D 的接触点箭头的比例。较大的值绘制的箭头较大。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;分析&#34;&gt;分析 &lt;a href=&#34;#%e5%88%86%e6%9e%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;分析&lt;/strong&gt;偏好设置可让您定义 Profiler 的设置。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;帧计数&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置 Profiler 捕获的最大帧数。您可以将此数字设置在 300 到 2000 之间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;显示 “当前帧” 统计信息&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;默认情况下，当选择&lt;strong&gt;当前帧&lt;/strong&gt;按钮并进入&lt;strong&gt;当前帧&lt;/strong&gt;模式时，帧指示线没有带有当前帧统计信息的注释。这是因为统计信息注释可能会使实时查看数据变得困难。要显示注释，请启用此设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认记录状态&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Profiler 应该以哪种记录状态打开。可选择&lt;strong&gt;启用&lt;/strong&gt;、&lt;strong&gt;禁用&lt;/strong&gt;或&lt;strong&gt;记住&lt;/strong&gt;。&lt;strong&gt;启用&lt;/strong&gt;会在会话之间保持&lt;strong&gt;记录&lt;/strong&gt;按钮启用状态，而&lt;strong&gt;禁用&lt;/strong&gt;则会禁用该按钮，无论您在分析会话期间是否打开或关闭它。&lt;strong&gt;记住&lt;/strong&gt;状态会记住您在会话期间启用或禁用&lt;strong&gt;记录&lt;/strong&gt;按钮，并在下次打开 Profiler 窗口时保持其最后状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认编辑器目标模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&lt;strong&gt;附加到 Player&lt;/strong&gt;下拉菜单默认应针对的模式。可选择&lt;strong&gt;Playmode&lt;/strong&gt;或&lt;strong&gt;Editor&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;自定义连接 ID&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入您要在 Profiler 窗口或控制台窗口的&lt;strong&gt;附加到 Player&lt;/strong&gt;下拉列表中使用的设备的连接名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;资源管道&#34;&gt;资源管道 &lt;a href=&#34;#%e8%b5%84%e6%ba%90%e7%ae%a1%e9%81%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;自动刷新&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以在更改时自动导入资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;导入工作线程数 %&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以可用逻辑 CPU 核数的百分比输入新项目的&lt;strong&gt;期望导入工作线程数&lt;/strong&gt;。例如，如果您的系统具有 16 个逻辑核心，并且此偏好设置设置为 25％，则新项目的&lt;strong&gt;期望导入工作线程数&lt;/strong&gt;将设置为 4。如果这个值设置得过高，您的导入工作线程流程将必须与其他流程竞争，例如读写文件和系统资源。25％的默认值适用于大多数情况。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;目录监视（仅在 Windows 上可用）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以监视目录而不是扫描所有项目文件以检测资源更改。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;在导入时压缩纹理&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;禁用此设置以跳过导入过程中的纹理&lt;strong&gt;压缩&lt;/strong&gt;。通常，纹理以无压缩格式导入。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;验证保存资源&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以验证要单独保存的资源。每次 Unity 保存资源时，都会显示对话框。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity 加速器（缓存服务器）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认模式&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义缓存服务器的默认设置，是否默认启用或禁用。您可以在 Unity 编辑器设置中为每个项目覆盖此设置。有关详细信息，请参见 Unity 加速器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认 IP 地址&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置缓存服务器要使用的默认 IP 地址。您可以在 Unity 编辑器设置中为每个项目覆盖此设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;检查连接&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;单击此按钮尝试连接到远程缓存服务器。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;颜色&#34;&gt;颜色 &lt;a href=&#34;#%e9%a2%9c%e8%89%b2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;颜色&lt;/strong&gt;偏好设置可让您为 Unity 编辑器中的各种用户界面元素选择颜色。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;动画&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用此设置自定义动画属性的颜色偏好设置。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;已动画的属性&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;表示当前正在进行动画的属性的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;候选属性&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;表示您最近修改的动画属性的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;记录的属性&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;表示动画属性自动记录在&lt;strong&gt;动画片段&lt;/strong&gt;中的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;通用&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用此设置自定义通用设置的颜色偏好设置。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Playmode Tint&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;播放模式下为方便识别时为编辑器添加的颜色。当进入播放模式时，Unity 会使用您在此处选择的颜色对整个编辑器进行着色。在播放模式下，某些编辑器操作不可用，并且在退出播放模式时可以重置一些已编辑的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用此设置自定义场景的偏好设置。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;背景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在关闭&lt;strong&gt;Scene FX&lt;/strong&gt;中的 Skybox 设置时，场景相机清除时显示的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;预制品背景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在关闭&lt;strong&gt;Scene FX&lt;/strong&gt;中的 Skybox 设置时，场景相机清除时显示的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GI 贡献：关闭 / 接收 GI：光探头&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在&lt;strong&gt;GameObject&lt;/strong&gt;的静态编辑器标志的&lt;strong&gt;ContributeGI&lt;/strong&gt;禁用时显示的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GI 贡献：打开 / 接收 GI：光探头&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在&lt;strong&gt;GameObject&lt;/strong&gt;的静态编辑器标志的&lt;strong&gt;ContributeGI&lt;/strong&gt;启用，渲染器的&lt;strong&gt;ReceiveGI&lt;/strong&gt;属性设置为&lt;strong&gt;Lightmaps&lt;/strong&gt;时显示的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GI 贡献：打开 / 接收 GI：光照图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在&lt;strong&gt;GameObject&lt;/strong&gt;的静态编辑器标志的&lt;strong&gt;ContributeGI&lt;/strong&gt;启用，渲染器的&lt;strong&gt;ReceiveGI&lt;/strong&gt;属性设置为&lt;strong&gt;Light Probes&lt;/strong&gt;时显示的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;网格&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置场景视图中网格的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;指南线&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置场景视图中引导线的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;材质验证器 强制金属&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于指示材质属性的&lt;strong&gt;验证反照率 / 金属光泽调试渲染模式&lt;/strong&gt;的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;材质验证器 值太高&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于指示材质值太高的&lt;strong&gt;验证反照率 / 金属光泽调试渲染模式&lt;/strong&gt;的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;材质验证器 值太低&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于指示材质值太低的&lt;strong&gt;验证反照率 / 金属光泽调试渲染模式&lt;/strong&gt;的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选中轴&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置选中处理工具为移动、旋转或缩放时显示高亮的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选中的子对象轮廓&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置选中对象的子对象的轮廓颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选中的材质高亮&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在场景视图中单击 MeshRenderer 上的&lt;strong&gt;网格&lt;/strong&gt;以定位子网格时显示的轮廓颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选中的轮廓&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置选中的游戏对象的轮廓颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;UI 碰撞器处理&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置用于 Unity UI 的填充可视化的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;音量 Gizmo&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置在 Gizmo 中指示&lt;strong&gt;音频源&lt;/strong&gt;的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;线框&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当线框渲染模式激活时设置线框的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;线框覆盖&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当纹理线框渲染模式激活时设置线框的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选中的线框&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果在 Gizmo 选项中启用了&lt;strong&gt;选择线框&lt;/strong&gt;，则所选线框将显示为您在此处设置的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;X 轴&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您在此处设置的颜色适用于影响 x 轴的任何内置变换工具处理操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Y 轴&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您在此处设置的颜色适用于影响 y 轴的任何内置变换工具处理操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Z 轴&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您在此处设置的颜色适用于影响 z 轴的任何内置变换工具处理操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;诊断&#34;&gt;诊断 &lt;a href=&#34;#%e8%af%8a%e6%96%ad&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您向 Unity 报告问题时，Unity 支持团队可能需要您启用诊断开关以帮助确定原因。在编辑器或播放器中运行诊断应用程序会影响性能和用户体验。只有在 Unity 支持团队要求时才应运行诊断。&lt;/p&gt;
&lt;p&gt;如果您的应用程序中存在活动的诊断开关，Unity 会在控制台中显示警告。要重置开关，在&lt;strong&gt;诊断&lt;/strong&gt;选项卡中，单击&lt;strong&gt;重置全部&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果活动的诊断开关导致 Unity 编辑器无法打开，请使用&lt;code&gt;--reset-diagnostic-switches&lt;/code&gt;参数从命令行重置所有开关。有关在启动时使用命令行参数的更多信息，请参见命令行参数。&lt;/p&gt;
&lt;h2 id=&#34;显示设置&#34;&gt;显示设置 &lt;a href=&#34;#%e6%98%be%e7%a4%ba%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;strong&gt;显示设置&lt;/strong&gt;偏好设置自定义附加监视器的游戏视图行为。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;按显示顺序排序（仅限 Windows）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置可按与主显示器之间的距离对附加显示器的显示编号进行排序。 请注意，此设置仅适用于 Windows。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;进入全屏模式时显示通知&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置，在全屏模式下显示通知以查看所需的快捷方式（CTRL+SHIFT+F7）以退出游戏视图的全屏模式。当禁用时，不会显示退出全屏模式的快捷方式通知。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;全屏模式下显示游戏视图工具栏&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用时，全屏模式下可见包含 gizmos 和统计信息等游戏对象的游戏视图控制栏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;独立模拟监视器映射&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示映射到您设备的独立监视器的数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;外部工具&#34;&gt;外部工具 &lt;a href=&#34;#%e5%a4%96%e9%83%a8%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;strong&gt;外部工具&lt;/strong&gt;偏好设置来设置脚本、处理图像和源代码控制的外部应用程序。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;外部脚本编辑器&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择 Unity 应该用来打开脚本文件的应用程序。Unity 会自动将正确的参数传递给其内置支持的脚本编辑器。Unity 内置支持 Visual Studio Community、Visual Studio Code（VSCode）和 JetBrains Rider。&lt;strong&gt;通过文件扩展名打开&lt;/strong&gt;选项在打开文件时使用设备的默认应用程序来打开相关文件类型。如果没有默认应用程序可用，设备会打开一个窗口，提示您选择用于打开文件的应用程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;外部脚本编辑器参数&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此字段控制 Unity 在打开文件时向您的代码编辑器发送的参数。 &lt;code&gt;$(File)&lt;/code&gt;、&lt;code&gt;$(Line)&lt;/code&gt;和&lt;code&gt;$(Column)&lt;/code&gt;参数将文件名、行号和列号传递给您的外部代码编辑器。您的代码编辑器使用这些参数打开具有正确位置的正确文件。例如，如果您在 Unity 控制台中双击一个错误消息，则 Unity 将从该错误消息中将这些参数传递给外部编辑器，然后外部编辑器将在错误发生的位置打开正确的文件。您可以手动编辑此字段，以自定义 Unity 发送到外部代码编辑器的参数。单击&lt;strong&gt;重置参数&lt;/strong&gt;按钮可将此字段重置为默认设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;生成所有.csproj 文件&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此设置以生成所有.csproj 文件。代码编辑器使用.sln 和.csproj 文件来访问关于您的项目的数据。.csproj 文件以 XML 格式存储描述性数据或元数据。这些数据可能包括版本信息、平台要求、构建文件或数据库设置等。当存在这些文件时，代码编辑器可以使用它们包含的数据提供有用的功能，例如突出显示可能的编译错误。启用此设置以指示 Unity 在项目中尽可能创建.csproj 文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;处理的扩展名&lt;/strong&gt;（仅在将 Rider 或 Visual Studio Code 选择为外部脚本编辑器时可用）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此字段确定&lt;strong&gt;外部脚本编辑器&lt;/strong&gt;打开的文件类型。该字段预先加载了脚本编辑器默认打开的文件列表。要将其他文件类型添加到此列表中，请输入文件扩展名，并用分号分隔每个扩展名。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;图像应用程序&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择您希望 Unity 用来打开图像文件的应用程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;修订控制的差异 / 合并&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择您希望 Unity 用于解决源代码控制存储库中文件差异的应用程序。Unity 会检测这些工具是否位于其默认安装位置。在 Windows 上，Unity 检查 TortoiseMerge、WinMerge、PlasticSCM Merge 和 Beyond Compare 4 的注册表键。有关详细信息，请参阅下面的修订控制差异 / 合并部分。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;修订控制的差异--合并&#34;&gt;修订控制的差异 / 合并 &lt;a href=&#34;#%e4%bf%ae%e8%ae%a2%e6%8e%a7%e5%88%b6%e7%9a%84%e5%b7%ae%e5%bc%82--%e5%90%88%e5%b9%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 当前支持以下工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SourceGear DiffMerge&lt;/li&gt;
&lt;li&gt;TkDiff&lt;/li&gt;
&lt;li&gt;P4Merge&lt;/li&gt;
&lt;li&gt;TortoiseMerge&lt;/li&gt;
&lt;li&gt;WinMerge&lt;/li&gt;
&lt;li&gt;PlasticSCM Merge&lt;/li&gt;
&lt;li&gt;Beyond Compare 4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意： 由于这些是 Unity 默认不包含的第三方工具，您可能需要单独下载和安装它们。&lt;/p&gt;
&lt;p&gt;要设置自定义的修订工具，请按照以下步骤进行：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从&lt;strong&gt;修订控制差异 / 合并&lt;/strong&gt;下拉列表中，选择&lt;strong&gt;自定义工具&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;输入自定义工具安装文件夹的路径。在 Mac 上，这应该指向工具安装文件夹中的&lt;em&gt;Contents/MacOS&lt;/em&gt;文件夹。&lt;/li&gt;
&lt;li&gt;输入两路差异、三路差异和合并的参数。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要在修订工具中指定文件布局，请使用以下参数：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#LTITLE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;左侧标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#RTITLE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;右侧标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ATITLE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;祖先标题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#LEFT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;左侧文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#RIGHT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;右侧文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ANCESTOR&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;祖先文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#OUTPUT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输出文件&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ABSLEFT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;左侧文件的绝对路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ABSRIGHT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;右侧文件的绝对路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ABSANCESTOR&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;祖先文件的绝对路径&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ABSOUTPUT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输出文件的绝对路径&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;示例：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-14-unity-document-82/SourceGearDiffMerge.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-14-unity-document-82/P4DiffMerge.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;gi-缓存&#34;&gt;GI 缓存 &lt;a href=&#34;#gi-%e7%bc%93%e5%ad%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;全局光照（GI）系统在每台计算机上使用缓存来存储用于预计算实时全局光照的中间文件。计算机上的所有项目共享缓存。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;最大缓存大小（GB）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用滑块设置最大 GI 缓存文件夹大小。Unity 会尽量保持 GI 缓存文件夹大小低于此数值。Unity 会定期删除未使用的文件以腾出更多空间（优先删除最旧的文件）。这是一个自动过程，您无需做任何操作。** 注意：** 如果当前场景使用 GI 缓存中的所有文件，请增加缓存大小。否则，在烘焙时会发生资源密集的重新计算。这可能发生在场景很大或缓存大小太小的情况下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;自定义缓存位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以允许自定义 GI 缓存文件夹的位置。默认情况下，GI 缓存存储在&lt;em&gt;Caches&lt;/em&gt;文件夹中。所有项目共享缓存文件夹。** 提示：** 在 SSD 驱动器上存储 GI 缓存可以加快烘焙速度，特别是在烘焙过程受 I/O 限制的情况下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缓存文件夹位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;单击&lt;strong&gt;浏览&lt;/strong&gt;按钮指定缓存的位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缓存压缩&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此选项启用 Unity 将 GI 缓存中的数据文件压缩以减少硬盘空间的使用。数据文件默认使用 LZ4 压缩，并采用哈希和文件扩展名的命名方案。Unity 根据灯光系统的输入计算哈希，因此改变以下任何设置、属性或资源可能会导致重新计算照明：- 材质（纹理、Albedo、自发光）- 灯光 - 几何体 - 静态标志 - 光探头组 - 反射探头 - 光照贴图参数 ** 提示：** 如果需要访问原始的 Enlighten 实时全局光照数据，请禁用缓存压缩并清除缓存。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;清理缓存&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用此按钮清除缓存目录。在编辑器运行时，手动删除 GI 缓存目录是不安全的。这是因为编辑器在启动时创建&lt;em&gt;GiCache&lt;/em&gt;文件夹，并维护对这些文件的一组引用。&lt;strong&gt;清理缓存&lt;/strong&gt;按钮确保编辑器在删除这些文件之前释放对磁盘上文件的所有引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缓存大小&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示当前的缓存大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缓存文件夹位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示当前的缓存文件夹位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;作业&#34;&gt;作业 &lt;a href=&#34;#%e4%bd%9c%e4%b8%9a&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用作业系统编写简单且安全的多线程代码，以便您的应用程序可以使用所有可用的 CPU 核心来执行代码。作业系统可以提高应用程序的性能。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;使用作业线程&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;禁用&lt;strong&gt;使用作业线程&lt;/strong&gt;以在主线程上运行所有作业。如果您正在调试并希望简化问题空间并消除所有并行性，可以禁用&lt;strong&gt;使用作业线程&lt;/strong&gt;，这样当作业被调度时，它们会立即在主线程上运行。禁用&lt;strong&gt;使用作业线程&lt;/strong&gt;的效果与将 JobsUtility.JobWorkerCount 设置为 0 相同。&lt;strong&gt;使用作业线程&lt;/strong&gt;在编辑器重新启动时默认启用。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;启用作业调试器&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;禁用&lt;strong&gt;启用作业调试器&lt;/strong&gt;以删除作业系统安全系统检查，这些检查检测潜在的竞争条件并防止它们可能引起的错误。如果要监视性能而不增加作业系统安全检查的开销，请禁用&lt;strong&gt;启用作业调试器&lt;/strong&gt;。编辑器重新启动时，默认情况下&lt;strong&gt;启用作业调试器&lt;/strong&gt;被启用。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;泄漏检测级别&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择泄漏检测的模式。泄漏检测检查使用 MallocTracked 进行的分配是否使用 FreeTracked 进行了释放。如果不释放非托管内存，将会导致内存泄漏，对内存使用有负面影响并降低性能。内存泄漏在编辑器中的域重载之间保持存在。在编辑器和开发构建中，默认选择&lt;strong&gt;已启用&lt;/strong&gt;。在非开发构建中，默认选择&lt;strong&gt;已禁用&lt;/strong&gt;作为&lt;strong&gt;泄漏检测级别&lt;/strong&gt;的模式。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;已禁用&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不检测非托管内存泄漏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;已启用&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对每个泄漏类别进行轻量级计数的泄漏检测。此选项仅在域卸载过程中作为泄漏的一部分打印泄漏数量。使用具有堆栈跟踪的&lt;strong&gt;已启用&lt;/strong&gt;泄漏检测模式来查找检测到的泄漏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;已启用（包含堆栈跟踪）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;泄漏检测报告任何未使用 FreeTracked 释放的 MallocTracked 分配的调用堆栈。&lt;strong&gt;已启用（包含堆栈跟踪）**可能会给分配带来性能开销。只有在有意跟踪本机内存泄漏时才使用**已启用（包含堆栈跟踪）&lt;/strong&gt;。与&lt;strong&gt;已启用&lt;/strong&gt;一样，&lt;strong&gt;已启用（包含堆栈跟踪）**会将泄漏报告为域卸载过程的一部分。您只能在编辑器和开发构建中选择**已启用（包含堆栈跟踪）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;包管理器&#34;&gt;包管理器 &lt;a href=&#34;#%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用 “包管理器” 偏好设置更改以下包的默认缓存位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从 Unity Registry 安装的包&lt;/li&gt;
&lt;li&gt;从资产商店下载的包&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Packages&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置确定存储在 Unity 注册表中安装的包的位置的缓存位置。有关更多信息，请参见自定义全局缓存。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Assets&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置确定存储在&lt;strong&gt;资产商店&lt;/strong&gt;中下载的包的位置的缓存位置。有关更多信息，请参见自定义资产商店缓存位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;场景视图&#34;&gt;场景视图 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用 “场景视图” 偏好设置自定义在编辑时对象的放置和可见性。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建对象在原点位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可以将新对象创建在原点位置（而不是场景中心）。默认禁用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建对象时保持比例一致&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可以定义变换组件中 “缩放” 默认行为。如果启用，当调整一个缩放轴的值时，其他值会按比例自动调整。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;自动隐藏组件的 gizmos&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可以在&lt;strong&gt;检视器&lt;/strong&gt;中折叠的组件的 gizmos。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;仅在编辑器聚焦时刷新场景视图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可以在编辑器不是前台应用程序时忽略场景视图上的 “始终刷新” 标记。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;线条粗细&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置变换工具的线条粗细。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;搜索时启用过滤&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项可以在场景视图中将非匹配项变暗。默认启用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;编辑 LOD 群组时启用过滤&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以在编辑级别细节（LOD）群组时将场景中的其他对象变暗。默认启用。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;搜索&#34;&gt;搜索 &lt;a href=&#34;#%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用 “搜索” 偏好设置来设置编辑器的搜索偏好设置。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;提示：您还可以通过以下方式之一访问 “搜索” 偏好设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在搜索字段中输入 &lt;strong&gt;?&lt;/strong&gt;（问号），然后从结果中选择**打开搜索偏好设置 **。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;搜索&lt;/strong&gt;窗口左上角的**更多选项（：）*&lt;em&gt;中，选择*&lt;em&gt;偏好设置&lt;/em&gt;&lt;/em&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-14-unity-document-82/preferences-search.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;跟踪搜索的当前选择&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;启用此设置后，每次搜索选择更改时都会执行&lt;code&gt;SearchProvider.trackSelection&lt;/code&gt;回调。回调将 &amp;ldquo;Ping&amp;rdquo; 项目窗口或层级窗口中的资源，这可能会减慢大型项目中的搜索导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;为找到的项目生成资源预览缩略图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;启用此设置以在搜索窗口结果面板中显示当前可见的项目的缩略图。禁用此设置时，搜索显示一个通用图标。在大型项目中，生成图标可能会减慢搜索导航速度，所以禁用此设置是有用的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选择键入抖动阈值（毫秒）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;抖动阈值是系统在用户完成输入前等待的时间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;提供程序设置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;A&lt;/strong&gt; &lt;em&gt;[提供程序切换]&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;启用和禁用提供程序。当禁用提供程序时，搜索在执行搜索时会忽略它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;B&lt;/strong&gt; &lt;em&gt;[提供程序顺序]&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用这些设置可以修改搜索项目在屏幕上显示的顺序。相同优先级的所有项目将在较低优先级项目之前显示。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;C&lt;/strong&gt; &lt;em&gt;[默认操作]&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;使用这些设置来选择在搜索结果中选择（例如，双击）项目时执行的默认操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;重置优先级&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;将所有提供程序重置为默认的启用 / 禁用状态和优先级。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;搜索引擎&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;将对象选择器、项目和场景中的搜索字段设置为可用的搜索引擎之一。&lt;strong&gt;经典&lt;/strong&gt; - 原始搜索功能。&lt;strong&gt;高级&lt;/strong&gt; - 用于 Unity 的最新版搜索（以前称为 QuickSearch）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;索引&#34;&gt;索引 &lt;a href=&#34;#%e7%b4%a2%e5%bc%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;通过从 “自定义索引器” 下拉列表中选择或取消选择它们来设置自定义索引页面。&lt;/p&gt;
&lt;h2 id=&#34;自定义包偏好设置&#34;&gt;自定义包偏好设置 &lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e5%8c%85%e5%81%8f%e5%a5%bd%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一些资产商店或 Unity 包向 “偏好设置” 窗口添加了它们自己的自定义偏好设置。通常，这些偏好设置使用包名称作为偏好设置类别。在此示例中，您可以看到 Cinemachine 包的偏好设置：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-14-unity-document-82/PrefsPackages.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;有关特定包的偏好设置的信息，请参阅该包的文档。此部分仅包含标准 Unity 偏好设置的文档。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features - 2D and 3D mode settings(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/13/2023-10-13-unity-document-81/</link>
      <pubDate>Fri, 13 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/13/2023-10-13-unity-document-81/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;2d-和-3d-模式设置&#34;&gt;2D 和 3D 模式设置 &lt;a href=&#34;#2d-%e5%92%8c-3d-%e6%a8%a1%e5%bc%8f%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在创建新项目时，您可以指定 Unity 编辑器是以 2D 模式还是 3D 模式启动。然而，您也可以随时在 2D 模式和 3D 模式之间切换编辑器。您可以在此处详细了解 2D 和 3D 项目之间的区别。本页面提供了有关如何切换模式以及切换模式时编辑器中发生的具体变化的信息。&lt;/p&gt;
&lt;h2 id=&#34;在-3d-和-2d-模式之间切换&#34;&gt;在 3D 和 2D 模式之间切换 &lt;a href=&#34;#%e5%9c%a8-3d-%e5%92%8c-2d-%e6%a8%a1%e5%bc%8f%e4%b9%8b%e9%97%b4%e5%88%87%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要在 2D 模式和 3D 模式之间切换，请按照以下步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开编辑器设置（顶部菜单：&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Editor&lt;/strong&gt;类别）。&lt;/li&gt;
&lt;li&gt;然后将&lt;strong&gt;Default Behavior Mode&lt;/strong&gt;设置为&lt;strong&gt;2D&lt;/strong&gt;或&lt;strong&gt;3D&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-13-unity-document-81/BehaviorMode.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用编辑器设置中的默认行为模式设置将项目设置为 2D 或 3D。&lt;/p&gt;
&lt;h2 id=&#34;2d-模式与-3d-模式设置&#34;&gt;2D 模式与 3D 模式设置 &lt;a href=&#34;#2d-%e6%a8%a1%e5%bc%8f%e4%b8%8e-3d-%e6%a8%a1%e5%bc%8f%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;2D 模式和 3D 模式确定了 Unity 编辑器的一些设置。以下是这些设置的详细列表。&lt;/p&gt;
&lt;h3 id=&#34;在-2d-项目模式下&#34;&gt;在 2D 项目模式下： &lt;a href=&#34;#%e5%9c%a8-2d-%e9%a1%b9%e7%9b%ae%e6%a8%a1%e5%bc%8f%e4%b8%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;导入的任何图像都被认为是 2D 图像（&lt;strong&gt;Sprites&lt;/strong&gt;），并设置为&lt;strong&gt;Sprite&lt;/strong&gt;模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;场景视图&lt;/strong&gt;设置为 2D。&lt;/li&gt;
&lt;li&gt;默认游戏对象没有实时定向光。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相机&lt;/strong&gt;的默认位置为 0,0,-10。（在 3D 模式下为 0,1,-10。）&lt;/li&gt;
&lt;li&gt;相机设置为&lt;strong&gt;正交投影&lt;/strong&gt;。（在 3D 模式下为&lt;strong&gt;透视投影&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;在光照窗口中：
&lt;ul&gt;
&lt;li&gt;对于新的&lt;strong&gt;场景&lt;/strong&gt;，&lt;strong&gt;天空盒&lt;/strong&gt;已禁用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;环境源&lt;/strong&gt;设置为&lt;strong&gt;颜色&lt;/strong&gt;（颜色设置为深灰色：RGB：54，58，66）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实时全局光照&lt;/strong&gt;（Enlighten）已关闭。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;烘焙全局光照&lt;/strong&gt;已关闭。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动构建&lt;/strong&gt;已关闭。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;在-3d-项目模式下&#34;&gt;在 3D 项目模式下： &lt;a href=&#34;#%e5%9c%a8-3d-%e9%a1%b9%e7%9b%ae%e6%a8%a1%e5%bc%8f%e4%b8%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;导入的任何图像都不会被认为是 2D 图像（&lt;strong&gt;Sprites&lt;/strong&gt;）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;场景视图&lt;/strong&gt;设置为 3D。&lt;/li&gt;
&lt;li&gt;默认游戏对象具有实时定向光。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相机&lt;/strong&gt;的默认位置为 0,1,-10。（在 2D 模式下为 0,0,-10。）&lt;/li&gt;
&lt;li&gt;相机设置为&lt;strong&gt;透视投影&lt;/strong&gt;。（在 2D 模式下为&lt;strong&gt;正交投影&lt;/strong&gt;。）&lt;/li&gt;
&lt;li&gt;在光照窗口中：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;天空盒&lt;/strong&gt;是内置的默认&lt;strong&gt;天空盒材质&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;环境源&lt;/strong&gt;设置为&lt;strong&gt;天空盒&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实时全局光照&lt;/strong&gt;（Enlighten）已开启。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;烘焙全局光照&lt;/strong&gt;已开启。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自动构建&lt;/strong&gt;已开启。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/12/2023-10-12-unity-document-80/</link>
      <pubDate>Thu, 12 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/12/2023-10-12-unity-document-80/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;编辑器功能&#34;&gt;编辑器功能 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e5%99%a8%e5%8a%9f%e8%83%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-12-unity-document-80/EditorFeaturesIntroPic.jpg&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;本节详细介绍了编辑器的一些基本功能，这些功能在大多数项目中都非常有用。从选择偏好设置、与&lt;strong&gt;版本控制&lt;/strong&gt;系统集成到准备项目进行构建，这些功能都能帮助您完成工作。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Troubleshooting(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/11/2023-10-11-unity-document-79/</link>
      <pubDate>Wed, 11 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/11/2023-10-11-unity-document-79/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;故障排除&#34;&gt;故障排除 &lt;a href=&#34;#%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本节介绍在使用 Unity 时可能出现的常见问题。本节分别针对每个平台进行了介绍。&lt;/p&gt;
&lt;h2 id=&#34;平台特定的故障排除&#34;&gt;平台特定的故障排除 &lt;a href=&#34;#%e5%b9%b3%e5%8f%b0%e7%89%b9%e5%ae%9a%e7%9a%84%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;在-macos-1064-上的-geforce-7300-gt-上显示材质不正确&#34;&gt;在 macOS 10.6.4 上的 GeForce 7300 GT 上显示材质不正确 &lt;a href=&#34;#%e5%9c%a8-macos-1064-%e4%b8%8a%e7%9a%84-geforce-7300-gt-%e4%b8%8a%e6%98%be%e7%a4%ba%e6%9d%90%e8%b4%a8%e4%b8%8d%e6%ad%a3%e7%a1%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;由于有错误的视频驱动程序，所以在 macOS 10.6.4 上的 GeForce 7300 GT 上不会正确显示材质，因此系统禁用了延迟渲染。&lt;/p&gt;
&lt;h2 id=&#34;脚本编辑&#34;&gt;脚本编辑 &lt;a href=&#34;#%e8%84%9a%e6%9c%ac%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;即使将-visual-studio-设置为脚本编辑器脚本仍在默认系统文本编辑器中打开&#34;&gt;即使将 Visual Studio 设置为脚本编辑器，脚本仍在默认系统文本编辑器中打开 &lt;a href=&#34;#%e5%8d%b3%e4%bd%bf%e5%b0%86-visual-studio-%e8%ae%be%e7%bd%ae%e4%b8%ba%e8%84%9a%e6%9c%ac%e7%bc%96%e8%be%91%e5%99%a8%e8%84%9a%e6%9c%ac%e4%bb%8d%e5%9c%a8%e9%bb%98%e8%ae%a4%e7%b3%bb%e7%bb%9f%e6%96%87%e6%9c%ac%e7%bc%96%e8%be%91%e5%99%a8%e4%b8%ad%e6%89%93%e5%bc%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当 Visual Studio 报告无法打开您的脚本时，就会发生这种情况。最常见的原因是外部&lt;strong&gt;插件&lt;/strong&gt;（如 ReSharper）在启动时显示对话框，请求用户输入。这会导致 Visual Studio 报告打开失败。&lt;/p&gt;
&lt;h2 id=&#34;图形&#34;&gt;图形 &lt;a href=&#34;#%e5%9b%be%e5%bd%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;帧率慢和--或视觉伪影&#34;&gt;帧率慢和 / 或视觉伪影 &lt;a href=&#34;#%e5%b8%a7%e7%8e%87%e6%85%a2%e5%92%8c--%e6%88%96%e8%a7%86%e8%a7%89%e4%bc%aa%e5%bd%b1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这可能是由于您的显卡驱动程序不是最新版本造成的。请确保您从显卡供应商处获得了最新的官方驱动程序。&lt;/p&gt;
&lt;h2 id=&#34;阴影&#34;&gt;阴影 &lt;a href=&#34;#%e9%98%b4%e5%bd%b1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;阴影需要特定的图形硬件支持。有关详细信息，请参阅 Shadow Performance 页面。&lt;/li&gt;
&lt;li&gt;确保在质量窗口中启用了阴影。&lt;/li&gt;
&lt;li&gt;Android 和 iOS 上的阴影有限制：不支持软阴影，并且在&lt;strong&gt;渲染路径&lt;/strong&gt;中，只有一个定向光源可以投射阴影。在延迟渲染路径中，没有限制在投射阴影的光源数量上。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;某些游戏对象不会投射或接收阴影&#34;&gt;某些游戏对象不会投射或接收阴影 &lt;a href=&#34;#%e6%9f%90%e4%ba%9b%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1%e4%b8%8d%e4%bc%9a%e6%8a%95%e5%b0%84%e6%88%96%e6%8e%a5%e6%94%b6%e9%98%b4%e5%bd%b1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;对象的 Renderer 必须启用&lt;strong&gt;接收阴影&lt;/strong&gt;，才能将阴影渲染到对象上。此外，对象必须启用&lt;strong&gt;投射阴影&lt;/strong&gt;，才能在其他对象上投射阴影（两者默认都是启用的）。&lt;/p&gt;
&lt;p&gt;只有不透明的对象才能投射和接收阴影。这意味着使用内置的透明或粒子着色器的对象不会投射阴影。通常可以使用透明剪裁着色器来处理栅栏、植被等对象。如果使用自定义编写的着色器，则必须使用像素光照，并使用 Geometry 渲染队列。使用&lt;strong&gt;VertexLit&lt;/strong&gt;着色器的对象不会接收阴影，但可以投射阴影。&lt;/p&gt;
&lt;p&gt;只有&lt;strong&gt;像素光&lt;/strong&gt;能够投射阴影。如果您希望确保一种光照在&lt;strong&gt;场景&lt;/strong&gt;中始终投射阴影，无论有多少其他灯光，您可以将其设置为&lt;strong&gt;Force Pixel&lt;/strong&gt;渲染模式（请参阅光照参考页面）。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Cross-Platform Publishing Builds(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/10/2023-10-10-unity-document-78/</link>
      <pubDate>Tue, 10 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/10/2023-10-10-unity-document-78/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;发布构建&#34;&gt;&lt;strong&gt;发布构建&lt;/strong&gt; &lt;a href=&#34;#%e5%8f%91%e5%b8%83%e6%9e%84%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;构建设置窗口包含了发布应用程序到各种平台所需的所有设置和选项。通过该窗口，你可以创建一个&lt;strong&gt;开发构建&lt;/strong&gt;来测试你的应用程序，以及发布最终构建。要调整应用程序构建的发布设置，请转到&lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Build Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-10-unity-document-78/BuildSettings_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;strong&gt;构建中的场景&lt;/strong&gt;面板来管理 Unity 在构建中包含的场景。你可以使用窗口的&lt;strong&gt;平台&lt;/strong&gt;部分选择要构建的平台，并调整特定的设置，如&lt;strong&gt;压缩方法&lt;/strong&gt;。这些选项取决于你选择的平台。更多信息，请参阅构建设置的文档。&lt;/p&gt;
&lt;p&gt;选择&lt;strong&gt;构建&lt;/strong&gt;或&lt;strong&gt;构建并运行&lt;/strong&gt;按钮开始构建过程。&lt;/p&gt;
&lt;p&gt;通过出现的保存对话框，你可以为应用程序选择一个名称和保存位置。&lt;strong&gt;注意&lt;/strong&gt;：取决于你构建的平台，Unity 可能只会提示你选择一个文件夹。&lt;/p&gt;
&lt;p&gt;当你选择&lt;strong&gt;保存&lt;/strong&gt;按钮时，Unity 将构建你的应用程序。如果你不确定要保存构建到哪里，可以考虑在你的根文件夹中创建一个子文件夹来保存你的构建。你不能将构建保存到 Assets 文件夹中。&lt;/p&gt;
&lt;h2 id=&#34;关于使用-unity-构建游戏的更多信息&#34;&gt;关于使用 Unity 构建游戏的更多信息 &lt;a href=&#34;#%e5%85%b3%e4%ba%8e%e4%bd%bf%e7%94%a8-unity-%e6%9e%84%e5%bb%ba%e6%b8%b8%e6%88%8f%e7%9a%84%e6%9b%b4%e5%a4%9a%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要了解有关构建场景的更多信息，请参阅有关创建场景的文档。&lt;/p&gt;
&lt;p&gt;要了解更多关于脚本的信息，请参阅有关脚本的文档。&lt;/p&gt;
&lt;p&gt;要了解更多关于创建艺术和导入资源的信息，请参阅有关资源工作流的文档。&lt;/p&gt;
&lt;p&gt;要与 Unity 用户和开发者互动，请访问 Unity 论坛。&lt;/p&gt;
&lt;h1 id=&#34;减小构建文件大小&#34;&gt;减小构建文件大小 &lt;a href=&#34;#%e5%87%8f%e5%b0%8f%e6%9e%84%e5%bb%ba%e6%96%87%e4%bb%b6%e5%a4%a7%e5%b0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;保持构建应用程序的文件大小最小化是非常重要的，尤其是对于移动设备或对于强加尺寸限制的应用商店。减小大小的第一步是确定哪些资源对文件大小有最大贡献，因为这些资源最有可能进行优化。在执行构建后，这些信息可以在编辑器日志中找到。打开控制台窗口（菜单： &lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;Console&lt;/strong&gt;），点击右上角的小下拉面板，选择 &lt;strong&gt;打开编辑器日志&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-10-unity-document-78/FileSizeOptimization.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;编辑器日志提供了按类型分类的资源摘要，并按贡献大小的顺序列出了所有的个别资源。通常，像纹理、声音和动画占用的存储空间最多，而脚本、关卡和着色器的影响通常较小。列表中提到的&lt;strong&gt;文件头&lt;/strong&gt;不是资源，实际上是添加到 “原始” 资源文件中的额外数据，用于存储引用和设置。文件头通常对资源大小几乎没有影响，但如果资源文件夹中有大量大型资源，则该值可能会很大。&lt;/p&gt;
&lt;p&gt;编辑器日志帮助您识别可能要删除或优化的资源，但在开始之前，应考虑以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unity 将导入的资源重新编码为其自己的内部格式，因此源资源类型的选择并不重要。例如，如果项目中有一个多层的 Photoshop 纹理，它在构建之前会被压平和压缩。将纹理导出为.png 文件对构建大小没有任何影响，因此您在开发过程中应使用最方便的格式。&lt;/li&gt;
&lt;li&gt;Unity 在构建过程中会删除大多数未使用的资源，因此手动从项目中删除资源并不会有任何效果。唯一不会被删除的资源是脚本（通常非常小）和资源文件夹中的资源（因为 Unity 无法确定哪些资源是需要的，哪些不需要的） 。在此情况下，您应确保资源文件夹中只包含游戏所需的资源。您可能可以将资源文件夹中的资源替换为 AssetBundle - 这意味着 Unity 动态加载资源，从而减小了播放器的大小。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;减小构建大小的建议&#34;&gt;减小构建大小的建议 &lt;a href=&#34;#%e5%87%8f%e5%b0%8f%e6%9e%84%e5%bb%ba%e5%a4%a7%e5%b0%8f%e7%9a%84%e5%bb%ba%e8%ae%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;纹理&#34;&gt;纹理 &lt;a href=&#34;#%e7%ba%b9%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;纹理通常占据构建的大部分空间。首先，可以使用压缩的纹理格式来减小文件大小。有关平台特定的纹理压缩的更多信息，请参阅文档。&lt;/p&gt;
&lt;p&gt;如果这样还不能减小文件大小，请尝试减小纹理图像的物理尺寸（以像素为单位）。为了在不修改实际源内容的情况下进行操作，选中项目视图中的纹理，在&lt;strong&gt;检查器&lt;/strong&gt;窗口中减小&lt;strong&gt;最大尺寸&lt;/strong&gt;。为了在游戏中看到效果，放大使用纹理的&lt;strong&gt;GameObject&lt;/strong&gt;，然后调整&lt;strong&gt;最大尺寸&lt;/strong&gt;，直到在&lt;strong&gt;场景&lt;/strong&gt;视图中开始变得更差。更改最大纹理大小不会影响纹理资源本身，只会影响游戏中的分辨率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-10-unity-document-78/FileSizeOptimizationTexture.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;更改最大纹理大小不会影响纹理资源本身，只会影响游戏中的分辨率&lt;/p&gt;
&lt;p&gt;默认情况下，Unity 在导入时会对所有纹理进行压缩。为了在编辑器中提高工作流程的速度，可以在 &lt;strong&gt;Unity&lt;/strong&gt; &amp;lt; &lt;strong&gt;Preferences&lt;/strong&gt; 中取消选中&lt;strong&gt;导入时压缩资源&lt;/strong&gt;的复选框。不管此设置如何，所有纹理都会在构建中进行压缩。&lt;/p&gt;
&lt;h3 id=&#34;网格和动画&#34;&gt;网格和动画 &lt;a href=&#34;#%e7%bd%91%e6%a0%bc%e5%92%8c%e5%8a%a8%e7%94%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;你可以对网格和导入的动画剪辑进行压缩，以便在游戏文件中占用更少的空间。为了启用&lt;strong&gt;网格压缩&lt;/strong&gt;，选中网格，然后在检查器窗口中将&lt;strong&gt;网格压缩&lt;/strong&gt;设置为&lt;strong&gt;低&lt;/strong&gt;、&lt;strong&gt;中&lt;/strong&gt;或&lt;strong&gt;高&lt;/strong&gt;。网格和&lt;strong&gt;动画压缩&lt;/strong&gt;使用量化，这意味着它占用的空间较小，但压缩可能会引入一些不准确性。试验一下哪种压缩级别对你的模型来说是可接受的。&lt;/p&gt;
&lt;p&gt;请注意，网格压缩只会生成较小的数据文件，并不会在运行时使用更少的内存。动画&lt;strong&gt;关键帧&lt;/strong&gt;缩减会生成较小的数据文件，并在运行时使用较少的内存；通常应始终启用它。有关此信息的更多详细信息，请参阅有关动画剪辑的文档。&lt;/p&gt;
&lt;h3 id=&#34;减小net-库的大小&#34;&gt;减小.NET 库的大小 &lt;a href=&#34;#%e5%87%8f%e5%b0%8fnet-%e5%ba%93%e7%9a%84%e5%a4%a7%e5%b0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 支持两个.NET API 兼容级别：.NET 4.x 和.NET Standard 2.0。.NET Standard 2.0 仅限于较小的.NET API 子集，这有助于减小文件大小。&lt;/p&gt;
&lt;h1 id=&#34;构建玩家流程&#34;&gt;构建玩家流程 &lt;a href=&#34;#%e6%9e%84%e5%bb%ba%e7%8e%a9%e5%ae%b6%e6%b5%81%e7%a8%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在构建播放器时，有时您希望以某种方式修改构建的播放器。例如，您可能希望添加自定义图标，将一些文档复制到播放器旁边，或构建一个安装程序。您可以通过编辑器脚本使用 BuildPipeline.BuildPlayer 来运行构建，然后跟随所需的任何后处理代码：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// C# example.
using UnityEditor;
using System.Diagnostics;

public class ScriptBatch 
{
    [MenuItem(&amp;#34;MyTools/Windows Build With Postprocess&amp;#34;)]
    public static void BuildGame ()
    {
        // Get filename.
        string path = EditorUtility.SaveFolderPanel(&amp;#34;Choose Location of Built Game&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;&amp;#34;);
        string[] levels = new string[] {&amp;#34;Assets/Scene1.unity&amp;#34;, &amp;#34;Assets/Scene2.unity&amp;#34;};

        // Build player.
        BuildPipeline.BuildPlayer(levels, path + &amp;#34;/BuiltGame.exe&amp;#34;, BuildTarget.StandaloneWindows, BuildOptions.None);

        // Copy a file from the project folder to the build folder, alongside the built game.
        FileUtil.CopyFileOrDirectory(&amp;#34;Assets/Templates/Readme.txt&amp;#34;, path + &amp;#34;Readme.txt&amp;#34;);

        // Run the game (Process class from System.Diagnostics).
        Process proc = new Process();
        proc.StartInfo.FileName = path + &amp;#34;/BuiltGame.exe&amp;#34;;
        proc.Start();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;postprocessbuild-属性&#34;&gt;PostProcessBuild 属性 &lt;a href=&#34;#postprocessbuild-%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您还可以使用 PostProcessBuildAttribute 的 postprocessOrder 参数为构建方法定义执行顺序，并在这些方法中使用 Process 类调用外部&lt;strong&gt;脚本&lt;/strong&gt;，如最后一节所示。此参数用于从低到高对构建方法进行排序，并且您可以为其赋予任何负值或正值。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Cross-Platform Considerations(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/09/2023-10-09-unity-document-77/</link>
      <pubDate>Mon, 09 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/09/2023-10-09-unity-document-77/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;跨平台注意事项&#34;&gt;跨平台注意事项 &lt;a href=&#34;#%e8%b7%a8%e5%b9%b3%e5%8f%b0%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;大多数 Unity 的 API 和项目结构对于所有支持的平台都是相同的，有时候一个项目可以重新构建以在不同的设备上运行。然而，硬件和部署方法上的基本差异意味着项目的某些部分可能不能在不同平台之间移植而不需要进行更改。本页面列出了一些常见的跨平台问题以及解决方案的建议。&lt;/p&gt;
&lt;h2 id=&#34;输入&#34;&gt;输入 &lt;a href=&#34;#%e8%be%93%e5%85%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;不同平台之间行为差异最明显的示例是硬件提供的输入方法。&lt;/p&gt;
&lt;h3 id=&#34;键盘和手柄&#34;&gt;键盘和手柄 &lt;a href=&#34;#%e9%94%ae%e7%9b%98%e5%92%8c%e6%89%8b%e6%9f%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Input.GetAxis&lt;/strong&gt;函数在桌面平台上很方便，可以将键盘和手柄的输入进行组合。但是，在依赖触摸屏幕输入的移动平台上，这个函数并不适用。标准的桌面键盘输入只适用于将键入文本移植到移动设备上。如果你考虑将来移植到其他平台，可以在你的输入代码中添加一个抽象层。例如，如果你正在制作一款驾驶游戏，那么你可以创建自己的输入类，并在自己的函数中封装 Unity API 调用：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// Returns values in the range -1.0 .. +1.0 (== left .. right).
function Steering() {
    return Input.GetAxis(&amp;#34;Horizontal&amp;#34;);
}


// Returns values in the range -1.0 .. +1.0 (== accel .. brake).
function Acceleration() {
    return Input.GetAxis(&amp;#34;Vertical&amp;#34;);
}


var currentGear: int;

// Returns an integer corresponding to the selected gear.
function Gears() {
    if (Input.GetKeyDown(&amp;#34;p&amp;#34;))
        currentGear++;
    else if (Input.GetKeyDown(&amp;#34;l&amp;#34;))
        currentGear--;

    return currentGear;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将 API 调用封装在一个类中，可以将它们置于一个单独的源文件中，并使调用易于定位和替换。你应该根据你的游戏中输入的逻辑含义来设计你的输入函数。这有助于将游戏的其余代码与特定平台使用的输入方法隔离开来。&lt;/p&gt;
&lt;p&gt;例如，你可以修改上面的 Gears 函数，使实际的输入来自移动设备屏幕上的触摸。使用整数表示所选择的档位适用于所有平台，但如果将平台特定的 API 调用与代码的其余部分混合在一起，可能会导致问题。你还可以使用平台相关编译来将不同实现的输入函数组合在同一个源文件中，避免手动交换。&lt;/p&gt;
&lt;h3 id=&#34;触摸和点击&#34;&gt;触摸和点击 &lt;a href=&#34;#%e8%a7%a6%e6%91%b8%e5%92%8c%e7%82%b9%e5%87%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Input.GetMouseButtonXXX&lt;/strong&gt;函数的设计在移动设备上有明显的解释。屏幕将简单的触摸报告为左键点击，&lt;strong&gt;Input.mousePosition&lt;/strong&gt;属性提供触摸的位置，只要手指触摸屏幕。具有简单鼠标交互的游戏通常可以在桌面和移动平台之间透明地工作。&lt;/p&gt;
&lt;p&gt;转换通常没有这么简单。例如，桌面游戏可以使用多个鼠标按钮，而移动游戏可以同时检测到屏幕上的多个触摸。为了帮助管理这些，您可以用逻辑值来表示输入，然后由游戏的其他代码使用这些值。&lt;/p&gt;
&lt;p&gt;例如，你可以用桌面上的 +/- 按键来替代移动设备上的捏合手势进行缩放；输入函数可以返回一个浮点值，指定缩放因子。同样，你可以通过移动设备上的两指点击来替代桌面上的右键点击。然而，如果输入设备的属性是游戏的一个重要部分，那么就可能无法在不同平台上进行重新模拟。这可能意味着你无法移植游戏，或者需要对输入或游戏玩法进行广泛修改。&lt;/p&gt;
&lt;h3 id=&#34;加速度计罗盘陀螺仪和-gps&#34;&gt;加速度计、罗盘、陀螺仪和 GPS &lt;a href=&#34;#%e5%8a%a0%e9%80%9f%e5%ba%a6%e8%ae%a1%e7%bd%97%e7%9b%98%e9%99%80%e8%9e%ba%e4%bb%aa%e5%92%8c-gps&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这些输入来源于手持设备的便携性，因此在桌面上可能没有任何有意义的等效物。然而，有些用例仅仅是为了简单地复制标准的游戏控制，并且在移植时容易实现。例如，一个驾驶游戏可以根据移动设备的倾斜（通过加速度计确定）来实现转向控制。在这种情况下，输入 API 调用通常很容易更改，因此可以将加速度计输入替换为按键。&lt;/p&gt;
&lt;p&gt;但是，可能需要重新校准输入或调整游戏难度以适应不同的输入方法。倾斜设备比按键操作更慢且更费力，这使得难以集中注意力在显示上。这可能会使得在移动设备上掌握游戏变得更加困难，因此可能适当降低游戏速度或让每个关卡的时间更长。这需要设计游戏代码来调整这些因素。&lt;/p&gt;
&lt;h2 id=&#34;存储器存储和-cpu-性能&#34;&gt;存储器、存储和 CPU 性能 &lt;a href=&#34;#%e5%ad%98%e5%82%a8%e5%99%a8%e5%ad%98%e5%82%a8%e5%92%8c-cpu-%e6%80%a7%e8%83%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;移动设备可用的存储空间、内存和 CPU 功率都比台式机低，因此一个游戏可能很难移植，因为它在低功率硬件上的性能不能满足要求。如果你的台式机硬件已经达到了极限，那么这个游戏可能不适合移植到移动平台上。&lt;/p&gt;
&lt;h3 id=&#34;存储需求&#34;&gt;存储需求 &lt;a href=&#34;#%e5%ad%98%e5%82%a8%e9%9c%80%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;视频、音频和纹理可能占用大量的存储空间。如果要移植游戏，就需要有效地管理存储空间。存储空间（通常也对应于下载时间）在台式机上通常不是问题，但在移动设备上可能有限。移动应用商店通常对提交产品的最大大小有限制。在游戏开发过程中，可能需要一些规划来解决这些问题。&lt;/p&gt;
&lt;p&gt;例如，你可能需要为移动设备提供简化版本的资源以节省空间。另一个可能性是，游戏可能需要设计成可以按需下载大型资源，而不是作为应用程序的初始下载的一部分。&lt;/p&gt;
&lt;h3 id=&#34;自动内存管理&#34;&gt;自动内存管理 &lt;a href=&#34;#%e8%87%aa%e5%8a%a8%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity 会自动处理来自 “死” 对象的未使用内存的回收，通常在桌面机器上几乎不会被注意到。然而，移动设备上较低的内存和 CPU 功率意味着垃圾回收可能更加频繁，影响性能并导致游戏中不必要的暂停。即使游戏在有效的内存中运行，也可能需要优化代码以避免垃圾回收暂停。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅内存管理页面。&lt;/p&gt;
&lt;h3 id=&#34;cpu-功率&#34;&gt;CPU 功率 &lt;a href=&#34;#cpu-%e5%8a%9f%e7%8e%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在台式机上运行良好的游戏可能在移动设备上出现帧率低下的情况，因为移动 CPU 无法处理复杂的游戏。当项目移植到移动平台时，要注意代码的效率。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Cameras(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/08/2023-10-08-unity-document-76/</link>
      <pubDate>Sun, 08 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/08/2023-10-08-unity-document-76/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;cameras&#34;&gt;Cameras &lt;a href=&#34;#cameras&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;就像在电影中使用摄像机将故事展示给观众一样，Unity 中的&lt;strong&gt;摄像机&lt;/strong&gt;用于将游戏世界展示给玩家。在一个场景中你至少会有一个摄像机，但你也可以拥有多个摄像机。多个摄像机可以给你提供双人分屏效果，或者创建高级的自定义效果。你可以动画摄像机，或者通过物理来控制它们。几乎任何你能想象到的都可以使用摄像机实现，并且你可以使用普通或独特的摄像机来适应你的游戏风格。&lt;/p&gt;
&lt;p&gt;有关摄像机的工作原理的更多信息，请参阅图形概述部分中的摄像机页面。&lt;/p&gt;
&lt;p&gt;有关 Camera 组件的更多信息，请参阅 Camera 组件的参考页面。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Lights(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/07/2023-10-07-unity-document-75/</link>
      <pubDate>Sat, 07 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/07/2023-10-07-unity-document-75/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;lights&#34;&gt;Lights &lt;a href=&#34;#lights&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Lights（灯光）是每个场景&lt;/strong&gt;中必不可少的一部分。虽然网格和纹理定义了场景的形状和外观，但灯光定义了你的 3D 环境的颜色和氛围。在每个场景中，你可能会使用多个灯光。让它们一起工作需要一点实践，但结果可能非常惊人。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-07-unity-document-75/LightTwoLights.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;灯光可以从 &lt;strong&gt;GameObject-&amp;gt;Light（游戏对象 -&amp;gt; 灯光）&lt;strong&gt;菜单中添加到场景中。你将从出现的子菜单中选择所需的灯光格式。一旦添加了灯光，你可以像操作其他任何游戏对象一样对其进行操作。此外，你还可以通过使用&lt;/strong&gt;Component-&amp;gt;Rendering-&amp;gt;Light（组件 -&amp;gt; 渲染 -&amp;gt; 灯光）&lt;/strong&gt; 将 Light 组件添加到任何选定的游戏对象中。&lt;/p&gt;
&lt;p&gt;在 &lt;strong&gt;Inspector（检查器）&lt;/strong&gt; 中的 Light 组件中有许多不同的选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-07-unity-document-75/LightInspectorV3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;通过简单地改变灯光的&lt;strong&gt;颜色&lt;/strong&gt;，你可以给整个场景带来不同的氛围。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-07-unity-document-75/LightMood1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-07-unity-document-75/LightMood2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-07-unity-document-75/LightMood3.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;渲染路径&#34;&gt;渲染路径 &lt;a href=&#34;#%e6%b8%b2%e6%9f%93%e8%b7%af%e5%be%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity 支持不同的&lt;strong&gt;渲染路径&lt;/strong&gt;。这些路径主要影响灯光和阴影，因此根据游戏的要求选择正确的渲染路径可以改善项目的性能。有关渲染路径的更多信息，可以访问渲染路径部分。&lt;/p&gt;
&lt;h2 id=&#34;更多信息&#34;&gt;更多信息 &lt;a href=&#34;#%e6%9b%b4%e5%a4%9a%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有关灯光工作原理的更多信息，请参阅光照概述页面。有关使用 Light 组件的更多信息，请查阅光照参考文档。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Rotation and orientation in Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/06/2023-10-06-unity-document-74/</link>
      <pubDate>Fri, 06 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/06/2023-10-06-unity-document-74/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;rotation-and-orientation-in-unity&#34;&gt;Rotation and orientation in Unity &lt;a href=&#34;#rotation-and-orientation-in-unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity 使用左手坐标系统。在 Unity 中，你可以使用欧拉角和&lt;strong&gt;四元数&lt;/strong&gt;表示旋转和方向。这些表示方法是等效的，但在使用和限制方面有所不同。&lt;/p&gt;
&lt;p&gt;通常，你可以使用&lt;strong&gt;Transform 组件&lt;/strong&gt;在你的&lt;strong&gt;场景&lt;/strong&gt;中旋转物体，它将方向显示为欧拉角。然而，Unity 在内部存储旋转和方向时使用四元数，这对于更复杂的动作可能会导致万向锁很有用。&lt;/p&gt;
&lt;h2 id=&#34;左手坐标系统&#34;&gt;左手坐标系统 &lt;a href=&#34;#%e5%b7%a6%e6%89%8b%e5%9d%90%e6%a0%87%e7%b3%bb%e7%bb%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-06-unity-document-74/unity-axis-with-rotation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Unity 的左手坐标系的轴表示，显示了从正 x 轴到正 y 轴的旋转方向，在沿着正 z 轴的方向观察时，方向是逆时针的。&lt;/p&gt;
&lt;p&gt;坐标系描述了三维空间中物体的位置。Unity 使用左手坐标系：正 x 轴指向右侧，正 y 轴指向上方，正 z 轴指向前方。Unity 的左手坐标系意味着从正 x 轴到正 y 轴的旋转方向是逆时针的，在沿着正 z 轴的方向观察时。&lt;/p&gt;
&lt;h2 id=&#34;欧拉角&#34;&gt;欧拉角 &lt;a href=&#34;#%e6%ac%a7%e6%8b%89%e8%a7%92&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Transform 坐标中，Unity 使用属性&lt;code&gt;Transform.eulerAngles&lt;/code&gt;的 X、Y 和 Z 来显示旋转。与普通向量不同，这些值实际上表示围绕 X、Y 和 Z 轴旋转的角度（以度为单位）。&lt;/p&gt;
&lt;p&gt;欧拉角旋转执行三次围绕三个轴的独立旋转。Unity 按 z 轴、x 轴和 y 轴的顺序依次执行欧拉角旋转。这种旋转方法是外旋转；在旋转发生时，原始坐标系不会改变。&lt;/p&gt;
&lt;p&gt;要旋转一个&lt;strong&gt;GameObject&lt;/strong&gt;，你可以在 Transform 组件中输入每个轴旋转的角度值。要使用脚本旋转你的游戏对象，可以使用&lt;code&gt;Transform.eulerAngles&lt;/code&gt;。如果你将旋转值转换为欧拉角来进行计算和旋转，可能会出现万向锁的问题。&lt;/p&gt;
&lt;h3 id=&#34;万向锁&#34;&gt;万向锁 &lt;a href=&#34;#%e4%b8%87%e5%90%91%e9%94%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当一个物体在三维空间中失去一个自由度，只能在两个维度内旋转时，称为万向锁。欧拉角在两个轴变得平行时，可能会发生万向锁。如果你在脚本中不将旋转值转换为欧拉角，使用四元数应该可以避免万向锁。&lt;/p&gt;
&lt;p&gt;如果你在万向锁方面遇到问题，可以避免使用欧拉角，而是使用&lt;code&gt;Transform.RotateAround&lt;/code&gt;进行旋转。你还可以在每个轴上使用&lt;code&gt;Quaternion.AngleAxis&lt;/code&gt;，然后将它们相乘（四元数乘法依次应用每个旋转）。&lt;/p&gt;
&lt;h2 id=&#34;四元数&#34;&gt;四元数 &lt;a href=&#34;#%e5%9b%9b%e5%85%83%e6%95%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;四元数为三维空间中的空间方向和旋转提供了数学表示。四元数使用四个数字来编码在三维中围绕单位轴的旋转方向和角度。这四个值是复数，而不是角度或度数。你可以详细了解四元数的数学知识。&lt;/p&gt;
&lt;p&gt;Unity 将旋转值转换为四元数存储，因为四元数旋转的计算效率高且稳定。Unity 编辑器不显示四元数作为旋转，因为单个四元数无法表示大于 360 度的旋转。&lt;/p&gt;
&lt;p&gt;如果你使用 Quaternion 类，可以直接使用四元数。如果在脚本中进行旋转，可以使用 Quaternion 类和函数来创建和改变旋转值。你可以将值应用到旋转中作为欧拉角，但你需要将它们存储为四元数以避免问题。&lt;/p&gt;
&lt;h2 id=&#34;欧拉角和四元数之间的转换&#34;&gt;欧拉角和四元数之间的转换 &lt;a href=&#34;#%e6%ac%a7%e6%8b%89%e8%a7%92%e5%92%8c%e5%9b%9b%e5%85%83%e6%95%b0%e4%b9%8b%e9%97%b4%e7%9a%84%e8%bd%ac%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;为了在你喜欢的方式中查看和编辑旋转，你可以使用脚本进行欧拉角和四元数之间的转换：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从欧拉角转换为四元数，可以使用&lt;code&gt;Quaternion.Euler&lt;/code&gt;函数。&lt;/li&gt;
&lt;li&gt;将四元数转换为欧拉角，可以使用&lt;code&gt;Quaternion.eulerAngles&lt;/code&gt;函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Scale Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/05/2023-10-05-unity-document-73/</link>
      <pubDate>Thu, 05 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/05/2023-10-05-unity-document-73/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;scale-constraints&#34;&gt;Scale Constraints &lt;a href=&#34;#scale-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Scale Constraint 是一个调整 GameObject 大小以匹配源 GameObject 缩放的约束组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-05-unity-document-73/ScaleConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Activate（激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在调整被约束的 GameObject 和其源 GameObject 后，单击 &lt;strong&gt;Activate（激活）&lt;/strong&gt; 以保存这些信息。&lt;strong&gt;Activate（激活）将当前从源 GameObject 保存到Scale At Rest（静止时缩放）和Scale Offset（缩放偏移）中，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Zero（归零）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将被约束的 GameObject 的缩放设置为源 GameObject 的缩放。&lt;strong&gt;Zero（归零）会重置Scale At Rest（静止时缩放）和Scale Offset（缩放偏移）字段，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换是否评估约束。要同时应用约束，请确保选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束的强度。权重为 1 会导致约束以与源 GameObject 相同的速率调整此 GameObject 的大小。权重为 0 会完全取消约束的效果。该权重影响所有源 GameObject。&lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中的每个 GameObject 也有一个权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;切换以让约束调整 GameObject 的大小。取消选中此属性以编辑此 GameObject 的缩放。您还可以编辑&lt;strong&gt;Scale At Rest（静止时缩放）和Scale Offset（缩放偏移）属性。如果选中了Is Active（是否激活）&lt;/strong&gt;，约束在您调整 GameObject 或其 &lt;strong&gt;Source（源）&lt;strong&gt;GameObject 时会自动更新&lt;/strong&gt;Scale At Rest（静止时缩放）&lt;strong&gt;或&lt;/strong&gt;Scale Offset（缩放偏移）&lt;strong&gt;属性。在对更改感到满意时，请选中&lt;/strong&gt;Lock（锁定）&lt;strong&gt;以让约束控制此 GameObject。此属性对&lt;/strong&gt;Play Mode（播放模式）&lt;/strong&gt; 没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale At Rest（静止时缩放）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当&lt;strong&gt;Weight（权重）为 0 或相应的Freeze Scale Axes（冻结缩放轴）未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale Offset（缩放偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从 Transform 的缩放计算的 X、Y 和 Z 偏移量。要编辑这些字段，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Scale Axes（冻结缩放轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的缩放轴。取消选中轴以阻止约束控制它，这样就可以编辑、动画化或脚本化它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。每个源都有一个从 0 到 1 的权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Rotation Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/04/2023-10-04-unity-document-72/</link>
      <pubDate>Wed, 04 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/04/2023-10-04-unity-document-72/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;rotation-constraints&#34;&gt;Rotation Constraints &lt;a href=&#34;#rotation-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Rotation Constraint 是一个将 GameObject 的旋转与源 GameObject 相匹配的约束组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-04-unity-document-72/RotationConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Activate（激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在旋转被约束的 GameObject 和其源 GameObject 后，单击 &lt;strong&gt;Activate（激活）&lt;/strong&gt; 以保存这些信息。&lt;strong&gt;Activate（激活）将当前从源 GameObject 保存到Rotation At Rest（静止时旋转）和Rotation Offset（旋转偏移）中，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Zero（归零）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将被约束的 GameObject 的旋转设置为源 GameObject 的旋转。&lt;strong&gt;Zero（归零）会重置Rotation At Rest（静止时旋转）和Rotation Offset（旋转偏移）字段，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换是否评估约束。要同时应用约束，请确保选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束的强度。权重为 1 会导致约束以与源 GameObject 相同的速率旋转此 GameObject。权重为 0 会完全取消约束的效果。该权重影响所有源 GameObject。&lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中的每个 GameObject 也有一个权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;切换以让约束旋转 GameObject。取消选中此属性以编辑此 GameObject 的旋转。您还可以编辑&lt;strong&gt;Rotation At Rest（静止时旋转）和Rotation Offset（旋转偏移）属性。如果选中了Is Active（是否激活）&lt;/strong&gt;，约束会在您旋转 GameObject 或其 &lt;strong&gt;Source（源）&lt;strong&gt;GameObject 时自动更新&lt;/strong&gt;Rotation At Rest（静止时旋转）&lt;strong&gt;或&lt;/strong&gt;Rotation Offset（旋转偏移）&lt;strong&gt;属性。在对更改感到满意时，请选中&lt;/strong&gt;Lock（锁定）&lt;strong&gt;以让约束控制此 GameObject。此属性对&lt;/strong&gt;Play Mode（播放模式）&lt;/strong&gt; 没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当&lt;strong&gt;Weight（权重）为 0 或相应的Freeze Rotation Axes（冻结旋转轴）未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation Offset（旋转偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从 Transform 的旋转计算的 X、Y 和 Z 偏移量。要编辑这些字段，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Rotation Axes（冻结旋转轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的旋转轴。取消选中轴以阻止约束控制它，这样就可以编辑、动画化或脚本化它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。Unity 按照它们在此列表中出现的顺序评估源 GameObject。顺序会影响此约束如何旋转被约束的 GameObject。为了得到您想要的结果，请在此列表中拖放项。每个源都有一个从 0 到 1 的权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Position Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/03/2023-10-03-unity-document-71/</link>
      <pubDate>Tue, 03 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/03/2023-10-03-unity-document-71/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;position-constraints&#34;&gt;Position Constraints &lt;a href=&#34;#position-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Position Constraint 是一个移动 GameObject 以跟随源 GameObject 的约束组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-03-unity-document-71/PositionConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Activate（激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在定位被约束的 GameObject 和其源 GameObject 后，单击 &lt;strong&gt;Activate（激活）&lt;/strong&gt; 以保存这些信息。&lt;strong&gt;Activate（激活）将当前从源 GameObject 保存到Position At Rest（静止时位置）和Position Offset（位置偏移）中，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Zero（归零）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将被约束的 GameObject 的位置设置为源 GameObject 的位置。&lt;strong&gt;Zero（归零）会重置Position At Rest（静止时位置）和Position Offset（位置偏移）字段，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换是否评估约束。要同时应用约束，请确保选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束的强度。权重为 1 会导致约束以与源 GameObject 相同的速率移动此 GameObject。权重为 0 会完全取消约束的效果。该权重影响所有源 GameObject。&lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中的每个 GameObject 也有一个权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;切换以让约束移动 GameObject。取消选中此属性以编辑此 GameObject 的位置。您还可以编辑&lt;strong&gt;Position At Rest（静止时位置）和Position Offset（位置偏移）属性。如果选中了Is Active（是否激活）&lt;/strong&gt;，约束会在您移动 GameObject 或其源 GameObject 时自动更新 &lt;strong&gt;At Rest（静止时）&lt;strong&gt;或&lt;/strong&gt;Offset（偏移）&lt;strong&gt;属性。在对更改感到满意时，请选中&lt;/strong&gt;Lock（锁定）&lt;strong&gt;以让约束控制此 GameObject。此属性对&lt;/strong&gt;Play Mode（播放模式）&lt;/strong&gt; 没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当&lt;strong&gt;Weight（权重）为 0 或相应的Freeze Position Axes（冻结位置轴）未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Position Offset（位置偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从 Transform 的位置计算的 X、Y 和 Z 偏移量。要编辑这些字段，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Position Axes（冻结位置轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的位置轴。取消选中轴以阻止约束控制它，这样就可以编辑、动画化或脚本化它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。每个源都有一个从 0 到 1 的权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Parent Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/02/2023-10-02-unity-document-70/</link>
      <pubDate>Mon, 02 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/02/2023-10-02-unity-document-70/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;parent-constraints&#34;&gt;Parent Constraints &lt;a href=&#34;#parent-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Parent Constraint 是一个移动和旋转 GameObject 的约束组件，使其表现得好像是 Hierarchy 窗口中另一个 GameObject 的子级。然而，它提供了一些不可能实现的优势，即使你使一个 GameObject 成为另一个 GameObject 的父级：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parent Constraint 不会影响缩放。&lt;/li&gt;
&lt;li&gt;Parent Constraint 可以链接到多个 GameObject。&lt;/li&gt;
&lt;li&gt;GameObject 不需要是 Parent Constraint 链接到的 GameObject 的子级。&lt;/li&gt;
&lt;li&gt;您可以通过指定权重以及每个源 GameObject 的权重来改变约束的效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，为了将剑放在角色的手中，将 Parent Constraint 组件添加到剑的 GameObject 上。在 Parent Constraint 的&lt;strong&gt;Sources&lt;/strong&gt;列表中，将其链接到角色的手上。这样，剑的运动就会受到手的位置和旋转的限制。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-02-unity-document-70/ParentConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Activate（激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动和旋转被约束的 GameObject 和其源 GameObject 后，单击 &lt;strong&gt;Activate（激活）&lt;/strong&gt; 以保存这些信息。&lt;strong&gt;Activate（激活）将当前从源 GameObject 保存到Rotation At Rest（静止时旋转）&lt;/strong&gt;、&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;、&lt;strong&gt;Position Offset（位置偏移）和Rotation Offset（旋转偏移）中，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Zero（归零）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将被约束的 GameObject 的位置和旋转设置为源 GameObject 的位置和旋转。&lt;strong&gt;Zero（归零）会重置Rotation At Rest（静止时旋转）&lt;/strong&gt;、&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;、&lt;strong&gt;Position Offset（位置偏移）和Rotation Offset（旋转偏移）字段，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换是否评估约束。要同时应用约束，请确保选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束的强度。权重为 1 会导致约束以与源 GameObject 相同的速率移动和旋转此 GameObject。权重为 0 会完全取消约束的效果。该权重影响所有源 GameObject。&lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中的每个 GameObject 也有一个权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;切换以让约束移动和旋转 GameObject。取消选中此属性以编辑此 GameObject 的位置和旋转。您还可以编辑&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;、&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;、&lt;strong&gt;Position Offset（位置偏移）和Rotation Offset（旋转偏移）属性。如果选中了Is Active（是否激活）&lt;/strong&gt;，约束会在您移动和旋转 GameObject 或其源 GameObject 时自动更新&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;、&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;、&lt;strong&gt;Position Offset（位置偏移）&lt;strong&gt;或&lt;/strong&gt;Rotation Offset（旋转偏移）&lt;strong&gt;属性。在对更改感到满意时，请选中&lt;/strong&gt;Lock（锁定）&lt;strong&gt;以让约束控制此 GameObject。此属性对&lt;/strong&gt;Play Mode（播放模式）&lt;/strong&gt; 没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Position At Rest（静止时位置）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当权重为 0 或相应的&lt;strong&gt;Freeze Position Axes（冻结位置轴）未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当权重为 0 或相应的&lt;strong&gt;Freeze Rotation Axes（冻结旋转轴）未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Position Offset（位置偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从 Transform 的位置计算的 X、Y 和 Z 位置偏移量。要编辑这些字段，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation Offset（旋转偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;从 Transform 的旋转计算的 X、Y 和 Z 旋转偏移量。要编辑这些字段，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Position Axes（冻结位置轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的位置轴。取消选中轴以阻止约束控制它，这样就可以编辑、动画化或脚本化它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Rotation Axes（冻结旋转轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的旋转轴。取消选中轴以阻止约束控制它，这样就可以编辑、动画化或脚本化它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。Unity 按照它们在此列表中出现的顺序评估源 GameObject。顺序会影响此约束如何移动和旋转被约束的 GameObject。为了得到您想要的结果，请在此列表中拖放项。每个源的权重范围是 0 到 1。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Look At Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/10/01/2023-10-01-unity-document-69/</link>
      <pubDate>Sun, 01 Oct 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/10/01/2023-10-01-unity-document-69/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;look-at-constraints&#34;&gt;Look At Constraints &lt;a href=&#34;#look-at-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Look At Constraint 是一个用于旋转 GameObject 使其面向源 GameObject 的约束组件。通常情况下，您可以将 Look At Constraint 应用于相机，以跟随一个或多个 GameObject。此外，如果导入了 Target Camera，Unity 将创建一个使用目标对象作为源的 Look At Constraint 的相机。&lt;/p&gt;
&lt;p&gt;Look At 是 Aim Constraint 的简化版本。Aim Constraint 允许您选择跟随约束 GameObject 的哪个轴，而 Look At Constraint 始终跟随 z 轴。&lt;/p&gt;
&lt;p&gt;您可以通过将其设置为另一个 GameObject 的 y 轴来指定 Look At Constraint 的向上方向，或者可以指定一个绕 z 轴（瞄准轴）旋转的 roll。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-01-unity-document-69/class-LookAtConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以评估约束。要应用约束，请启用 &lt;strong&gt;Lock（锁定）&lt;/strong&gt; 属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置约束的强度。有效值范围从 0（约束无效）到 1（此 GameObject 以与其源 GameObject 相同的速率旋转）。此权重值会对所有源 GameObject 产生相同的影响，但您还可以在 &lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中单独更改每个 GameObject 的权重。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Up Object（使用向上对象）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以将此 GameObject 的上向量设置为 &lt;strong&gt;World Up Object（全局向上对象）&lt;strong&gt;的 y 轴。如果禁用此选项，则上向量将设置为&lt;/strong&gt;Roll（倾斜）&lt;/strong&gt; 值。GameObject 的上向量确定了哪个方向是向上。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Roll（倾斜）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置绕 z 轴的旋转角度（向上方向）的度数。仅当禁用 &lt;strong&gt;Use Up Object（使用向上对象）&lt;/strong&gt; 时才可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;World Up Object（全局向上对象）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置您要用作向上向量参考的 GameObject 的引用。设置后，此向上向量 GameObject 的 y 轴将成为被约束的 GameObject 的向上方向。仅当启用 &lt;strong&gt;Use Up Object（使用向上对象）&lt;/strong&gt; 时才可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此选项以让约束旋转 GameObject（应用约束）。如果禁用此选项，则可以修改 GameObject 的旋转、&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;strong&gt;和&lt;/strong&gt;Rotation Offset（旋转偏移）&lt;/strong&gt; 属性。在对更改感到满意时，请选中 Lock 以让约束控制此 GameObject。此属性对 Play Mode（播放模式）没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置被约束的 GameObject 在 X、Y 和 Z 方向上静止时的方向。当总权重（包括所有源的个体权重）加起来为 0 时，GameObject 是静止的。要修改此属性，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation Offset（旋转偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置从被约束方向（约束计算的旋转）的偏移量，以 X、Y 和 Z 表示。要修改此属性，请取消选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。Unity 按照它们在此列表中出现的顺序评估源 GameObject。顺序会影响此约束如何旋转被约束的 GameObject，因为旋转会累积。为了得到您想要的结果，请在此列表中拖放项。不同的顺序会导致不同的结果。列表中的每个条目包含对 GameObject 的引用和其权重（即约束中的影响力）。Unity 会计算此列表中源 GameObject 的平均值，并且您可以通过更改每个源的权重来调整其影响力。例如，如果有两个源（一个立方体和一个球体），并且您希望相机更多地关注球体，可以将球体的权重设置为 1（最大值），将立方体的权重设置为 0.5。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-10-01-unity-document-69/class-LookAtConstraint_Example.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints Aim Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/29/2023-09-29-unity-document-68/</link>
      <pubDate>Fri, 29 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/29/2023-09-29-unity-document-68/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;aim-constraints&#34;&gt;Aim Constraints &lt;a href=&#34;#aim-constraints&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Aim Constraint 是一个用于旋转 GameObject 使其面向源 GameObject 的约束组件。它还可以保持另一个轴的一致方向。例如，您可以将 Aim Constraint 添加到相机上。为了在约束使其面向目标的同时保持相机的竖直方向，可以指定相机的竖直轴和一个对齐的竖直方向。&lt;/p&gt;
&lt;p&gt;使用&lt;strong&gt;Up Vector&lt;/strong&gt;来指定被约束的 GameObject 的竖直轴。使用&lt;strong&gt;World Up Vector&lt;/strong&gt;来指定竖直方向。当 Aim Constraint 旋转 GameObject 以面向其源 GameObject 时，该约束还会将被约束的 GameObject 的竖直轴与竖直方向对齐。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-29-unity-document-68/AimConstraint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Activate（激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在旋转被约束的 GameObject 并移动其源 GameObject 后，单击 &lt;strong&gt;Activate（激活）&lt;/strong&gt; 以保存此信息。&lt;strong&gt;Activate（激活）将当前从源 GameObject 保存到Rotation At Rest（静止时旋转）和Rotation Offset（旋转偏移）中，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Zero（归零）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将被约束的 GameObject 的旋转设置为源 GameObject 的旋转。Zero 会重置&lt;strong&gt;Rotation At Rest（静止时旋转）和Rotation Offset（旋转偏移）字段，然后选中Is Active（是否激活）和Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is Active（是否激活）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换是否评估约束。要应用约束，请确保选中&lt;strong&gt;Lock（锁定）&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Weight（权重）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束的强度。权重为 1 会导致约束以与源 GameObject 相同的速率旋转被约束的 GameObject。权重为 0 会完全取消约束的影响。该权重影响所有源 GameObject。&lt;strong&gt;Sources（源）&lt;/strong&gt; 列表中的每个 GameObject 也有一个权重。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Aim Vector（瞄准向量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定面向源 GameObject 方向的轴。例如，为了指定 GameObject 应该只将其正 Z 轴定位到面向源 GameObject，可以分别输入 &lt;strong&gt;Aim Vector（瞄准向量）&lt;/strong&gt; 的 X、Y、Z 轴为 0、0、1。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Up Vector（竖直向量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定此 GameObject 的竖直轴。例如，为了指定 GameObject 应该始终将其正 Y 轴指向上方，可以分别为 X、Y、Z 轴输入 &lt;strong&gt;Up Vector（竖直向量）&lt;/strong&gt; 的 0、1、0。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;World Up Type（全局向上类型）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定竖直方向的轴。Aim Constraint 使用此向量来使 GameObject 的竖直轴与向上方向对齐。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scene Up（场景向上）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;场景的 Y 轴。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Object Up（对象向上）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过 &lt;strong&gt;World Up Object（世界向上对象）&lt;/strong&gt; 引用的 GameObject 的 Y 轴。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Object Up Rotation（对象向上旋转）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过 &lt;strong&gt;World Up Object（世界向上对象）&lt;strong&gt;引用的 GameObject 的&lt;/strong&gt;World Up Vector（世界向上向量）&lt;/strong&gt; 指定的轴。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vector（向量）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;World Up Vector（世界向上向量）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;None（无）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不使用 World Up 向量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;World Up Vector（全局向上向量）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定用于 &lt;strong&gt;Object Up Rotation（对象向上旋转）&lt;strong&gt;和&lt;/strong&gt;Vector（向量）&lt;strong&gt;中的&lt;/strong&gt;World Up Type（全局向上类型）&lt;/strong&gt; 的向量。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;World Up Object（全局向上对象）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定用于 &lt;strong&gt;Object Up（对象向上）&lt;strong&gt;和&lt;/strong&gt;Object Up Rotation（对象向上旋转）&lt;strong&gt;中的&lt;/strong&gt;World Up Type（全局向上类型）&lt;/strong&gt; 的 GameObject。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint Settings（约束设置）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Lock（锁定）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;启用此设置以允许约束旋转 GameObject。取消选中此属性以编辑此 GameObject 的旋转。您还可以编辑静止时旋转和旋转偏移属性。如果选中了 Is Active，请将 Constraint 更新为您旋转 GameObject 或其源 GameObject 时的静止时旋转或旋转偏移属性。在对更改感到满意时，请选中 Lock 以让 Constraint 控制此 GameObject。此属性对 Play Mode（播放模式）没有影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation At Rest（静止时旋转）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当权重为 0 或相应的冻结旋转轴未选中时使用的 X、Y 和 Z 值。要编辑这些字段，请取消选中 Lock。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation Offset（旋转偏移）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Constraint 计算的旋转的 X、Y 和 Z 偏移量。要编辑这些字段，请取消选中 Lock。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Freeze Rotation Axes（冻结旋转轴）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选中 X、Y 或 Z 以允许约束控制相应的轴。取消选中轴以阻止约束控制它。这样可以编辑、动画化或脚本化未冻结的轴。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sources（源）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束此 GameObject 的 GameObject 列表。Unity 按照它们在此列表中出现的顺序评估源 GameObject。此顺序会影响此约束如何旋转被约束的 GameObject。为了得到您想要的结果，请在此列表中拖放项。每个源的权重范围是 0 到 1。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Constraints(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/28/2023-09-28-unity-document-67/</link>
      <pubDate>Thu, 28 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/28/2023-09-28-unity-document-67/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;约束组件&#34;&gt;约束组件 &lt;a href=&#34;#%e7%ba%a6%e6%9d%9f%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;约束组件可以将一个 GameObject 的位置、旋转或缩放与另一个 GameObject 链接起来。被约束的 GameObject 会像它链接的 GameObject 一样移动、旋转或缩放。&lt;/p&gt;
&lt;p&gt;Unity 支持以下类型的约束组件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aim：将被约束的 GameObject 旋转对准链接的 GameObject。&lt;/li&gt;
&lt;li&gt;Look At：将被约束的 GameObject 旋转面对链接的 GameObject（简化的 Aim 约束）。&lt;/li&gt;
&lt;li&gt;Parent：使被约束的 GameObject 随着链接的 GameObject 一起移动和旋转。&lt;/li&gt;
&lt;li&gt;Position：使被约束的 GameObject 的移动方式与链接的 GameObject 相同。&lt;/li&gt;
&lt;li&gt;Rotation：使被约束的 GameObject 的旋转方式与链接的 GameObject 相同。&lt;/li&gt;
&lt;li&gt;Scale：使被约束的 GameObject 的缩放方式与链接的 GameObject 相同。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;链接到-gameobject&#34;&gt;链接到 GameObject &lt;a href=&#34;#%e9%93%be%e6%8e%a5%e5%88%b0-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在约束组件的&lt;strong&gt;Sources&lt;/strong&gt;列表中指定要链接的 GameObject。&lt;/p&gt;
&lt;p&gt;例如，要使准星跟随一个 2D 射击游戏中的玩家飞船，可以将一个&lt;strong&gt;Position Constraint&lt;/strong&gt;组件添加到准星上。然后，在&lt;strong&gt;Position Constraint&lt;/strong&gt;组件中将玩家飞船的 GameObject 添加到&lt;strong&gt;Sources&lt;/strong&gt;列表中。当玩家移动飞船时，准星会跟随移动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-28-unity-document-67/ConstraintSourceLinking.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;约束可以链接到多个源 GameObject。在这种情况下，约束会使用源 GameObject 的平均位置、旋转或缩放。例如，要将灯光对准一组 GameObject，可以在灯光的 GameObject 上添加一个&lt;strong&gt;Aim Constraint&lt;/strong&gt;组件。然后，将要照明的 GameObject 添加到&lt;strong&gt;Sources&lt;/strong&gt;列表中。&lt;strong&gt;Aim Constraint&lt;/strong&gt;会将灯光定位到其源对象的平均位置。&lt;/p&gt;
&lt;p&gt;Unity 按照源 GameObject 在&lt;strong&gt;Sources&lt;/strong&gt;列表中出现的顺序评估它们。对于&lt;strong&gt;Position&lt;/strong&gt;和&lt;strong&gt;Scale Constraint&lt;/strong&gt;，顺序没有影响。但是，对于&lt;strong&gt;Parent&lt;/strong&gt;、&lt;strong&gt;Rotation&lt;/strong&gt;和&lt;strong&gt;Aim Constraint&lt;/strong&gt;，顺序会有影响。为了得到您想要的结果，可以通过拖放方式重新排序&lt;strong&gt;Sources&lt;/strong&gt;列表中的项。&lt;/p&gt;
&lt;p&gt;您可以约束一系列的 GameObject。例如，您希望小鸭子按照排成一排跟随它们的母鸭。您可以将一个&lt;strong&gt;Position Constraint&lt;/strong&gt;组件添加到 GameObject &lt;em&gt;Duckling1&lt;/em&gt; 上。在&lt;strong&gt;Sources&lt;/strong&gt;列表中，将其链接到&lt;em&gt;MotherDuck&lt;/em&gt;。然后，您可以将一个&lt;strong&gt;Position Constraint&lt;/strong&gt;添加到&lt;em&gt;Duckling2&lt;/em&gt;，它链接到&lt;em&gt;Duckling1&lt;/em&gt;。当&lt;em&gt;MotherDuck&lt;/em&gt; GameObject 在场景中移动时，&lt;em&gt;Duckling1&lt;/em&gt;会跟随&lt;em&gt;MotherDuck&lt;/em&gt;路径，&lt;em&gt;Duckling2&lt;/em&gt;会跟随&lt;em&gt;Duckling1&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;避免创建约束的循环，因为这会导致游戏过程中的不可预测的更新。&lt;/p&gt;
&lt;h2 id=&#34;设置约束组件属性&#34;&gt;设置约束组件属性 &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e7%ba%a6%e6%9d%9f%e7%bb%84%e4%bb%b6%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用 Inspector 窗口来更改约束中的常见属性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-28-unity-document-67/ConstraintSettings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;strong&gt;Weight&lt;/strong&gt;来改变约束的影响力。权重为 1 会导致约束以与源 GameObject 相同的速率更新被约束的 GameObject。权重为 0 会完全取消约束的影响。每个源 GameObject 也有一个独立的权重。&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;Constraint Settings&lt;/strong&gt;中，使用&lt;strong&gt;At Rest&lt;/strong&gt;属性来指定&lt;strong&gt;Weight&lt;/strong&gt;为 0 或相关的&lt;strong&gt;Freeze Axes&lt;/strong&gt;属性未选中时使用的 X、Y 和 Z 值。&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;Constraint Settings&lt;/strong&gt;中使用&lt;strong&gt;Offset&lt;/strong&gt;属性来指定在约束 GameObject 时使用的 X、Y 和 Z 值。&lt;/p&gt;
&lt;p&gt;使用&lt;strong&gt;Freeze Axes&lt;/strong&gt;设置来切换约束实际可修改的轴。&lt;/p&gt;
&lt;h2 id=&#34;激活和锁定约束&#34;&gt;激活和锁定约束 &lt;a href=&#34;#%e6%bf%80%e6%b4%bb%e5%92%8c%e9%94%81%e5%ae%9a%e7%ba%a6%e6%9d%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;与约束一起工作有两个方面：激活和锁定。&lt;/p&gt;
&lt;p&gt;您可以激活约束以允许其评估被约束的 GameObject 的位置、旋转或缩放。Unity 不会评估处于非活动状态的约束。&lt;/p&gt;
&lt;p&gt;您可以锁定约束以允许其移动、旋转或缩放 GameObject。锁定约束会控制 GameObject 的变换的相关部分。您不能手动移动、旋转或缩放具有锁定约束的 GameObject。您也无法编辑&lt;strong&gt;Constraint Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;要手动编辑 GameObject 的位置、旋转或缩放，请解锁其约束。如果在解锁时约束处于活动状态，那么在移动、旋转或缩放被约束的 GameObject 或其源 GameObject 时，约束会自动更新&lt;strong&gt;Constraint Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;当您向一个 GameObject 添加约束组件时，默认情况下约束是非活动且未锁定的。这使您可以在激活和锁定约束之前对被约束的 GameObject 和源 GameObject 的位置、旋转和缩放进行微调。&lt;/p&gt;
&lt;p&gt;为了方便起见，&lt;strong&gt;Activate&lt;/strong&gt;和&lt;strong&gt;Zero&lt;/strong&gt;按钮会自动更新&lt;strong&gt;Constraint Settings&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Activate&lt;/strong&gt;：保存与源 GameObject 的当前偏移，然后激活和锁定被约束的 GameObject。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero&lt;/strong&gt;：将位置、旋转或缩放重置为与源 GameObject 匹配，然后激活和锁定被约束的 GameObject。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;动画和组合约束&#34;&gt;动画和组合约束 &lt;a href=&#34;#%e5%8a%a8%e7%94%bb%e5%92%8c%e7%bb%84%e5%90%88%e7%ba%a6%e6%9d%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;strong&gt;动画剪辑&lt;/strong&gt;来修改被约束的 GameObject 链接到的源 GameObject。当动画修改源 GameObject 时，约束会修改被约束的 GameObject。&lt;/p&gt;
&lt;p&gt;您还可以在约束组件中动画化属性。例如，使用 Parent 约束来将角色的剑从手持位置移动到背部。首先，在剑的 GameObject 上添加一个 Parent 约束。在&lt;strong&gt;Sources&lt;/strong&gt;列表中，将约束链接到角色的手和角色的脊柱。为了对剑进行动画化，为每个源的权重添加关键帧。为了将剑从背部移动到手中，添加关键帧将手的权重从 0 变为 1，并为脊柱的权重从 1 变为 0。&lt;/p&gt;
&lt;p&gt;您可以在同一个 GameObject 上添加多种约束组件。当更新 GameObject 时，Unity 会按照它们在 Inspector 窗口中的顺序从头到尾评估约束组件。一个 GameObject 只能包含一种相同类型的约束组件。例如，您不能添加多个 Position Constraint。&lt;/p&gt;
&lt;h2 id=&#34;导入约束&#34;&gt;导入约束 &lt;a href=&#34;#%e5%af%bc%e5%85%a5%e7%ba%a6%e6%9d%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当从 Autodesk® Maya® 和 MotionBuilder® 导入 FBX 文件到 Unity 编辑器时，您可以包含约束。在导入设置窗口的动画选项卡中，选中&lt;strong&gt;导入约束&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-28-unity-document-67/ConstraintImport.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;对于 FBX 文件中的每个约束，Unity 会自动添加相应的约束组件并将其链接到正确的 GameObject。&lt;/p&gt;
&lt;h2 id=&#34;添加和编辑约束&#34;&gt;添加和编辑约束 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e5%92%8c%e7%bc%96%e8%be%91%e7%ba%a6%e6%9d%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;添加约束组件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择要约束的 GameObject。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;Inspector&lt;/strong&gt;窗口中，单击&lt;strong&gt;添加组件&lt;/strong&gt;，搜索要添加的约束类型，然后单击进行添加。&lt;/li&gt;
&lt;li&gt;要向新的约束中添加源 GameObject，请将该 GameObject 从 Hierarchy（或 Scene 视图）拖动到&lt;strong&gt;Sources&lt;/strong&gt;列表中。&lt;/li&gt;
&lt;li&gt;移动、旋转或缩放被约束的 GameObject 和其源 GameObject。&lt;/li&gt;
&lt;li&gt;要激活约束，请单击&lt;strong&gt;激活&lt;/strong&gt;或&lt;strong&gt;零&lt;/strong&gt;，或勾选&lt;strong&gt;活动&lt;/strong&gt;和&lt;strong&gt;锁定&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;编辑约束组件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在编辑器中选择被约束的 GameObject。&lt;/li&gt;
&lt;li&gt;要调整&lt;strong&gt;静止状态&lt;/strong&gt;或&lt;strong&gt;偏移&lt;/strong&gt;字段，请使用 Inspector 窗口展开&lt;strong&gt;约束设置&lt;/strong&gt;，取消选中&lt;strong&gt;锁定&lt;/strong&gt;，然后编辑值。&lt;/li&gt;
&lt;li&gt;要指定约束更新的轴，请展开&lt;strong&gt;约束设置&lt;/strong&gt;，然后选中&lt;strong&gt;冻结轴&lt;/strong&gt;中的属性。&lt;/li&gt;
&lt;li&gt;要向约束中添加源 GameObject：
&lt;ul&gt;
&lt;li&gt;如果在 Sources 列表中没有空槽，请单击列表底部的 “+”。&lt;/li&gt;
&lt;li&gt;从场景中将您想要用作约束源的 GameObject 拖动到&lt;strong&gt;Sources&lt;/strong&gt;列表中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;要删除源 GameObject，请在&lt;strong&gt;Sources&lt;/strong&gt;列表中选择它，然后单击列表底部的减号符（“-”）。&lt;/li&gt;
&lt;li&gt;要重新排序&lt;strong&gt;Sources&lt;/strong&gt;列表中的源 GameObject，请单击每个要移动的 GameObject 左侧的双栏图标，并将其上移或下移。
&lt;strong&gt;注意：在Sources&lt;/strong&gt;列表中，顺序对于 Position、Rotation 和 Scale Constraints 没有影响。然而，顺序会影响 Parent 和 Aim Constraints 如何移动或旋转 GameObject。&lt;/li&gt;
&lt;li&gt;勾选&lt;strong&gt;活动&lt;/strong&gt;和&lt;strong&gt;锁定&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Layers Layers and layerMasks(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/27/2023-09-27-unity-document-66/</link>
      <pubDate>Wed, 27 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/27/2023-09-27-unity-document-66/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;layers-and-layermasks&#34;&gt;Layers and layerMasks &lt;a href=&#34;#layers-and-layermasks&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;每个GameObject都存在于一个单独的图层上，但是用于设置API影响哪些图层的Unity API不直接使用图层。相反，它们使用图层掩码（layerMask）。&lt;/p&gt;
&lt;p&gt;图层是一个标准的整数，但图层掩码是一个按位掩码形式格式化的整数，其中每个&lt;code&gt;1&lt;/code&gt;表示要包含的图层，每个&lt;code&gt;0&lt;/code&gt;表示要排除的图层。这意味着您可以将一个图层传递给期望一个图层掩码的API，并且脚本仍然会编译，因为图层和图层掩码使用相同的基础类型。然而，API调用将不会产生您期望的行为。&lt;/p&gt;
&lt;p&gt;例如，如果您想对第9层的GameObject执行射线投射，如果在Physics.Raycast调用中传递&lt;code&gt;9&lt;/code&gt;作为layerMask，Unity实际上会对第&lt;code&gt;3&lt;/code&gt;层和&lt;code&gt;0&lt;/code&gt;层上的GameObject执行射线投射。这是因为9的二进制表示是&lt;code&gt;00001001&lt;/code&gt;，如果将其视为掩码，&lt;code&gt;1&lt;/code&gt;出现在第&lt;code&gt;3&lt;/code&gt;层和&lt;code&gt;0&lt;/code&gt;层的位置。&lt;/p&gt;
&lt;p&gt;有关如何设置要在API调用中使用的layerMask的信息，请参阅设置一个layerMask。&lt;/p&gt;
&lt;h1 id=&#34;设置一个layermask&#34;&gt;设置一个layerMask &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e4%b8%80%e4%b8%aalayermask&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本页面解释了如何正确设置一个layerMask，以便您可以在使用序列化的layerMask属性的API调用中使用它。&lt;/p&gt;
&lt;h2 id=&#34;使用序列化的layermask属性&#34;&gt;使用序列化的layerMask属性 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%ba%8f%e5%88%97%e5%8c%96%e7%9a%84layermask%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在Unity编辑器中设置一个layermask的最简单方法是创建一个使用Unity的LayerMask类的属性。如果该属性是“public”或使用SerializeField属性，Unity将在&lt;strong&gt;Inspector&lt;/strong&gt;中提供一个界面，您可以使用该界面选择layermask所代表的图层。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;using UnityEngine;

public class LayerMaskExample : MonoBehaviour
{
    [SerializeField] private LayerMask layermask;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;从一个图层转化&#34;&gt;从一个图层转化 &lt;a href=&#34;#%e4%bb%8e%e4%b8%80%e4%b8%aa%e5%9b%be%e5%b1%82%e8%bd%ac%e5%8c%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您想要在运行时将一个图层转化为layermask，请使用二进制左移运算符将&lt;code&gt;1&lt;/code&gt;按图层左移。结果是一个表示单个图层的layermask。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;using UnityEngine;

public class LayerExample : MonoBehaviour
{
    [SerializeField] private int layer = 10;
    private int layerAsLayerMask;

    private void Start()
    {
        layerAsLayerMask = (1 &amp;lt;&amp;lt; layer);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;将图层添加到layermask中&#34;&gt;将图层添加到layerMask中 &lt;a href=&#34;#%e5%b0%86%e5%9b%be%e5%b1%82%e6%b7%bb%e5%8a%a0%e5%88%b0layermask%e4%b8%ad&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要将图层添加到layermask中，请在原始layermask和要添加的图层上使用逻辑OR运算符。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;originalLayerMask |= (1 &amp;lt;&amp;lt; layerToAdd);
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;从layermask中移除图层&#34;&gt;从layerMask中移除图层 &lt;a href=&#34;#%e4%bb%8elayermask%e4%b8%ad%e7%a7%bb%e9%99%a4%e5%9b%be%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要从layermask中移除图层，请使用原始layermask和要移除的图层的按位取反的逻辑AND运算符。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;originalLayerMask &amp;amp;= ~(1 &amp;lt;&amp;lt; layerToRemove);
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Layers Layer-based collision detection(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/26/2023-09-26-unity-document-65/</link>
      <pubDate>Tue, 26 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/26/2023-09-26-unity-document-65/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;基于图层的碰撞检测&#34;&gt;基于图层的碰撞检测 &lt;a href=&#34;#%e5%9f%ba%e4%ba%8e%e5%9b%be%e5%b1%82%e7%9a%84%e7%a2%b0%e6%92%9e%e6%a3%80%e6%b5%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;基于图层的碰撞检测是一种使一个GameObject与另一个设置为特定图层或图层组的GameObject发生碰撞的方法。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-26-unity-document-65/LayerBasedCollision.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;上面的图片显示了场景视图中的六个GameObject（3个平面，3个立方体），以及右侧的&lt;strong&gt;图层碰撞矩阵&lt;/strong&gt;窗口。图层碰撞矩阵定义了哪些GameObject可以与哪些图层发生碰撞。&lt;/p&gt;
&lt;p&gt;在该示例中，图层碰撞矩阵设置为只有属于同一图层的GameObject才能发生碰撞：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图层1仅选中图层1&lt;/li&gt;
&lt;li&gt;图层2仅选中图层2&lt;/li&gt;
&lt;li&gt;图层3仅选中图层3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;根据您的需求进行更改：例如，如果您希望图层1与图层2和3发生碰撞，但不与图层1发生碰撞，请找到&lt;strong&gt;图层1&lt;/strong&gt;的行，然后选中&lt;strong&gt;图层2&lt;/strong&gt;和&lt;strong&gt;图层3&lt;/strong&gt;列的复选框，并留空&lt;strong&gt;图层1&lt;/strong&gt;列的复选框。&lt;/p&gt;
&lt;h2 id=&#34;设置基于图层的碰撞检测&#34;&gt;设置基于图层的碰撞检测 &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e5%9f%ba%e4%ba%8e%e5%9b%be%e5%b1%82%e7%9a%84%e7%a2%b0%e6%92%9e%e6%a3%80%e6%b5%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;为您的GameObject选择属于的图层，选择GameObject，导航到&lt;strong&gt;Inspector&lt;/strong&gt;窗口，选择顶部的&lt;strong&gt;Layer&lt;/strong&gt;下拉菜单，然后选择一个图层或添加一个新的图层。重复此步骤，直到完成将GameObject分配到图层中。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-26-unity-document-65/LayerBasedCollisionLayer.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;在Unity菜单栏中，转到&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;Physics&lt;/strong&gt;类别以打开Physics窗口。&lt;/li&gt;
&lt;li&gt;通过选中它们来确定碰撞矩阵上的哪些图层与其他图层交互。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-26-unity-document-65/LayerCollisionMatrix.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Layers Create functional layers in Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/25/2023-09-25-unity-document-64/</link>
      <pubDate>Mon, 25 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/25/2023-09-25-unity-document-64/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;在-unity-中创建功能层&#34;&gt;在 Unity 中创建功能层 &lt;a href=&#34;#%e5%9c%a8-unity-%e4%b8%ad%e5%88%9b%e5%bb%ba%e5%8a%9f%e8%83%bd%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;图层可以帮助组织场景中的&lt;strong&gt;GameObject&lt;/strong&gt;。如果您创建了一个图层并将GameObject分配给它，您可以根据图层编辑GameObject与其他GameObject的交互方式。&lt;/p&gt;
&lt;h2 id=&#34;添加新的图层&#34;&gt;添加新的图层 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e6%96%b0%e7%9a%84%e5%9b%be%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有两种方法可以创建新的图层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择“Tags and Layers”窗口（主菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Tags and Layers&lt;/strong&gt; &amp;gt; &lt;strong&gt;Layers&lt;/strong&gt;）。&lt;/li&gt;
&lt;li&gt;选择一个GameObject，选择&lt;strong&gt;Inspector&lt;/strong&gt;窗口中的&lt;strong&gt;Layer&lt;/strong&gt;下拉菜单，并从菜单中选择&lt;strong&gt;Add Layer&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为了记住图层的预期功能，给它一个描述性的名称。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：图层31在编辑器的预览窗口机制中内部使用。为了避免冲突，请不要使用该图层。&lt;/p&gt;
&lt;h3 id=&#34;内置图层&#34;&gt;内置图层 &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e5%9b%be%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您打开图层菜单时，可能会看到一些已命名的图层。除了默认图层和忽略射线投射图层之外，Unity不再将这些内置图层用于许多特定用途；它们主要用于向后兼容：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;图层编号&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;图层名称&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;TransparentFX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity在镜头系统中使用此图层。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ignore Raycast&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;物理射线投射API默认忽略此图层。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Water&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity的标准资产2018.4版本使用此图层&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;UI&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity UI默认使用此图层进行UI元素的渲染。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;您仍然可以使用这些图层，但不能重新命名或删除它们。&lt;/p&gt;
&lt;h2 id=&#34;将gameobject添加到图层&#34;&gt;将GameObject添加到图层 &lt;a href=&#34;#%e5%b0%86gameobject%e6%b7%bb%e5%8a%a0%e5%88%b0%e5%9b%be%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要将GameObject分配给图层，选择该GameObject，转到Inspector窗口，然后选择&lt;strong&gt;Layer&lt;/strong&gt;旁边的下拉菜单。此菜单显示具有名称的图层，因此您可以选择最适合您的GameObject的图层。&lt;/p&gt;
&lt;p&gt;每个GameObject只能分配给一个图层，但可以将多个GameObject添加到同一个图层中。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Layers Uses of layers in Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/24/2023-09-24-unity-document-63/</link>
      <pubDate>Sun, 24 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/24/2023-09-24-unity-document-63/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unity-中的图层用途&#34;&gt;Unity 中的图层用途 &lt;a href=&#34;#unity-%e4%b8%ad%e7%9a%84%e5%9b%be%e5%b1%82%e7%94%a8%e9%80%94&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用图层来优化项目和工作流程。图层的常见用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基于图层的渲染&lt;/li&gt;
&lt;li&gt;基于图层的碰撞&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;使用相机剔除遮罩与图层&#34;&gt;使用相机剔除遮罩与图层 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e7%9b%b8%e6%9c%ba%e5%89%94%e9%99%a4%e9%81%ae%e7%bd%a9%e4%b8%8e%e5%9b%be%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果使用&lt;strong&gt;相机&lt;/strong&gt;的&lt;strong&gt;剔除遮罩&lt;/strong&gt;，您可以只渲染特定图层或选定的图层中的对象。要更改剔除遮罩，请选择要使用的相机，并在&lt;strong&gt;Inspector&lt;/strong&gt;窗口中选择&lt;strong&gt;剔除遮罩&lt;/strong&gt;下拉菜单。如果取消选中图层的复选框，则在&lt;strong&gt;场景&lt;/strong&gt;中不会渲染该图层。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;strong&gt;UI&lt;/strong&gt;元素和屏幕空间画布子对象是例外，并且无论如何都会进行渲染。&lt;/p&gt;
&lt;h2 id=&#34;使用图层进行射线投射&#34;&gt;使用图层进行射线投射 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%9b%be%e5%b1%82%e8%bf%9b%e8%a1%8c%e5%b0%84%e7%ba%bf%e6%8a%95%e5%b0%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以使用图层指定射线投射与哪些GameObject相交。要使射线投射忽略一个&lt;strong&gt;GameObject&lt;/strong&gt;，您可以将其分配到“忽略射线投射”图层，或者将LayerMask传递给射线投射的API调用。&lt;/p&gt;
&lt;p&gt;如果不将LayerMask传递给射线投射的API调用，Unity将使用Physics.DefaultRaycastLayers，该图层与除“忽略射线投射”以外的每个图层匹配。&lt;/p&gt;
&lt;p&gt;Physics.Raycast函数使用位掩码，每个位决定是否忽略该图层的射线。如果在layerMask中的所有位都打开，则射线与所有的&lt;strong&gt;碰撞器&lt;/strong&gt;发生碰撞。如果layerMask = 0，则没有碰撞。&lt;/p&gt;
&lt;p&gt;例如，如果您想要在第8层上投射射线，请参考下面的代码示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; layerMask = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Does the ray intersect any objects which are in layer 8?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The ray hit the player&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后，您可以相反地，使射线与除第8层以外的所有图层发生碰撞。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Update ()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Bit shift the index of the layer (8) to get a bit mask&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; layerMask = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;lt;&amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// This casts rays only against colliders in layer 8.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// But to collide against everything except layer 8, use the ~ operator because it inverts a bitmask.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    layerMask = ~layerMask;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RaycastHit hit;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Does the ray intersect any objects excluding layer 8.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), &lt;span style=&#34;color:#66d9ef&#34;&gt;out&lt;/span&gt; hit, Mathf.Infinity, layerMask))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Did Hit&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;, Color.white);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Did not Hit&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果没有将LayerMask传递给Raycast函数，它仍然会忽略使用IgnoreRaycast图层的碰撞器。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Layers(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/23/2023-09-23-unity-document-62/</link>
      <pubDate>Sat, 23 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/23/2023-09-23-unity-document-62/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;layers&#34;&gt;Layers &lt;a href=&#34;#layers&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;图层是一种工具，可以将您场景中的&lt;strong&gt;GameObject&lt;/strong&gt;进行分组。您可以通过&lt;strong&gt;UI&lt;/strong&gt;和&lt;strong&gt;脚本&lt;/strong&gt;使用图层来编辑场景中的GameObject之间的交互。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;在Unity中使用图层的用途&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解Unity中图层的常见应用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;在Unity中创建图层&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何创建图层并将GameObject分配到图层中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;图层和图层掩码&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解图层和图层掩码之间的区别。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置图层掩码&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何正确设置图层掩码以在API调用中使用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;将图层添加到图层掩码中&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何以编程方式将新图层添加到图层掩码中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;从图层掩码中删除图层&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何以编程方式从图层掩码中删除图层。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Unpacking Prefab instances(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/22/2023-09-22-unity-document-61/</link>
      <pubDate>Fri, 22 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/22/2023-09-22-unity-document-61/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;解包prefab实例&#34;&gt;解包Prefab实例 &lt;a href=&#34;#%e8%a7%a3%e5%8c%85prefab%e5%ae%9e%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要将&lt;strong&gt;Prefab&lt;/strong&gt;实例返回到普通的&lt;strong&gt;GameObject&lt;/strong&gt;中，您需要对Prefab实例进行解包操作。这正是创建（打包）Prefab的相反操作，只是它不会销毁Prefab资产，而只影响Prefab实例。&lt;/p&gt;
&lt;p&gt;您可以通过在Hierarchy中右键单击Prefab实例并选择&lt;strong&gt;Unpack Prefab&lt;/strong&gt;来解包Prefab实例。结果在&lt;strong&gt;Scene&lt;/strong&gt;中的GameObject不再与其原来的Prefab资产有任何链接。Prefab资产本身不受此操作的影响，并且您的项目中可能仍然存在其他实例。&lt;/p&gt;
&lt;p&gt;如果在解包之前在Prefab实例上进行了任何覆盖操作，这些覆盖将“烘焙”到生成的GameObject上。也就是说，值保持不变，但不再具有覆盖状态，因为没有要覆盖的Prefab了。&lt;/p&gt;
&lt;p&gt;如果解包包含嵌套Prefab的Prefab，嵌套的Prefab仍然保持Prefab实例，并且仍然与各自的Prefab资产保持链接。类似地，如果解包Prefab变体，将在根部生成一个新的Prefab实例，该实例是基础Prefab的实例。&lt;/p&gt;
&lt;p&gt;通常情况下，解包Prefab实例将为您提供与进入该Prefab的Prefab模式时看到的相同的对象。这是因为Prefab模式显示的是Prefab内部的内容，而解包Prefab实例会解包Prefab的内容。&lt;/p&gt;
&lt;p&gt;如果您要替换普通的GameObject，并完全删除与任何Prefab资产的链接，您可以在Hierarchy中右键单击Prefab实例并选择&lt;strong&gt;Unpack Prefab Completely&lt;/strong&gt;。这相当于解包Prefab，并继续解包任何作为结果出现的Prefab实例，因为它们是嵌套的Prefab或基础Prefab。&lt;/p&gt;
&lt;p&gt;您可以解包存在于场景中的Prefab实例，或存在于其他Prefab内部的Prefab实例。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Unused Overrides(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/21/2023-09-21-unity-document-60/</link>
      <pubDate>Thu, 21 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/21/2023-09-21-unity-document-60/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;未使用的覆盖&#34;&gt;未使用的覆盖 &lt;a href=&#34;#%e6%9c%aa%e4%bd%bf%e7%94%a8%e7%9a%84%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果覆盖的目标对象无效或其属性路径未知，那么实例覆盖值将作为数据存储在定义它们的场景或预制中。然而，如果覆盖变得“未使用”，则数据变得无效。它仍然存储在场景文件中，但是冗余。&lt;/p&gt;
&lt;p&gt;例如，如果您覆盖了附加到预制上的脚本的公共字段的值，然后删除了该脚本，包含覆盖值的数据将变得未使用，因为它的目标对象不再存在。&lt;/p&gt;
&lt;p&gt;如果您删除公共字段定义或重命名公共字段，覆盖数据也会变得未使用，因为属性路径不再与存储的数据匹配，尽管组件对象本身仍然存在。&lt;/p&gt;
&lt;p&gt;由于Unity不会自动删除未使用的覆盖数据，因此，如果您恢复了已删除的脚本或字段定义，覆盖数据将再次变为已使用状态，并像以前一样应用为覆盖。&lt;/p&gt;
&lt;p&gt;如果您不想保留未使用的覆盖数据，可以使用&lt;strong&gt;Inspector&lt;/strong&gt;中的&lt;strong&gt;Overrides&lt;/strong&gt;菜单，或者在&lt;strong&gt;Hierarchy&lt;/strong&gt;窗口中的上下文菜单中检查并删除它们。删除会包括所有未使用的覆盖，Unity将删除的详细信息写入编辑器日志中。&lt;/p&gt;
&lt;p&gt;Unity编辑器无法自动确定何时以及是否应清理未使用的数据，因为您可能会暂时或意外地移动数据引用的对象或属性，并且您可能稍后重新启用它。删除您知道不再需要的未使用覆盖数据可以被视为良好的做法，因为这意味着您的场景文件只包含有用的数据，这可以帮助简化&lt;strong&gt;版本控制&lt;/strong&gt;和协作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：您可以通过使用&lt;strong&gt;FormerlySerializedAsAttribute&lt;/strong&gt;来重命名公共字段，并保留关联的覆盖值，该属性执行名称转换，将字段的旧名称映射到其新名称。&lt;/p&gt;
&lt;h2 id=&#34;prefab覆盖选项&#34;&gt;Prefab覆盖选项 &lt;a href=&#34;#prefab%e8%a6%86%e7%9b%96%e9%80%89%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要检查并使用Inspector删除未使用的覆盖，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择您要处理的GameObject(s)。&lt;/li&gt;
&lt;li&gt;在Inspector中，单击&lt;strong&gt;Overrides&lt;/strong&gt;下拉菜单**[A]&lt;strong&gt;。如果存在任何未使用的覆盖，则菜单将显示“未使用的覆盖”选项&lt;/strong&gt;[B]**，否则不会显示“未使用的覆盖”选项。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;未使用的覆盖&lt;/strong&gt;以打开未使用的覆盖面板。&lt;/li&gt;
&lt;li&gt;未使用的覆盖面板**[C]&lt;strong&gt;列出了未使用的覆盖，并有一个&lt;/strong&gt;Remove**按钮。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;Remove&lt;/strong&gt;按钮以删除未使用的覆盖。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-21-unity-document-60/UnusedOverridesInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;未使用的覆盖面板，显示所选预置中的两个未使用的覆盖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：未使用的覆盖面板支持多选，并显示未使用的覆盖的总数和受影响实例的数量，但只显示高达三个未使用覆盖的字段名称，&lt;strong&gt;GameObject&lt;/strong&gt;名称和值，如下面的示例所示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-21-unity-document-60/UnusedOverridesPanelMultiSelect.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;未使用的覆盖面板，显示3个不同预置实例上的24个未使用的覆盖。&lt;/p&gt;
&lt;h2 id=&#34;hierarchy上下文菜单&#34;&gt;Hierarchy上下文菜单 &lt;a href=&#34;#hierarchy%e4%b8%8a%e4%b8%8b%e6%96%87%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要在Hierarchy窗口中检查并删除未使用的实例覆盖，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择您要处理的GameObject(s)。&lt;/li&gt;
&lt;li&gt;在Hierarchy窗口中，右键单击所选对象之一，然后选择&lt;strong&gt;Prefab &amp;gt; Remove Unused Overrides&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;Unity将显示一个对话框，显示未使用的覆盖数量（如果有）。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;Remove&lt;/strong&gt;按钮以删除未使用的覆盖。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-21-unity-document-60/UnusedOverridesDialogBox.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;从Hierarchy窗口上下文菜单中删除未使用覆盖时显示的对话框。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：您可以通过右键单击层级结构中的场景名称而不是单独的GameObject来删除整个场景中的所有未使用的覆盖。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Overrides at multiple levels(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/20/2023-09-20-unity-document-59/</link>
      <pubDate>Wed, 20 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/20/2023-09-20-unity-document-59/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;多级覆盖&#34;&gt;多级覆盖 &lt;a href=&#34;#%e5%a4%9a%e7%ba%a7%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当您在其他Prefab内部使用Prefab，或者使用&lt;strong&gt;Prefab&lt;/strong&gt;变体时，覆盖可以存在于多个级别，并且相同的覆盖可以应用于多个不同的Prefab。&lt;/p&gt;
&lt;h2 id=&#34;应用目标的选择&#34;&gt;应用目标的选择 &lt;a href=&#34;#%e5%ba%94%e7%94%a8%e7%9b%ae%e6%a0%87%e7%9a%84%e9%80%89%e6%8b%a9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您有一个内部包含嵌套Prefab的Prefab实例，或者是一个Prefab变体时，您可能可以选择应用覆盖的Prefab。&lt;/p&gt;
&lt;p&gt;考虑一个嵌套在Prefab“Table”中的Prefab“Vase”，并且&lt;strong&gt;场景&lt;/strong&gt;中有一个“Table”Prefab的实例。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-20-unity-document-59/PrefabsMultipleApplyTarget1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果在此实例上覆盖“Vase”的属性，那么这个覆盖可以应用于多个Prefab：即“Vase”或“Table”。&lt;/p&gt;
&lt;p&gt;Overrides下拉菜单中的&lt;strong&gt;Apply All&lt;/strong&gt;按钮只允许将覆盖应用于外部Prefab - 在这种情况下是“Table”。但是，在通过上下文菜单或通过Overrides下拉窗口中各个组件的比较视图进行应用时，可以选择应用目标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-20-unity-document-59/PrefabsMultipleApplyTarget2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在这个例子中，如果选择&lt;strong&gt;Apply to Prefab ‘Vase’&lt;/strong&gt;，该值将应用于“Vase” Prefab资产，并用于所有“Vase” Prefab的实例。&lt;/p&gt;
&lt;p&gt;而且，如果选择&lt;strong&gt;Apply as Override in Prefab ‘Table’&lt;/strong&gt;，该值将成为“Table” Prefab内部的“Vase”实例上的一个覆盖。该属性在场景中的实例上不再标记为覆盖，但如果您在Prefab模式中打开“Table” Prefab，则在“Vase” Prefab实例上标记为覆盖。&lt;/p&gt;
&lt;p&gt;“Vase” Prefab Asset本身不受在“Table” Prefab Asset内作为覆盖应用的影响。这意味着所有“Table” Prefab的实例现在都有其“Vase” Prefab实例上的新值，但是不属于“Table” Prefab的其他“Vase” Prefab实例不受影响。&lt;/p&gt;
&lt;p&gt;如果“Vase” Prefab本身的属性稍后更改，它将影响所有“Vase” Prefab的实例，除非该属性被覆盖。因为它在“Table” Prefab内部的“Vase”实例上被覆盖了，所以这个变化不会影响任何属于“Table”实例的“Vase”实例。&lt;/p&gt;
&lt;h2 id=&#34;对内部prefab的应用可能会影响外部prefab&#34;&gt;对内部Prefab的应用可能会影响外部Prefab &lt;a href=&#34;#%e5%af%b9%e5%86%85%e9%83%a8prefab%e7%9a%84%e5%ba%94%e7%94%a8%e5%8f%af%e8%83%bd%e4%bc%9a%e5%bd%b1%e5%93%8d%e5%a4%96%e9%83%a8prefab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;应用一个或多个属性到内部Prefab Asset中有时会修改外部Prefab Asset，因为这些属性会在外部Prefab中被恢复为覆盖。&lt;/p&gt;
&lt;p&gt;在我们的例子中，如果选择&lt;strong&gt;Apply to Prefab ‘Vase’&lt;/strong&gt;，并且“Table” Prefab对该值有一个覆盖，那么“Table” Prefab中的这个覆盖将同时被恢复，以便实例上的属性保持刚刚应用的值。如果不是这种情况，实例上的值将在应用后立即改变。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Prefab Variants(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/19/2023-09-19-unity-document-58/</link>
      <pubDate>Tue, 19 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/19/2023-09-19-unity-document-58/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;prefab变体&#34;&gt;Prefab变体 &lt;a href=&#34;#prefab%e5%8f%98%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Prefab Variants在您希望拥有一组预定义的&lt;strong&gt;Prefab&lt;/strong&gt;变体时非常有用。&lt;/p&gt;
&lt;p&gt;例如，您可能希望在游戏中有几种不同类型的GermSlimeTarget，它们都基于相同的基本GermSlimeTarget Prefab。但是，您可能希望某些GermSlimeTarget携带物品，某些以不同的速度移动，或某些发出额外的声音效果。&lt;/p&gt;
&lt;p&gt;为此，您可以设置初始的GermSlimeTarget Prefab来执行所有您希望所有GermSlimeTarget共享的基本操作，然后您可以创建多个Prefab Variants来实现以下目标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过对脚本的属性重写，使GermSlimeTarget更快地移动。&lt;/li&gt;
&lt;li&gt;通过将附加的&lt;strong&gt;GameObject&lt;/strong&gt;附加到它的手臂上，使GermSlimeTarget携带物品。&lt;/li&gt;
&lt;li&gt;通过添加一个播放squelching声音的AudioSource组件，为GermSlimeTarget提供类似蛞蝓的抽吸声效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prefab Variant继承了另一个Prefab的属性，称为基础Prefab。对于Prefab Variant进行的覆盖将优先于基础Prefab的值。Prefab Variant可以将任何其他Prefab作为其基础，包括Model Prefabs或其他Prefab Variants。&lt;/p&gt;
&lt;h2 id=&#34;创建一个prefab-variant&#34;&gt;创建一个Prefab Variant &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aaprefab-variant&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;根据另一个Prefab创建Prefab Variant有多种方法。&lt;/p&gt;
&lt;p&gt;您可以在Project视图中&lt;strong&gt;右键单击&lt;/strong&gt;一个Prefab，然后选择&lt;strong&gt;Create &amp;gt; Prefab Variant&lt;/strong&gt;。这将创建所选Prefab的一个变体，最初没有任何覆盖。您可以打开Prefab Variant进入Prefab模式并开始向其中添加覆盖。&lt;/p&gt;
&lt;p&gt;您还可以将Hierarchy中的Prefab实例&lt;strong&gt;拖动&lt;/strong&gt;到&lt;strong&gt;Project窗口&lt;/strong&gt;中。这样做时，对话框会询问您想要创建新的原始Prefab还是Prefab Variant。如果选择Prefab Variant，则会创建一个以拖动的Prefab实例为基础的新Prefab Variant。您在该实例上进行的所有覆盖现在都在新的Prefab Variant中。您可以打开它进入Prefab模式以添加其他覆盖，或编辑或删除覆盖。&lt;/p&gt;
&lt;p&gt;Prefab Variants用带有箭头的蓝色Prefab图标显示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-19-unity-document-58/PrefabsBasicAndVariant.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;基本的GermSlimeTarget Prefab，以及名为“GermSlimeTarget With GermOBlaster”的Prefab Variant，如在Hierarchy窗口中显示。&lt;/p&gt;
&lt;h2 id=&#34;编辑prefab-variant&#34;&gt;编辑Prefab Variant &lt;a href=&#34;#%e7%bc%96%e8%be%91prefab-variant&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当在Prefab模式下打开Prefab Variant时，根（root）将显示为带有蓝色Prefab图标的Prefab实例。该Prefab实例代表Prefab Variant所继承的基本Prefab；它不代表Prefab Variant本身。对Prefab Variant所进行的任何编辑都将成为存在于Variant中的基础的覆盖。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-19-unity-document-58/PrefabsVariantAddedObject.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在上面的截图中，如果选择“GermSlimeTarget With GermOBlaster”根GameObject并单击Inspector中的Select按钮，将选择基础Prefab“GermSlimeTarget”，而不是Variant“GermSlimeTarget With GermOBlaster”，因为Prefab实例是基础Prefab“GermSlimeTarget”的实例，Select按钮始终选择实例来自的Prefab资产。&lt;/p&gt;
&lt;p&gt;与任何Prefab实例一样，您可以在Prefab Variant中使用Prefab覆盖，例如修改的属性值、添加的组件、移除的组件和添加的子级GameObject。这些也有相同的限制：您不能将来自基础Prefab的GameObject重新父级到Prefab Variant中。您也不能从Prefab Variant中删除在基础Prefab中存在的GameObject。但是，您可以将GameObject停用（作为属性覆盖）以实现相同的效果，就像删除GameObject一样。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：当在Prefab模式中编辑Prefab Variant时，您应该理解应用这些覆盖（通过Overrides下拉窗口或上下文菜单）将导致将您的Variant的变化应用于基础Prefab资产。这通常&lt;strong&gt;不是&lt;/strong&gt;您想要的。Prefab Variant的目的是为了提供一种方便的方式来存储有意义且可重用的覆盖集合，因此它们通常应该保留为覆盖，而不是应用于基础Prefab资产。为了说明这一点，如果你应用额外的&lt;strong&gt;GermOBlaster&lt;/strong&gt; GameObject到基础Prefab资产（“GermSlimeTarget”），那么Prefab资产也将具有&lt;strong&gt;GermOBlaster&lt;/strong&gt;。&lt;strong&gt;GermSlimeTarget With GermOBlaster&lt;/strong&gt; Variant的整个意义在于只有这个变体携带一个&lt;strong&gt;GermOBlaster&lt;/strong&gt;，所以添加的&lt;strong&gt;GermOBlaster&lt;/strong&gt; GameObject应该作为覆盖保留在Prefab Variant内部。&lt;/p&gt;
&lt;p&gt;当打开Overrides下拉窗口时，您可以在其标题中始终看到覆盖应用的对象以及覆盖存在的上下文。对于Prefab Variant，标题将显示覆盖应用于基础Prefab并存在于Prefab Variant中。为了特别明确，&lt;strong&gt;Apply All&lt;/strong&gt;按钮也显示为&lt;strong&gt;Apply All to Base&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-19-unity-document-58/PrefabsVariantOverrideDropdown.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当在Prefab模式中编辑Prefab Variant时，Prefab Variant的Overrides下拉菜单&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Nested Prefabs(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/18/2023-09-18-unity-document-57/</link>
      <pubDate>Mon, 18 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/18/2023-09-18-unity-document-57/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;嵌套prefab&#34;&gt;嵌套Prefab &lt;a href=&#34;#%e5%b5%8c%e5%a5%97prefab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以在其他Prefab中包含Prefab实例，这被称为嵌套Prefab。嵌套Prefab保留其与自身Prefab资产的链接，同时也形成另一个Prefab资产的一部分。&lt;/p&gt;
&lt;h2 id=&#34;在prefab模式下添加嵌套prefab&#34;&gt;在Prefab模式下添加嵌套Prefab &lt;a href=&#34;#%e5%9c%a8prefab%e6%a8%a1%e5%bc%8f%e4%b8%8b%e6%b7%bb%e5%8a%a0%e5%b5%8c%e5%a5%97prefab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在Prefab模式下，您可以像在场景中一样添加和处理Prefab实例。您可以将Prefab资产从Project窗口拖到Hierarchy窗口或场景视图中，以在打开的Prefab内创建该资产的Prefab实例。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在Prefab模式下打开的Prefab的根GameObject不会显示蓝色立方体Prefab图标，但其他Prefab实例会显示。您还可以像在场景中一样为这些Prefab实例添加覆盖，就像在场景中的Prefab实例一样。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-18-unity-document-57/PrefabsNestedPrefab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;左图：在Prefab模式下，将“GermOBlaster” Prefab嵌套在“GermSlimeTarget” Prefab中。右图：场景中的“GermSlimeTarget” Prefab实例包含了“GermOBlaster”。&lt;/p&gt;
&lt;h2 id=&#34;通过实例嵌套prefab&#34;&gt;通过实例嵌套Prefab &lt;a href=&#34;#%e9%80%9a%e8%bf%87%e5%ae%9e%e4%be%8b%e5%b5%8c%e5%a5%97prefab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您还可以将Prefab实例作为子级添加到场景中的另一个Prefab实例中，而无需进入Prefab模式，就像添加任何其他GameObject一样。这样添加的Prefab实例在Hierarchy中的图标上有一个加号标记，表示它是外部Prefab特定实例上的一个覆盖。&lt;/p&gt;
&lt;p&gt;添加的Prefab可以通过与其他覆盖相同的方式还原或应用于外部Prefab（通过Overrides下拉窗口或Hierarchy中的GameObject上下文菜单），如通过实例编辑Prefab中所述。Overrides下拉按钮仅存在于外部Prefab上。一旦应用，Prefab不再显示加号标记，因为它不再是一个覆盖，而是嵌套在外部Prefab资产本身中。但是，它仍然保留其蓝色立方体图标，因为它作为Prefab实例存在，并保持与自身Prefab资产的连接。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-18-unity-document-57/PrefabsOverrideVsNested.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;左图：将“GermOBlaster” Prefab作为覆盖添加到“GermSlimeTarget” Prefab实例中。右图：将“GermOBlaster” Prefab应用于“GermSlimeTarget” Prefab，并且现在它成为“GermSlimeTarget” Prefab资产中的嵌套Prefab。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Editing a Prefab via its instances(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/17/2023-09-17-unity-document-56/</link>
      <pubDate>Sun, 17 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/17/2023-09-17-unity-document-56/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;通过实例编辑预制件&#34;&gt;通过实例编辑预制件 &lt;a href=&#34;#%e9%80%9a%e8%bf%87%e5%ae%9e%e4%be%8b%e7%bc%96%e8%be%91%e9%a2%84%e5%88%b6%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;通过实例编辑预制件的&lt;strong&gt;检视面板&lt;/strong&gt;比普通&lt;strong&gt;游戏对象&lt;/strong&gt;多了三个控件：&lt;strong&gt;打开&lt;/strong&gt;、&lt;strong&gt;选择&lt;/strong&gt;和&lt;strong&gt;覆盖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsInspectorControls1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;预制件实例的检视面板中的三个预制件控件&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;打开&lt;/strong&gt;按钮会打开与该实例相关的预制件资源，进入预制件模式，允许您编辑预制件资源，从而更改所有使用该资源的实例。&lt;strong&gt;选择&lt;/strong&gt;按钮会在&lt;strong&gt;项目窗口&lt;/strong&gt;中选择与该实例相关的预制件资源。&lt;strong&gt;覆盖&lt;/strong&gt;按钮会打开覆盖下拉窗口。&lt;/p&gt;
&lt;h2 id=&#34;覆盖下拉窗口&#34;&gt;覆盖下拉窗口 &lt;a href=&#34;#%e8%a6%86%e7%9b%96%e4%b8%8b%e6%8b%89%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;覆盖&lt;/strong&gt;下拉窗口显示预制件实例上的所有覆盖。它还允许您应用实例中的覆盖到预制件资源，或将实例上的覆盖还原为预制件资源上的值。&lt;strong&gt;覆盖&lt;/strong&gt;下拉按钮仅出现在根预制件实例上，而不出现在其他预制件内部的预制件上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;覆盖&lt;/strong&gt;下拉窗口允许您逐个应用或还原预制件覆盖，或同时应用或还原所有预制件覆盖。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;应用&lt;/strong&gt;覆盖会修改预制件资源。这将将覆盖（当前仅存在于预制件实例中）应用到预制件资源上。这意味着预制件资源现在具有该修改，而预制件实例不再具有该覆盖的修改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;还原&lt;/strong&gt;覆盖会修改预制件实例。这实际上放弃了您的覆盖并将其恢复为预制件资源的状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下拉窗口以修改、添加和删除的组件以及添加的游戏对象（包括其他预制件）的形式显示实例上的更改列表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsOverridesDropdown1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;检视面板中查看预制件实例时的覆盖下拉窗口&lt;/p&gt;
&lt;p&gt;要查看条目，请单击它。这将显示一个浮动窗口，显示更改并允许您还原或应用该更改。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsOverridesDropdownAddedComponent1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;已选中的添加组件覆盖的覆盖下拉窗口&lt;/p&gt;
&lt;p&gt;对于具有修改值的组件，视图会显示预制件资源上的组件值和预制件实例上的修改组件的并排比较。这样可以让您比较原始的预制件资源值与当前覆盖，以便您决定是否要还原或应用这些值。&lt;/p&gt;
&lt;p&gt;在下面的示例中，“GermOBlaster”子游戏对象存在于预制件资源和预制件实例中，但在实例上其缩放已增加。这种缩放增加是实例覆盖，可以在&lt;strong&gt;覆盖&lt;/strong&gt;下拉窗口中的并排比较中看到。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsOverridesDropdownCompareComponent1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;带有比较视图的覆盖下拉窗口，在预制件实例的子游戏对象的Transform组件中显示修改值&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;覆盖&lt;/strong&gt;下拉窗口还具有&lt;strong&gt;全部还原&lt;/strong&gt;和&lt;strong&gt;全部应用&lt;/strong&gt;按钮，用于一次性还原或应用所有更改。如果您在其他预制件内有预制件，则&lt;strong&gt;全部应用&lt;/strong&gt;按钮始终适用于最外层的预制件，即根游戏对象上具有&lt;strong&gt;覆盖&lt;/strong&gt;下拉按钮的预制件。&lt;/p&gt;
&lt;p&gt;如果同时选择了多个条目，&lt;strong&gt;全部还原&lt;/strong&gt;和&lt;strong&gt;全部应用&lt;/strong&gt;按钮将被&lt;strong&gt;还原选定&lt;/strong&gt;和&lt;strong&gt;应用选定&lt;/strong&gt;按钮替换。您可以使用这些按钮一次性还原或应用多个覆盖。与&lt;strong&gt;全部应用&lt;/strong&gt;按钮类似，&lt;strong&gt;应用选定&lt;/strong&gt;按钮始终适用于最外层的预制件。&lt;/p&gt;
&lt;p&gt;如果选定对象中有未使用的覆盖，覆盖下拉窗口会显示一个选项，以允许您删除它们。&lt;/p&gt;
&lt;h2 id=&#34;上下文菜单&#34;&gt;上下文菜单 &lt;a href=&#34;#%e4%b8%8a%e4%b8%8b%e6%96%87%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您还可以使用检视面板中的上下文菜单来&lt;strong&gt;还原&lt;/strong&gt;和&lt;strong&gt;应用&lt;/strong&gt;单个覆盖，而不是使用覆盖下拉窗口。&lt;/p&gt;
&lt;p&gt;覆盖的属性以加粗字体显示。您可以通过上下文菜单来还原或应用它们：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsContextSingleProperty1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;修改的组件可以通过组件标题的齿轮下拉按钮或上下文菜单来还原或应用：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsContextModifiedComponent1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;添加的组件具有覆盖图标之上的加号标记。它们可以通过组件标题的齿轮下拉按钮或上下文菜单来还原或应用：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsContextAddedComponent1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;移除的组件具有覆盖图标之上的减号标记。可以通过组件标题的齿轮下拉按钮或上下文菜单来还原或应用删除操作。还原移除操作会将组件恢复，应用移除操作将从预制件资源中删除组件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsContextRemovedComponent1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;作为子对象添加到预制件实例的游戏对象（包括其他预制件）在层级视图中的图标上具有加号标记。它们可以通过层级视图中对象的上下文菜单来还原或应用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-17-unity-document-56/PrefabsContextAddedGameObject1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Instance overrides(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/16/2023-09-16-unity-document-55/</link>
      <pubDate>Sat, 16 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/16/2023-09-16-unity-document-55/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;实例覆盖&#34;&gt;&lt;strong&gt;实例覆盖&lt;/strong&gt; &lt;a href=&#34;#%e5%ae%9e%e4%be%8b%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;实例覆盖&lt;/strong&gt;允许您在&lt;strong&gt;预制件&lt;/strong&gt;实例之间创建变化，同时仍将这些实例链接到相同的预制件资源。&lt;/p&gt;
&lt;p&gt;当您修改预制件资源时，所有实例中都会反映这些更改。但是，您还可以直接对单个实例进行修改。这将在该特定实例上创建一个&lt;strong&gt;实例覆盖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;例如，如果您有一个名为“机器人”的预制件资源，并将其放置在游戏的多个关卡中。但是，“机器人”的每个实例都具有不同的速度值和不同的音频剪辑。&lt;/p&gt;
&lt;p&gt;实例覆盖有四种不同的类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;覆盖属性的值&lt;/li&gt;
&lt;li&gt;添加组件&lt;/li&gt;
&lt;li&gt;移除组件&lt;/li&gt;
&lt;li&gt;添加子游戏对象&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;预制件实例有一些限制：您无法更改作为预制件一部分的&lt;strong&gt;游戏对象&lt;/strong&gt;的父对象，并且无法移除预制件中的游戏对象。但是，您可以将游戏对象停用，这是移除游戏对象的良好替代方法（这将被视为属性覆盖）。&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;检视面板&lt;/strong&gt;中，实例覆盖以&lt;strong&gt;加粗&lt;/strong&gt;的方式显示其名称标签，并在左侧边距中显示蓝色线条。当您为预制件实例添加新组件时，边距中的蓝色线会覆盖整个组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-16-unity-document-55/PrefabsOverridesIndicators1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;检视面板显示具有覆盖的“Is Trigger”属性和作为覆盖添加的刚体组件的预制件实例。&lt;/p&gt;
&lt;p&gt;在检视面板中，添加和删除的组件图标上还会带有加号和减号徽章，添加的游戏对象在层级视图中的图标上会有一个加号徽章。&lt;/p&gt;
&lt;p&gt;在层级视图中，具有覆盖或非默认值的预制件实例具有覆盖指示器，以显示它们已被编辑，Unity会在左侧边距显示与检视面板中实例覆盖的线条相同的蓝色线。有关详细信息，请参阅层级视图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-16-unity-document-55/PrefabsAddedObjectIndicator1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;层级视图显示作为覆盖添加的子游戏对象“GermOBlaster”的预制件实例。&lt;/p&gt;
&lt;h2 id=&#34;覆盖具有优先级&#34;&gt;覆盖具有优先级 &lt;a href=&#34;#%e8%a6%86%e7%9b%96%e5%85%b7%e6%9c%89%e4%bc%98%e5%85%88%e7%ba%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;预制件实例上的覆盖属性值始终优先于预制件资源中的值。这意味着，如果您更改了预制件资源的属性，则不会对已覆盖该属性的实例产生任何影响。&lt;/p&gt;
&lt;p&gt;如果对预制件资源进行更改后，未按预期更新所有实例，则应检查该属性是否在实例上进行了覆盖。最好只在必要时使用实例覆盖，因为如果在整个项目中存在大量的实例覆盖，很难确定对预制件资源的更改是否会对所有实例产生影响。&lt;/p&gt;
&lt;h2 id=&#34;对齐方式是特定于预制件实例的&#34;&gt;对齐方式是特定于预制件实例的 &lt;a href=&#34;#%e5%af%b9%e9%bd%90%e6%96%b9%e5%bc%8f%e6%98%af%e7%89%b9%e5%ae%9a%e4%ba%8e%e9%a2%84%e5%88%b6%e4%bb%b6%e5%ae%9e%e4%be%8b%e7%9a%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;预制件实例的&lt;strong&gt;对齐方式&lt;/strong&gt;是一个特殊情况，并且与其他属性处理方式不同。&lt;strong&gt;对齐方式&lt;/strong&gt;的值从预制件资源不会传递到预制件实例。这意味着，即使与预制件资源的对齐方式不同，预制件实例的对齐方式始终可以不做为显式实例覆盖。具体而言，对齐方式指的是预制件实例的&lt;strong&gt;根节点&lt;/strong&gt;上的&lt;strong&gt;位置&lt;/strong&gt;和&lt;strong&gt;旋转&lt;/strong&gt;属性，并且对于一个矩形变换也包括&lt;strong&gt;宽度&lt;/strong&gt;、&lt;strong&gt;高度&lt;/strong&gt;、&lt;strong&gt;边距&lt;/strong&gt;、&lt;strong&gt;锚点&lt;/strong&gt;和&lt;strong&gt;中心点&lt;/strong&gt;属性。&lt;/p&gt;
&lt;p&gt;这是因为几乎不可能要求多个预制实例具有相同的位置和旋转。更常见的情况是，您希望预制件实例具有不同的位置和旋转，因此Unity不会将这些视为预制件覆盖。&lt;/p&gt;
&lt;h2 id=&#34;未使用的覆盖&#34;&gt;未使用的覆盖 &lt;a href=&#34;#%e6%9c%aa%e4%bd%bf%e7%94%a8%e7%9a%84%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果声明实例覆盖的脚本被修改或删除，表示实例覆盖的数据可能会变得无用。如果发生这种情况，您可以删除未使用的覆盖数据。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Editing a Prefab in Prefab Mode(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/15/2023-09-15-unity-document-54/</link>
      <pubDate>Fri, 15 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/15/2023-09-15-unity-document-54/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;在预制件模式编辑&#34;&gt;在预制件模式编辑 &lt;a href=&#34;#%e5%9c%a8%e9%a2%84%e5%88%b6%e4%bb%b6%e6%a8%a1%e5%bc%8f%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要编辑一个**预制件（Prefab）资源，可以在预制件模式（Prefab Mode）**下打开它。预制件模式允许您单独查看和编辑预制件资源的内容，而不受在场景中的其他游戏对象的影响。在预制件模式中所做的更改会影响到该预制件的所有实例。&lt;/p&gt;
&lt;h2 id=&#34;进入和退出预制件模式&#34;&gt;进入和退出预制件模式 &lt;a href=&#34;#%e8%bf%9b%e5%85%a5%e5%92%8c%e9%80%80%e5%87%ba%e9%a2%84%e5%88%b6%e4%bb%b6%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以以&lt;strong&gt;孤立&lt;/strong&gt;方式或&lt;strong&gt;上下文&lt;/strong&gt;方式编辑预制件资源。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabContextVsIsolation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;左：以孤立方式编辑预制件。右：以上下文方式编辑预制件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;孤立方式：&lt;/strong&gt; 当您以孤立方式编辑预制件时，Unity会隐藏当前工作场景中的其他部分，您只能看到与预制件本身相关的游戏对象（以及可选的预设的&lt;strong&gt;编辑环境&lt;/strong&gt; - 见下文）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;上下文方式：&lt;/strong&gt; 当您以上下文方式编辑预制件时，当前工作场景的其他部分仍然可见，但无法进行编辑。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;在孤立方式下编辑&#34;&gt;在孤立方式下编辑 &lt;a href=&#34;#%e5%9c%a8%e5%ad%a4%e7%ab%8b%e6%96%b9%e5%bc%8f%e4%b8%8b%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以通过多种方式开始在预制件模式下编辑预制件。要打开一个预制件资源并在&lt;strong&gt;孤立方式&lt;/strong&gt;下编辑它，您可以按以下方式操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;双击项目窗口中的预制件资源&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;项目窗口&lt;/strong&gt;中选择一个预制件资源，并单击&lt;strong&gt;检视面板&lt;/strong&gt;中的&lt;strong&gt;打开预制件&lt;/strong&gt;按钮&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabAssetOpenPrefabButton.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在项目窗口中选择的预制件资源（左），以及检视面板中可见的打开预制件按钮（右）&lt;/p&gt;
&lt;p&gt;当您以孤立方式进入预制件模式时，Unity只在&lt;strong&gt;场景视图&lt;/strong&gt;和层级视图中显示该预制件的内容。在下面的图片中，预制件的根部是一个普通的&lt;strong&gt;游戏对象&lt;/strong&gt;-它没有蓝色的预制件实例图标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabsSceneAndHierarchyInPrefabMode.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在预制件模式下，&lt;strong&gt;场景视图&lt;/strong&gt;显示在顶部的面包屑导航条。最右边的条目是当前打开的预制件。使用面包屑导航条可以返回到之前打开的主场景或其他预制件资源。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabsBreadcrumbBar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在预制件模式下，场景视图顶部的面包屑导航条&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;层级视图&lt;/strong&gt;显示了一个预制件标题栏，显示当前打开的预制件。您可以使用标题栏中的返回箭头向后导航一步，相当于在场景视图的面包屑导航条中点击上一个导航项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabsBackArrow.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在层级视图的标题栏中的返回箭头，在预制件模式下可见&lt;/p&gt;
&lt;h3 id=&#34;在上下文方式编辑&#34;&gt;在上下文方式编辑 &lt;a href=&#34;#%e5%9c%a8%e4%b8%8a%e4%b8%8b%e6%96%87%e6%96%b9%e5%bc%8f%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;另外，您还可以通过预制件的实例打开预制件资源并以&lt;strong&gt;上下文&lt;/strong&gt;方式编辑。可以通过以下方式进行操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在层级视图中选择一个预制件实例，然后在检视面板中单击&lt;strong&gt;打开&lt;/strong&gt;按钮&lt;/li&gt;
&lt;li&gt;在层级视图中选择一个预制件实例，然后按下键盘上的&lt;strong&gt;P&lt;/strong&gt;键。这是默认的键盘绑定&lt;/li&gt;
&lt;li&gt;使用层级视图中预制件实例旁边的&lt;strong&gt;箭头按钮&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabInstanceInspectorOpenButton.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当选择预制件实例时，检视面板中的打开按钮&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabHierarchyOpenArrow.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;层级视图中预制件旁边的箭头按钮&lt;/p&gt;
&lt;p&gt;默认情况下，Unity以灰度显示上下文的视觉表示，以便将其与您编辑的预制件内容区分开。但是，您可以使用预制件栏中的**上下文：**控件将其设置为以下任何状态之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal&lt;/strong&gt; - 以正常颜色显示上下文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gray&lt;/strong&gt; - 以灰度显示上下文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hidden&lt;/strong&gt; - 完全隐藏上下文，只显示预制件内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabModeContextControl.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;场景视图顶部的预制件栏中的预制件模式控件，包括上下文控件和显示覆盖的切换&lt;/p&gt;
&lt;p&gt;您无法选择上下文中的游戏对象，它们也不会显示在层级视图中。这样，您可以专注于编辑预制件，而不会意外选择其他不相关的游戏对象，并且层级视图不会变得混乱。但是，在移动预制件内容中的游戏对象时，您可以使用Unity中的对齐功能对上下文中的游戏对象进行对齐，前提是上下文未设置为&lt;strong&gt;Hidden&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在上下文的预制件模式下，Unity在与其打开的预制件实例相匹配的位置显示预制件内容。这意味着，与预制件资源实际具有的位置和旋转值不同，您可能会预览预制件内容的根节点变换值。&lt;/p&gt;
&lt;p&gt;在上下文的预制件模式下，无法编辑这些值。如果您需要编辑它们，可以将预制件孤立打开，或在项目窗口中选择预制件资源并在检视面板中编辑这些值。&lt;/p&gt;
&lt;p&gt;除了根变换属性之外，您还可以覆盖预制件实例的其他属性，这可能使其外观与其所属的预制件资源相比发生重大变化。要从预制件实例预览这些覆盖值，在上下文的预制件模式下，在预制件栏中启用&lt;strong&gt;显示覆盖&lt;/strong&gt;切换。启用此设置时，预制件实例上覆盖的任何属性都会以相同方式在预制件上预览，并且无法编辑这些属性。要编辑这些属性，请再次禁用&lt;strong&gt;显示覆盖&lt;/strong&gt;切换。&lt;/p&gt;
&lt;h2 id=&#34;自动保存&#34;&gt;&lt;strong&gt;自动保存&lt;/strong&gt; &lt;a href=&#34;#%e8%87%aa%e5%8a%a8%e4%bf%9d%e5%ad%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Prefab模式在场景视图的右上角有一个&lt;strong&gt;自动保存&lt;/strong&gt;设置。当它被启用时，Unity会自动将您对预制件所做的任何更改保存到预制件资源中。&lt;strong&gt;自动保存&lt;/strong&gt;默认情况下是开启的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabsAutoSave.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在Prefab模式下，位于场景视图右上角的自动保存切换&lt;/p&gt;
&lt;p&gt;如果您想在不自动保存更改到预设资源的情况下进行更改，请禁用&lt;strong&gt;自动保存&lt;/strong&gt;复选框。在这种情况下，当您退出当前预制件的Prefab模式时，Unity会询问您是否要保存未保存的更改。如果在Prefab模式下编辑预制件出现了卡顿，关闭&lt;strong&gt;自动保存&lt;/strong&gt;可能会有所帮助。&lt;/p&gt;
&lt;h2 id=&#34;切换孤立模式和上下文模式&#34;&gt;&lt;strong&gt;切换孤立模式和上下文模式&lt;/strong&gt; &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e5%ad%a4%e7%ab%8b%e6%a8%a1%e5%bc%8f%e5%92%8c%e4%b8%8a%e4%b8%8b%e6%96%87%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您通过预制件资源打开预制件模式时，Unity会以孤立方式显示预制件的内容。然而，当您通过层级视图中的预制件实例打开预制件模式时，这将打开&lt;strong&gt;上下文方式的预制件模式&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;以这种方式打开预制件模式时，即使您并未编辑实例而是编辑预制件资源本身，您仍然可以在场景视图中看到预制件实例的上下文。例如，如果您通过场景中的预制件实例打开上下文方式的预制件模式，则可以在编辑预制件时看到该场景的环境。预制件也将以场景中的相同光照条件显示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabModeContextView.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;通过上下文方式打开的预制件，灰度显示的周围环境&lt;/p&gt;
&lt;p&gt;如果您有一个不想以上下文方式打开而是想以孤立方式打开的预制件实例，请按住&lt;strong&gt;Alt&lt;/strong&gt;键并单击&lt;strong&gt;打开&lt;/strong&gt;按钮或箭头按钮打开预制件模式。您还可以在&lt;strong&gt;快捷键&lt;/strong&gt;窗口中设置一个自定义快捷键，用于**阶段（Stage）&amp;gt; 孤立编辑预制件（Edit Prefab in Isolation）**命令。&lt;/p&gt;
&lt;h2 id=&#34;撤消&#34;&gt;&lt;strong&gt;撤消&lt;/strong&gt; &lt;a href=&#34;#%e6%92%a4%e6%b6%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在预制件模式下对预制件资源进行更改时，只能在仍在预制件模式下时撤消这些更改。一旦退出给定的预制件资源的预制件模式，与该预制件资源相关的编辑将不再出现在撤消历史记录中。&lt;/p&gt;
&lt;h2 id=&#34;编辑环境&#34;&gt;&lt;strong&gt;编辑环境&lt;/strong&gt; &lt;a href=&#34;#%e7%bc%96%e8%be%91%e7%8e%af%e5%a2%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以将一个场景分配为&lt;strong&gt;编辑环境&lt;/strong&gt;，以与孤立方式的预制件模式一起使用。这样，您可以选择在您选择的背景下编辑预制件，而不是在空场景中进行编辑。这对于查看预制件在特定场景中的外观非常有用。Unity仅在您以孤立方式打开预制件模式时使用此编辑环境。&lt;/p&gt;
&lt;p&gt;当在预制件模式下时，您无法选择分配为编辑环境的场景中的游戏对象，它们也不在层级视图中显示。这样，您可以专注于编辑预制件，而不会意外选择其他不相关的游戏对象，同时也不会导致层级视图混乱。&lt;/p&gt;
&lt;p&gt;要将场景设为编辑环境，请打开编辑器窗口（顶部菜单： &lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;strong&gt;编辑器&lt;/strong&gt;类别），转到&lt;strong&gt;预制件编辑环境&lt;/strong&gt;部分。对于“非UI”预制件，请使用&lt;strong&gt;常规环境&lt;/strong&gt;设置，对于UI预制件，请使用&lt;strong&gt;UI环境&lt;/strong&gt;设置。UI预制件是那些根部具有Rect Transform组件而不是常规Transform组件的预制件。对于与“非UI”组件相关的预制件，根据需求进行设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-15-unity-document-54/PrefabsEnvironmentSettings1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs Creating Prefabs(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/14/2023-09-14-unity-document-53/</link>
      <pubDate>Thu, 14 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/14/2023-09-14-unity-document-53/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;创建件预制&#34;&gt;创建件预制 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e4%bb%b6%e9%a2%84%e5%88%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在Unity的&lt;strong&gt;预制件（Prefab）系统中，预制件资源（Prefab Assets）充当模板。您可以在编辑器中创建预制件资源，并将它们保存为项目窗口中的资源。从预制件资源，您可以创建任意数量的预制件实例&lt;/strong&gt;。预制件实例可以在编辑器中创建并保存为您的**场景（Scenes）**的一部分，也可以在运行时实例化。&lt;/p&gt;
&lt;h2 id=&#34;创建预制资源&#34;&gt;创建预制资源 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e9%a2%84%e5%88%b6%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要创建预制件资源，从层级视图中将一个**GameObject（游戏对象）**拖拽到项目窗口中。GameObject及其所有组件和子对象将成为项目窗口中的新资源。预制件资源在项目窗口中以GameObject的缩略图视图或蓝色立方体预制件图标显示，具体取决于您如何设置项目窗口。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-14-unity-document-53/PrefabsInProjectWindow1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;项目窗口中显示两个预制件（“FatBlob”和“Key”）的双列视图（左）和单列视图（右）&lt;/p&gt;
&lt;p&gt;此创建预制件资源的过程还会将原始的GameObject转换为预制件实例。它现在是新创建的预制件资源的实例。预制件实例在层级视图中以蓝色文本显示，预制件的根GameObject以蓝色立方体预制件图标显示，而不是红色、绿色和蓝色的GameObject图标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-14-unity-document-53/PrefabInstanceInScene1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;创建多个预制件资源&#34;&gt;创建多个预制件资源 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%a4%9a%e4%b8%aa%e9%a2%84%e5%88%b6%e4%bb%b6%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要一次创建多个预制件资源，请将多个GameObject从层级视图拖拽到项目窗口中。此功能与上面段落中的操作相同。&lt;/p&gt;
&lt;p&gt;如果您将多个不是预制件的GameObject拖拽到项目窗口中，Unity将为每个GameObject创建新的原始预制件资源，而无需任何其他步骤。&lt;/p&gt;
&lt;p&gt;如果您拖拽到项目窗口的任何GameObject是现有的预制件变体或模型变体，Unity会显示一个对话框，询问您是否要创建新的预制件资源或从GameObject创建新的变体。此对话框的内容会根据您拖拽到项目窗口中的GameObject的数量和类型而变化。&lt;/p&gt;
&lt;h2 id=&#34;创建预制件实例&#34;&gt;创建预制件实例 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e9%a2%84%e5%88%b6%e4%bb%b6%e5%ae%9e%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以通过将预制件资源从项目视图拖拽到层级视图或&lt;strong&gt;场景视图&lt;/strong&gt;中，在编辑器中创建预制件资源的实例。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-14-unity-document-53/PrefabsDragIntoScene1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您还可以使用脚本在运行时创建预制件的实例。有关详细信息，请参阅创建预制件。&lt;/p&gt;
&lt;h2 id=&#34;替换预制件&#34;&gt;替换预制件 &lt;a href=&#34;#%e6%9b%bf%e6%8d%a2%e9%a2%84%e5%88%b6%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以通过从层级视图中拖拽一个新的GameObject，并将其放置在项目窗口中的现有预制件资源上，来替换预制件。&lt;/p&gt;
&lt;p&gt;如果您正在替换一个现有的预制件，Unity会尝试保留对预制件本身和预制件的各个部分（如子GameObject和组件）的引用。为了做到这一点，它会通过匹配新预制件和要替换的现有预制件之间的GameObject名称来进行匹配。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; &lt;em&gt;由于这种匹配只是根据名称进行的，如果预制件的层级结构中存在具有相同名称的多个GameObject，就无法预测哪一个会被匹配。因此，如果您需要确保在保存到现有预制件时保留引用，必须确保预制件内的所有GameObject具有唯一的名称。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;还要注意：&lt;/strong&gt; &lt;em&gt;当在现有预制件上保存时，如果预制件中的单个GameObject附加了多个相同类型的组件，也可能遇到类似的问题，即保留对现有组件的引用时无法预测将匹配到哪个组件。&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Prefabs(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/13/2023-09-13-unity-document-52/</link>
      <pubDate>Wed, 13 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/13/2023-09-13-unity-document-52/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;prefabs&#34;&gt;Prefabs &lt;a href=&#34;#prefabs&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-13-unity-document-52/PrefabsIntroScene.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Unity的&lt;strong&gt;预制件（Prefab）系统允许您创建、配置和存储一个完整的GameObject（游戏对象）&lt;/strong&gt;，包括它的所有组件、属性值和子游戏对象，作为一个可重复使用的资源。预制件资源充当可从中创建新的预制件实例的模板。&lt;/p&gt;
&lt;p&gt;当您想要在场景的多个位置或项目的多个场景中重复使用以特定方式配置的GameObject（例如非玩家角色（NPC）、道具或场景中的一部分）时，应将其转换为预制件。这比简单地复制和粘贴GameObject要好，因为预制件系统允许您自动将所有副本保持同步。&lt;/p&gt;
&lt;p&gt;对预制件资源所做的任何编辑都会自动反映在该预制件的实例中，从而使您能够轻松地在整个项目中进行广泛的更改，而不必反复对每个资源副本进行相同的编辑。&lt;/p&gt;
&lt;p&gt;您可以将预制件嵌套在其他预制件中，以创建易于在多个级别进行编辑的复杂对象层次结构。&lt;/p&gt;
&lt;p&gt;然而，这并不意味着所有预制件实例都必须相同。如果您希望某些预制件实例与其他实例不同，可以在个别预制件实例上覆盖设置。您还可以创建预制件的变体，这样您可以将一组覆盖设置组合在一起，形成预制件的有意义的变体。&lt;/p&gt;
&lt;p&gt;在您希望在运行时实例化在场景开始时不存在的GameObject时，也应该使用预制件。例如，为了在游戏过程中的正确时刻使道具、特效、投射物或NPC出现。&lt;/p&gt;
&lt;p&gt;预制件的常见用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;环境资源 - 例如在关卡周围多次使用某种类型的树（如上图所示）。&lt;/li&gt;
&lt;li&gt;非玩家角色（NPC） - 例如在游戏中多次出现某种类型的机器人，跨多个关卡。它们可以在移动速度或发出的声音等方面（使用&lt;em&gt;覆盖设置&lt;/em&gt;）有所不同。&lt;/li&gt;
&lt;li&gt;投射物 - 例如，海盗的大炮每次发射时都会实例化一个炮弹预制件。&lt;/li&gt;
&lt;li&gt;玩家的主角 - 玩家的预制件可能会放置在游戏的每个关卡（单独的场景）的起始点。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;预制件检视器预览&#34;&gt;预制件检视器预览 &lt;a href=&#34;#%e9%a2%84%e5%88%b6%e4%bb%b6%e6%a3%80%e8%a7%86%e5%99%a8%e9%a2%84%e8%a7%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您选择一个预制件并在&lt;strong&gt;检视器&lt;/strong&gt;中查看时，检视器中的资源预览窗格会显示预制件的预览。如果预制件的大小小于8MB，则资源预览窗格会显示预制件的交互式预览，您可以在资源预览窗格内旋转预制件。&lt;/p&gt;
&lt;p&gt;如果预制件的大小大于8MB，默认情况下，资源预览会显示预制件的静态预览。要查看大于8MB的预制件的交互式预览，请单击资源预览窗格内的任意位置。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Static GameObjects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/12/2023-09-12-unity-document-51/</link>
      <pubDate>Tue, 12 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/12/2023-09-12-unity-document-51/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;保存工作&#34;&gt;保存工作 &lt;a href=&#34;#%e4%bf%9d%e5%ad%98%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity将大多数保存的信息划分为场景更改或整个项目更改。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要保存当前场景和整个项目的所有更改，请转到&lt;strong&gt;文件&lt;/strong&gt; &amp;gt; &lt;strong&gt;保存&lt;/strong&gt;（或&lt;strong&gt;另存为&lt;/strong&gt;）。&lt;/li&gt;
&lt;li&gt;要保存整个项目的更改，但不保存场景更改，请转到&lt;strong&gt;文件&lt;/strong&gt; &amp;gt; &lt;strong&gt;保存项目&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果您在预制件模式下进行编辑，在&lt;strong&gt;文件&lt;/strong&gt; &amp;gt; &lt;strong&gt;保存&lt;/strong&gt;中保存的只是对打开的预制件的更改。退出预制件模式以保存更广泛的更改。&lt;/p&gt;
&lt;p&gt;Unity在您在编辑器中工作时会自动保存一些信息。有关详情，请参阅自动保存。&lt;/p&gt;
&lt;h2 id=&#34;场景更改&#34;&gt;场景更改 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;场景更改包括对场景中的**GameObject（游戏对象）**进行的修改。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果您添加、移动或删除一个GameObject。&lt;/li&gt;
&lt;li&gt;如果您在&lt;strong&gt;检视器&lt;/strong&gt;窗口中更改了一个GameObject的参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;整个项目更改&#34;&gt;整个项目更改 &lt;a href=&#34;#%e6%95%b4%e4%b8%aa%e9%a1%b9%e7%9b%ae%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity中的整个项目更改适用于整个项目，而不是特定的场景。例如，如果您创建一个临时场景来测试更改，您可以保存项目而不是场景。&lt;/p&gt;
&lt;p&gt;整个项目更改包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;项目设置&lt;/strong&gt;：当您保存项目时，Unity会将对项目设置的更改保存在&lt;code&gt;ProjectSettings&lt;/code&gt;文件夹中的以下文件中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;输入&lt;/strong&gt;：&lt;code&gt;InputManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标签和层级&lt;/strong&gt;：&lt;code&gt;TagManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;音频&lt;/strong&gt;：&lt;code&gt;AudioManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;时间&lt;/strong&gt;：&lt;code&gt;TimeManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;玩家&lt;/strong&gt;：&lt;code&gt;ProjectSettings.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;物理&lt;/strong&gt;：&lt;code&gt;DynamicsManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2D物理&lt;/strong&gt;：&lt;code&gt;Physics2DSettings.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;质量&lt;/strong&gt;：&lt;code&gt;QualitySettings.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图形&lt;/strong&gt;：&lt;code&gt;GraphicsSettings.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络&lt;/strong&gt;：&lt;code&gt;NetworkManager.asset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;编辑器&lt;/strong&gt;：&lt;code&gt;EditorUserSettings.asset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;构建设置&lt;/strong&gt;：Unity会将对构建设置的更改保存在&lt;code&gt;Library&lt;/code&gt;文件夹中的&lt;code&gt;EditorBuildSettings.asset&lt;/code&gt;中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更改的资源&lt;/strong&gt;：当您保存整个项目的设置时，Unity会保存任何未保存的资源。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：某些资源类型在检视器中有一个&lt;strong&gt;应用&lt;/strong&gt;按钮。除非您选择&lt;strong&gt;应用&lt;/strong&gt;，否则Unity不会保存这些更改。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;脏资源&lt;/strong&gt;：Unity会保存&lt;strong&gt;脏资源&lt;/strong&gt;，这些资源是在软件中修改但尚未保存的磁盘上的文件。您可以使用自定义的编辑器和脚本来标记资源为脏资源的一种方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用SerializedObject类和SerializedProperties。&lt;/li&gt;
&lt;li&gt;使用Undo类记录修改。&lt;/li&gt;
&lt;li&gt;使用SetDirty。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;自动保存&#34;&gt;自动保存 &lt;a href=&#34;#%e8%87%aa%e5%8a%a8%e4%bf%9d%e5%ad%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity会自动保存以下更改到您的磁盘：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;新资源&lt;/strong&gt;：在创建新资源时，Unity会自动保存新资源，但您需要稍后保存更改。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源导入设置&lt;/strong&gt;：对于大多数资源要生效的更改，您需要在检视器窗口中选择&lt;strong&gt;应用&lt;/strong&gt;。选择&lt;strong&gt;应用&lt;/strong&gt;时，Unity会保存更改。&lt;/li&gt;
&lt;li&gt;烘培数据：当您的项目中有设置为烘培的数据时，Unity会在烘培完成后保存此数据。包括：
&lt;ul&gt;
&lt;li&gt;烘培的光照数据&lt;/li&gt;
&lt;li&gt;烘培的导航数据&lt;/li&gt;
&lt;li&gt;烘培的遮挡剔除数据&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;脚本执行顺序更改&lt;/strong&gt;：在选择&lt;strong&gt;应用&lt;/strong&gt;后，Unity会将此数据保存到每个脚本的&lt;code&gt;.meta&lt;/code&gt;文件中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Static GameObjects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/11/2023-09-11-unity-document-50/</link>
      <pubDate>Mon, 11 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/11/2023-09-11-unity-document-50/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;静态gameobject&#34;&gt;静态GameObject &lt;a href=&#34;#%e9%9d%99%e6%80%81gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果一个GameObject在运行时不移动，那么它被称为&lt;strong&gt;静态GameObject&lt;/strong&gt;。如果一个GameObject在运行时会移动，那么它被称为&lt;strong&gt;动态GameObject&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在Unity中，许多系统可以在编辑器中预先计算静态GameObject的信息。因为这些GameObject不会移动，所以这些计算结果在运行时仍然有效。这意味着Unity可以节省运行时的计算，并潜在地提高性能。&lt;/p&gt;
&lt;h2 id=&#34;static-editor-flags属性&#34;&gt;Static Editor Flags属性 &lt;a href=&#34;#static-editor-flags%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-11-unity-document-50/GameObjectStaticDropDownMenu1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在检视器中查看GameObject时显示的Static Editor Flags复选框和下拉菜单&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Static Editor Flags&lt;/strong&gt;属性列出了一些Unity系统，这些系统可以在它们的预计算中包含静态GameObject。使用下拉菜单定义哪些系统包含GameObject在它们的预计算中。在运行时设置Static Editor Flags属性不会对这些系统产生影响。&lt;/p&gt;
&lt;p&gt;只在需要知道该GameObject的系统的预计算中包含GameObject。在不需要知道该GameObject的系统的预计算中包含GameObject可能会导致计算浪费、数据文件过大或意外行为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Static Editor Flags&lt;/strong&gt;属性位于GameObject的&lt;strong&gt;检视器&lt;/strong&gt;中，位于右上角的极限位置。它包括一个复选框，将值设置为&lt;strong&gt;Everything&lt;/strong&gt;或&lt;strong&gt;Nothing&lt;/strong&gt;，以及一个下拉菜单，可让您选择要包含哪些值。&lt;/p&gt;
&lt;p&gt;要在代码中设置Static Editor Flags属性，请使用GameObjectUtility.SetStaticEditorFlags API和GameObject.isStatic。要在代码中获取Static Editor Flags属性的状态，请使用GameObjectUtility.GetStaticEditorFlags API。&lt;/p&gt;
&lt;p&gt;可用的属性如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Nothing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不在任何系统的预计算中包含GameObject。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Everything&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在下面的所有系统的预计算中包含GameObject。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Contribute GI&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您启用此属性，Unity将在&lt;strong&gt;全局光照计算&lt;/strong&gt;中包含目标Mesh Renderer。这些计算在烘焙时的预计算照明数据过程中进行。ContributeGI属性公开了ReceiveGI属性。只有在为目标&lt;strong&gt;场景&lt;/strong&gt;启用了烘焙全局照明或实时全局照明（Enlighten）等全局照明设置时，ContributeGI属性才生效。Unity博客上有关使用光探头进行静态照明的帖子提供了有关使用此标志的指导。有关更多上下文，请参阅此教程以设置内置渲染管线和Unity中的照明。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Occluder Static&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将GameObject标记为遮挡剔除系统中的静态遮挡者。有关更多信息，请参阅遮挡剔除系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Occludee Static&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将GameObject标记为遮挡剔除系统中的静态被遮挡者。有关更多信息，请参阅遮挡剔除系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Batching Static&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将GameObject的**Mesh（网格）**与其他合格的网格合并，以潜在地降低运行时渲染成本。有关更多信息，请参阅静态批处理的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation Static&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在预计算导航数据时包含GameObject。这个工作流已被弃用，您不能在这里设置&lt;strong&gt;Navigation Static&lt;/strong&gt;。但是，您仍然可以在代码中使用&lt;code&gt;StaticEditorFlags.NavigationStatic&lt;/code&gt;来设置该选项。请使用&lt;strong&gt;NavMesh Modifier&lt;/strong&gt;组件和&lt;strong&gt;NavMesh Surfaces&lt;/strong&gt;代替&lt;strong&gt;Navigation Static&lt;/strong&gt;标志。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Off Mesh Link Generation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在预计算导航数据时，尝试生成从此GameObject开始的OffMesh Link。这个工作流已被弃用，您不能从此菜单中设置&lt;strong&gt;Off Mesh Link Generation&lt;/strong&gt;。但是，您仍然可以在代码中使用&lt;code&gt;StaticEditorFlags.OffMeshLinkGeneration&lt;/code&gt;来设置该选项。请使用&lt;strong&gt;NavMesh Modifier&lt;/strong&gt;组件和&lt;strong&gt;NavMesh Surfaces&lt;/strong&gt;代替&lt;strong&gt;Off Mesh Link Generation&lt;/strong&gt;标志。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reflection Probe&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在预计算为**Type（类型）&lt;strong&gt;设置为&lt;/strong&gt;Baked（烘焙）&lt;strong&gt;的&lt;/strong&gt;Reflection Probes（反射探头）**的数据时，包含此GameObject。有关更多信息，请参阅反射探头。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Tags(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/10/2023-09-10-unity-document-49/</link>
      <pubDate>Sun, 10 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/10/2023-09-10-unity-document-49/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;标签&#34;&gt;标签 &lt;a href=&#34;#%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;标签是您可以分配给一个或多个**GameObject（游戏对象）**的引用词。例如，您可以为玩家控制的角色定义“Player”标签，为非玩家控制的角色定义“Enemy”标签。您可以为玩家可以在场景中收集的物品定义一个“Collectable”标签。您可以使用任何您想要的单词作为标签。您甚至可以使用短语，但您可能需要扩大检视器以查看标签的完整名称。一个GameObject只能被分配一个标签。&lt;/p&gt;
&lt;p&gt;标签可帮助您为脚本目的识别GameObject。它们确保您无需手动将GameObject添加到脚本的公开属性中，从而在将相同的脚本代码用于多个GameObject时节省时间。&lt;/p&gt;
&lt;p&gt;标签对于需要确定玩家是否与敌人、道具或可收集物品等进行交互的触发器在Collider控制脚本中非常有用。&lt;/p&gt;
&lt;p&gt;您可以使用GameObject.FindWithTag函数来查找包含您指定的标签的任何GameObject。以下示例使用&lt;code&gt;GameObject.FindWithTag()&lt;/code&gt;。它在具有“Respawn”标签的GameObject位置上实例化&lt;code&gt;respawnPrefab&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Example&lt;/span&gt; : MonoBehaviour {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; GameObject respawnPrefab;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; GameObject respawn;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Start() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (respawn == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            respawn = GameObject.FindWithTag(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Respawn&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; GameObject;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;创建新的标签&#34;&gt;创建新的标签 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%96%b0%e7%9a%84%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在&lt;strong&gt;检视器&lt;/strong&gt;中，标签和层级的下拉菜单显示在GameObject的名称下方。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-10-unity-document-49/tag-dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要创建一个新的标签，选择&lt;strong&gt;Add Tag&amp;hellip;&lt;/strong&gt;。这将在检视器中打开标签和层级管理器。一旦您为标签命名，就无法再次更改其名称。&lt;/p&gt;
&lt;p&gt;层级与标签类似，但用于定义Unity如何渲染场景中的GameObject。有关更多信息，请参阅层级页面上的文档。&lt;/p&gt;
&lt;h2 id=&#34;应用标签&#34;&gt;应用标签 &lt;a href=&#34;#%e5%ba%94%e7%94%a8%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;检视器&lt;/strong&gt;在GameObject名称的下方显示标签和层级的下拉菜单。要将现有标签应用于GameObject，请打开&lt;strong&gt;Tags&lt;/strong&gt;下拉菜单，并选择要应用的标签。GameObject现在与此标签关联。&lt;/p&gt;
&lt;h2 id=&#34;了解内置标签&#34;&gt;了解内置标签 &lt;a href=&#34;#%e4%ba%86%e8%a7%a3%e5%86%85%e7%bd%ae%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;编辑器包含以下内置标签，这些标签不在标签管理器中显示：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;* __Untagged__
* __Respawn__
* __Finish__
* __EditorOnly__
* __MainCamera__
* __Player__
* __GameController__
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;编辑器内部缓存带有&lt;strong&gt;MainCamera&lt;/strong&gt;标签的GameObject。当您访问Camera.main时，编辑器会从其缓存中返回第一个有效的结果。请参阅Camera.main以了解更多信息。&lt;/p&gt;
&lt;p&gt;带有&lt;strong&gt;EditorOnly&lt;/strong&gt;标签的GameObject在构建游戏时将被销毁。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Deactivate GameObjects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/09/2023-09-09-unity-document-48/</link>
      <pubDate>Sat, 09 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/09/2023-09-09-unity-document-48/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;停用游戏对象&#34;&gt;停用游戏对象 &lt;a href=&#34;#%e5%81%9c%e7%94%a8%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要在场景中暂时移除&lt;strong&gt;GameObject（游戏对象）&lt;/strong&gt;，您可以将该GameObject标记为非活动状态。&lt;/p&gt;
&lt;p&gt;要做到这一点，导航到&lt;strong&gt;检视器&lt;/strong&gt;窗口，并清除GameObject名称左侧的复选框。非活动的GameObject在层级视图窗口中的名称会显示为模糊。&lt;/p&gt;
&lt;p&gt;要通过脚本停用GameObject，可以使用SetActive方法。要查看对象是否活动或非活动，请检查activeSelf属性。&lt;/p&gt;
&lt;p&gt;如果您停用一个GameObject，附加到它上面的协程也会停止。&lt;/p&gt;
&lt;h2 id=&#34;停用父gameobject&#34;&gt;停用父GameObject &lt;a href=&#34;#%e5%81%9c%e7%94%a8%e7%88%b6gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您停用一个父GameObject，您也会停用所有子GameObject，因为停用会覆盖所有子GameObject上的activeSelf设置。当您重新激活父GameObject时，子GameObject会返回到其原始状态。&lt;/p&gt;
&lt;p&gt;要查看场景中的子GameObject是否处于活动状态，请使用activeInHierarchy属性。&lt;/p&gt;
&lt;p&gt;注意：如果检查一个子GameObject的activeSelf属性，它并不总是准确的，因为即使您将其设置为活动状态，您可能已经将其中一个父GameObject设置为非活动状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-09-unity-document-48/deactivating2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;所选GameObject（Cube）被设置为活动状态，但在您将其父GameObject设置为活动状态之前，它仍然是非活动状态。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Create components with scripts(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/08/2023-09-08-unity-document-47/</link>
      <pubDate>Fri, 08 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/08/2023-09-08-unity-document-47/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;使用脚本创建组件&#34;&gt;使用脚本创建组件 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e5%88%9b%e5%bb%ba%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;组件可以为&lt;strong&gt;GameObject（游戏对象）添加功能。要自定义和添加组件，您可以编写自己的脚本&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;要使用脚本创建组件，您需要编写脚本，然后将其附加到一个GameObject上。附加到GameObject上的脚本会显示在GameObject的&lt;strong&gt;检视器&lt;/strong&gt;窗口中，因为编辑器将其视为内置组件。&lt;/p&gt;
&lt;p&gt;有关如何创建脚本的信息，请参阅创建和使用脚本。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Primitive and placeholder objects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/07/2023-09-07-unity-document-46/</link>
      <pubDate>Thu, 07 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/07/2023-09-07-unity-document-46/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;基本和占位对象&#34;&gt;基本和占位对象 &lt;a href=&#34;#%e5%9f%ba%e6%9c%ac%e5%92%8c%e5%8d%a0%e4%bd%8d%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在Unity编辑器中，您可以使用任何模型制作软件创建的形状的3D模型。您可以在编辑器中创建多种类型的对象，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;立方体（Cube）&lt;/li&gt;
&lt;li&gt;球体（Sphere）&lt;/li&gt;
&lt;li&gt;胶囊体（Capsule）&lt;/li&gt;
&lt;li&gt;圆柱体（Cylinder）&lt;/li&gt;
&lt;li&gt;平面（Plane）&lt;/li&gt;
&lt;li&gt;四边形（Quad）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要向场景添加一个基本对象，请选择&lt;strong&gt;GameObject（游戏对象）&lt;/strong&gt; &amp;gt; &lt;strong&gt;3D Object（3D对象）&lt;/strong&gt;，然后选择所需的基本对象。这会将默认的基本对象添加到您的局部坐标空间，您可以在检视器窗口中使用变换工具来更改对象的大小和位置。&lt;/p&gt;
&lt;p&gt;这些对象可以用于建模特定物品，或者您可以使用它们来创建占位符和原型进行测试。本页面详细说明了每种基本对象的常见用途，但您可以根据项目的需求来使用这些对象。&lt;/p&gt;
&lt;h2 id=&#34;立方体&#34;&gt;立方体 &lt;a href=&#34;#%e7%ab%8b%e6%96%b9%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitiveCube.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认的立方体基本对象是一个白色立方体，有六个面，每个面是1 x 1单位。立方体的纹理使得每个面都是重复的。立方体常用于构建墙壁、柱子、箱子、阶梯和其他类似的物体，或者作为开发过程中的有用占位符。例如，由于立方体的边长为一个单位，如果您在其附近添加一个立方体并比较大小，可以检查导入到场景中的网格的比例。&lt;/p&gt;
&lt;h2 id=&#34;球体&#34;&gt;球体 &lt;a href=&#34;#%e7%90%83%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitiveSphere.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认的球体基本对象直径为一个单位（即半径为0.5单位）。球体的纹理采用标准的球面UV映射方式，使得纹理围绕球体展开，并且顶部和底部的边缘在每个极点处收缩。球体适用于表示球体、行星和投射物。您可以使用半透明的球体来创建表示效果半径的GUI设备。&lt;/p&gt;
&lt;h2 id=&#34;圆柱体&#34;&gt;圆柱体 &lt;a href=&#34;#%e5%9c%86%e6%9f%b1%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitiveCylinder.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认的圆柱体基本对象高度为两个单位，直径为一个单位。圆柱体的纹理使得图像在圆柱体的中心体形状上重复，并且在两个扁平的端面上分别重复。圆柱体适用于创建柱子、杆子和车轮。 Unity中的默认碰撞器形状是胶囊体（Unity没有原生的圆柱体碰撞器）。要获得准确的圆柱体物理碰撞器，需要在建模程序中创建一个圆柱体形状的网格，并将网格碰撞器（Mesh Collider）附加上去。&lt;/p&gt;
&lt;h2 id=&#34;胶囊体&#34;&gt;胶囊体 &lt;a href=&#34;#%e8%83%b6%e5%9b%8a%e4%bd%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitiveCapsule.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;胶囊体基本对象是一个带有两个半球状顶端的圆柱体。默认的胶囊体直径为一个单位，高度为两个单位（主体为一个单位，每个顶端为0.5单位）。它的纹理使图像在一个圆柱体上重复，并且在两个半球体的极点处边缘收缩。胶囊体是原型的有用占位符，因为圆形物体的物理特性比盒子更适合某些任务。&lt;/p&gt;
&lt;h2 id=&#34;四边形&#34;&gt;四边形 &lt;a href=&#34;#%e5%9b%9b%e8%be%b9%e5%bd%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitiveQuad.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认的四边形基本对象是一个边长为一个单位的正方形，由两个三角形组成，并且位于局部坐标空间的xy平面上。您可以将四边形用作图像或电影的显示屏。您还可以使用四边形来实现简单的GUI和信息显示、粒子、精灵和代替实体对象在远处的纹理图像。&lt;/p&gt;
&lt;h2 id=&#34;平面&#34;&gt;平面 &lt;a href=&#34;#%e5%b9%b3%e9%9d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/PrimitivePlane.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;默认的平面基本对象是一个边长为十个单位的平面正方形，由200个三角形组成，并位于局部坐标空间的xz平面上。该正方形纹理使得整个图像在正方形内完整显示。&lt;/p&gt;
&lt;p&gt;平面适用于大多数平面表面，如地板和墙壁。您可以使用平面来展示特效、图像或电影，但使用四边形基本对象可能更简单。&lt;/p&gt;
&lt;p&gt;平面的纹理只能从上方渲染。如果您在平面的下方，平面的纹理将是透明的。&lt;/p&gt;
&lt;h1 id=&#34;2d基本对象类型&#34;&gt;2D基本对象类型 &lt;a href=&#34;#2d%e5%9f%ba%e6%9c%ac%e5%af%b9%e8%b1%a1%e7%b1%bb%e5%9e%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity支持导入不同的图像格式，如.png或Adobe的.psd，这为您在创建和准备2D资产时提供了额外的选项。但是，如果您想快速创建原型，Unity提供了2D基本对象（GameObjects）来帮助您构建项目，而无需准备和导入自己的资产。&lt;/p&gt;
&lt;p&gt;本页面详细说明了可用的2D基本对象选项的尺寸和常见用途。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：您的项目必须安装了2D Sprite包，才能启用以下2D基本对象选项。当您选择了2D项目模板创建一个项目时，2D Sprite包会自动安装，或者您可以通过包管理器安装2D Sprite包。&lt;/p&gt;
&lt;h2 id=&#34;创建2d基本对象&#34;&gt;创建2D基本对象 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba2d%e5%9f%ba%e6%9c%ac%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要创建这些预设的2D基本对象之一，选择&lt;strong&gt;GameObject（游戏对象）&lt;/strong&gt; &amp;gt; &lt;strong&gt;2D Object（2D对象）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Sprites（精灵）&lt;/strong&gt; 或 &lt;strong&gt;Create（创建）&lt;/strong&gt; &amp;gt; &lt;strong&gt;2D（2D）&lt;/strong&gt; &amp;gt; &lt;strong&gt;Sprites（精灵）&lt;/strong&gt; ，然后选择其中一个可用的选项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;三角形（Triangle）&lt;/li&gt;
&lt;li&gt;正方形（Square）&lt;/li&gt;
&lt;li&gt;圆（Circle）&lt;/li&gt;
&lt;li&gt;胶囊体（Capsule）&lt;/li&gt;
&lt;li&gt;等角菱形（Isometric Diamond）&lt;/li&gt;
&lt;li&gt;六边形（平顶）（Hexagon Flat-Top）&lt;/li&gt;
&lt;li&gt;六边形（尖锐顶）（Hexagon Point-Top）&lt;/li&gt;
&lt;li&gt;9切片（9-Sliced）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;默认精灵尺寸&#34;&gt;默认精灵尺寸 &lt;a href=&#34;#%e9%bb%98%e8%ae%a4%e7%b2%be%e7%81%b5%e5%b0%ba%e5%af%b8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;2D基本对象的默认精灵大小为256 x 256个像素，像素每单位（PPU）大小为256个像素。这种尺寸和PPU值的组合使得精灵的大小等于场景中的一个Unity单位。有两个例外 - 胶囊体基本对象的大小为256 x 512像素（1:2单位），等角菱形基本对象的大小为256 x 128像素（1:0.5单位）。&lt;/p&gt;
&lt;h2 id=&#34;triangle&#34;&gt;Triangle &lt;a href=&#34;#triangle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-triangle.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;三角形（Triangle）&lt;/strong&gt; 2D基本对象是一个白色的等腰三角形，底边大小为一个Unity单位。您可以将其用作场景中各种元素的占位符，例如障碍物或用户界面的部分。您可以为基本对象添加&lt;strong&gt;Polygon Collider 2D&lt;/strong&gt;组件，使其与其他GameObject和2D物理系统进行交互。&lt;/p&gt;
&lt;h2 id=&#34;square&#34;&gt;Square &lt;a href=&#34;#square&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-square.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正方形（Square）&lt;/strong&gt; 2D基本对象是一个白色的正方形，大小为1 x 1个Unity单位。您可以将其用作各种元素的占位符，例如障碍物或平台。您可以为基本对象添加&lt;strong&gt;Box Collider 2D&lt;/strong&gt;组件，使其与其他GameObject和2D物理系统进行交互。您可以选择9切片选项以获得一个更具可伸缩性且可以动态调整大小的精灵。&lt;/p&gt;
&lt;h2 id=&#34;circle&#34;&gt;Circle &lt;a href=&#34;#circle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-circle.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;圆（Circle）&lt;/strong&gt; 2D基本对象是一个白色的圆形，直径为一个Unity单位。您可以将其用作场景中各种元素的占位符，例如障碍物或道具。您可以为基本对象添加&lt;strong&gt;Circle Collider 2D&lt;/strong&gt;，使其与其他GameObject和2D物理系统进行交互。&lt;/p&gt;
&lt;h2 id=&#34;capsule&#34;&gt;Capsule &lt;a href=&#34;#capsule&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-capsule.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;胶囊体（Capsule）&lt;/strong&gt; 2D基本对象是一个白色的胶囊体，大小为1 x 2个单位。您可以将其用作场景中各种元素的占位符，例如障碍物、道具或一个角色的代替。您可以为基本对象添加&lt;strong&gt;Capsule Collider 2D&lt;/strong&gt;，使其与其他GameObject和2D物理系统进行交互。&lt;/p&gt;
&lt;h2 id=&#34;isometric-diamond&#34;&gt;Isometric Diamond &lt;a href=&#34;#isometric-diamond&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-isodiamond.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;等角菱形（Isometric Diamond）&lt;/strong&gt; 2D基本对象是一个白色的菱形精灵，大小为1 x 0.5个单位。此精灵通常用作放置在等角图块地图上的瓦片的占位符。该精灵的顶部和底部的像素稍微裁剪，以改善平铺效果。&lt;/p&gt;
&lt;h2 id=&#34;hexagon-flat-top&#34;&gt;Hexagon Flat-Top &lt;a href=&#34;#hexagon-flat-top&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-hex-flattop.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;六边形（平顶）（Hexagon Flat-Top）&lt;/strong&gt; 2D基本对象是一个常规六边形，宽度为一个单位，带有平顶的平面朝向顶部和底部。该精灵通常用作放置在六角形平顶图块地图上的瓦片的占位符。该精灵的左侧和右侧的像素稍微裁剪，以改善平铺效果。&lt;/p&gt;
&lt;h2 id=&#34;hexagon-point-top&#34;&gt;Hexagon Point-Top &lt;a href=&#34;#hexagon-point-top&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-hex-pointtop.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;六边形（尖锐顶）（Hexagon Point-Top）&lt;/strong&gt; 2D基本对象是一个常规六边形，高度为一个单位，尖锐的顶部朝向顶部和底部。该精灵通常用作放置在六角形尖顶图块地图上的瓦片的占位符。该精灵的顶部和底部的像素稍微裁剪，以改善平铺效果。&lt;/p&gt;
&lt;h2 id=&#34;9-sliced&#34;&gt;9-Sliced &lt;a href=&#34;#9-sliced&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-07-unity-document-46/2D-primitive-9-sliced.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9切片（9-Sliced）&lt;/strong&gt; 2D基本对象是一个带有圆角的白色正方形，大小为1 x 1个单位。该精灵已经进行了9切片处理，边框在每边的64个像素。此精灵主要与Sprite Renderer组件的&lt;strong&gt;Sliced（切片）和Tiled（平铺）绘制模式一起使用。您可以将9切片精灵用作场景和项目中各种元素的灵活占位符（有关更多信息，请参阅9切片精灵）。您可以添加一个启用了Auto Tiling（自动平铺）的Box Collider 2D&lt;/strong&gt;，使精灵与其他对象和2D物理系统进行交互。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Use components(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/06/2023-09-06-unity-document-45/</link>
      <pubDate>Wed, 06 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/06/2023-09-06-unity-document-45/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;使用组件&#34;&gt;使用组件 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用不同的组件来改变或添加功能到您的&lt;strong&gt;游戏对象（GameObjects）&lt;/strong&gt;。您可以使用&lt;strong&gt;检视器（Inspector）窗口来更改任何组件的属性，或者您可以使用脚本（scripts）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有关如何使用脚本与组件一起使用的更多信息，请参阅组件脚本参考页面。&lt;/p&gt;
&lt;h2 id=&#34;添加组件&#34;&gt;添加组件 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以通过组件菜单将组件添加到所选的游戏对象上。要添加一个刚体（Rigidbody）组件，请选择游戏对象，然后从菜单中选择&lt;strong&gt;组件（Component）&lt;/strong&gt; &amp;gt; &lt;strong&gt;物理（Physics）&lt;/strong&gt; &amp;gt; &lt;strong&gt;刚体（Rigidbody）&lt;/strong&gt;。检视器会显示刚体组件的属性。如果您在选择空的游戏对象时按下&lt;strong&gt;播放（Play）&lt;/strong&gt;，游戏对象的变换的Y轴位置会下降。这是因为在Unity中的物理系统会使游戏对象在重力下下落。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-06-unity-document-45/RigidBodyGO1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您还可以在&lt;strong&gt;组件（Component）浏览器中添加组件。要打开组件浏览器，请在检视器中选择添加组件（Add Component）&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-06-unity-document-45/ComponentBrowser1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以在浏览器中按类别导航组件，也可以使用搜索框按名称查找组件。&lt;/p&gt;
&lt;p&gt;您可以将任意数量或组合的组件附加到单个游戏对象上。某些组件与其他组件结合使用效果更好。例如，刚体组件与**碰撞器（Collider）**配合使用。&lt;/p&gt;
&lt;p&gt;有关特定组件的更多信息，请参阅相关的组件参考页面。您还可以在Unity中通过在检视器中选择组件标题的帮助图标（&lt;strong&gt;?&lt;/strong&gt;）来访问组件的参考页面。&lt;/p&gt;
&lt;h2 id=&#34;编辑组件&#34;&gt;编辑组件 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您将组件附加到游戏对象上时，组件的属性会包含默认值。您可以在编辑器中编辑这些值，而构建游戏时，或者在运行游戏时在脚本中编辑。&lt;/p&gt;
&lt;p&gt;属性有两种主要类型：值类型和引用类型。&lt;/p&gt;
&lt;p&gt;您可以在检视器中编辑值类型属性。值类型有各种类型，包括文本、开关和下拉框。&lt;/p&gt;
&lt;p&gt;对于引用类型属性，您可以从项目视图中将文件拖放到属性中，或者使用属性上的对象选择器（圆形图标）。引用类型属性可以引用其他类型的组件、游戏对象或资源。&lt;/p&gt;
&lt;p&gt;有关不同属性类型的更多信息，请参阅编辑属性页面。&lt;/p&gt;
&lt;p&gt;下图显示了一个带有&lt;strong&gt;音频源（Audio Source）组件的游戏对象。检视器中的音频源&lt;/strong&gt;的值显示了您可以调整组件的各个方面以适应您的项目的方式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-06-unity-document-45/AudioReference1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;组件上下文菜单命令&#34;&gt;组件上下文菜单命令 &lt;a href=&#34;#%e7%bb%84%e4%bb%b6%e4%b8%8a%e4%b8%8b%e6%96%87%e8%8f%9c%e5%8d%95%e5%91%bd%e4%bb%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;右键单击组件以显示上下文菜单，其中包含几个有用的命令。&lt;/p&gt;
&lt;p&gt;同样的命令也可以从检视器窗口中组件面板右上角的三点菜单（⋮）中找到。&lt;/p&gt;
&lt;p&gt;下表描述了可用的命令，以便您调整组件：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;命令：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;重置（Reset）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;恢复组件属性在最近一次编辑会话之前的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;移除组件（Remove Component）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从游戏对象中移除组件。&lt;strong&gt;注意&lt;/strong&gt;：某些组件的组合是相互依赖的（例如，Hinge Joint只能附加到一个Rigidbody上）；如果您尝试移除其他组件所依赖的组件，会显示警告消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;上移（Move Up）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在检视器中将组件上移。您也可以在检视器中拖放组件来重新排序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;下移（Move Down）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在检视器中将组件下移。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;复制组件（Copy Component）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;复制组件的类型和当前属性设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;粘贴为新组件（Paste Component As New）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将复制的组件属性设置粘贴为新组件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;粘贴组件值（Paste Component Values）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将复制的组件属性设置粘贴到另一个相同类型的组件中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;测试属性&#34;&gt;测试属性 &lt;a href=&#34;#%e6%b5%8b%e8%af%95%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在**播放模式（Play Mode）&lt;strong&gt;下，您可以在检视器中更改组件的属性。这样可以让您看到属性的不同值如何影响游戏玩法。例如，您可以尝试不同的跳跃高度。如果您在脚本中创建了一个&lt;/strong&gt;跳跃高度（Jump Height）**属性，您可以进入播放模式，更改该值，然后按下跳跃按钮查看效果。然后，不需要退出播放模式，您可以再次更改该值并在几秒内查看结果。退出播放模式时，属性将恢复为播放模式之前的值。通过这种工作流程，您可以以更短的时间进行实验、调整和完善游戏玩法。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects Introduction to components(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/05/2023-09-05-unity-document-44/</link>
      <pubDate>Tue, 05 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/05/2023-09-05-unity-document-44/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;组件介绍&#34;&gt;组件介绍 &lt;a href=&#34;#%e7%bb%84%e4%bb%b6%e4%bb%8b%e7%bb%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;**组件（Components）&lt;strong&gt;是每个&lt;/strong&gt;游戏对象（GameObject）**的功能部分。组件包含属性，您可以编辑这些属性来定义游戏对象的行为。有关组件和游戏对象之间的关系的更多信息，请参阅游戏对象（GameObjects）。&lt;/p&gt;
&lt;p&gt;要在**检视器（Inspector）&lt;strong&gt;窗口中查看附加到游戏对象的组件列表，请在&lt;/strong&gt;层级（Hierarchy）&lt;strong&gt;窗口或&lt;/strong&gt;场景（Scene）**视图中选择一个游戏对象。&lt;/p&gt;
&lt;p&gt;您可以将许多组件附加到一个游戏对象上，但每个游戏对象必须有一个且只有一个变换组件（Transform component）。这是因为变换组件决定了游戏对象的位置、旋转和缩放。要创建一个空的游戏对象，请选择&lt;strong&gt;游戏对象（GameObject）&lt;/strong&gt; &amp;gt; &lt;strong&gt;创建空对象（Create Empty）&lt;/strong&gt;。当您选择新的游戏对象时，检视器会显示默认值的变换组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-05-unity-document-44/EmptyGO1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/04/2023-09-04-unity-document-43/</link>
      <pubDate>Mon, 04 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/04/2023-09-04-unity-document-43/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;transforms&#34;&gt;Transforms &lt;a href=&#34;#transforms&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;变换（Transform）存储了游戏对象（GameObject）的位置（Position）&lt;/strong&gt;、&lt;strong&gt;旋转（Rotation）&lt;/strong&gt;、**缩放（Scale）**和父子关系状态。每个游戏对象都附加有一个变换组件：无法删除变换或创建没有变换组件的游戏对象。&lt;/p&gt;
&lt;h2 id=&#34;变换组件&#34;&gt;变换组件 &lt;a href=&#34;#%e5%8f%98%e6%8d%a2%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;变换组件确定了场景中每个游戏对象的&lt;strong&gt;位置&lt;/strong&gt;、&lt;strong&gt;旋转&lt;/strong&gt;和&lt;strong&gt;缩放&lt;/strong&gt;。每个游戏对象都有一个变换。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-04-unity-document-43/TransformExample4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以更改变换轴的颜色（以及其他UI元素） (&lt;strong&gt;菜单：&lt;strong&gt;Unity &amp;gt; Preferences ，然后选择&lt;/strong&gt;颜色和键位&lt;/strong&gt;面板）。&lt;/p&gt;
&lt;h2 id=&#34;属性&#34;&gt;属性 &lt;a href=&#34;#%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;变换在x、y和z坐标上的位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;旋转&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;围绕x轴、y轴和z轴的旋转度数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缩放&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;沿x轴、y轴和z轴的缩放比例。值“1”表示原始大小（导入游戏对象时的大小）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Unity根据变换的父对象来计算变换的&lt;strong&gt;位置&lt;/strong&gt;、&lt;strong&gt;旋转&lt;/strong&gt;和&lt;strong&gt;缩放&lt;/strong&gt;值。如果变换没有父对象，则在世界空间中计算这些属性的值。&lt;/p&gt;
&lt;h2 id=&#34;编辑变换&#34;&gt;编辑变换 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e5%8f%98%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在2D空间中，您可以只在x轴或y轴上操作变换。在3D空间中，您可以沿着x轴、y轴和z轴操作变换。在Unity中，这些轴分别由红色、绿色和蓝色表示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-04-unity-document-43/TransformExample2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;有三种主要的方法可以编辑变换的属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在场景视图中。&lt;/li&gt;
&lt;li&gt;在检视器窗口中。&lt;/li&gt;
&lt;li&gt;在您的C#脚本中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;场景视图&#34;&gt;场景视图 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在场景视图中，您可以使用移动、旋转和缩放工具来修改变换。这些工具位于Unity编辑器的左上角。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-04-unity-document-43/Transform-Tools.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以在场景中的任何游戏对象上使用变换工具。当您选择一个游戏对象时，工具&lt;strong&gt;Gizmo&lt;/strong&gt;会在其内部显示。Gizmo的外观取决于您选择的工具。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-04-unity-document-43/TransformGizmo35.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当您在三个Gizmo轴之一上点击并拖动时，该轴的颜色会变成黄色。在拖动鼠标时，游戏对象沿着所选轴移动、旋转或缩放。释放鼠标按钮后，轴仍然处于选定状态。&lt;/p&gt;
&lt;p&gt;在移动游戏对象时，您可以将移动锁定在特定平面上（即改变两个轴并保持第三个轴不变）。要为每个平面激活锁定，请选择移动Gizmo中心周围的三个小彩色方块。当您选择方块时，对应轴会被锁定（例如，选择蓝色方块可以锁定z轴）。&lt;/p&gt;
&lt;h3 id=&#34;检视器窗口&#34;&gt;检视器窗口 &lt;a href=&#34;#%e6%a3%80%e8%a7%86%e5%99%a8%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在&lt;strong&gt;检视器&lt;/strong&gt;窗口中，您可以使用变换组件来编辑所选游戏对象的变换属性。在组件中，有两种编辑变换属性值的方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;手动在属性值字段中输入数值。这对于非常具体的调整很有用。&lt;/li&gt;
&lt;li&gt;单击数值字段并向上或向下拖动以增加或减少数值。这对于不太具体的调整很有用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;c脚本&#34;&gt;C#脚本 &lt;a href=&#34;#c%e8%84%9a%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用Transform API通过脚本编辑游戏对象的变换。&lt;/p&gt;
&lt;h2 id=&#34;游戏对象分组&#34;&gt;游戏对象分组 &lt;a href=&#34;#%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1%e5%88%86%e7%bb%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在Unity中，您可以将游戏对象分组为父子层级关系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;父游戏对象有与其连接的其他游戏对象，这些对象具有相同的变换属性。&lt;/li&gt;
&lt;li&gt;子游戏对象连接到另一个游戏对象，并从中继承变换属性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在Hierarchy窗口中，子游戏对象直接显示在父游戏对象下方，并在列表中缩进。您可以选择折叠图标来隐藏或显示父游戏对象的子游戏对象。&lt;/p&gt;
&lt;p&gt;子游戏对象的移动、旋转和缩放与父游戏对象完全一致。子游戏对象也可以拥有自己的子游戏对象。一个游戏对象可以有多个子游戏对象，但只能有一个父游戏对象。&lt;/p&gt;
&lt;p&gt;这些多级的父子关系形成了变换层级。层级中位于顶部的游戏对象（即层级中唯一没有父对象的游戏对象）被称为&lt;strong&gt;根&lt;/strong&gt;游戏对象。&lt;/p&gt;
&lt;p&gt;要创建一个父游戏对象，将Hierarchy窗口中的任何游戏对象拖到另一个游戏对象上。这将在两个游戏对象之间创建一个父子关系。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-04-unity-document-43/ParentingExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;编辑父子游戏对象的变换&#34;&gt;编辑父子游戏对象的变换 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e7%88%b6%e5%ad%90%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1%e7%9a%84%e5%8f%98%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以将游戏对象分组为父子层级关系。&lt;/p&gt;
&lt;p&gt;任何子游戏对象的变换值都是相对于父游戏对象的变换值显示的。这些值被称为局部坐标。在场景构建中，通常使用子游戏对象的局部坐标就足够了。在游戏中，通常需要找到它们的全局坐标或它们在世界空间中的确切位置。变换组件的脚本API具有用于局部和全局位置、旋转和缩放的单独属性，并且可以在局部坐标和全局坐标之间进行转换。&lt;/p&gt;
&lt;p&gt;提示：当将变换设置为父对象时，在添加子变换之前，将父对象的位置设置为&amp;lt;0,0,0&amp;gt;是很有用的。这意味着子变换的局部坐标将与全局坐标相同，这样就更容易确保子变换位于正确的位置。&lt;/p&gt;
&lt;h2 id=&#34;变换和缩放&#34;&gt;变换和缩放 &lt;a href=&#34;#%e5%8f%98%e6%8d%a2%e5%92%8c%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;变换的缩放确定了您建模应用程序中的网格尺寸与Unity中的网格尺寸之间的差异。网格在Unity中的尺寸（因此变换的缩放）非常重要，特别是在物理仿真中。默认情况下，物理引擎假设世界空间中的一个单位对应于一米。如果一个游戏对象非常大，它看起来可以以“慢动作”的方式下落；这是因为您正在观察一个非常大的游戏对象下落了一个很长的距离。&lt;/p&gt;
&lt;p&gt;以下三个因素会影响您的游戏对象的缩放：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您在3D建模应用程序中的网格尺寸。&lt;/li&gt;
&lt;li&gt;游戏对象导入设置中的网格缩放因子设置。&lt;/li&gt;
&lt;li&gt;变换组件中的缩放值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不要在变换组件中调整游戏对象的缩放。如果您以实际尺寸创建模型，就不必更改变换的缩放。您还可以调整导入网格的缩放比例，因为一些优化是基于导入尺寸进行的。可以在每个网格的导入设置中进行设置。创建一个具有调整缩放值的游戏对象可能会降低性能。&lt;/p&gt;
&lt;p&gt;注意：更改缩放会影响子变换的位置。例如，将父变换缩放为(0,0,0)会将所有子变换相对于父变换定位在(0,0,0)的位置。&lt;/p&gt;
&lt;h2 id=&#34;非均匀缩放&#34;&gt;非均匀缩放 &lt;a href=&#34;#%e9%9d%9e%e5%9d%87%e5%8c%80%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;非均匀缩放是指变换的缩放在x、y和z轴上具有不同的值；例如(2, 4, 2)。相比之下，均匀缩放在x、y和z轴上具有相同的值；例如(3, 3, 3)。非均匀缩放在一些特定情况下可能有用，但它的行为与均匀缩放不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;某些组件不完全支持非均匀缩放。例如，某些组件具有由半径属性定义的圆形或球体元素，例如Sphere Collider、Capsule Collider、Light和Audio Source。这意味着圆形形状在非均匀缩放下仍然保持圆形，而不是椭圆形。&lt;/li&gt;
&lt;li&gt;如果子游戏对象有一个非均匀缩放的父游戏对象，并相对于该父游戏对象进行了旋转，它可能会出现倾斜或“扭曲”的外观。有些组件在非均匀缩放时支持简单的非均匀缩放，但在这种扭曲情况下无法正确工作。例如，扭曲的Box Collider与渲染网格的形状不匹配。&lt;/li&gt;
&lt;li&gt;非均匀缩放的父游戏对象的子游戏对象在旋转时不会自动更新其缩放。结果是，当您最终更新缩放时，子游戏对象的形状可能会突然改变，例如，如果子游戏对象与父游戏对象分离。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay GameObjects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/03/2023-09-03-unity-document-42/</link>
      <pubDate>Sun, 03 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/03/2023-09-03-unity-document-42/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;gameobjects&#34;&gt;GameObjects &lt;a href=&#34;#gameobjects&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;**游戏对象（GameObject）**是Unity编辑器中最重要的概念。&lt;/p&gt;
&lt;p&gt;在游戏中，每个对象都是一个&lt;strong&gt;游戏对象&lt;/strong&gt;，从角色和可收集的物品到灯光、相机和特效。然而，游戏对象本身不能做任何事情；在它成为角色、环境或特效之前，您需要给它添加属性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-03-unity-document-42/GameObjectsExamples.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;游戏对象&lt;/strong&gt;是Unity中代表角色、道具和场景的基本对象。它们本身并不能实现很多功能，但它们可以作为&lt;strong&gt;组件&lt;/strong&gt;的容器，来实现功能。&lt;/p&gt;
&lt;p&gt;要给游戏对象添加属性，使其成为灯光、树木或相机，您需要向其添加组件。根据您想要创建的对象类型，可以将不同组合的组件添加到游戏对象上。&lt;/p&gt;
&lt;p&gt;Unity有许多不同的内置组件类型，您还可以使用Unity脚本API创建自己的组件。&lt;/p&gt;
&lt;p&gt;例如，通过将灯光组件附加到游戏对象上，就可以创建一个灯光对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-03-unity-document-42/GameObjectLightExample1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;一个实心的立方体对象具有**网格过滤器（Mesh Filter）&lt;strong&gt;和&lt;/strong&gt;网格渲染器（Mesh Renderer）&lt;strong&gt;组件，用于绘制立方体的表面，以及一个&lt;/strong&gt;盒形碰撞器（Box Collider）**组件，用于以物理方式表示对象的实体体积。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-03-unity-document-42/GameObjectCubeExample1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;详细信息&#34;&gt;详细信息 &lt;a href=&#34;#%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个游戏对象始终附加有一个变换（Transform）组件（用于表示位置和方向），无法删除该组件。其他赋予对象功能的组件可以从编辑器的&lt;strong&gt;组件&lt;/strong&gt;菜单或脚本中添加。在&lt;strong&gt;GameObject &amp;gt; 3D Object&lt;/strong&gt;菜单中还有许多有用的预制对象（基本形状、相机等）可供使用，参见原始对象。&lt;/p&gt;
&lt;p&gt;由于游戏对象是Unity的重要组成部分，因此有很多关于它们的详细手册内容。请参阅以下章节，以了解如何在Unity中使用游戏对象：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变换&lt;/li&gt;
&lt;li&gt;组件简介&lt;/li&gt;
&lt;li&gt;使用组件&lt;/li&gt;
&lt;li&gt;原始和占位符对象&lt;/li&gt;
&lt;li&gt;使用脚本创建组件&lt;/li&gt;
&lt;li&gt;关闭游戏对象&lt;/li&gt;
&lt;li&gt;标签&lt;/li&gt;
&lt;li&gt;静态游戏对象&lt;/li&gt;
&lt;li&gt;保存工作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以从游戏对象脚本参考页面了解有关通过&lt;strong&gt;脚本&lt;/strong&gt;来控制游戏对象的更多信息。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Customizing new scene creation(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/02/2023-09-02-unity-document-41/</link>
      <pubDate>Sat, 02 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/02/2023-09-02-unity-document-41/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;场景模板设置&#34;&gt;场景模板设置 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要访问场景模板的项目设置，打开&lt;strong&gt;项目设置&lt;/strong&gt;窗口 (菜单： &lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;) ，然后从类别列表中选择&lt;strong&gt;场景模板&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-09-02-unity-document-41/scene-template-settings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;新场景设置&#34;&gt;新场景设置 &lt;a href=&#34;#%e6%96%b0%e5%9c%ba%e6%99%af%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;新场景设置（1）控制从文件菜单中创建新场景时的操作：(&lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;New Scene&lt;/strong&gt;) 或使用&lt;strong&gt;Ctrl/Cmd + n&lt;/strong&gt;快捷键。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选项：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;新建场景菜单&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;新建场景对话框&lt;/td&gt;
&lt;td&gt;打开新建场景对话框。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;内置场景&lt;/td&gt;
&lt;td&gt;创建一个新场景而无需打开新建场景对话框。新场景是项目的基本模板的副本。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;默认类型设置&#34;&gt;默认类型设置 &lt;a href=&#34;#%e9%bb%98%e8%ae%a4%e7%b1%bb%e5%9e%8b%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;默认类型&lt;/strong&gt;设置控制Unity在从场景模板创建新场景时是否默认克隆特定类型的资源。&lt;/p&gt;
&lt;p&gt;要使Unity默认克隆特定类型的资源，请在列表中为该资源类型的&lt;strong&gt;克隆&lt;/strong&gt;选项（2）启用。&lt;/p&gt;
&lt;p&gt;要使Unity默认引用特定类型的资源，请在列表中为该资源类型的&lt;strong&gt;克隆&lt;/strong&gt;选项（2）禁用。&lt;/p&gt;
&lt;p&gt;要设置其他类型资源的默认克隆/引用行为，请为&lt;strong&gt;其他所有类型&lt;/strong&gt;（3）启用/禁用&lt;strong&gt;克隆&lt;/strong&gt;选项。&lt;/p&gt;
&lt;p&gt;要从列表中移除一个资源类型，请单击&lt;strong&gt;移除&lt;/strong&gt;按钮（4）。&lt;/p&gt;
&lt;p&gt;要将一个资源类型添加到列表中，请执行以下操作之一：- 在&lt;strong&gt;添加类型&lt;/strong&gt;字段（5）中输入具体的资源类型。- 单击&lt;strong&gt;浏览&lt;/strong&gt;按钮（6）打开搜索窗口，可以在其中查找并选择特定的资源类型。&lt;/p&gt;
&lt;p&gt;然后单击&lt;strong&gt;添加&lt;/strong&gt;按钮（7）将该资源类型添加到列表中。&lt;/p&gt;
&lt;p&gt;要恢复为Unity的默认资源类型列表和设置，请单击&lt;strong&gt;重置默认值&lt;/strong&gt;按钮（8）。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Customizing new scene creation(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/09/01/2023-09-01-unity-document-40/</link>
      <pubDate>Fri, 01 Sep 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/09/01/2023-09-01-unity-document-40/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;自定义新场景创建&#34;&gt;自定义新场景创建 &lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%96%b0%e5%9c%ba%e6%99%af%e5%88%9b%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要在Unity从模板实例化新的&lt;strong&gt;场景&lt;/strong&gt;时运行自定义代码，请创建一个场景模板管道脚本，并将其连接到模板。每次从模板创建新场景时，Unity还会创建管道脚本的新实例。&lt;/p&gt;
&lt;p&gt;要将脚本连接到模板：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查模板以编辑其属性。&lt;/li&gt;
&lt;li&gt;将&lt;strong&gt;场景模板管道&lt;/strong&gt;属性设置为指向您的场景模板管道脚本。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您还可以使用&lt;code&gt;SceneTemplateAsset.templatePipeline&lt;/code&gt;方法通过C#将脚本连接到模板。&lt;/p&gt;
&lt;p&gt;场景模板管道脚本必须派生自[&lt;code&gt;ISceneTemplatePipeline&lt;/code&gt;]接口或[&lt;code&gt;SceneTemplatePipelineAdapter&lt;/code&gt;]。它应该实现您要对其进行反应的事件；例如，下面的代码中的&lt;code&gt;BeforeTemplateInstantiation&lt;/code&gt;或&lt;code&gt;AfterTemplateInstantiation&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;示例：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.SceneTemplate;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine.SceneManagement;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DummySceneTemplatePipeline&lt;/span&gt; : ISceneTemplatePipeline
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; BeforeTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; isAdditive, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; sceneName)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (sceneTemplateAsset)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Before Template Pipeline {sceneTemplateAsset.name} isAdditive: {isAdditive} sceneName: {sceneName}&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; AfterTemplateInstantiation(SceneTemplateAsset sceneTemplateAsset, Scene scene, &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; isAdditive, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; sceneName)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (sceneTemplateAsset)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;After Template Pipeline {sceneTemplateAsset.name} scene: {scene} isAdditive: {isAdditive} sceneName: {sceneName}&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;场景模板实例化顺序&#34;&gt;场景模板实例化顺序 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf%e5%ae%9e%e4%be%8b%e5%8c%96%e9%a1%ba%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您从具有可克隆依赖项的模板创建新场景时，Unity执行几个文件操作。其中大多数操作会触发Unity中的事件，您可以在&lt;strong&gt;脚本&lt;/strong&gt;中监听并做出反应。&lt;/p&gt;
&lt;p&gt;实例化顺序如下所示：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;单击“新场景”对话框中的“创建”按钮。Unity调用以下内容：
&lt;ul&gt;
&lt;li&gt;场景模板资产。&lt;/li&gt;
&lt;li&gt;模板场景。这是与模板相关联的Unity场景。&lt;/li&gt;
&lt;li&gt;新场景。这是模板场景的新实例。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unity触发模板资产的&lt;code&gt;ISceneTemplatePipeline.BeforeTemplateInstantiation&lt;/code&gt;事件，并将资产绑定到触发它的&lt;code&gt;ISceneTemplatePipeline&lt;/code&gt;脚本。&lt;/li&gt;
&lt;li&gt;Unity触发&lt;code&gt;SceneTemplate.NewTemplateInstantiating&lt;/code&gt;事件。&lt;/li&gt;
&lt;li&gt;Unity创建一个与模板场景相同的新场景副本。&lt;/li&gt;
&lt;li&gt;Unity创建一个与新场景同名的文件夹，并将所有可克隆的依赖项复制到该文件夹中。&lt;/li&gt;
&lt;li&gt;Unity在内存中打开新场景，并触发以下事件：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EditorSceneManager.sceneOpening&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MonoBehavior.OnValidate&lt;/code&gt;（对所有实现此事件的GameObject）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorSceneManager.sceneOpened&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unity重新映射对所有克隆资产的引用，以便新场景指向克隆资源。&lt;/li&gt;
&lt;li&gt;Unity保存新场景，并触发以下事件：
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EditorSceneManager.sceneSaving&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorSceneManager.sceneSaved&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Unity触发模板资产的&lt;code&gt;ISceneTemplatePipeline.AfterTemplateInstantiation&lt;/code&gt;事件，并将资产绑定到触发它的&lt;code&gt;ISceneTemplatePipeline&lt;/code&gt;脚本。&lt;/li&gt;
&lt;li&gt;Unity触发&lt;code&gt;SceneTemplate.NewTemplateInstantiated&lt;/code&gt;事件。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Editing scene templates(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/30/2023-08-30-unity-document-39/</link>
      <pubDate>Wed, 30 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/30/2023-08-30-unity-document-39/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;编辑场景模板&#34;&gt;编辑场景模板 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要编辑一个&lt;strong&gt;场景&lt;/strong&gt;模板，选择它在Project窗口中，然后在Inspector窗口中打开它。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当您首次创建一个空的场景模板时，必须编辑其属性以将其与一个场景关联起来，然后才能使用它。从活动场景或现有场景资源创建的模板具有一些默认设置的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-30-unity-document-39/scene-template-inspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;场景模板的&lt;strong&gt;检视器&lt;/strong&gt;窗口包含以下部分：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;详细信息&lt;/strong&gt;：指定模板使用的场景，并包含在“新场景”对话框中显示的模板描述。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缩略图&lt;/strong&gt;：提供用于模板的预览图像的选项。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;场景模板管道&lt;/strong&gt;：指定在Unity从模板创建新场景时要运行的可选自定义脚本。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;依赖项&lt;/strong&gt;：列出模板场景的依赖项，并指定Unity在从模板创建新场景时是否克隆它们。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;详细信息&#34;&gt;详细信息 &lt;a href=&#34;#%e8%af%a6%e7%bb%86%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用详细信息部分来指定模板使用的场景，并控制模板在“新场景”对话框中的显示方式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-30-unity-document-39/scene-template-inspector-details.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Template Scene&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定要用作模板的场景。这可以是项目中的任何场景。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;模板的名称。在此处输入的名称将显示在“新场景”对话框中。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;模板的描述。在此处输入的描述将显示在“新场景”对话框中。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pin in New Scene Dialog&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控制此模板是否在“新场景”对话框中被固定。固定的模板始终显示在&lt;strong&gt;项目中的场景模板&lt;/strong&gt;列表的顶部。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;缩略图&#34;&gt;缩略图 &lt;a href=&#34;#%e7%bc%a9%e7%95%a5%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;缩略图部分包含为模板创建预览图像的选项。预览图像将显示在“新场景”对话框中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-30-unity-document-39/scene-template-inspector-thumbnail.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性：&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述：&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Texture&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定要用作此模板缩略图的纹理资源。您可以使用项目中的任何纹理资源。如果不指定纹理，模板将使用默认的场景模板资源图标。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;[Thumbnail Preview]&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果有缩略图纹理，则显示模板的缩略图纹理。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Snapshot&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;提供有关为此模板捕捉缩略图图像的选项。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;View&lt;/strong&gt;选项&lt;/td&gt;
&lt;td&gt;指定是捕捉“Main Camera”视图还是“Game View”视图。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Take Snapshot&lt;/strong&gt;按钮&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;场景模板管道&#34;&gt;场景模板管道 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf%e7%ae%a1%e9%81%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用这些属性向此模板添加一个&lt;strong&gt;场景模板管道&lt;/strong&gt;脚本。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-30-unity-document-39/scene-template-inspector-pipeline.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;场景模板管道脚本让您可以在从模板创建新场景时执行自定义代码。详见自定义新场景创建。&lt;/p&gt;
&lt;h3 id=&#34;依赖项&#34;&gt;依赖项 &lt;a href=&#34;#%e4%be%9d%e8%b5%96%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;该部分列出模板场景的所有&lt;strong&gt;依赖项&lt;/strong&gt;。您可以在从模板创建新场景时指定每个依赖项是否要进行&lt;strong&gt;克隆&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;要通过名称搜索依赖项，请在搜索栏中输入文本。&lt;/p&gt;
&lt;p&gt;要对&lt;strong&gt;依赖项&lt;/strong&gt;列表排序：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单击&lt;strong&gt;依赖项&lt;/strong&gt;标题，按照依赖项名称的字母顺序进行排序。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;类型&lt;/strong&gt;标题，按照依赖项的类型进行排序。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;克隆&lt;/strong&gt;标题，按照已克隆和未克隆的依赖项进行排序。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-30-unity-document-39/Scene-template-inspector-dependencies.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;对于列表中的每个依赖项，切换&lt;strong&gt;克隆&lt;/strong&gt;选项来选择是否克隆依赖项。如果克隆依赖项，将创建一个副本。如果引用依赖项，则对原始依赖项的所有更改都将影响该依赖项。&lt;/p&gt;
&lt;p&gt;当您从模板创建新场景时，Unity会检查模板场景是否具有可克隆的依赖项。如果是，Unity会创建一个与新场景同名的文件夹，并将任何克隆的依赖放入该文件夹中。&lt;/p&gt;
&lt;p&gt;有关克隆和引用依赖项的更多信息，请参阅模板和场景依赖项。&lt;/p&gt;
&lt;p&gt;要指定Unity默认克隆哪些类型的资产，请编辑场景模板项目设置。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Creating scene templates(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/29/2023-08-29-unity-document-38/</link>
      <pubDate>Tue, 29 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/29/2023-08-29-unity-document-38/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;创建场景模板&#34;&gt;创建场景模板 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以通过以下几种方式创建新的&lt;strong&gt;场景&lt;/strong&gt;模板：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建一个空模板。&lt;/li&gt;
&lt;li&gt;从现有场景资源创建模板。&lt;/li&gt;
&lt;li&gt;从当前场景创建模板。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;创建模板后，您可以编辑其属性或从模板创建新场景。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;提示：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在从场景创建模板之前，创建一个与场景同名的文件夹，并将您想要克隆的任何资产放入其中。当您创建模板时，Unity会自动为这些资产启用&lt;strong&gt;Clone&lt;/strong&gt;属性。有关详细信息，请参阅编辑场景模板。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;创建一个空场景模板&#34;&gt;创建一个空场景模板 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e7%a9%ba%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以创建空的场景模板，并稍后进行配置。空模板在“新场景”对话框中不会显示，直到您编辑其属性以将场景资产与其关联。&lt;/p&gt;
&lt;p&gt;要在当前项目文件夹中创建空场景模板：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从菜单中选择&lt;strong&gt;Assets &amp;gt; Create &amp;gt; Scene Template&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要在特定项目文件夹中创建空场景模板：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;执行以下操作之一：&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;Project&lt;/strong&gt;窗口中，右键单击要打开上下文菜单的文件夹。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;Project&lt;/strong&gt;窗口中打开文件夹，并右键单击资源窗格以打开上下文菜单。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;Create &amp;gt; Scene Template&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;从现有场景资源创建模板&#34;&gt;从现有场景资源创建模板 &lt;a href=&#34;#%e4%bb%8e%e7%8e%b0%e6%9c%89%e5%9c%ba%e6%99%af%e8%b5%84%e6%ba%90%e5%88%9b%e5%bb%ba%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以将任何现有场景转换为场景模板。在从现有场景创建模板后，您可能希望编辑其属性，以指定Unity在从模板创建新场景时克隆其哪些依赖项。&lt;/p&gt;
&lt;p&gt;要从现有场景资源创建模板，请打开&lt;strong&gt;Project&lt;/strong&gt;窗口，然后执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;右键单击场景资源以打开上下文菜单，然后选择&lt;strong&gt;Create &amp;gt; Scene Template from Scene&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择场景资源，然后从主菜单中选择&lt;strong&gt;Assets &amp;gt; Create &amp;gt; Scene Template from Scene&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;从当前场景创建模板&#34;&gt;从当前场景创建模板 &lt;a href=&#34;#%e4%bb%8e%e5%bd%93%e5%89%8d%e5%9c%ba%e6%99%af%e5%88%9b%e5%bb%ba%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要从当前场景创建场景模板，请从菜单中选择&lt;strong&gt;File &amp;gt; Save As Scene Template&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果有未保存的更改，Unity会在保存模板之前提示您保存场景。&lt;/p&gt;
&lt;p&gt;在从当前场景创建模板后，您可能希望编辑其属性，以指定Unity在从模板创建新场景时克隆其哪些依赖项。&lt;/p&gt;
&lt;h2 id=&#34;从c脚本创建模板&#34;&gt;从C#脚本创建模板 &lt;a href=&#34;#%e4%bb%8ec%e8%84%9a%e6%9c%ac%e5%88%9b%e5%bb%ba%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以从C# &lt;strong&gt;脚本&lt;/strong&gt;创建场景模板。&lt;/p&gt;
&lt;p&gt;要创建一个空的场景模板，请使用CreateSceneTemplate方法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SceneTemplate.CreateSceneTemplate(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; sceneTemplatePath)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;要从现有场景创建模板，请使用&lt;strong&gt;CreateTemplateFromScene&lt;/strong&gt;方法。Unity会自动将场景与模板关联，并提取场景的依赖项。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SceneTemplate.CreateTemplateFromScene(SceneAsset sourceSceneAsset, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; sceneTemplatePath);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Scene Templates(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/28/2023-08-28-unity-document-37/</link>
      <pubDate>Mon, 28 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/28/2023-08-28-unity-document-37/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;场景模板&#34;&gt;场景模板 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;为了创建新场景，Unity会复制&lt;strong&gt;场景&lt;/strong&gt;模板。将场景模板视为预配置的场景，其中包含您想要开始使用的所有内容。例如，缺省的Basic模板通常包含一个&lt;strong&gt;相机&lt;/strong&gt;和一个灯光。&lt;/p&gt;
&lt;p&gt;您可以创建自己的场景模板，以定制在项目中可以创建的新场景类型。例如，您可以为游戏中的每个关卡创建模板，以便每个参与项目的人都可以从正确的资产和配置开始创建场景。&lt;/p&gt;
&lt;p&gt;您可以从任何Unity场景创建模板。创建模板后，可以根据它创建任意数量的新场景。与场景一样，大多数场景模板都是存储在项目中的资源。&lt;/p&gt;
&lt;p&gt;本页面将解释重要的场景模板概念。有关创建、编辑和管理场景模板的更多信息，请参阅以下页面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建场景模板：描述创建场景模板的不同方法。&lt;/li&gt;
&lt;li&gt;编辑场景模板：解释如何编辑场景模板属性。&lt;/li&gt;
&lt;li&gt;自定义新场景创建：解释如何将脚本附加到场景模板，以便在Unity从模板创建场景时运行自定义代码。&lt;/li&gt;
&lt;li&gt;场景模板设置：描述场景模板的&lt;strong&gt;项目设置&lt;/strong&gt;。这些设置中的大多数控制Unity在从模板创建新场景时如何关闭和引用场景依赖项。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;重要概念&#34;&gt;重要概念 &lt;a href=&#34;#%e9%87%8d%e8%a6%81%e6%a6%82%e5%bf%b5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;内置模板与用户定义模板&#34;&gt;内置模板与用户定义模板 &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e6%a8%a1%e6%9d%bf%e4%b8%8e%e7%94%a8%e6%88%b7%e5%ae%9a%e4%b9%89%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;大多数场景模板都是用户定义的，意味着您可以根据自己的场景创建它们。用户定义的场景模板是Unity存储在项目中的资源。&lt;/p&gt;
&lt;p&gt;Unity还为每种项目类型提供了内置模板。例如，某些项目类型包括一个创建带有相机和灯光的场景的Basic模板，以及一个创建空场景的Empty模板。&lt;/p&gt;
&lt;p&gt;内置模板与其他模板不同，因为它们不是存储在项目中的资源，您无法修改它们。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;某些Unity包可能还包括安装包时安装的场景模板。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;模板和场景依赖项&#34;&gt;模板和场景依赖项 &lt;a href=&#34;#%e6%a8%a1%e6%9d%bf%e5%92%8c%e5%9c%ba%e6%99%af%e4%be%9d%e8%b5%96%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建场景模板时，可以指定Unity在从该模板创建新场景时克隆或引用其依赖项（包含的资源）。&lt;/p&gt;
&lt;p&gt;要指定Unity为特定模板克隆哪些资源，请编辑模板的属性。&lt;/p&gt;
&lt;p&gt;典型的模板可能包含一组克隆和引用的资源。Unity默认将几种资源类型设置为克隆。&lt;/p&gt;
&lt;p&gt;要更改Unity默认是克隆还是引用给定资源类型，请编辑场景模板项目设置。&lt;/p&gt;
&lt;h4 id=&#34;克隆模板资源&#34;&gt;克隆模板资源 &lt;a href=&#34;#%e5%85%8b%e9%9a%86%e6%a8%a1%e6%9d%bf%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;克隆的资源是模板场景使用的原始资源的副本。当Unity从模板创建新场景时，它会自动修改新场景以使用任何克隆的资源。如果修改了克隆的资源，不会影响模板场景。如果在模板场景中修改了原始资源，则不会影响新场景。&lt;/p&gt;
&lt;p&gt;将模板资源克隆是有用的，当您希望新场景包含一组起始资产，用户可能会进行修改时。&lt;/p&gt;
&lt;h4 id=&#34;引用模板资源&#34;&gt;引用模板资源 &lt;a href=&#34;#%e5%bc%95%e7%94%a8%e6%a8%a1%e6%9d%bf%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;引用的资源是模板场景使用的原始资源。当Unity从模板创建新场景时，新场景指向与模板场景相同的资源。如果修改这些资源，则会影响新场景和模板场景。&lt;/p&gt;
&lt;p&gt;引用模板资源在您希望新场景包含一组默认资产供用户构建，但不希望进行修改时很有用。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Use scripts to edit multiple scenes(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/27/2023-08-27-unity-document-36/</link>
      <pubDate>Sun, 27 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/27/2023-08-27-unity-document-36/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h2 id=&#34;使用脚本编辑多个场景&#34;&gt;使用脚本编辑多个场景 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac%e7%bc%96%e8%be%91%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以使用脚本在编辑器或运行时编辑多个场景。&lt;/p&gt;
&lt;h2 id=&#34;在编辑器中使用脚本&#34;&gt;在编辑器中使用脚本 &lt;a href=&#34;#%e5%9c%a8%e7%bc%96%e8%be%91%e5%99%a8%e4%b8%ad%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在编辑器中使用（或运行）脚本时，可以使用以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scene结构体：在编辑器和运行时都可用，Scene结构体包含与场景本身相关的只读属性，如名称和资源路径。&lt;/li&gt;
&lt;li&gt;EditorSceneManager API：此类仅在编辑器中可用，并具有多个函数来实现在“设置多个场景”和“在多个场景中烘焙数据”页面中描述的所有多场景编辑功能。&lt;/li&gt;
&lt;li&gt;SceneSetup实用程序类：您可以使用该实用程序类来存储与层级窗口中场景相关的信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;在运行时使用脚本&#34;&gt;在运行时使用脚本 &lt;a href=&#34;#%e5%9c%a8%e8%bf%90%e8%a1%8c%e6%97%b6%e4%bd%bf%e7%94%a8%e8%84%9a%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在运行时使用脚本来编辑多个场景时，请使用SceneManager类中的函数，例如&lt;code&gt;LoadScene&lt;/code&gt;和&lt;code&gt;UnloadScene&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要在场景中实例化预制体，请使用PrefabUtility.InstantiatePrefab。&lt;/li&gt;
&lt;li&gt;要将对象移动到场景的根目录，请使用Undo.MoveGameObjectToScene。&lt;/li&gt;
&lt;li&gt;为了避免每次重新启动编辑器时都必须设置层级窗口，或者为了存储不同的设置，可以使用EditorSceneManager.GetSceneManagerSetup。它还获取了一个SceneSetup对象列表，描述了当前设置。您可以将这些对象与您想要存储的任何其他关于场景设置的信息一起序列化到一个ScriptableObject中。要恢复您的层级窗口，请重新创建&lt;code&gt;SceneSetups&lt;/code&gt;列表，并使用EditorSceneManager.RestoreSceneManagerSetup。&lt;/li&gt;
&lt;li&gt;要在运行时获取加载的场景列表，请获取&lt;code&gt;sceneCount&lt;/code&gt;，然后使用&lt;code&gt;GetSceneAt&lt;/code&gt;迭代遍历场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Bake data in multiple scenes(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/26/2023-08-26-unity-document-35/</link>
      <pubDate>Sat, 26 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/26/2023-08-26-unity-document-35/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;在多个场景中烘焙数据&#34;&gt;在多个场景中烘焙数据 &lt;a href=&#34;#%e5%9c%a8%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af%e4%b8%ad%e7%83%98%e7%84%99%e6%95%b0%e6%8d%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果将数据烘焙到多个&lt;strong&gt;场景&lt;/strong&gt;中，可以减少烘焙数据所需的时间和生成数据的大小。&lt;/p&gt;
&lt;h2 id=&#34;使用多个场景烘焙光照贴图&#34;&gt;使用多个场景烘焙光照贴图 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af%e7%83%98%e7%84%99%e5%85%89%e7%85%a7%e8%b4%b4%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;为了预先确定场景中表面的亮度，可以烘焙光照贴图。有两种方法可以同时为多个场景烘焙光照贴图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要自动化光照贴图构建，请使用Lightmapping.BakeMultipleScenes函数。&lt;/li&gt;
&lt;li&gt;要手动烘焙多个场景的光照贴图，请使用Unity编辑器并执行以下步骤：
&lt;ol&gt;
&lt;li&gt;打开要烘焙的场景。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;生成光照&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;阴影和GI光的反射在所有场景中起作用，但是光照贴图和实时全局光照数据会分别加载和卸载每个场景。这意味着场景之间不共享数据，您可以安全地卸载带有光照贴图的场景。场景共享&lt;strong&gt;光探针&lt;/strong&gt;数据，因此共同烘焙的场景中的所有光探针同时加载。&lt;/p&gt;
&lt;h2 id=&#34;使用多个场景烘焙遮挡剔除数据&#34;&gt;使用多个场景烘焙遮挡剔除数据 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af%e7%83%98%e7%84%99%e9%81%ae%e6%8c%a1%e5%89%94%e9%99%a4%e6%95%b0%e6%8d%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;可以同时为多个场景烘焙&lt;strong&gt;遮挡剔除&lt;/strong&gt;数据，以确定哪些&lt;strong&gt;游戏对象&lt;/strong&gt;会进行渲染：1. 打开要烘焙的场景。2. 转到遮挡剔除窗口 (Window &amp;gt; Rendering &amp;gt; Occlusion Culling)。3. 选择烘焙按钮。4. 保存烘焙好的场景，以使场景和遮挡数据之间的引用持久化。&lt;/p&gt;
&lt;p&gt;这将遮挡剔除数据保存到一个名为&lt;code&gt;OcclusionCullingData.asset&lt;/code&gt;的单个资源中，该资源保存在与当前活动场景同名的文件夹中。&lt;/p&gt;
&lt;p&gt;如果以可加载方式加载一个与活动场景具有相同遮挡数据引用的场景，则为该场景初始化静态渲染器和门户，这些静态渲染器和门户在遮挡数据中进行剔除。这意味着遮挡系统的表现就像将静态渲染器和门户烘焙到单个场景中一样。&lt;/p&gt;
&lt;h2 id=&#34;其他资源&#34;&gt;其他资源 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;创建、加载和保存场景&lt;/li&gt;
&lt;li&gt;设置多个场景&lt;/li&gt;
&lt;li&gt;使用脚本编辑多个场景&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Set up multiple scenes(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/25/2023-08-25-unity-document-34/</link>
      <pubDate>Fri, 25 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/25/2023-08-25-unity-document-34/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;设置多个场景&#34;&gt;设置多个场景 &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以添加多个场景，编辑如何查看它们，并更改&lt;strong&gt;场景&lt;/strong&gt;设置。&lt;/p&gt;
&lt;p&gt;要创建新场景，请参见创建、加载和保存场景。&lt;/p&gt;
&lt;h2 id=&#34;添加场景&#34;&gt;添加场景 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要向项目添加新场景，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在&lt;strong&gt;项目窗口&lt;/strong&gt;中右键单击场景资产，然后选择&lt;strong&gt;以可加载方式打开场景&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;将一个或多个场景从项目窗口拖动到层级窗口中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;查看场景&#34;&gt;查看场景 &lt;a href=&#34;#%e6%9f%a5%e7%9c%8b%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;层级窗口显示项目中的所有场景：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-25-unity-document-34/ViewScenes.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;A: 带有未保存更改的场景名称旁边有一个星号。
B: 场景的更多菜单允许您对场景执行操作。
C: 场景分隔符（倒三角形）允许您折叠场景，并将其内容从层级窗口中隐藏，以更好地管理多个场景。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：要在不加载场景的情况下将场景添加到层级窗口中，请按下Alt键（macOS：按下Option键）并将场景拖入层级窗口中。这样可以在适合您的时候加载场景。&lt;/p&gt;
&lt;h2 id=&#34;已加载场景的更多菜单&#34;&gt;已加载场景的更多菜单（⋮） &lt;a href=&#34;#%e5%b7%b2%e5%8a%a0%e8%bd%bd%e5%9c%ba%e6%99%af%e7%9a%84%e6%9b%b4%e5%a4%9a%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以通过多种方式与已加载的场景进行交互和编辑。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-25-unity-document-34/LoadedMoreMenu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置项&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置为活动场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将场景设置为通过脚本创建的新&lt;strong&gt;游戏对象&lt;/strong&gt;的目标场景。有关详细信息，请参阅SceneManager.SetActiveScene。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;保存场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;保存您选择的场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;另存为场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开文件浏览器，以便选择保存场景的位置和方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;全部保存&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;保存层级窗口中打开的所有场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;卸载场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;隐藏场景的内容，使其不在&lt;strong&gt;场景视图&lt;/strong&gt;和层级窗口中显示。如果有未保存的更改，请在卸载场景之前保存它们，以免丢失任何更改。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;移除场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从层级窗口中移除场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;放弃更改&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;撤销您尚未保存的任何更改。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选择场景资产&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在项目窗口中突出显示场景资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;添加新场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在所选场景下方添加一个新的无标题场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;游戏对象&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开一个下拉菜单，其中包含要添加到所选场景中的游戏对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;未加载场景的更多菜单&#34;&gt;未加载场景的更多菜单（⋮） &lt;a href=&#34;#%e6%9c%aa%e5%8a%a0%e8%bd%bd%e5%9c%ba%e6%99%af%e7%9a%84%e6%9b%b4%e5%a4%9a%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;与已加载场景相比，您可以使用较少的方式与未加载场景进行交互和编辑。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-25-unity-document-34/UnloadedMoreMenu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置项&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;加载场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在层级窗口和场景视图中显示场景的内容，并允许您对其进行编辑。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;移除场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从层级窗口中移除场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选择场景资产&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在项目窗口中突出显示场景资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;添加新场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在所选场景下方添加一个新的无标题场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;play模式中的多个场景&#34;&gt;Play模式中的多个场景 &lt;a href=&#34;#play%e6%a8%a1%e5%bc%8f%e4%b8%ad%e7%9a%84%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您处于Play模式并且在层级窗口中有多个场景时，编辑器会显示一个名为DontDestroyOnLoad的额外场景。&lt;/p&gt;
&lt;h2 id=&#34;场景特定设置&#34;&gt;场景特定设置 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e7%89%b9%e5%ae%9a%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下设置适用于每个场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RenderSettings和LightmapSettings（这两者在照明窗口中找到）。&lt;/li&gt;
&lt;li&gt;遮挡剔除窗口中的场景设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个场景都管理其自己的设置，因此只有与该场景关联的设置才会保存到场景文件中。&lt;/p&gt;
&lt;p&gt;要更改特定场景的设置，要么打开具体场景并更改设置，要么将场景设置为活动场景，然后更改设置。否则，如果有多个场景打开，Unity将使用活动场景的渲染设置。&lt;/p&gt;
&lt;p&gt;当您在编辑器中或运行时切换到新的活动场景时，Unity会用新活动场景的设置替换所有先前的设置。&lt;/p&gt;
&lt;h2 id=&#34;其他资源&#34;&gt;其他资源 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;创建、加载和保存场景&lt;/li&gt;
&lt;li&gt;在多个场景中烘焙数据&lt;/li&gt;
&lt;li&gt;使用脚本编辑多个场景&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Work with multiple scenes in Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/24/2023-08-24-unity-document-33/</link>
      <pubDate>Thu, 24 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/24/2023-08-24-unity-document-33/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;在unity中处理多个场景&#34;&gt;在Unity中处理多个场景 &lt;a href=&#34;#%e5%9c%a8unity%e4%b8%ad%e5%a4%84%e7%90%86%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您需要创建大型流式世界或希望在运行时有效地管理多个&lt;strong&gt;场景&lt;/strong&gt;，您可以同时在Unity编辑器中打开和编辑多个场景。同时打开多个场景还可以提高工作流程的效率，特别是在需要进行协同编辑场景时。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设置多个场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何设置、查看和编辑项目中的多个场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;在多个场景中烘焙数据&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何同时在多个场景中烘焙&lt;strong&gt;光照贴图&lt;/strong&gt;、&lt;strong&gt;导航网格&lt;/strong&gt;数据和&lt;strong&gt;遮挡剔除&lt;/strong&gt;数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;使用脚本编辑多个场景&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何通过脚本在编辑器或运行时编辑多个场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;其他资源&#34;&gt;其他资源 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;创建、加载和保存场景&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes Creating, loading, and saving Scenes(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/23/2023-08-23-unity-document-32/</link>
      <pubDate>Wed, 23 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/23/2023-08-23-unity-document-32/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h2 id=&#34;创建加载和保存场景&#34;&gt;创建、加载和保存场景 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%8a%a0%e8%bd%bd%e5%92%8c%e4%bf%9d%e5%ad%98%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本文介绍了如何创建、加载和保存&lt;strong&gt;场景&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;创建新场景&#34;&gt;创建新场景 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有几种方法可以创建新场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用新场景对话框从特定的场景模板创建新场景。&lt;/li&gt;
&lt;li&gt;使用菜单或项目窗口从项目的基本场景模板创建新场景，而无需打开新场景对话框。&lt;/li&gt;
&lt;li&gt;直接从C#脚本创建特定模板的场景。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity会根据场景模板创建每个新场景。有关创建和管理场景模板的信息，请参见场景模板。&lt;/p&gt;
&lt;h3 id=&#34;从新场景对话框创建新场景&#34;&gt;从新场景对话框创建新场景 &lt;a href=&#34;#%e4%bb%8e%e6%96%b0%e5%9c%ba%e6%99%af%e5%af%b9%e8%af%9d%e6%a1%86%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用新场景对话框从项目中的特定场景模板创建新场景。您还可以使用新场景对话框查找和管理场景模板。详细信息请参见新场景对话框。&lt;/p&gt;
&lt;p&gt;默认情况下，当您从菜单（&lt;strong&gt;文件&lt;/strong&gt; &amp;gt; &lt;strong&gt;新建场景&lt;/strong&gt;）或使用快捷键（&lt;strong&gt;Ctrl/Cmd + n&lt;/strong&gt;）创建新场景时，新场景对话框会打开。&lt;/p&gt;
&lt;p&gt;要创建新场景：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从列表中选择一个模板。&lt;/li&gt;
&lt;li&gt;如果希望Unity将新场景以可加载方式（请参见下方的注释）加载，请启用&lt;strong&gt;以可加载方式加载&lt;/strong&gt;选项。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;创建&lt;/strong&gt;以从模板创建新场景。&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;注释:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可加载方式加载意味着Unity会将场景加载到已打开的任何其他场景之外。有关详细信息，请参阅多场景编辑。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果模板没有可克隆的依赖关系，Unity会将新场景加载到内存中，但不保存。&lt;/p&gt;
&lt;p&gt;如果模板具有可克隆的依赖关系，Unity会提示您选择在项目中保存它的位置。当您保存场景时，Unity会在相同位置创建一个具有与新场景相同名称的文件夹，然后将克隆的依赖关系克隆到新文件夹中，并更新新场景以使用克隆的资源而不是模板场景使用的原始资源。&lt;/p&gt;
&lt;h3 id=&#34;从菜单创建新场景&#34;&gt;从菜单创建新场景： &lt;a href=&#34;#%e4%bb%8e%e8%8f%9c%e5%8d%95%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用菜单 (&lt;strong&gt;Assets&lt;/strong&gt; &amp;gt; &lt;strong&gt;Create&lt;/strong&gt; &amp;gt; &lt;strong&gt;Scene&lt;/strong&gt;) 创建新场景，而无需打开新场景对话框。&lt;/p&gt;
&lt;p&gt;从菜单创建新场景时，Unity会自动复制项目的基本模板，并将新场景添加到项目窗口中当前打开的文件夹。&lt;/p&gt;
&lt;h3 id=&#34;从项目窗口创建新场景&#34;&gt;从项目窗口创建新场景 &lt;a href=&#34;#%e4%bb%8e%e9%a1%b9%e7%9b%ae%e7%aa%97%e5%8f%a3%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用项目窗口中的上下文菜单创建新场景，而无需打开新场景对话框。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;导航到要创建新场景的文件夹。&lt;/li&gt;
&lt;li&gt;在左侧窗格中右键单击文件夹，或在右侧窗格的空白区域右键单击，然后从上下文菜单中选择 &lt;strong&gt;Create&lt;/strong&gt; &amp;gt; &lt;strong&gt;Scene&lt;/strong&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;从项目窗口创建新场景时，Unity会自动复制项目的基本模板，并将新场景添加到所选文件夹中。&lt;/p&gt;
&lt;h3 id=&#34;从c脚本创建新场景&#34;&gt;从C#脚本创建新场景 &lt;a href=&#34;#%e4%bb%8ec%e8%84%9a%e6%9c%ac%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要使用特定的场景模板从C#脚本创建新场景，请使用&lt;strong&gt;Instantiate&lt;/strong&gt;方法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Tuple&amp;lt;Scene, SceneAsset&amp;gt; SceneTemplate.Instantiate(SceneTemplateAsset sceneTemplate, &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; loadAdditively, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; newSceneOutputPath = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Instantiate&lt;/code&gt;方法从场景模板实例化一个新场景。它返回新创建的&lt;code&gt;Scene&lt;/code&gt;句柄和其匹配的&lt;code&gt;SceneAsset&lt;/code&gt;。您可以以可加载方式创建此场景。如果场景包含需要克隆的资源，您必须提供一个路径供Unity保存到磁盘中。&lt;/p&gt;
&lt;h4 id=&#34;新场景事件&#34;&gt;新场景事件 &lt;a href=&#34;#%e6%96%b0%e5%9c%ba%e6%99%af%e4%ba%8b%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;当您从模板创建一个新场景时，无论是从脚本还是使用新场景对话框，Unity都会触发一个事件。Unity在模板实例化之后触发此事件，并在触发&lt;strong&gt;EditorSceneManager.newSceneCreated&lt;/strong&gt;或&lt;strong&gt;EditorSceneManager.sceneOpened&lt;/strong&gt;事件后触发此事件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SceneTemplate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; NewTemplateInstantiated(SceneTemplateAsset sceneTemplateAsset, Scene scene, SceneAsset sceneAsset, &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; additiveLoad);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;event&lt;/span&gt; NewTemplateInstantiated newSceneTemplateInstantiated;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;加载场景&#34;&gt;加载场景 &lt;a href=&#34;#%e5%8a%a0%e8%bd%bd%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要打开场景，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在项目窗口中，双击场景资产。&lt;/li&gt;
&lt;li&gt;从菜单中选择 &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Open Scene&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;从菜单中选择 &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Recent Scenes&lt;/strong&gt;，然后选择场景的名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果当前场景包含未保存的更改，Unity会提示您保存场景或放弃更改。&lt;/p&gt;
&lt;h3 id=&#34;同时打开多个场景&#34;&gt;同时打开多个场景 &lt;a href=&#34;#%e5%90%8c%e6%97%b6%e6%89%93%e5%bc%80%e5%a4%9a%e4%b8%aa%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以同时打开多个场景进行编辑。有关详细信息，请参见多场景编辑。&lt;/p&gt;
&lt;h2 id=&#34;保存场景&#34;&gt;保存场景 &lt;a href=&#34;#%e4%bf%9d%e5%ad%98%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要保存当前正在工作的场景，请从菜单中选择 &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Save Scene&lt;/strong&gt;，或按 Ctrl + S (Windows) 或 Cmd + S (macOS).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-23-unity-document-32/SceneAssetsInProjectView_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Scenes(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/22/2023-08-22-unity-document-31/</link>
      <pubDate>Tue, 22 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/22/2023-08-22-unity-document-31/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;创建游戏玩法场景&#34;&gt;创建游戏玩法场景 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%b8%b8%e6%88%8f%e7%8e%a9%e6%b3%95%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在Unity中，场景是您与内容进行工作的地方。它们是包含整个或部分游戏或应用程序的资产。例如，您可以在一个场景中构建一个简单的游戏，而对于更复杂的游戏，可以使用每个关卡一个场景，每个场景都有自己的环境、角色、障碍物、装饰物和&lt;strong&gt;UI&lt;/strong&gt;。您可以在项目中创建任意数量的场景。&lt;/p&gt;
&lt;p&gt;当您创建一个新项目并首次打开它时，Unity会打开一个示例场景，其中只包含一个&lt;strong&gt;摄像机&lt;/strong&gt;和一个灯光。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-22-unity-document-31/NewEmptyScene_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;了解有关使用场景的信息，请参阅创建、加载和保存场景。&lt;/p&gt;
&lt;h2 id=&#34;场景模板&#34;&gt;场景模板 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity使用场景模板来创建新的场景。场景模板是存储在项目中的资源。它们与场景类似，但是设计为复制而不是直接使用。&lt;/p&gt;
&lt;p&gt;详细了解创建和使用场景模板的信息，请参阅场景模板。&lt;/p&gt;
&lt;h2 id=&#34;新场景对话框&#34;&gt;新场景对话框 &lt;a href=&#34;#%e6%96%b0%e5%9c%ba%e6%99%af%e5%af%b9%e8%af%9d%e6%a1%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您从“文件”菜单: (&lt;strong&gt;文件&lt;/strong&gt; &amp;gt; &lt;strong&gt;新建场景&lt;/strong&gt;) 或 &lt;strong&gt;Ctrl/Cmd + n&lt;/strong&gt; 快捷键创建一个新场景时，新场景对话框会弹出。您可以使用它从项目的特定场景模板中创建新场景，并获取有关现有模板的信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-22-unity-document-31/scene-template-new-scene-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;搜索字段:&lt;/strong&gt; 按名称查找可用的场景模板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模板:&lt;/strong&gt; 显示项目中所有可用模板的列表。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;模板详情:&lt;/strong&gt; 显示当前选定模板的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;命令栏:&lt;/strong&gt; 提供从选定模板创建新场景的命令和选项。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;创建新场景&#34;&gt;创建新场景 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%96%b0%e5%9c%ba%e6%99%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要从新场景对话框创建新场景，请从模板列表中选择一个模板，然后点击&lt;strong&gt;创建&lt;/strong&gt;。有关以这种方式创建场景的详细说明，请参阅从新场景对话框创建新场景。&lt;/p&gt;
&lt;h3 id=&#34;固定模板&#34;&gt;固定模板 &lt;a href=&#34;#%e5%9b%ba%e5%ae%9a%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;固定的模板将显示在新场景对话框的模板列表中的其他模板之前。最后固定的模板将显示在列表的顶部。&lt;/p&gt;
&lt;p&gt;单击任何模板的固定图标即可固定它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-22-unity-document-31/scene-template-pin.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您还可以在编辑模板属性时固定模板。在场景模板的&lt;strong&gt;Inspector&lt;/strong&gt;中，启用&lt;strong&gt;固定在新场景对话框中&lt;/strong&gt;选项。&lt;/p&gt;
&lt;h3 id=&#34;定位和编辑模板&#34;&gt;定位和编辑模板 &lt;a href=&#34;#%e5%ae%9a%e4%bd%8d%e5%92%8c%e7%bc%96%e8%be%91%e6%a8%a1%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您在新场景对话框中选择一个模板时，详细信息窗格会显示模板的路径（下图中的1）。&lt;/p&gt;
&lt;p&gt;要在&lt;strong&gt;项目窗口&lt;/strong&gt;中突出显示模板，请选择&lt;strong&gt;定位&lt;/strong&gt;链接（下图中的2）。&lt;/p&gt;
&lt;p&gt;要在检查器窗口中打开模板并编辑其属性，请选择&lt;strong&gt;编辑&lt;/strong&gt;链接（下图中的3）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-22-unity-document-31/scene-template-locate-edit.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;多场景编辑&#34;&gt;多场景编辑 &lt;a href=&#34;#%e5%a4%9a%e5%9c%ba%e6%99%af%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以同时打开多个场景进行编辑。详细信息请参阅多场景编辑。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/21/2023-08-21-unity-document-30/</link>
      <pubDate>Mon, 21 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/21/2023-08-21-unity-document-30/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;创建游戏玩法&#34;&gt;创建游戏玩法 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%b8%b8%e6%88%8f%e7%8e%a9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用Unity设计和创建游戏。在Unity中有一些基本的工作流程和概念可以帮助您使用Unity。&lt;/p&gt;
&lt;p&gt;为了创建游戏玩法机制，您可能需要编写脚本。有关如何使用&lt;strong&gt;脚本&lt;/strong&gt;创建工作的更多信息，请参阅脚本编程部分。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;场景&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解场景以及如何在Unity中创建和使用场景。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;GameObjects&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解GameObject及其与组件的工作方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Prefabs&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;学习如何在Unity中创建和使用预制件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;图层&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解并使用图层和层遮罩在Unity中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;约束&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解可以附加到GameObject的不同类型约束组件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;旋转和方向在Unity中的应用&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解Unity如何计算和处理旋转和方向。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;灯光&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解灯光在场景中的影响。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;摄像机&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解如何在游戏中使用摄像机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;跨平台考虑因素&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解不同平台如何影响您的游戏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;发布构建&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解如何发布您的构建版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;故障排除&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;查看解决Unity中一些常见问题的解决方案。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;其他资源&#34;&gt;其他资源 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;想要学习如何入门Unity的教程，可以参考Unity Learn上的Unity基础路径。&lt;/li&gt;
&lt;li&gt;要查看可以用来创建游戏的模板列表，可以参考Templates。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Advanced best practice guides(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/20/2023-08-20-unity-document-29/</link>
      <pubDate>Sun, 20 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/20/2023-08-20-unity-document-29/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;高级最佳实践指南&#34;&gt;高级最佳实践指南 &lt;a href=&#34;#%e9%ab%98%e7%ba%a7%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用此页面来发现并学习Unity专家的生产经验和最佳实践。Unity的技术内容营销团队与行业专家、Unity研发团队的工程师和技术艺术家以及Accelerate Games Solutions团队共同创建了此页面上列出的指南。&lt;/p&gt;
&lt;h2 id=&#34;art-and-design&#34;&gt;Art and design &lt;a href=&#34;#art-and-design&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-2d-game-art-animation-lighting.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;2d游戏艺术动画和灯光指南&#34;&gt;2D游戏艺术、动画和灯光指南 &lt;a href=&#34;#2d%e6%b8%b8%e6%88%8f%e8%89%ba%e6%9c%af%e5%8a%a8%e7%94%bb%e5%92%8c%e7%81%af%e5%85%89%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;由Unity 2D演示项目《Dragon Crashers》的美术总监编写，并由Unity 2D专家的贡献，本指南展示了如何设置您的2D项目、在Unity和Autodesk之间切换、处理&lt;strong&gt;精灵&lt;/strong&gt;、排序图层等等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-create-bettergameplay.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;unity游戏设计师白皮书&#34;&gt;Unity游戏设计师白皮书 &lt;a href=&#34;#unity%e6%b8%b8%e6%88%8f%e8%ae%be%e8%ae%a1%e5%b8%88%e7%99%bd%e7%9a%ae%e4%b9%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南旨在帮助经验丰富的游戏设计师学习如何在Unity中原型化他们的想法，实现更高效的创作和团队协作。学习有关视觉脚本、创建输入、关卡设计工具、微交互等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-blog-post.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;面向技术美术的unity关键工具集和工作流程unity-2021-lts版&#34;&gt;面向技术美术的Unity：关键工具集和工作流程（Unity 2021 LTS版） &lt;a href=&#34;#%e9%9d%a2%e5%90%91%e6%8a%80%e6%9c%af%e7%be%8e%e6%9c%af%e7%9a%84unity%e5%85%b3%e9%94%ae%e5%b7%a5%e5%85%b7%e9%9b%86%e5%92%8c%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%a8%8bunity-2021-lts%e7%89%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一些Unity最经验丰富的技术艺术家对本指南做出了重要贡献。它涵盖了与资产的工作、渲染管线、光照、世界建设、数字人物等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-blog-post2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;面向技术美术的unity关键工具集和工作流程unity-2020-lts版&#34;&gt;面向技术美术的Unity：关键工具集和工作流程（Unity 2020 LTS版） &lt;a href=&#34;#%e9%9d%a2%e5%90%91%e6%8a%80%e6%9c%af%e7%be%8e%e6%9c%af%e7%9a%84unity%e5%85%b3%e9%94%ae%e5%b7%a5%e5%85%b7%e9%9b%86%e5%92%8c%e5%b7%a5%e4%bd%9c%e6%b5%81%e7%a8%8bunity-2020-lts%e7%89%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一些Unity最经验丰富的技术艺术家对本指南做出了重要贡献。它涵盖了与资产的工作、渲染管线、光照、世界建设、数字人物等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-interface-design.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;unity中的用户界面设计和实现&#34;&gt;Unity中的用户界面设计和实现 &lt;a href=&#34;#unity%e4%b8%ad%e7%9a%84%e7%94%a8%e6%88%b7%e7%95%8c%e9%9d%a2%e8%ae%be%e8%ae%a1%e5%92%8c%e5%ae%9e%e7%8e%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南由游戏行业的专业级设计师和Unity产品专家撰写，提供了关于职业技巧以及使用适用于世界构建的Unity工具（如Unity ProBuilder和**地形（Terrain）**系统）的说明。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/introduction-to-game-level-design.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;游戏关卡设计简介&#34;&gt;游戏关卡设计简介 &lt;a href=&#34;#%e6%b8%b8%e6%88%8f%e5%85%b3%e5%8d%a1%e8%ae%be%e8%ae%a1%e7%ae%80%e4%bb%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这本电子书提供了逐步指导，教授如何使用Unity的&lt;strong&gt;UI&lt;/strong&gt;系统来构建界面。内容包括UI设计和开发概念、资源准备工作流程、样式和字体等。&lt;/p&gt;
&lt;h2 id=&#34;devops&#34;&gt;DevOps &lt;a href=&#34;#devops&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-devops.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;版本控制项目组织最佳实践&#34;&gt;版本控制项目组织最佳实践 &lt;a href=&#34;#%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e9%a1%b9%e7%9b%ae%e7%bb%84%e7%bb%87%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学习Unity中版本控制和项目组织的基本原理。涵盖的关键主题包括使用不同版本控制解决方案设置Unity项目、组织Unity项目、适当的文件夹结构和命名标准。&lt;/p&gt;
&lt;h2 id=&#34;图形与渲染&#34;&gt;图形与渲染 &lt;a href=&#34;#%e5%9b%be%e5%bd%a2%e4%b8%8e%e6%b8%b2%e6%9f%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-urp-recipes.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用通用渲染管线创建流行视觉效果的技巧&#34;&gt;使用通用渲染管线创建流行视觉效果的技巧 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e9%80%9a%e7%94%a8%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bf%e5%88%9b%e5%bb%ba%e6%b5%81%e8%a1%8c%e8%a7%86%e8%a7%89%e6%95%88%e6%9e%9c%e7%9a%84%e6%8a%80%e5%b7%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在本指南中，您可以选择12个使用URP创建流行效果的技巧。学习如何使用渲染器特性创建效果，使用Shader Graph构建Toon和轮廓&lt;strong&gt;着色器&lt;/strong&gt;，使用GPU实例化，产生反射和折射等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-URP-advanced-2022.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;面向高级unity创作者的通用渲染管线unity-2022-lts&#34;&gt;面向高级Unity创作者的通用渲染管线（Unity 2022 LTS） &lt;a href=&#34;#%e9%9d%a2%e5%90%91%e9%ab%98%e7%ba%a7unity%e5%88%9b%e4%bd%9c%e8%80%85%e7%9a%84%e9%80%9a%e7%94%a8%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bfunity-2022-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南涵盖了关于贴花、URP质量设置和转换器的新增和更改，以及对渲染路径的比较，包括Forward+、全屏Shader Graph包括自定义&lt;strong&gt;后期处理&lt;/strong&gt;等等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-urp.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;面向高级unity创作者的通用渲染管线unity-2021-lts&#34;&gt;面向高级Unity创作者的通用渲染管线（Unity 2021 LTS） &lt;a href=&#34;#%e9%9d%a2%e5%90%91%e9%ab%98%e7%ba%a7unity%e5%88%9b%e4%bd%9c%e8%80%85%e7%9a%84%e9%80%9a%e7%94%a8%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bfunity-2021-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用本指南了解如何使用URP建立一个新项目，或将现有的基于内置渲染管线的项目转换为URP。了解URP质量设置和着色器，设置光照、阴影、特效等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/hdrp-lighting-guide-2022.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;高清渲染管线unity-2022-lts&#34;&gt;高清渲染管线（Unity 2022 LTS） &lt;a href=&#34;#%e9%ab%98%e6%b8%85%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bfunity-2022-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这本更新的指南涵盖了新的水系统、新的地形工具，包括使用SpeedTree创建地形，创建天空、云、光照效果的更多功能，更新了HDRP着色器和材质等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-hdrp-2021.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;高清渲染管线unity-2021-lts&#34;&gt;高清渲染管线（Unity 2021 LTS） &lt;a href=&#34;#%e9%ab%98%e6%b8%85%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bfunity-2021-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南提供了关于为PC和主机游戏创建高端光照的深入参考，包括HDRP设置、&lt;strong&gt;相机&lt;/strong&gt;和体积框架，创建天空、反射、实时光照等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-hdrp-2020.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;高清渲染管线unity-2020-lts&#34;&gt;高清渲染管线（Unity 2020 LTS） &lt;a href=&#34;#%e9%ab%98%e6%b8%85%e6%b8%b2%e6%9f%93%e7%ae%a1%e7%ba%bfunity-2020-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南提供了关于为PC和主机游戏创建高端光照的深入参考，包括HDRP设置、相机和体积框架，创建天空、反射、实时光照等内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-advanced-effects.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;unity高级视觉效果创建终极指南&#34;&gt;Unity高级视觉效果创建终极指南 &lt;a href=&#34;#unity%e9%ab%98%e7%ba%a7%e8%a7%86%e8%a7%89%e6%95%88%e6%9e%9c%e5%88%9b%e5%bb%ba%e7%bb%88%e6%9e%81%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南全面介绍了在Unity中如何使用视觉效果创作工具来创建任何类型的效果：水和液体、烟雾、火焰、爆炸、天气、冲击、魔法和电力等。&lt;/p&gt;
&lt;h2 id=&#34;性能优化&#34;&gt;性能优化 &lt;a href=&#34;#%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/optimize-your-mobile-game-2022.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;优化移动游戏性能unity-2022-lts&#34;&gt;优化移动游戏性能（Unity 2022 LTS） &lt;a href=&#34;#%e4%bc%98%e5%8c%96%e7%a7%bb%e5%8a%a8%e6%b8%b8%e6%88%8f%e6%80%a7%e8%83%bdunity-2022-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从使用Unity的完整性能分析工具、编程和代码架构、项目配置和资源、GPU优化等方面获取提示，以优化移动游戏的性能。还包括音频、用户界面、动画、物理等方面的优化技巧。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/optimize-pc-game-performance.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;优化主机和pc游戏性能unity-2022-lts&#34;&gt;优化主机和PC游戏性能（Unity 2022 LTS） &lt;a href=&#34;#%e4%bc%98%e5%8c%96%e4%b8%bb%e6%9c%ba%e5%92%8cpc%e6%b8%b8%e6%88%8f%e6%80%a7%e8%83%bdunity-2022-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南汇集了超过100页的优化最佳实践，用于在Unity中开发主机和PC游戏。获取关于项目的全面分析、编程代码和架构、优化资源和图形等方面的技巧。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-profiling.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;unity游戏性能分析终极指南&#34;&gt;Unity游戏性能分析终极指南 &lt;a href=&#34;#unity%e6%b8%b8%e6%88%8f%e6%80%a7%e8%83%bd%e5%88%86%e6%9e%90%e7%bb%88%e6%9e%81%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南提供了有关如何在Unity中进行应用程序性能分析、内存管理和优化电源消耗的高级知识和建议。学习性能分析工作流程和使用Unity的性能分析工具的最佳实践。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-pc-game.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;优化主机和pc游戏性能unity-2020-lts&#34;&gt;优化主机和PC游戏性能（Unity 2020 LTS） &lt;a href=&#34;#%e4%bc%98%e5%8c%96%e4%b8%bb%e6%9c%ba%e5%92%8cpc%e6%b8%b8%e6%88%8f%e6%80%a7%e8%83%bdunity-2020-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从Unity支持工程师那里获取超过80个关于如何优化PC和主机游戏以获得流畅性能和游戏体验的技巧。涵盖的主题包括编程代码和架构、GPU优化、内存、资源等。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-mobile.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;优化移动游戏性能unity-2020-lts&#34;&gt;优化移动游戏性能（Unity 2020 LTS） &lt;a href=&#34;#%e4%bc%98%e5%8c%96%e7%a7%bb%e5%8a%a8%e6%b8%b8%e6%88%8f%e6%80%a7%e8%83%bdunity-2020-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南提供75多个优化移动游戏性能的技巧，以在尽可能多的设备上流畅运行。了解编程代码和架构、GPU优化、内存、资源等方面的内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-game-dev-field.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;unity游戏开发现场指南&#34;&gt;Unity游戏开发现场指南 &lt;a href=&#34;#unity%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e7%8e%b0%e5%9c%ba%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南帮助您熟悉最新的Unity功能和工作流程。涵盖的内容包括编辑器导航、设置开发环境、Unity的性能分析工具、物理和输入系统。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/increase-productivity-best-practice.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;提高生产力的unity-2020-lts&#34;&gt;提高生产力的Unity 2020 LTS &lt;a href=&#34;#%e6%8f%90%e9%ab%98%e7%94%9f%e4%ba%a7%e5%8a%9b%e7%9a%84unity-2020-lts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南收集了超过70个节省时间的技巧，以改善您在Unity 2020 LTS上的日常工作流程。&lt;/p&gt;
&lt;h2 id=&#34;scripting&#34;&gt;Scripting &lt;a href=&#34;#scripting&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-modular-scriptable-objects.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用scriptableobjects在unity中创建模块化游戏架构&#34;&gt;使用ScriptableObjects在Unity中创建模块化游戏架构 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8scriptableobjects%e5%9c%a8unity%e4%b8%ad%e5%88%9b%e5%bb%ba%e6%a8%a1%e5%9d%97%e5%8c%96%e6%b8%b8%e6%88%8f%e6%9e%b6%e6%9e%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南提供了来自专业开发人员的技巧，教你如何在Unity项目中充分利用ScriptableObjects。从GitHub下载附带的示例项目，该项目受经典街机游戏机制的启发，可供您参考。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-c-style-guide.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;c编码规范指南编写更整洁可扩展的代码&#34;&gt;C#编码规范指南：编写更整洁、可扩展的代码 &lt;a href=&#34;#c%e7%bc%96%e7%a0%81%e8%a7%84%e8%8c%83%e6%8c%87%e5%8d%97%e7%bc%96%e5%86%99%e6%9b%b4%e6%95%b4%e6%b4%81%e5%8f%af%e6%89%a9%e5%b1%95%e7%9a%84%e4%bb%a3%e7%a0%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;学习行业的最佳实践，了解如何组织Unity C#代码以及在自己的代码风格指南中要考虑的内容，包括命名约定、格式化、类、方法和注释。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-20-unity-document-29/best-practice-program-patterns.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用游戏编程模式提升您的代码水平&#34;&gt;使用游戏编程模式提升您的代码水平 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e6%b8%b8%e6%88%8f%e7%bc%96%e7%a8%8b%e6%a8%a1%e5%bc%8f%e6%8f%90%e5%8d%87%e6%82%a8%e7%9a%84%e4%bb%a3%e7%a0%81%e6%b0%b4%e5%b9%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;本指南涵盖了SOLID原则，并提供了如何实现游戏开发中众所周知的设计模式的示例，包括工厂模式、单例模式、命令模式、状态模式和观察者模式、对象池和模型视图呈现器（MVP）。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Quickstart guides(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/19/2023-08-19-unity-document-28/</link>
      <pubDate>Sat, 19 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/19/2023-08-19-unity-document-28/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h2 id=&#34;快速入门指南&#34;&gt;快速入门指南 &lt;a href=&#34;#%e5%bf%ab%e9%80%9f%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;快速入门指南提供了一套流程，帮助您开始使用Unity。&lt;/p&gt;
&lt;p&gt;目前提供以下快速入门指南：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2D游戏开发快速入门指南&lt;/li&gt;
&lt;li&gt;3D游戏开发快速入门指南&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;3d游戏开发快速入门指南&#34;&gt;3D游戏开发快速入门指南 &lt;a href=&#34;#3d%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91%e5%bf%ab%e9%80%9f%e5%85%a5%e9%97%a8%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;此快速入门指南为使用Unity进行3D游戏开发的开发者提供了一个工作流程。&lt;/p&gt;
&lt;p&gt;**注意：**该指南适用于从2019 LTS版本及以上的所有Unity版本。&lt;/p&gt;
&lt;p&gt;此快速入门指南将帮助您：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置Unity项目（请参阅下面的初始设置部分）&lt;/li&gt;
&lt;li&gt;创建一个3D游戏&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关详细的3D游戏教程，请参阅以下Unity Learn材料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;初学者3D开发学习课程&lt;/li&gt;
&lt;li&gt;John Lemon的幽灵之旅：3D初学者项目&lt;/li&gt;
&lt;li&gt;查看所有的3D学习教程&lt;/li&gt;
&lt;li&gt;使用代码创作&lt;/li&gt;
&lt;li&gt;创作者工具包：初学者代码&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;初始设置&#34;&gt;初始设置 &lt;a href=&#34;#%e5%88%9d%e5%a7%8b%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;**注意：**对于本指南，Unity推荐并假设您选择通用渲染管线（URP），而不是内置渲染管线。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装Unity 2019 LTS版本或更高版本。请参阅安装Unity。&lt;/li&gt;
&lt;li&gt;创建一个项目并选择通用&lt;strong&gt;渲染管线&lt;/strong&gt;模板。请参阅Hub文档中的模板。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果需要熟悉Unity并进行设置，可以参考Unity Learn中的Unity Essentials学习路径。&lt;/p&gt;
&lt;h1 id=&#34;创建一个3d游戏&#34;&gt;创建一个3D游戏 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa3d%e6%b8%b8%e6%88%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要创建一个3D游戏，先设置您的Unity项目，然后按照以下顺序熟悉相关概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基础知识&lt;/li&gt;
&lt;li&gt;脚本编写&lt;/li&gt;
&lt;li&gt;3D资源&lt;/li&gt;
&lt;li&gt;构建游戏环境&lt;/li&gt;
&lt;li&gt;动画&lt;/li&gt;
&lt;li&gt;图形&lt;/li&gt;
&lt;li&gt;音频&lt;/li&gt;
&lt;li&gt;物理&lt;/li&gt;
&lt;li&gt;用户界面&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基础知识&#34;&gt;基础知识 &lt;a href=&#34;#%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;GameObjects是Unity中的基本对象，代表角色、道具、场景等。游戏中的每个对象都是一个GameObject。&lt;/p&gt;
&lt;p&gt;GameObjects存在于被称为场景的3D环境中。您可以将场景视为游戏关卡，但它也可以表示菜单、游戏结束时的制作人员名单或其他内容。&lt;/p&gt;
&lt;p&gt;GameObjects的行为由称为组件的功能块定义。您可以将多个组件附加到GameObject上。以下组件对于3D游戏至关重要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transform（变换）：&lt;strong&gt;Transform组件&lt;/strong&gt;确定场景中每个GameObject的位置、旋转和缩放。每个GameObject都有一个Transform组件。&lt;/li&gt;
&lt;li&gt;Mesh Filter（网格过滤器）：该组件定义了3D GameObject的形状。&lt;/li&gt;
&lt;li&gt;Mesh Renderer（网格渲染器）：该组件定义了由&lt;strong&gt;网格过滤器&lt;/strong&gt;定义的3D形状的外观。&lt;/li&gt;
&lt;li&gt;Cameras（相机）：特别配置的GameObject，用于捕捉并向玩家显示游戏世界。&lt;/li&gt;
&lt;li&gt;Rigidbody（刚体）：刚体允许GameObject与物理系统进行交互，包括重力和&lt;strong&gt;碰撞&lt;/strong&gt;。请参阅本指南中的物理部分。&lt;/li&gt;
&lt;li&gt;Colliders（碰撞体）：该组件定义了3D GameObject的形状，用于物理碰撞。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;脚本编写&#34;&gt;脚本编写 &lt;a href=&#34;#%e8%84%9a%e6%9c%ac%e7%bc%96%e5%86%99&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity允许您使用&lt;strong&gt;脚本&lt;/strong&gt;创建自己的组件。脚本可以让您触发游戏事件、随时间修改组件属性并响应用户输入。Unity原生支持C#编程语言。以下是您可以在游戏中使用脚本的一些示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;接收玩家输入，并使GameObject根据输入移动或执行相应操作。&lt;/li&gt;
&lt;li&gt;设置胜利和失败状态，打开相关的胜利或失败场景，创建完整的游戏循环。&lt;/li&gt;
&lt;li&gt;基于其他变量，影响GameObject的组件，如其变换、动画或渲染器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关如何在Unity中使用脚本的详细信息，请参阅脚本概述。要学习脚本编写的基础知识，请按照Unity Learn的初学者脚本编写课程进行学习。如需更深入的指导，请参阅示例项目“使用代码创作”和“创作者工具包：初学者代码”。&lt;/p&gt;
&lt;h2 id=&#34;3d资源&#34;&gt;3D资源 &lt;a href=&#34;#3d%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;模型是物体的三维表示。3D游戏的大部分视觉效果都由模型组成，例如角色、可交互对象和玩家周围的世界。&lt;/p&gt;
&lt;p&gt;您可以使用Probuilder等工具在Unity中创建模型。然而，这些工具更适合用于原型制作，而不适合用于最终产品。&lt;/p&gt;
&lt;p&gt;要向最终产品添加更精致的3D资源，可以在3D建模软件中创建3D模型、材质和纹理，然后将它们导入到Unity中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-19-unity-document-28/quickstart-3D-Graphics.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;导入3d模型文件&#34;&gt;导入3D模型文件 &lt;a href=&#34;#%e5%af%bc%e5%85%a53d%e6%a8%a1%e5%9e%8b%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity使用.fbx模型格式。您还可以使用其他常见的原生模型格式（例如.max、.blend、.mb、.ma），Unity在导入时会将其转换为.fbx格式。&lt;/p&gt;
&lt;p&gt;将模型导入到Unity中以在项目中使用。&lt;/p&gt;
&lt;h3 id=&#34;渲染网格&#34;&gt;渲染网格 &lt;a href=&#34;#%e6%b8%b2%e6%9f%93%e7%bd%91%e6%a0%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;3D网格是3D模型的结构。它由多个多边形形状组成。要将3D模型添加到GameObject中，向GameObject添加一个Mesh Filter组件。Mesh Renderer组件在场景中渲染网格；为了确保模型在游戏中显示，必须将Mesh Renderer添加到任何具有Mesh Filter组件的GameObject中。&lt;/p&gt;
&lt;h3 id=&#34;材质&#34;&gt;材质 &lt;a href=&#34;#%e6%9d%90%e8%b4%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;材质结合了有关表面视觉外观的信息，如纹理、颜色和着色器。使用材质定义如何渲染表面。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;纹理是您导入到Unity中的任何2D图像文件。使用纹理将网格包装并向模型添加细节。&lt;/li&gt;
&lt;li&gt;使用颜色调整来更改纹理的颜色。&lt;/li&gt;
&lt;li&gt;着色器是一系列指令，确定Unity如何在屏幕上显示GameObject。使用着色器根据光照输入和材质配置影响Unity如何渲染每个像素。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请参阅关于材质设计的学习教程。&lt;/p&gt;
&lt;h2 id=&#34;building-in-游戏环境&#34;&gt;Building in-游戏环境 &lt;a href=&#34;#building-in-%e6%b8%b8%e6%88%8f%e7%8e%af%e5%a2%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-19-unity-document-28/quickstart-3D-environment.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;环境设计是为游戏玩法创建一个环境的过程。您可以在Unity编辑器中同时设计和构建您的环境，或者您可以在Unity外部设计一个环境，然后在Unity中构建它。&lt;/p&gt;
&lt;p&gt;要构建一个游戏内环境，您需要向场景中添加游戏对象，并将它们位置调整到您喜欢的方式和设计中。除了在场景中手动放置模型外，Unity编辑器还包含一套内置的**地形（Terrain）**功能，允许您向游戏中添加地貌。在编辑器中，您可以创建多个地形瓦片，调整地形的高度或外观，并向其添加树木或草地。详细了解创建和使用地形。&lt;/p&gt;
&lt;h2 id=&#34;animation&#34;&gt;Animation &lt;a href=&#34;#animation&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以导入其他程序中制作的动画，也可以直接在编辑器中对资源进行动画制作。有关3D动画的更多信息，请参阅Unity学习课程介绍3D动画系统。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-19-unity-document-28/quickstart-3D-animation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;导入动画&#34;&gt;导入动画 &lt;a href=&#34;#%e5%af%bc%e5%85%a5%e5%8a%a8%e7%94%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在导入带有动画的模型时，Unity可以导入动画剪辑。这意味着您可以在其他程序中对模型进行动画制作，然后在Unity中访问和操作这些剪辑。&lt;/p&gt;
&lt;h3 id=&#34;在unity中制作模型动画&#34;&gt;在Unity中制作模型动画 &lt;a href=&#34;#%e5%9c%a8unity%e4%b8%ad%e5%88%b6%e4%bd%9c%e6%a8%a1%e5%9e%8b%e5%8a%a8%e7%94%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用动画窗口在Unity中直接创建和修改动画剪辑。使用**关键帧（Keyframe）**动画将简单的动画添加到场景中的GameObject，例如改变其位置、大小或旋转。&lt;/p&gt;
&lt;h3 id=&#34;控制动画&#34;&gt;控制动画 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e5%8a%a8%e7%94%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要控制播放哪个动画剪辑，您可以在脚本中直接调用它们使用 Animator 类，或者在Animator窗口中创建和修改 Animator Controller。&lt;/p&gt;
&lt;p&gt;您可以使用Animator窗口：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建和设置动画控制器（Animator Controller）&lt;/li&gt;
&lt;li&gt;使用动画剪辑创建动画状态（Animator States）&lt;/li&gt;
&lt;li&gt;创建脚本可以访问或分配值给的动画参数（Animator Parameters）&lt;/li&gt;
&lt;li&gt;创建游戏状态之间的转换（Animator Transitions），指定更改状态的条件（基于参数）以及状态之间的混合时间&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;graphics&#34;&gt;Graphics &lt;a href=&#34;#graphics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;lighting&#34;&gt;Lighting &lt;a href=&#34;#lighting&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;为场景添加光照，可以增加环境的深度和氛围，帮助玩家体验您创建的游戏世界。要设置光照：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建光源。在Hierarchy窗口中右键单击打开GameObject菜单，选择&lt;strong&gt;Light&lt;/strong&gt;，然后选择要添加到场景中的光源类型。详见光源类型。&lt;/li&gt;
&lt;li&gt;将光源放置在场景中。调整光源的颜色、强度和位置，直到达到所需的效果。详见使用光源。&lt;/li&gt;
&lt;li&gt;完善您的光照。例如，您可以选择不同的光照模式，或者添加一个遮罩蒙版来创建阴影。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-19-unity-document-28/quickstart-3D-lights.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请参阅Unity Learn中的URP光照教程。&lt;/p&gt;
&lt;h2 id=&#34;audio&#34;&gt;Audio &lt;a href=&#34;#audio&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以在Unity中为游戏添加背景音乐和音效；请参阅音频概述。使用第三方软件创建音频，并按照建议的设置将其导入到Unity中。&lt;/p&gt;
&lt;h2 id=&#34;physics&#34;&gt;Physics &lt;a href=&#34;#physics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-19-unity-document-28/quickstart-3D-physics.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用Unity的&lt;strong&gt;物理引擎&lt;/strong&gt;控制GameObject之间的互动。您可以使用物理引擎来模拟重力和力学等力量，定义GameObject在现实世界中碰撞时的行为。您还可以配置物理设置，以创建适合游戏设计的自定义物理效果，这可能不是对现实世界的准确模拟。要了解如何使用Unity的物理引擎，请参阅Unity Learn教程《Ruby&amp;rsquo;s Adventure: 2D Beginner》。更多信息，请参阅用户手册中的物理部分。&lt;/p&gt;
&lt;p&gt;为GameObject设置物理效果：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;为了使GameObject受到物理系统的影响，并对重力和碰撞等事物作出反应，添加一个Rigidbody组件。&lt;/li&gt;
&lt;li&gt;使用Collider使GameObject能够与场景中的其他GameObject互动。例如，具有collider的GameObject可以被具有collider的另一个GameObject移动或被移动。&lt;/li&gt;
&lt;li&gt;为了在两个GameObject相交时能够在代码中调用函数，添加一个Collider，并将其设置为trigger。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;用户界面&#34;&gt;用户界面 &lt;a href=&#34;#%e7%94%a8%e6%88%b7%e7%95%8c%e9%9d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您想要为游戏添加菜单或帮助功能，您需要设置一个用户界面。使用Unity UI来设置用户界面。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Search in the Editor(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/17/2023-08-17-unity-document-26/</link>
      <pubDate>Thu, 17 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/17/2023-08-17-unity-document-26/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;自定义您的工作空间&#34;&gt;自定义您的工作空间 &lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e6%82%a8%e7%9a%84%e5%b7%a5%e4%bd%9c%e7%a9%ba%e9%97%b4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以通过点击拖动任何视图的标签，将其自定义到不同的位置来自定义您的布局。将标签投放到现有窗口的标签区域，将在任何现有标签旁边添加标签。或者，将标签投放到任何停靠区域，将在一个新窗口中添加该视图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/DockZones.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;标签也可以从主编辑器窗口中分离，并组合成自己独立的浮动编辑器窗口。浮动窗口可以包含与主编辑器窗口类似的视图和标签的排列方式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/FloatingWindows.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在标签视图中工作时，处于活动状态的标签（即拥有焦点的标签）在顶部有一个细小的蓝色条纹。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/TabHighlight.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当您打开的标签数量超过Unity视图的标签区域容纳能力时，会显示小的导航箭头。点击这些箭头可以滚动查看已打开的标签。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/TabScrollButtons.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以随时右键单击任何视图的标签，以查看其他选项，如最大化和关闭标签，或在同一窗口中添加一个新标签。您还可以中键单击已打开的标签来关闭它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/Editor-tabcontext.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;保存和恢复布局&#34;&gt;保存和恢复布局 &lt;a href=&#34;#%e4%bf%9d%e5%ad%98%e5%92%8c%e6%81%a2%e5%a4%8d%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您创建了一组编辑器窗口的布局后，您可以随时保存和恢复该布局。您可以点击工具栏上的&amp;quot;布局&amp;quot;下拉菜单并选择**保存布局&amp;hellip;**来保存当前的布局。为布局取一个名称并保存，然后随时可以通过在&amp;quot;布局&amp;quot;下拉菜单中选择相应的布局来恢复之前保存的布局。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-17-unity-document-26/FunkyView.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Unity shortcuts(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/17/2023-08-17-unity-document-26/</link>
      <pubDate>Thu, 17 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/17/2023-08-17-unity-document-26/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unity快捷键&#34;&gt;Unity快捷键 &lt;a href=&#34;#unity%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;快捷键管理器是Unity中管理键盘快捷键的主要工具。您还可以为Mac触控板配置快捷键。&lt;/p&gt;
&lt;h2 id=&#34;快捷键管理器&#34;&gt;快捷键管理器 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae%e7%ae%a1%e7%90%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;快捷键管理器可让您查看和管理键盘快捷键。&lt;/p&gt;
&lt;p&gt;快捷键是绑定到Unity命令的任何键或键组合。命令是在编辑器中执行的操作。例如，&lt;strong&gt;R&lt;/strong&gt;键绑定到在&lt;strong&gt;场景&lt;/strong&gt;视图中激活&lt;strong&gt;缩放&lt;/strong&gt;工具的命令。&lt;/p&gt;
&lt;p&gt;您可以从Unity的主菜单中访问快捷键管理器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在Windows和Linux上，选择 &lt;strong&gt;Edit &amp;gt; Shortcuts&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在macOS上，选择 &lt;strong&gt;Unity &amp;gt; Shortcuts&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关查看和修改快捷键的更多信息，请参阅快捷键管理器。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-18-unity-document-27/ShortcutManagerNoLabel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;mac触控板快捷键&#34;&gt;Mac触控板快捷键 &lt;a href=&#34;#mac%e8%a7%a6%e6%8e%a7%e6%9d%bf%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Mac触控板还有一些用于在&lt;strong&gt;场景&lt;/strong&gt;视图中进行导航的快捷键。请参阅场景视图导航以了解更多信息。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Search in the Editor(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/16/2023-08-16-unity-document-25/</link>
      <pubDate>Wed, 16 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/16/2023-08-16-unity-document-25/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;在编辑器中进行搜索&#34;&gt;在编辑器中进行搜索 &lt;a href=&#34;#%e5%9c%a8%e7%bc%96%e8%be%91%e5%99%a8%e4%b8%ad%e8%bf%9b%e8%a1%8c%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;有两种类型的搜索功能可供选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unity搜索（之前称为QuickSearch）- 包括执行搜索结果操作的更高级搜索功能。要打开此功能，请选择&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Search All&lt;/strong&gt;，或在&lt;strong&gt;Preferences&lt;/strong&gt;中设置搜索引擎为&lt;strong&gt;默认&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;传统搜索 - Unity的原始搜索功能，如下所述。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;传统搜索功能允许您在&lt;strong&gt;场景视图&lt;/strong&gt;和&lt;strong&gt;层级窗口&lt;/strong&gt;中搜索&lt;strong&gt;游戏对象&lt;/strong&gt;，在&lt;strong&gt;项目窗口&lt;/strong&gt;中搜索&lt;strong&gt;资源&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;每个搜索栏都有相同的基本工作流程。要输入搜索词，请选择文本框并键入一个单词或短语。随着您的输入，Unity会自动搜索这些词并提供结果。&lt;/p&gt;
&lt;p&gt;一些搜索栏允许您按名称、类型或标签等不同的条件进行搜索。要选择要搜索的条件，请选择搜索栏上的放大镜图标以打开搜索下拉菜单，然后选择要使用的条件。&lt;/p&gt;
&lt;p&gt;要清除搜索并将您的游戏对象或资源列表视图恢复为正常状态，请清空搜索栏或选择搜索栏中的小x图标。再次为给您带来的困惑道歉。&lt;/p&gt;
&lt;h2 id=&#34;在场景视图和层级窗口中搜索游戏对象&#34;&gt;在场景视图和层级窗口中搜索游戏对象 &lt;a href=&#34;#%e5%9c%a8%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e5%92%8c%e5%b1%82%e7%ba%a7%e7%aa%97%e5%8f%a3%e4%b8%ad%e6%90%9c%e7%b4%a2%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;场景视图和层级窗口都有一个搜索栏，允许您按名称或类型搜索游戏对象。场景视图和层级窗口表示相同的信息，当您在一个搜索栏中使用时，Unity会自动在另一个搜索栏中以相同的文字填充。&lt;/p&gt;
&lt;p&gt;搜索词充当场景视图和层级窗口中游戏对象的过滤器。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在场景视图中，与搜索词匹配的游戏对象会显示为彩色。所有其他游戏对象显示为灰色。&lt;/li&gt;
&lt;li&gt;在层级窗口中，与搜索词匹配的游戏对象按字母顺序显示。其他所有游戏对象将从视图中消失。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-16-unity-document-25/SearchingInEditor-Scene.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;在项目视图中搜索资源&#34;&gt;在项目视图中搜索资源 &lt;a href=&#34;#%e5%9c%a8%e9%a1%b9%e7%9b%ae%e8%a7%86%e5%9b%be%e4%b8%ad%e6%90%9c%e7%b4%a2%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;项目窗口有一个搜索栏，允许您按名称、类型或标签搜索资源。选择搜索框中的放大镜图标来定义要按哪些条件进行搜索。&lt;/p&gt;
&lt;p&gt;搜索词在项目窗口中充当资源的过滤器。与搜索词匹配的资源按字母顺序显示。不与搜索词匹配的资源不会显示在结果中。&lt;/p&gt;
&lt;h3 id=&#34;资源标签&#34;&gt;资源标签 &lt;a href=&#34;#%e8%b5%84%e6%ba%90%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;标签是一段短文本，可用于将特定的资源分组。要查看现有标签的菜单，请导航到项目窗口标题栏，并选择&lt;strong&gt;按标签搜索&lt;/strong&gt;按钮（标签图标）。从菜单中选择一个标签，以搜索项目中所有具有该标签的资源。&lt;/p&gt;
&lt;p&gt;要向资源添加标签，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;检查器&lt;/strong&gt;中打开资源，并找到底部的预览面板。此窗口可能是最小化的；如果是这种情况，请单击并拖动标题栏向上展开它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-16-unity-document-25/SearchingInEditor-Inspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要打开&lt;strong&gt;标签菜单&lt;/strong&gt;，请点击此面板右下角显示的&lt;strong&gt;标签图标&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要将现有标签添加到资源中，请从此菜单中选择一个标签。已应用于资源的标签旁边有一个勾选标记。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-16-unity-document-25/SearchingInEditor-Labels.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要添加一个新的标签，您首先需要创建一个。将您的新标签名称输入到菜单顶部显示的文本框中，然后按下空格键或回车键。这将创建一个标签，您可以将其添加到任何资源中，并在项目窗口中使用该标签进行搜索。资源可以拥有任意数量的标签，并同时属于多个不同的标签组。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要从资源中删除一个标签，请打开标签菜单，并选择要删除勾选标记的标签。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Undo(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/15/2023-08-15-unity-document-24/</link>
      <pubDate>Tue, 15 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/15/2023-08-15-unity-document-24/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;撤销&#34;&gt;撤销 &lt;a href=&#34;#%e6%92%a4%e9%94%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;撤销历史记录&lt;/strong&gt;窗口提供了一种可视化的方式来浏览撤销历史记录，或一次性撤销或重做编辑器中的多个操作。&lt;/p&gt;
&lt;h2 id=&#34;撤销和重做操作&#34;&gt;撤销和重做操作 &lt;a href=&#34;#%e6%92%a4%e9%94%80%e5%92%8c%e9%87%8d%e5%81%9a%e6%93%8d%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要打开&lt;strong&gt;撤销历史记录&lt;/strong&gt;窗口，请单击撤销图标 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-15-unity-document-24/undo-icon.png&#34; alt=&#34;&#34;&gt;), 或选择 &lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Undo History&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-15-unity-document-24/undo-window.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;撤销历史记录&lt;/strong&gt;窗口中选择一个条目，即可自动将项目恢复到该点。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-15-unity-document-24/undo-history.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;一旦选择了一个操作，可重做的操作将用红线标示。点击任何操作即可将其添加回来。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-15-unity-document-24/undo-history-redo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;更改操作顺序&#34;&gt;更改操作顺序 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e6%93%8d%e4%bd%9c%e9%a1%ba%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要更改撤销窗口中操作的排序顺序，请在&lt;strong&gt;撤销历史记录&lt;/strong&gt;窗口中打开&lt;strong&gt;更多选项&lt;/strong&gt;（&lt;strong&gt;：&lt;/strong&gt;）菜单，并选择按最新操作显示或按最早操作显示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-15-unity-document-24/undo-action-order.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Additional windows(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/14/2023-08-14-unity-document-23/</link>
      <pubDate>Mon, 14 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/14/2023-08-14-unity-document-23/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;其他窗口&#34;&gt;其他窗口 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;除了Unity界面的主要窗口之外，本指南的其他部分还介绍了几个其他窗口：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;该窗口的文档:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;领域或主题:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;控制台&lt;/strong&gt;窗口显示消息、警告和错误的日志。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;脚本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;动画&lt;/strong&gt;窗口可让您为&lt;strong&gt;场景中的游戏对象&lt;/strong&gt;创建动画。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;动画&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Profiler&lt;/strong&gt;窗口可用于调查和查找游戏中的性能瓶颈。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;照明&lt;/strong&gt;窗口可用于管理场景中的照明。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;照明&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;遮挡剔除&lt;/strong&gt;窗口可用于管理遮挡剔除以提高性能。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;相机&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Console Window(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/13/2023-08-13-unity-document-22/</link>
      <pubDate>Sun, 13 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/13/2023-08-13-unity-document-22/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;控制台窗口&#34;&gt;控制台窗口 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e5%8f%b0%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;控制台&lt;/strong&gt;窗口显示编辑器生成的错误、警告和其他消息。这些错误和警告可以帮助您找到项目中的问题，例如脚本编译错误。它们还可以提醒您编辑器自动执行的操作，例如替换丢失的元文件，这可能会在项目的其他地方引发问题。&lt;/p&gt;
&lt;p&gt;为了帮助您调试项目，可以使用调试类将自己的消息打印到控制台。例如，您可以打印脚本中某些位置的变量值，以查看它们的变化情况。&lt;/p&gt;
&lt;p&gt;本页面介绍了在使用&lt;strong&gt;控制台窗口&lt;/strong&gt;时可用的选项，以及如何通过搜索特定关键字来过滤消息。&lt;/p&gt;
&lt;h2 id=&#34;控制台窗口界面&#34;&gt;控制台窗口界面 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e5%8f%b0%e7%aa%97%e5%8f%a3%e7%95%8c%e9%9d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要打开控制台，请从 Unity 的主菜单中选择 &lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;Console&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/Console.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;. 控制台的 &lt;em&gt;&lt;strong&gt;工具栏&lt;/strong&gt;&lt;/em&gt; 提供了控制消息显示方式、搜索和筛选消息的选项。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;B&lt;/strong&gt;. 控制台窗口菜单提供了打开日志文件、控制列表中每个消息的可见行数以及设置堆栈跟踪选项的选项。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C&lt;/strong&gt;. 控制台列表显示了每条记录的消息。选择一条消息可以在详细区域显示其完整文本。在这里，您可以选择每条消息显示多少行。请参阅下面的调整行数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;D&lt;/strong&gt;. 详细区域显示了所选消息的完整文本。如果启用了堆栈跟踪，详细区域将显示代码文件中特定行的引用作为可点击的链接。&lt;/p&gt;
&lt;h2 id=&#34;控制台工具栏选项&#34;&gt;控制台工具栏选项 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e5%8f%b0%e5%b7%a5%e5%85%b7%e6%a0%8f%e9%80%89%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;控制台窗口的工具栏提供了控制消息显示方式、搜索和筛选消息的选项。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;选项&lt;/strong&gt;：&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;：&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;清除&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;移除由您的代码生成的任何消息，但保留编译器错误。打开下拉菜单以选择清除选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;游戏播放时清除&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在进入游戏模式时自动清除控制台中的消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;构建时清除&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在构建项目时清除控制台中的消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;重新编译时清除&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在重新编译项目时清除控制台中的消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;折叠&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;仅显示重复的错误消息的第一个实例。这在运行时错误中非常有用，例如每帧更新时都会发生的空引用错误。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;出错暂停&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;每当您从脚本中调用 &lt;code&gt;Debug.LogError&lt;/code&gt; 时，播放暂停。使用此选项可以在执行的特定位置冻结播放并检查场景。调用 &lt;code&gt;Debug.Log&lt;/code&gt; 时不会暂停播放。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;[连接到播放器]&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开下拉菜单，以连接到运行在远程设备上的开发构建，并在控制台中显示它们的播放器日志。此选项的标签是目标开发构建的名称（即在控制台窗口中显示的日志的构建）。如果控制台未连接到远程构建，则标签为&lt;strong&gt;Editor&lt;/strong&gt;，表示在控制台窗口中显示的日志来自本地Unity编辑器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;播放器日志&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果控制台已连接到远程开发构建，则为该构建启用播放器日志记录。禁用此选项会暂停日志记录，但控制台仍会连接到目标构建。禁用此选项还会隐藏此下拉菜单中的其余选项。选择下面 &lt;strong&gt;播放器日志&lt;/strong&gt; 下列出的任何构建，可以在控制台窗口中显示其日志。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果控制台已连接到一个远程&lt;em&gt;&lt;strong&gt;开发构建&lt;/strong&gt;&lt;/em&gt;，选择此选项可显示本地Unity播放器的日志，而不是远程构建的日志。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&amp;lt;输入IP地址&amp;gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开&lt;strong&gt;输入播放器IP地址&lt;/strong&gt;对话框，您可以在其中指定远程设备上开发构建的IP地址。要连接到该构建，请在对话框中选择&lt;strong&gt;连接&lt;/strong&gt;，并将其添加到下拉菜单底部的开发构建列表中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;[开发构建列表]&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;列出可用的开发构建。包括自动检测到的构建以及使用&lt;strong&gt;输入IP地址&lt;/strong&gt;选项添加的构建。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;搜索和过滤控制台输出&#34;&gt;搜索和过滤控制台输出 &lt;a href=&#34;#%e6%90%9c%e7%b4%a2%e5%92%8c%e8%bf%87%e6%bb%a4%e6%8e%a7%e5%88%b6%e5%8f%b0%e8%be%93%e5%87%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以从控制台搜索栏中搜索特定关键字的控制台消息。当您输入搜索术语时，控制台会过滤显示只包含匹配文本的消息。控制台只在消息文本中的可见部分中突出显示第一个匹配项（参见下面的调整行数）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/ConsoleSearch.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以搜索任何出现在控制台消息中的内容，包括数字和特殊字符。例如，您可以搜索控制台记录消息的时间。&lt;/p&gt;
&lt;p&gt;搜索栏中的搜索将查找与您键入的内容完全匹配的结果。您不能同时搜索两个不同的术语，也不能使用常见的搜索引擎运算符。&lt;/p&gt;
&lt;p&gt;您还可以按类型筛选控制台消息。单击搜索栏旁边的按钮可以切换：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Button&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/ConsoleFilterMessage.png&#34; alt=&#34;&#34;&gt;&lt;strong&gt;消息筛选开关&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示控制台中的消息数量。单击以显示或隐藏消息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/ConsoleFilterWarning.png&#34; alt=&#34;&#34;&gt;&lt;strong&gt;警告筛选开关&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示控制台中的警告数量。单击以显示或隐藏警告。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/ConsoleFilterError.png&#34; alt=&#34;&#34;&gt;&lt;strong&gt;错误筛选开关&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示控制台中的错误数量。单击以显示或隐藏错误。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;调整行数&#34;&gt;调整行数 &lt;a href=&#34;#%e8%b0%83%e6%95%b4%e8%a1%8c%e6%95%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每个控制台条目最多可以有10行。&lt;/p&gt;
&lt;p&gt;要控制在列表中可见的每个条目的行数，请单击控制台菜单按钮，然后从菜单中选择&lt;strong&gt;Log Entry&lt;/strong&gt; &amp;gt; &lt;strong&gt;[X] Lines&lt;/strong&gt;，其中**[X]**是每个条目要显示的行数。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-13-unity-document-22/ConsoleAdjustLineCount.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;更大的行数可显示每个条目的更多文本内容，但会减少在任意给定时间内可见的条目数量。行数不影响控制台的搜索功能，搜索始终搜索完整的消息文本。如果匹配的文本位于隐藏的行上，搜索结果中会返回该消息，但不会展开或突出显示匹配的文本。您可以在详细区域中查看完整的消息文本，但其中的匹配文本不会突出显示。&lt;/p&gt;
&lt;h2 id=&#34;堆栈跟踪记录&#34;&gt;堆栈跟踪记录 &lt;a href=&#34;#%e5%a0%86%e6%a0%88%e8%b7%9f%e8%b8%aa%e8%ae%b0%e5%bd%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity控制台消息和日志文件可以包含详细的堆栈跟踪信息。您可以使用堆栈跟踪记录设置来控制堆栈跟踪信息的数量。&lt;/p&gt;
&lt;h2 id=&#34;从控制台打开日志文件&#34;&gt;从控制台打开日志文件 &lt;a href=&#34;#%e4%bb%8e%e6%8e%a7%e5%88%b6%e5%8f%b0%e6%89%93%e5%bc%80%e6%97%a5%e5%bf%97%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity或您的代码写入控制台窗口的所有内容也会写入日志文件中。您可以从控制台窗口菜单中打开日志文件。选择&lt;strong&gt;Open Player Log&lt;/strong&gt;或&lt;strong&gt;Open Editor Log&lt;/strong&gt;。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Background Tasks window(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/12/2023-08-12-unity-document-21/</link>
      <pubDate>Sat, 12 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/12/2023-08-12-unity-document-21/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;后台任务窗口&#34;&gt;后台任务窗口 &lt;a href=&#34;#%e5%90%8e%e5%8f%b0%e4%bb%bb%e5%8a%a1%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;后台任务窗口显示正在运行的异步任务的进度。例如，您可以查看着色器编译、灯光图烘焙和遮挡剔除的进度。&lt;/p&gt;
&lt;p&gt;要打开后台任务窗口，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从菜单中选择&lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;Progress&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;从Unity编辑器状态栏，单击全局进度条或活动指示器（旋转器）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/window-bg-tasks-overview.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;工具栏&lt;/strong&gt;：提供筛选任务选项和从列表中清除非活动任务的选项。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务列表&lt;/strong&gt;：显示有关每个任务的进度信息，包括：
&lt;ul&gt;
&lt;li&gt;活动任务，包括停止响应的任务。&lt;/li&gt;
&lt;li&gt;一些已完成的任务。默认情况下，Unity会从列表中删除这些任务，但有些任务设计为手动清除之前一直保留在列表中。&lt;/li&gt;
&lt;li&gt;失败和取消的任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;任务信息&#34;&gt;任务信息 &lt;a href=&#34;#%e4%bb%bb%e5%8a%a1%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;后台任务窗口中的每个条目显示了有关任务的以下信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/window-bg-tasks-task.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;截图标签&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;部分&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;显示内容&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务名称/描述&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务的名称或简短描述。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;进度条&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示任务完成的进度。如果任务无法测量其进度而是不确定的，则进度条会显示一个小的填充区域，在任务完成之前从一边移动到另一边。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;3&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;完成百分比&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以百分比显示任务完成的进度。对于进度无法测量的不确定任务，该区域为空。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;4&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;取消&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;单击以取消活动任务。如果任务无法取消，则不会显示此图标。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;5&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;状态&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可选择显示活动任务当前活动的简短描述。任务完成后，该区域将显示其最终状态（例如，完成、失败或取消）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;6&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;经过时间/剩余时间/总时间&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当活动任务耗时几秒钟以上时，显示当前已经经过的时间或估计剩余时间。任务完成后，该区域显示总耗时。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;子任务&#34;&gt;子任务 &lt;a href=&#34;#%e5%ad%90%e4%bb%bb%e5%8a%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;某些任务会生成子任务。进度窗口在父任务中显示总体进度条（1），并为每个子任务显示一个子进度条（2）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/window-bg-tasks-subtasks.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;通过监视子任务，可以确定复杂任务中耗时最长的部分。这对于像光照贴图烘焙这样有数百个子任务的操作非常有用。&lt;/p&gt;
&lt;h2 id=&#34;查看任务状态&#34;&gt;查看任务状态 &lt;a href=&#34;#%e6%9f%a5%e7%9c%8b%e4%bb%bb%e5%8a%a1%e7%8a%b6%e6%80%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;后台任务可以具有以下状态：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;状态&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Icon&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;活动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务正在运行，并报告完成的百分比或估计的剩余时间。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不确定&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务正在运行，并报告进度，但无法确定离完成有多近。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;完成&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务已成功完成。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/CompletedTask@2x.png&#34; alt=&#34;&#34;&gt;（勾选标志）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无响应&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任务在五秒内未报告任何进展。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;取消&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;因手动取消，任务不再处于活动状态。某些任务无法从后台任务窗口中取消。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/Warning@2x.png&#34; alt=&#34;&#34;&gt;（警告符号）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;失败&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;因失败，任务不再处于活动状态。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/Error@2x.png&#34; alt=&#34;&#34;&gt;（错误符号）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;按状态筛选任务&#34;&gt;按状态筛选任务 &lt;a href=&#34;#%e6%8c%89%e7%8a%b6%e6%80%81%e7%ad%9b%e9%80%89%e4%bb%bb%e5%8a%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在后台任务窗口的工具栏中使用筛选选项来隐藏和显示不同类型的任务。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/window-bg-tasks-filters.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;筛选选项&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;显示或隐藏&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/CompletedTask@2x-172300805542715.png&#34; alt=&#34;&#34;&gt; （勾选标志）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;已完成的任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/Warning@2x-172300806097118.png&#34; alt=&#34;&#34;&gt;（警告符号）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;取消和无响应的任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-12-unity-document-21/Error@2x-172300806608221.png&#34; alt=&#34;&#34;&gt;（错误符号)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;失败的任务&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;取消活动任务&#34;&gt;取消活动任务 &lt;a href=&#34;#%e5%8f%96%e6%b6%88%e6%b4%bb%e5%8a%a8%e4%bb%bb%e5%8a%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以直接从后台任务窗口取消一些正在运行的任务。要取消正在运行的任务，请单击&lt;strong&gt;取消&lt;/strong&gt;（&lt;strong&gt;x&lt;/strong&gt;）图标。&lt;/p&gt;
&lt;h2 id=&#34;清除不活动任务&#34;&gt;清除不活动任务 &lt;a href=&#34;#%e6%b8%85%e9%99%a4%e4%b8%8d%e6%b4%bb%e5%8a%a8%e4%bb%bb%e5%8a%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;单击工具栏中的&lt;strong&gt;清除不活动&lt;/strong&gt;按钮，以从列表中移除所有不活动任务。&lt;/p&gt;
&lt;p&gt;Unity会自动清除大多数已完成的任务。然而，有些任务设计成在您手动清除之前一直保留在列表中。&lt;/p&gt;
&lt;p&gt;失败的和被取消的任务也会保留在列表中，直到您手动清除它们。&lt;/p&gt;
&lt;p&gt;要清除无响应的任务，您必须首先取消它们。&lt;/p&gt;
&lt;h2 id=&#34;查看全局进度&#34;&gt;查看全局进度 &lt;a href=&#34;#%e6%9f%a5%e7%9c%8b%e5%85%a8%e5%b1%80%e8%bf%9b%e5%ba%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity编辑器的状态栏显示一个全局进度条，显示所有活动任务的汇总整体进度。它不包括已完成、失败或已取消的任务。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The status bar(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/11/2023-08-11-unity-document-20/</link>
      <pubDate>Fri, 11 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/11/2023-08-11-unity-document-20/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;状态栏&#34;&gt;状态栏 &lt;a href=&#34;#%e7%8a%b6%e6%80%81%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;状态栏提供有关各种Unity进程的通知，并快速访问相关工具和设置。您不能移动或重新排列状态栏。&lt;/p&gt;
&lt;p&gt;状态栏显示如下内容：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-11-unity-document-20/status-bar-overview.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最近记录到控制台窗口的消息。单击消息以打开控制台窗口。&lt;/li&gt;
&lt;li&gt;全局进度条，用于显示各种异步任务的进度（例如，着色器编译、灯光图烘焙和遮挡剔除）。单击进度条以打开后台任务窗口，该窗口显示每个任务和子任务的进度。&lt;/li&gt;
&lt;li&gt;当前的代码优化模式。单击代码优化图标以在调试模式和发布模式之间进行切换。&lt;/li&gt;
&lt;li&gt;缓存服务器状态。单击图标以获取有关缓存服务器的附加信息，并重新建立失去的连接。&lt;/li&gt;
&lt;li&gt;活动指示器（旋转器），显示Unity正在编译C#脚本或运行异步任务的时候。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Toolbar(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/10/2023-08-10-unity-document-19/</link>
      <pubDate>Thu, 10 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/10/2023-08-10-unity-document-19/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;工具栏&#34;&gt;工具栏 &lt;a href=&#34;#%e5%b7%a5%e5%85%b7%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以在编辑器的顶部找到工具栏。工具栏不是一个窗口，它是编辑器界面中唯一无法重新排列的部分。&lt;/p&gt;
&lt;p&gt;如需在场景视图中使用其他工具，请参考覆盖工具。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-10-unity-document-19/ToolbarCallout.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Unity Account按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从&amp;quot;账户&amp;quot;下拉菜单中访问您的Unity账户。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Cloud按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&amp;quot;Cloud&amp;quot;按钮，打开Unity服务窗口。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Asset Store按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从&amp;quot;Asset Store&amp;quot;下拉菜单中前往Asset Store或在软件包管理器中查看您的资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Unity Version control按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开Unity版本控制窗口。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Play模式控制按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在Game视图中控制播放模式。按下播放按钮将编辑器切换到播放模式。按下暂停按钮暂停播放模式。按下步骤按钮将播放模式向前移动一帧。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Undo History按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用撤销历史记录查看、撤销或重做在编辑器中执行的操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的Global Search按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开全局搜索。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的图层按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从&amp;quot;图层&amp;quot;下拉菜单中控制在场景视图中显示什么。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑器工具栏上的布局按钮&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改视图的排列方式，然后从&amp;quot;布局&amp;quot;下拉菜单中保存新布局或加载现有布局。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Editing properties(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/09/2023-08-09-unity-document-18/</link>
      <pubDate>Wed, 09 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/09/2023-08-09-unity-document-18/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;编辑属性&#34;&gt;编辑属性 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;属性是&lt;strong&gt;GameObject&lt;/strong&gt;组件和资源的设置和选项。您可以在检视器窗口中编辑属性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/PropertiesExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;属性可以分为以下几个主要类别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**引用（References）：**链接到其他GameObject和资源。&lt;/li&gt;
&lt;li&gt;**值（Values）：**数字、颜色、开关设置、文本等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;引用&#34;&gt;引用 &lt;a href=&#34;#%e5%bc%95%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;引用属性可以接受项目资源或场景中的GameObject作为输入。例如，网格过滤器（Mesh Filter）组件引用了项目中的某个网格资源（Mesh Asset）。&lt;/p&gt;
&lt;p&gt;创建组件时，其引用属性为未分配状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/RefPropUnassigned.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以通过将对象和资源拖放到引用属性字段上，或使用目标选择器窗口将引用分配给属性。&lt;/p&gt;
&lt;p&gt;某些引用属性接受特定类型的组件（例如Transform）。当您将GameObject分配给这些属性时，Unity会在GameObject上找到第一个所需类型的组件，并将其分配给引用属性。如果GameObject没有任何正确类型的组件，则无法将GameObject分配给属性。&lt;/p&gt;
&lt;h3 id=&#34;通过拖放分配引用&#34;&gt;通过拖放分配引用 &lt;a href=&#34;#%e9%80%9a%e8%bf%87%e6%8b%96%e6%94%be%e5%88%86%e9%85%8d%e5%bc%95%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将引用分配给属性，请将兼容的GameObject或资源拖放到检视器中的属性字段上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-refprop-dragdrop.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用对象选择器窗口进行引用对象的分配&#34;&gt;使用对象选择器窗口进行引用对象的分配 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e5%af%b9%e8%b1%a1%e9%80%89%e6%8b%a9%e5%99%a8%e7%aa%97%e5%8f%a3%e8%bf%9b%e8%a1%8c%e5%bc%95%e7%94%a8%e5%af%b9%e8%b1%a1%e7%9a%84%e5%88%86%e9%85%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用对象选择器窗口来查找和选择要分配的引用对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-refprop-picker.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击检视器（Inspector）中属性右侧的小圆圈图标，打开一个对象选择器窗口。&lt;/li&gt;
&lt;li&gt;找到要引用的对象或资产，并双击它以将其分配给属性。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;值&#34;&gt;值 &lt;a href=&#34;#%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以使用简单的控件来编辑大多数值属性。例如：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;字段&lt;/strong&gt;：您可以在字段中输入文本和数值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-numeric.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以直接在属性字段中输入数值，或者点击并拖动属性标签来增加和减小数值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-numeric-drag.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;某些属性还具有&lt;strong&gt;滑块&lt;/strong&gt;，用于调整数值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-slider.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;复选框&lt;/strong&gt;：您可以切换属性的开启和关闭状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-checkbox.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;下拉框&lt;/strong&gt;和&lt;strong&gt;弹出菜单&lt;/strong&gt;：您可以从多个可能的值中选择一个。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-popup.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;数字字段表达式&#34;&gt;数字字段表达式 &lt;a href=&#34;#%e6%95%b0%e5%ad%97%e5%ad%97%e6%ae%b5%e8%a1%a8%e8%be%be%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;数字字段输入控件也接受数学表达式，例如在字段中输入&lt;code&gt;2+3&lt;/code&gt;将得到值&lt;code&gt;5&lt;/code&gt;。有关支持的表达式的详细信息，请参阅ExpressionEvaluator C＃类文档。&lt;/p&gt;
&lt;p&gt;数字字段还支持在同时编辑多个选定对象时非常有用的特殊函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;L(a,b)&lt;/code&gt;：在&lt;code&gt;a&lt;/code&gt;和&lt;code&gt;b&lt;/code&gt;之间产生线性过渡。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-expr-L.png&#34; alt=&#34;&#34;&gt;
&lt;strong&gt;在X坐标中输入&lt;code&gt;L(-6,6)&lt;/code&gt;可以将十个选定的胶囊均匀分布在-6到6之间。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;R(a,b)&lt;/code&gt;：在&lt;code&gt;a&lt;/code&gt;和&lt;code&gt;b&lt;/code&gt;之间产生随机值。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-expr-R.png&#34; alt=&#34;&#34;&gt;
&lt;strong&gt;在Z坐标中输入&lt;code&gt;R(-2,2)&lt;/code&gt;将选定的胶囊的Z坐标设置为-2到2之间的随机值。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;+=&lt;/code&gt;、&lt;code&gt;-=&lt;/code&gt;、&lt;code&gt;*=&lt;/code&gt;、&lt;code&gt;/=&lt;/code&gt;表达式可用于修改当前值，例如输入&lt;code&gt;*=2&lt;/code&gt;会使所有字段的值增大一倍。
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-expr-assign.png&#34; alt=&#34;&#34;&gt;
&lt;strong&gt;在Z坐标中输入&lt;code&gt;/=3&lt;/code&gt;会使所有的Z坐标减小三倍。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以组合数学表达式。例如，您可以将线性分布值&lt;code&gt;L(0,2*pi)&lt;/code&gt;作为三角函数的参数。为了说明这一点，以下示例将此线性过渡函数作为正弦和余弦函数的参数，以便将一组选定的对象分布在圆形中：
&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-expr-trig.png&#34; alt=&#34;&#34;&gt;&lt;em&gt;在X坐标中输入&lt;code&gt;cos(L(0,2\*pi))\*5&lt;/code&gt;，在Z坐标中输入&lt;code&gt;sin(L(0,2\*pi))\*5&lt;/code&gt;将十个选定的胶囊放置在一个圆环中。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;在编写自定义检视器时，所有EditorGUI.PropertyField和EditorGUILayout.PropertyField控件都自动支持数字表达式。&lt;/p&gt;
&lt;p&gt;一些游戏对象和资源具有更复杂的属性，您可以使用专用的控件或专用的编辑器进行编辑。本节的其余部分将介绍如何设置这些复杂属性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：约束比例缩放不支持多选的数学表达式。&lt;/p&gt;
&lt;h3 id=&#34;颜色值&#34;&gt;颜色值 &lt;a href=&#34;#%e9%a2%9c%e8%89%b2%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Inspector窗口将颜色属性显示为色块。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-color.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击任何一个色块，将打开一个颜色选择器或者一个HDR颜色选择器，具体取决于上下文。例如，当您编辑标准着色器中的&lt;strong&gt;emission&lt;/strong&gt;颜色属性时，Unity会显示HDR颜色选择器窗口。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/color-pickers.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您还可以使用取色器从屏幕上的任何位置选择颜色值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-property-color-eyedropper.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要选择颜色，请点击颜色属性旁边的取色器按钮，然后在屏幕上的任意位置单击。Unity会将颜色属性设置为您单击的&lt;strong&gt;像素&lt;/strong&gt;的颜色。&lt;/p&gt;
&lt;p&gt;您可以将设置的颜色保存在可重用的色块库中，这样您可以在项目之间共享这些色块。&lt;/p&gt;
&lt;h3 id=&#34;渐变值&#34;&gt;渐变值 &lt;a href=&#34;#%e6%b8%90%e5%8f%98%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;渐变是颜色过渡的视觉表示。它们对于将一个颜色逐渐混合到另一个颜色中，在空间或时间上非常有用。&lt;/p&gt;
&lt;p&gt;在Unity中，渐变值被粒子系统、线渲染器和其他一些组件使用。您还可以在您的C#脚本中使用公共的Gradient类变量，检视器将为其显示渐变编辑器。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/inspector-gradient-editor.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;渐变编辑器显示了主要的颜色，称为&amp;quot;键&amp;quot;，以及渐变条中它们之间的所有中间色调（1）。&lt;/p&gt;
&lt;p&gt;渐变条底部的向上箭头表示颜色键（2）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单击键以选择它。Unity将在颜色字段中显示其颜色值。
&lt;ul&gt;
&lt;li&gt;单击颜色色板（3），使用标准颜色选择器编辑颜色。&lt;/li&gt;
&lt;li&gt;您还可以使用取色器工具（4）从屏幕上的任何位置选择颜色值。单击取色器按钮，然后单击屏幕上的任何位置。Unity将颜色属性设置为您单击的像素的颜色。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;单击渐变条下的空白区域添加一个键。&lt;/li&gt;
&lt;li&gt;单击并拖动键进行移动。&lt;/li&gt;
&lt;li&gt;要删除键，选择它并使用&lt;strong&gt;Ctrl/Cmd + Delete&lt;/strong&gt;快捷键。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;渐变条上方的向下箭头表示Alpha键（5），它们控制给定点处渐变的透明度。您可以通过相同的方式添加和编辑Alpha键来编辑颜色键。当您选择一个Alpha键时，渐变编辑器将显示一个&lt;strong&gt;Alpha&lt;/strong&gt;滑块，而不是&lt;strong&gt;Color&lt;/strong&gt;字段。&lt;/p&gt;
&lt;p&gt;默认情况下，渐变有两个键设置为100%的Alpha，使渐变完全不透明。您可以编辑键来调整透明度，并根据需要添加其他键。&lt;/p&gt;
&lt;p&gt;渐变可以使用几种不同的颜色插值模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;*混合（Blend）*模式在颜色键之间线性插值。&lt;/li&gt;
&lt;li&gt;*混合（感知）（Blend (Perceptual)）*模式使用感知统一的“Oklab”颜色空间在颜色键之间进行插值。&lt;/li&gt;
&lt;li&gt;*固定（Fixed）*模式不插值颜色，而是使用颜色或Alpha键的值，直到下一个键。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/GradientEditorModeBlend.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/GradientEditorModePerceptual.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/GradientEditorModeFixed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;曲线&#34;&gt;曲线 &lt;a href=&#34;#%e6%9b%b2%e7%ba%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;曲线&lt;/strong&gt;是一条线图，显示了对于输入值（x轴）的变化，响应值（y轴）的变化情况。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/CurveEditor.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Unity在各种不同的上下文中使用曲线，尤其是在动画中。曲线编辑器具有许多不同的选项和工具。有关详细信息，请参阅编辑曲线。&lt;/p&gt;
&lt;h3 id=&#34;条形滑块&#34;&gt;条形滑块 &lt;a href=&#34;#%e6%9d%a1%e5%bd%a2%e6%bb%91%e5%9d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;条形滑块是一种专门的控件，可以通过可视化方式来分配特定的资源。例如，LOD Group组件使用条形滑块来定义游戏对象LOD级别之间的过渡。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/LODGroup-SpeedTreeModels.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以通过拖动段边缘来调整条中每个段的相对值。某些条形滑块还具有可拖动的手柄。&lt;/p&gt;
&lt;h3 id=&#34;数组&#34;&gt;数组 &lt;a href=&#34;#%e6%95%b0%e7%bb%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当脚本将数组公开为公共变量时，检视器将显示一个控件，可让您同时编辑数组中的条目数量（大小）以及其中的值或引用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/ArrayInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当您减小大小值时，Unity会从数组的末尾移除值。当您增加大小值时，Unity会将当前最后一个值复制到添加的所有新元素中。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;提示：&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;要设置一个值大部分相同的数组，先添加第一个元素，然后更改大小以将其值复制到后续元素中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;创建色卡库&#34;&gt;创建色卡库 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e8%89%b2%e5%8d%a1%e5%ba%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用色卡库来重用、保存和共享颜色、渐变和动画曲线。您可以在颜色选择器、渐变编辑器和曲线编辑器中保存和选择色卡。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/PresetLibrary.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;色卡库是保存在文件中的色卡集合。色卡部分每次只显示一个库。&lt;/p&gt;
&lt;p&gt;保存色卡的步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开颜色选择器、渐变编辑器或曲线编辑器。例如，在Hierarchy窗口中选择Main Camera。&lt;/li&gt;
&lt;li&gt;在Inspector窗口中，点击Background Color。&lt;/li&gt;
&lt;li&gt;在选择器窗口中，调整颜色、渐变或曲线以适合您的喜好。&lt;/li&gt;
&lt;li&gt;在色卡中，点击轮廓框。&lt;/li&gt;
&lt;li&gt;如果视图处于列表模式，可以选择为色卡键入一个名称。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-09-unity-document-18/SwatchSaving.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;拖放色卡以更改它们的顺序。右键点击色卡可将其移动到顶部、替换它、重命名它或删除它。也可以通过Alt/Option点击色卡来删除它。&lt;/p&gt;
&lt;p&gt;在色卡中的下拉菜单中，可以进行以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择&amp;quot;列表&amp;quot;或&amp;quot;网格&amp;quot;以改变视图。列表视图还显示色卡的名称。&lt;/li&gt;
&lt;li&gt;选择色卡库。&lt;/li&gt;
&lt;li&gt;选择&amp;quot;创建库&amp;quot;以创建一个新的色卡库并选择保存位置。&lt;/li&gt;
&lt;li&gt;选择&amp;quot;显示当前库的位置&amp;quot;以在Windows资源管理器/Mac OS Finder中查看当前库的位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认情况下，Unity将色卡库保存在用户首选项中。您也可以将色卡库保存在项目中。Unity将项目色卡库保存在Assets文件夹的Editor文件夹中。要在用户之间共享项目色卡库，或将其包含在软件包中，可以将它们添加到版本控制存储库中。&lt;/p&gt;
&lt;p&gt;要编辑项目色卡库，请执行以下操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在Project窗口中选择色卡库。&lt;/li&gt;
&lt;li&gt;在Inspector窗口中，点击&amp;quot;编辑&amp;quot;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Inspector window(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/08/2023-08-08-unity-document-17/</link>
      <pubDate>Tue, 08 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/08/2023-08-08-unity-document-17/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;inspector-窗口&#34;&gt;Inspector 窗口 &lt;a href=&#34;#inspector-%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用 &lt;strong&gt;Inspector&lt;/strong&gt; 窗口可以查看和编辑 Unity 编辑器中几乎所有内容的属性和设置，包括 &lt;strong&gt;GameObjects&lt;/strong&gt;、Unity 组件、资源、材质以及编辑器设置和首选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/InspectorWindowCallout.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;打开-inspector-窗口&#34;&gt;打开 Inspector 窗口 &lt;a href=&#34;#%e6%89%93%e5%bc%80-inspector-%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要打开 Inspector 窗口，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从菜单中选择 &lt;strong&gt;Windows &amp;gt; General &amp;gt; Inspector&lt;/strong&gt; 以打开一个浮动的 Inspector 窗口。&lt;/li&gt;
&lt;li&gt;在任何窗口的 More Items 菜单 (⋮) 中，选择 &lt;strong&gt;Add Tab &amp;gt; Inspector&lt;/strong&gt; 以在新标签页中打开一个 Inspector。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以打开任意数量的 Inspector 窗口，并按照与其他窗口相同的方式重新定位、停靠和调整大小。&lt;/p&gt;
&lt;h2 id=&#34;控制-inspector-窗口焦点&#34;&gt;控制 Inspector 窗口焦点 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6-inspector-%e7%aa%97%e5%8f%a3%e7%84%a6%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，Inspector 窗口显示当前选择项的属性。当选择项更改时，Inspector 的内容也会相应更改。要始终保持相同的属性集打开，不管当前选择项如何，您可以执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;锁定 Inspector 窗口至当前选择项。当您锁定一个 Inspector 窗口时，如果您更改了选择项，它不会再更新。&lt;/li&gt;
&lt;li&gt;打开一个针对 GameObject、Asset 或组件的专注 Inspector。专注 Inspector 仅会显示您打开它的项目的属性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;检查项目&#34;&gt;检查项目 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在 Inspector 窗口中可以看到和编辑的内容取决于选择的项目类型。本节描述了选择不同类型项目时 Inspector 窗口显示的内容。&lt;/p&gt;
&lt;h3 id=&#34;检查-gameobject&#34;&gt;检查 GameObject &lt;a href=&#34;#%e6%a3%80%e6%9f%a5-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当选择一个 GameObject（例如，在层级视图或场景视图中），Inspector 窗口会显示其所有组件和材质的属性。您可以编辑这些属性，并在 Inspector 窗口中重新排序组件。&lt;/p&gt;
&lt;h3 id=&#34;检查自定义脚本组件&#34;&gt;检查自定义脚本组件 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e8%87%aa%e5%ae%9a%e4%b9%89%e8%84%9a%e6%9c%ac%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当 GameObject 附加了自定义脚本组件时，Inspector 窗口会显示&lt;strong&gt;脚本&lt;/strong&gt;的公共变量。您可以像编辑其他属性一样编辑脚本变量，这意味着您可以在脚本中设置参数和默认值，而无需修改代码。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅脚本部分中的变量和 Inspector。&lt;/p&gt;
&lt;h3 id=&#34;检查资源&#34;&gt;检查资源 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您选择一个资源（例如，从项目窗口中选择），Inspector 会显示控制Unity在运行时导入和使用资源的设置。&lt;/p&gt;
&lt;p&gt;每种类型的资源都有自己的设置。在 Inspector 窗口中编辑的资源导入设置的示例包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型导入设置窗口。&lt;/li&gt;
&lt;li&gt;音频剪辑导入设置窗口。&lt;/li&gt;
&lt;li&gt;纹理导入设置窗口。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;检查设置和首选项&#34;&gt;检查设置和首选项 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e8%ae%be%e7%bd%ae%e5%92%8c%e9%a6%96%e9%80%89%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您打开项目设置（菜单：&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project Settings&lt;/strong&gt;）时，Unity 会将其显示在 Inspector 窗口中。&lt;/p&gt;
&lt;h3 id=&#34;检查预设&#34;&gt;检查预设 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您使用预设时，Inspector 窗口会显示一些额外的信息并提供一些额外的选项。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当您编辑预设实例时，Inspector 窗口提供了与预设资源和应用覆盖项相关的选项。&lt;/li&gt;
&lt;li&gt;当您应用实例覆盖项时，Inspector 窗口会以粗体显示您覆盖的属性名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关在 Inspector 窗口中使用预设的更多信息，请参阅预设部分。&lt;/p&gt;
&lt;h2 id=&#34;检查多个项目&#34;&gt;检查多个项目 &lt;a href=&#34;#%e6%a3%80%e6%9f%a5%e5%a4%9a%e4%b8%aa%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您选择了两个或多个项目时，您可以在一个 Inspector 窗口中编辑它们共有的所有属性。Unity 会将您提供的值复制到所有选定的项目中。Inspector 窗口会显示所选项目的数量计数。&lt;/p&gt;
&lt;h3 id=&#34;多个-gameobjects&#34;&gt;多个 GameObjects &lt;a href=&#34;#%e5%a4%9a%e4%b8%aa-gameobjects&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您选择多个 GameObjects 时，Inspector 窗口会显示它们共有的所有组件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于在两个或多个选定的 GameObjects 中具有不同属性值的属性，Inspector 会显示一个短线 (&lt;strong&gt;-&lt;/strong&gt;)（在下面的截图中为 1）。&lt;/li&gt;
&lt;li&gt;对于在所有选定的 GameObjects 中具有相同属性值的属性，Inspector 会显示实际值（在下面的截图中为 2）。&lt;/li&gt;
&lt;li&gt;要将一个选定的 GameObject 的属性值应用到所有选定的 GameObjects 中，右键单击属性名称，然后从上下文菜单中选择&lt;strong&gt;Set to Value of [Name of GameObject]&lt;/strong&gt;（在下面的截图中为 3）。&lt;/li&gt;
&lt;li&gt;如果任何一个选定的 GameObject 具有其他选定对象上没有的组件，Inspector 会显示一条消息，指示某些组件被隐藏。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/MultiObjectEdit.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;多个资源&#34;&gt;多个资源 &lt;a href=&#34;#%e5%a4%9a%e4%b8%aa%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您选择多个相同类型的资源时，Inspector 窗口会显示它们共有的所有属性。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于在所有选定的资源中具有相同属性值的属性，Inspector 会显示实际值。&lt;/li&gt;
&lt;li&gt;对于在两个或多个选定的资源中具有不同属性值的属性，Inspector 会显示一个短线 (&lt;strong&gt;-&lt;/strong&gt;)（在下面的截图中为 1）。&lt;/li&gt;
&lt;li&gt;对于您无法同时为所有选定的资源编辑的属性，Inspector 会将其显示为灰色（在下面的截图中为 2）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/MultiAssetEdit-Same.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当您选择多个不同类型的资源时，Inspector 会显示一个列表，显示选定的每种类型的资源的数量。单击列表中的任何项可检查该类型的所有资源。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/MultiAssetEdit-Diff.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;多个prefab&#34;&gt;多个Prefab &lt;a href=&#34;#%e5%a4%9a%e4%b8%aaprefab&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以以与编辑多个 GameObject 相同的方式检查多个选定的 Prefab 实例，但是 Inspector 隐藏了 &lt;strong&gt;Select&lt;/strong&gt;、&lt;strong&gt;Revert&lt;/strong&gt; 和 &lt;strong&gt;Apply&lt;/strong&gt; 按钮（参见通过实例编辑 Prefab）。&lt;/p&gt;
&lt;h2 id=&#34;定位-inspector-窗口中的源&#34;&gt;定位 Inspector 窗口中的源 &lt;a href=&#34;#%e5%ae%9a%e4%bd%8d-inspector-%e7%aa%97%e5%8f%a3%e4%b8%ad%e7%9a%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您在 Inspector 窗口中打开一个 GameObject 或 Asset 时，您可以使用 &lt;strong&gt;Ping&lt;/strong&gt; 命令在 &lt;strong&gt;Scene&lt;/strong&gt; 视图或 Project 视图中定位它。&lt;/p&gt;
&lt;p&gt;从 Inspector 窗口的 &lt;strong&gt;More Items&lt;/strong&gt;（&lt;strong&gt;⋮&lt;/strong&gt;）菜单中，选择 &lt;strong&gt;Ping&lt;/strong&gt;。Unity 会在 Hierarchy 视图或 Project 视图中突出显示该项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/inspector-ping.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;在inspector中工作&#34;&gt;在Inspector中工作 &lt;a href=&#34;#%e5%9c%a8inspector%e4%b8%ad%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本页描述了一些控制Inspector窗口本身的选项。有关为GameObjects、scripts和Assets设置属性的信息，请参阅编辑属性。&lt;/p&gt;
&lt;h2 id=&#34;锁定inspector&#34;&gt;锁定Inspector &lt;a href=&#34;#%e9%94%81%e5%ae%9ainspector&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;通常，Inspector会显示当前选定的GameObject、script或Asset的属性。但有时，当您处理其他项目时，将一个项目保持在Inspector中会很有用。在这种情况下，您可以将Inspector窗口锁定到特定的项目上。&lt;/p&gt;
&lt;p&gt;要将Inspector窗口锁定到一个项目上，请单击Inspector窗口中的锁定图标。锁定图标会更改以显示Inspector现在已锁定到所选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/inspector-lock-button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这在您频繁编辑一个项目的属性时非常有用。例如，如果您要微调相机的位置，您可以将一个 Inspector 窗口锁定到相机，并打开第二个 Inspector 窗口（&lt;strong&gt;More Items&lt;/strong&gt;（&lt;strong&gt;⋮&lt;/strong&gt;）菜单：&lt;strong&gt;Add Tab &amp;gt; Inspector&lt;/strong&gt;）来继续显示当前选择的属性。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Focused Inspectors 是锁定 Inspector 窗口的替代方法。Focused Inspector 仅显示您为其打开的项目的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;重新排序-gameobject-组件&#34;&gt;重新排序 GameObject 组件 &lt;a href=&#34;#%e9%87%8d%e6%96%b0%e6%8e%92%e5%ba%8f-gameobject-%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以在 Inspector 窗口中重新排序 GameObject 的组件。在 Inspector 中应用的组件顺序与在脚本中查询组件时所需使用的顺序相同。&lt;/p&gt;
&lt;p&gt;GameObject 的 &lt;strong&gt;Transform 组件&lt;/strong&gt; 始终位于顶部。您无法移动它，也无法将其他组件置于其上方。&lt;/p&gt;
&lt;p&gt;要在 Inspector 窗口中重新排序 GameObject 的组件，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将组件标头从一个位置拖放到另一个位置。当您拖动组件标头时，Unity 会在放置组件的位置显示一个蓝色插入标记。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/inspector-component-reorder-drag.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;右键单击一个组件，打开上下文菜单，然后选择&lt;strong&gt;向上移动&lt;/strong&gt;或&lt;strong&gt;向下移动&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/inspector-component-reorder-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;对于多个-gameobject-的重新排序组件&#34;&gt;对于多个 GameObject 的重新排序组件 &lt;a href=&#34;#%e5%af%b9%e4%ba%8e%e5%a4%9a%e4%b8%aa-gameobject-%e7%9a%84%e9%87%8d%e6%96%b0%e6%8e%92%e5%ba%8f%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当您选择多个 GameObject 时，Inspector 会显示所选 GameObject 具有的所有共同组件。如果您重新排序这些共同组件，更改将应用于所有选择的 GameObject。&lt;/p&gt;
&lt;h2 id=&#34;分配图标&#34;&gt;分配图标 &lt;a href=&#34;#%e5%88%86%e9%85%8d%e5%9b%be%e6%a0%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以从 Inspector 窗口为 GameObject、&lt;strong&gt;预制件&lt;/strong&gt;和脚本分配自定义图标。自定义图标在场景视图中以与灯光和&lt;strong&gt;相机&lt;/strong&gt;等项目的默认图标相同的方式显示。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当您为 GameObject 分配图标时，该图标会出现在该 GameObject 及其所有副本的&lt;strong&gt;场景&lt;/strong&gt;视图中。&lt;/li&gt;
&lt;li&gt;当您为预制件分配图标时，该图标会出现在场景视图中该预制件的所有实例上。&lt;/li&gt;
&lt;li&gt;当您为脚本分配图标时，该图标会出现在具有该脚本附加的任何 GameObject 上的场景视图中。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要控制 Unity 如何在场景视图中绘制自定义图标，请使用 Gizmos 菜单。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;注意&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当您更改资产的图标时，Unity会将该资产标记为已修改，&lt;strong&gt;版本控制&lt;/strong&gt;系统会注册该更改。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;为-gameobject脚本和预制件分配自定义图标&#34;&gt;为 GameObject、脚本和预制件分配自定义图标 &lt;a href=&#34;#%e4%b8%ba-gameobject%e8%84%9a%e6%9c%ac%e5%92%8c%e9%a2%84%e5%88%b6%e4%bb%b6%e5%88%86%e9%85%8d%e8%87%aa%e5%ae%9a%e4%b9%89%e5%9b%be%e6%a0%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要为 GameObject 或脚本分配自定义图标，请执行以下操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Inspector 窗口中打开该项。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;选择图标&lt;/strong&gt;按钮。&lt;/li&gt;
&lt;li&gt;从&lt;strong&gt;选择图标&lt;/strong&gt;菜单中选择一个图标（如下所示）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/inspector-select-icon-button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要为预制件分配自定义图标，您必须在预制件模式下打开预制件。&lt;/p&gt;
&lt;h3 id=&#34;从选择图标菜单中选择图标&#34;&gt;从选择图标菜单中选择图标。 &lt;a href=&#34;#%e4%bb%8e%e9%80%89%e6%8b%a9%e5%9b%be%e6%a0%87%e8%8f%9c%e5%8d%95%e4%b8%ad%e9%80%89%e6%8b%a9%e5%9b%be%e6%a0%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以从选择图标菜单中分配自定义图标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/IconSelectorPopup.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;图标类型&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;标签图标是带有颜色的胶囊。在场景视图中，它们显示分配给它们的项目的名称。单击标签图标进行分配。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;仅图标是带有颜色的凹点。当您使用可能没有可视表示的对象时，它们非常有用。例如，您可以将仅图标分配给导航路径点，以便在场景视图中查看和选择它们。单击仅图标进行分配。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;3&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;资源图标是您场景中使用的图像资源，可用作自定义图标。例如，您可以使用骷髅和骷髅图标来指示游戏关卡中的危险区域。单击“其他”按钮打开对象选择器窗口，并选择要分配为图标的图像资源。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;切换调试模式&#34;&gt;切换调试模式 &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e8%b0%83%e8%af%95%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;通常，检视器窗口被配置为选择属性的编辑器。但有时只显示属性和它们的值是有用的。当您激活调试模式时，检视器只显示属性和它们的值。如果选择的对象有脚本组件，调试模式还会显示私有变量，尽管您无法编辑它们的值。&lt;/p&gt;
&lt;p&gt;您可以单独为每个检视器窗口切换调试模式。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要打开调试模式，请单击“更多选项”（&lt;strong&gt;⋮&lt;/strong&gt;）按钮打开上下文菜单，然后选择“调试”。&lt;/li&gt;
&lt;li&gt;要返回普通模式，请单击“更多选项”（&lt;strong&gt;⋮&lt;/strong&gt;）按钮打开上下文菜单，然后选择“普通”。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/DebugModeInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;专注的检视器&#34;&gt;专注的检视器 &lt;a href=&#34;#%e4%b8%93%e6%b3%a8%e7%9a%84%e6%a3%80%e8%a7%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;专注的&lt;strong&gt;检视器&lt;/strong&gt;是一个专门针对特定&lt;strong&gt;GameObject&lt;/strong&gt;、Unity组件或资源的检视器窗口。无论您在&lt;strong&gt;场景&lt;/strong&gt;或项目中选择了什么，它始终显示所打开项目的属性。&lt;/p&gt;
&lt;p&gt;专注的检视器与常规检视器的工作方式相同，只有以下区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它们不会更新以显示当前选择的属性。&lt;/li&gt;
&lt;li&gt;无法锁定它们。每个专注的检视器显示一个特定项目的属性，所以没有必要锁定它们。&lt;/li&gt;
&lt;li&gt;无法从专注的检视器切换调试模式和普通模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以打开任意数量的专注的检视器。专注的检视器以浮动窗口的形式打开，您可以像其他任何窗口一样重新定位、停靠和调整大小。&lt;/p&gt;
&lt;p&gt;关闭项目时，Unity会保存所有打开的专注检视器，并在重新打开项目时恢复它们。&lt;/p&gt;
&lt;h2 id=&#34;打开专注的检视器&#34;&gt;打开专注的检视器 &lt;a href=&#34;#%e6%89%93%e5%bc%80%e4%b8%93%e6%b3%a8%e7%9a%84%e6%a3%80%e8%a7%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;根据要检视的对象，有几种打开专注的检视器的方法。&lt;/p&gt;
&lt;p&gt;Unity会将专注的检视器添加到打开窗口的列表中（菜单：Window &amp;gt; Panels &amp;gt; [LIST OF OPEN WINDOWS]）。&lt;/p&gt;
&lt;p&gt;从列表中选择一个专注的检视器，将其置于前台。&lt;/p&gt;
&lt;h3 id=&#34;对于gameobject和项目资源&#34;&gt;对于GameObject和项目资源 &lt;a href=&#34;#%e5%af%b9%e4%ba%8egameobject%e5%92%8c%e9%a1%b9%e7%9b%ae%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要为单个GameObject或资源打开专注的检视器：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在Hierarchy视图中，右键单击GameObject；或者在Project视图中，右键单击资源。&lt;/li&gt;
&lt;li&gt;在上下文菜单中选择Properties。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;或者，选择GameObject或资源，然后执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从主菜单中选择Assets &amp;gt; Properties。&lt;/li&gt;
&lt;li&gt;使用快捷键Alt + P（Windows）或Option + Shift + P（Mac）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity会在新窗口中打开专注的检视器。&lt;/p&gt;
&lt;p&gt;要为多个GameObject或资源打开专注的检视器：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在层级视图中选择任意组合GameObject及项目视图中的资源。&lt;/li&gt;
&lt;li&gt;执行以下操作之一：&lt;/li&gt;
&lt;li&gt;右键单击所选项之一，从上下文菜单中选择&lt;strong&gt;属性&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;从主菜单中选择&lt;strong&gt;资源 &amp;gt; 属性&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;使用快捷键&lt;strong&gt;Alt + P&lt;/strong&gt;（Windows）/&lt;strong&gt;Option + Shift + P&lt;/strong&gt;（Mac）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Unity为每个所选项打开一个具有专注检视器选项卡的新窗口。&lt;/p&gt;
&lt;p&gt;下图显示了三个所选项（左），即两个GameObject和一个资源，以及为它们打开专注检视器时得到的窗口（右）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/focused-inspector-multi.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;对于组件&#34;&gt;对于组件 &lt;a href=&#34;#%e5%af%b9%e4%ba%8e%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要为GameObject的一个组件打开专注的检视器：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检视GameObject，找到您要为其打开专注的检视器的组件。&lt;/li&gt;
&lt;li&gt;从组件的&lt;strong&gt;更多项&lt;/strong&gt;（&lt;strong&gt;⋮&lt;/strong&gt;）菜单中选择&lt;strong&gt;Properties&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这对于经常编辑的属性非常有用。例如，您可能经常移动一个GameObject，但希望保持其余属性不变。在这种情况下，您可以打开它的&lt;strong&gt;Transform组件&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;下图显示了一个常规的检视器中打开的&lt;strong&gt;Camera&lt;/strong&gt;（1），以及一个专注的检视器中打开的其Transform组件（2）。请注意，专注的检视器的选项卡标头显示了组件所属的GameObject的名称。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/focused-inspector-component.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;对于引用属性&#34;&gt;对于引用属性 &lt;a href=&#34;#%e5%af%b9%e4%ba%8e%e5%bc%95%e7%94%a8%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;当一个GameObject具有引用属性时，您可以为它们所引用的GameObject或资源打开专注的检视器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检视GameObject，并找到您想要在专注的检视器中打开其引用的属性。&lt;/li&gt;
&lt;li&gt;在引用字段上右键单击，然后从上下文菜单中选择&lt;strong&gt;Properties&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;对于悬停项&#34;&gt;对于悬停项 &lt;a href=&#34;#%e5%af%b9%e4%ba%8e%e6%82%ac%e5%81%9c%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以设置快捷键，以便在指针悬停在Hierarchy视图或Project视图中的任何项上时，可以打开专注的检视器。&lt;/p&gt;
&lt;p&gt;要为&lt;strong&gt;PropertyEditor &amp;gt; OpenMouseOver&lt;/strong&gt;命令分配键盘快捷键，请使用快捷键管理器。&lt;/p&gt;
&lt;p&gt;这在您想要为项目打开专注的检视器而又不影响当前选择时非常有用。&lt;/p&gt;
&lt;h2 id=&#34;查找专注检视器的来源&#34;&gt;查找专注检视器的来源 &lt;a href=&#34;#%e6%9f%a5%e6%89%be%e4%b8%93%e6%b3%a8%e6%a3%80%e8%a7%86%e5%99%a8%e7%9a%84%e6%9d%a5%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要查找在专注的检视器中显示属性的项，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在专注的检视器的&lt;strong&gt;更多项&lt;/strong&gt;（&lt;strong&gt;⋮&lt;/strong&gt;）菜单中，选择&lt;strong&gt;Ping&lt;/strong&gt;。Unity会在Hierarchy视图或Project视图中突出显示该项。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/focused-inspector-ping.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将鼠标悬停在专注的检视器的选项卡标题上，将显示一个工具提示，其中显示了该项在场景层级结构或项目中的完整路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-08-unity-document-17/focused-inspector-tooltip.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Device Simulator(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/07/2023-08-07-unity-document-16/</link>
      <pubDate>Mon, 07 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/07/2023-08-07-unity-document-16/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;hierarchy-窗口&#34;&gt;&lt;strong&gt;Hierarchy&lt;/strong&gt; 窗口 &lt;a href=&#34;#hierarchy-%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/Hierarchy_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hierarchy&lt;/strong&gt;窗口显示场景中的每个GameObject，例如模型、相机或预制件。您可以使用Hierarchy窗口对场景中使用的GameObject进行排序和分组。当您在场景视图中添加或删除GameObject时，它们也会在Hierarchy窗口中添加或删除。&lt;/p&gt;
&lt;p&gt;Hierarchy窗口还可以包含其他场景，每个场景都包含自己的GameObject。&lt;/p&gt;
&lt;h2 id=&#34;父子关系&#34;&gt;父子关系 &lt;a href=&#34;#%e7%88%b6%e5%ad%90%e5%85%b3%e7%b3%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity使用父子层次结构或父子关系的概念来对GameObject进行分组。一个对象可以包含继承其属性的其他GameObject。您可以将GameObject链接在一起，以便移动、缩放或转换一组GameObject。当您移动顶层对象或父GameObject时，也会移动所有子GameObject。&lt;/p&gt;
&lt;p&gt;您还可以创建嵌套的父子GameObject。所有嵌套对象仍然是原始父GameObject或根GameObject的子级。&lt;/p&gt;
&lt;p&gt;子GameObject继承父GameObject的运动和旋转。要了解更多信息，请参阅关于Transform组件的文档。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/HierarchyParenting1_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;组织-gameobject&#34;&gt;组织 GameObject &lt;a href=&#34;#%e7%bb%84%e7%bb%87-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;创建新的-gameobject&#34;&gt;创建新的 GameObject &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%96%b0%e7%9a%84-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要在 Hierarchy 窗口中创建新的 GameObject：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在选定的场景中，右键单击空白处。&lt;/li&gt;
&lt;li&gt;选择要创建的 GameObject。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您还可以按下 &lt;strong&gt;Ctrl+Shift+N&lt;/strong&gt;（Windows）或 &lt;strong&gt;Command+Shift+N&lt;/strong&gt;（macOS）来创建一个新的空 GameObject。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：新的 GameObject 会自动创建在“重命名”模式下。要禁用此行为，请在 Hierarchy 窗口中选择“更多”（⋮）菜单，然后取消选择&lt;strong&gt;重命名新对象&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;切换子-gameobject-的可见性&#34;&gt;切换子 GameObject 的可见性 &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e5%ad%90-gameobject-%e7%9a%84%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要切换子 GameObject 的可见性：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择父 GameObject 左侧的下拉箭头（►）。&lt;/li&gt;
&lt;li&gt;在点击下拉箭头（►）时按住 &lt;strong&gt;Alt&lt;/strong&gt; 键，以切换根 GameObject 的所有子级 GameObject 的可见性。&lt;/li&gt;
&lt;li&gt;再次选择下拉箭头（▼），折叠所有子级 GameObject。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;创建子-gameobject&#34;&gt;创建子 GameObject &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%ad%90-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要创建一个子 GameObject：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将 GameObject 拖动到 Hierarchy 中的父 GameObject 上方。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/HierarchyParenting2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;创建父-gameobject&#34;&gt;创建父 GameObject &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e7%88%b6-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以将一个新的 GameObject 添加到 Hierarchy 视图中，作为现有 GameObject 的父级。&lt;/p&gt;
&lt;p&gt;要创建父 GameObject：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;右键单击一个 GameObject，或在同一级别上选择多个 GameObject 并右键单击。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;创建空父级&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您还可以按下 &lt;strong&gt;Ctrl+Shift+G&lt;/strong&gt;（Windows）或 &lt;strong&gt;Command+Shift+G&lt;/strong&gt;（macOS）来创建一个父 GameObject。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果您已设置默认的父 GameObject，创建空父级将创建新的 GameObject 作为默认父级的子级，而不是选定的 GameObject 的父级。&lt;/p&gt;
&lt;h3 id=&#34;创建同级-gameobject&#34;&gt;创建同级 GameObject &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%90%8c%e7%ba%a7-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;同级 GameObject 是与另一个子 GameObject 具有相同层次结构的 GameObject。要创建同级 GameObject：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将 GameObject 拖动到现有 GameObject 的上方或下方。&lt;/li&gt;
&lt;li&gt;使用水平蓝线确定 GameObject 的顺序。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/HierarchyParenting3_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;复制-gameobject&#34;&gt;复制 GameObject &lt;a href=&#34;#%e5%a4%8d%e5%88%b6-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要复制 GameObject，右键单击目标 GameObject，然后选择&lt;strong&gt;复制&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;您还可以按下&lt;strong&gt;Ctrl+D&lt;/strong&gt;（Windows）或&lt;strong&gt;Command+D&lt;/strong&gt;（macOS）来复制选定的 GameObject。&lt;/p&gt;
&lt;h3 id=&#34;将-gameobject-粘贴为子级&#34;&gt;将 GameObject 粘贴为子级 &lt;a href=&#34;#%e5%b0%86-gameobject-%e7%b2%98%e8%b4%b4%e4%b8%ba%e5%ad%90%e7%ba%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以剪切或复制一个选定的 GameObject，然后将其粘贴为另一个 GameObject 的子级。粘贴的子 GameObject 会保持其世界坐标。&lt;/p&gt;
&lt;p&gt;要将 GameObject 粘贴为子级：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;右键单击选定的 GameObject，然后选择&lt;strong&gt;剪切&lt;/strong&gt;或&lt;strong&gt;复制&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;右键单击目标父 GameObject，然后选择&lt;strong&gt;粘贴为子级&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;您还可以按下&lt;strong&gt;Ctrl+Shift+V&lt;/strong&gt;（Windows）或&lt;strong&gt;Command+Shift+V&lt;/strong&gt;（macOS）将 GameObject 粘贴为子级。&lt;/p&gt;
&lt;h3 id=&#34;使用默认父-gameobject-组织-gameobject&#34;&gt;使用默认父 GameObject 组织 GameObject &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e9%bb%98%e8%ae%a4%e7%88%b6-gameobject-%e7%bb%84%e7%bb%87-gameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以将 Hierarchy 窗口中的任何 GameObject 设置为“默认父 GameObject”。当您将一个 GameObject 拖动到场景视图中时，Unity 自动将该 GameObject 设置为默认父 GameObject 的子级。&lt;/p&gt;
&lt;p&gt;要将 GameObject 设置为默认父 GameObject：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Hierarchy 窗口中，右键单击 GameObject。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;设置为默认父 GameObject&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当您将 GameObject 拖动到场景视图中时，Hierarchy 窗口中的子 GameObject 会缩进显示在默认父 GameObject 的下方。默认父 GameObject 的名称会以粗体显示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/default-parent.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要将 GameObject 的默认父级设置取消：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Hierarchy 窗口中，右键单击 GameObject。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;清除默认父级&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;之前作为默认父级的 GameObject 的名称将不再以粗体显示。当您将 GameObject 拖动到场景视图中时，它会出现在 Hierarchy 窗口的顶层。换句话说，Unity 不会将此 GameObject 设置为之前默认父级 GameObject 的子级。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/no-default-parent.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;每个场景只能设置一个默认父级。在 Hierarchy 窗口中，如果您将一个 GameObject 设置为默认父级，然后在同一个场景中将另一个 GameObject 设置为默认父级，那么只有第二个 GameObject 会成为默认父级。&lt;/p&gt;
&lt;p&gt;如果在 Hierarchy 窗口中有多个场景，并且您在每个场景中设置了默认父级，当您将一个 GameObject 拖动到场景视图中时，Unity 会将处于活动场景中的默认父级 GameObject 设置为新 GameObject 的父级。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/multi-scene-default-parent.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以在快捷键管理器中为默认父级设置键盘快捷键。在快捷键窗口中，将一个键盘快捷键分配给&lt;strong&gt;Hierarchy View&lt;/strong&gt; &amp;gt; &lt;strong&gt;Set as Default Parent&lt;/strong&gt;。如果没有设置默认父级，并且在 Hierarchy 窗口中选择一个 GameObject，使用快捷键将该 GameObject 设置为默认父级。当设置了默认父级时，使用快捷键可以从任何具有默认父级的 GameObject 中移除默认父级状态。&lt;/p&gt;
&lt;h2 id=&#34;设置场景的可见性和可选性&#34;&gt;设置场景的可见性和可选性 &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e5%9c%ba%e6%99%af%e7%9a%84%e5%8f%af%e8%a7%81%e6%80%a7%e5%92%8c%e5%8f%af%e9%80%89%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;单击场景可见性图标可以在场景视图中隐藏和显示 GameObject，而不改变它们在应用程序中的可见性。&lt;/p&gt;
&lt;p&gt;选择场景选取图标可以切换在编辑时是否可以选择场景视图中的 GameObject。&lt;/p&gt;
&lt;p&gt;这些控件对于处理大型或复杂的场景非常有用，因为它们可以帮助您查看和选择特定的 GameObject。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/SceneVisIconsHierarchy_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要了解有关场景可见性和场景选取的更多信息，请参阅文档。&lt;/p&gt;
&lt;h2 id=&#34;对-gameobject-进行排序&#34;&gt;对 GameObject 进行排序 &lt;a href=&#34;#%e5%af%b9-gameobject-%e8%bf%9b%e8%a1%8c%e6%8e%92%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，Hierarchy 窗口按照创建顺序来列出 GameObject。您可以在场景中将选定的 GameObject 上下拖动，以改变 GameObject 的顺序。&lt;/p&gt;
&lt;h3 id=&#34;字母数字排序&#34;&gt;字母数字排序 &lt;a href=&#34;#%e5%ad%97%e6%af%8d%e6%95%b0%e5%ad%97%e6%8e%92%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要按照字母数字顺序对 GameObject 进行排序，请执行以下操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择 &lt;strong&gt;Edit &amp;gt; Preferences&lt;/strong&gt; (macOS: &lt;strong&gt;Unity &amp;gt; Settings&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;Enable Alphanumeric Sorting&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当选中此选项时，Hierarchy 窗口中会显示一个图标，用于在&lt;strong&gt;变换排序&lt;/strong&gt;（默认值）和&lt;strong&gt;字母顺序排序&lt;/strong&gt;之间切换。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/AlphanumericToggle_01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;多场景编辑&#34;&gt;多场景编辑 &lt;a href=&#34;#%e5%a4%9a%e5%9c%ba%e6%99%af%e7%bc%96%e8%be%91&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以同时在 Hierarchy 窗口中打开多个场景。要了解更多信息，请参阅多场景编辑页面。&lt;/p&gt;
&lt;h2 id=&#34;覆盖指示器&#34;&gt;覆盖指示器 &lt;a href=&#34;#%e8%a6%86%e7%9b%96%e6%8c%87%e7%a4%ba%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您在场景中编辑预制体实例时，Unity 在层级中的父级 GameObject 旁边显示一个指示器。该指示器突出显示任何具有其子级 GameObject 中非默认覆盖值的预制体。要直接从 Hierarchy 窗口打开 Overrides 下拉菜单，请单击覆盖指示器。覆盖指示器将显示为边距左侧的蓝色线，并且与&lt;strong&gt;Inspector&lt;/strong&gt;窗口中的实例覆盖相同。要了解更多信息，请参阅实例覆盖。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-07-unity-document-16/hierarchy-override-indicator.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-Device Simulator(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/05/2023-08-05-unity-document-15/</link>
      <pubDate>Sat, 05 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/05/2023-08-05-unity-document-15/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;设备模拟器&#34;&gt;设备模拟器 &lt;a href=&#34;#%e8%ae%be%e5%a4%87%e6%a8%a1%e6%8b%9f%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本文档部分包含有关Unity设备模拟器的信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;页面&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设备模拟器简介&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;介绍设备模拟器及其功能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;模拟器视图&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;解释设备模拟器使用的窗口，用于显示模拟。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;模拟类&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包含设备模拟器提供的类的信息，以便您可以测试响应特定设备行为的代码。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;添加设备&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;解释如何定义新设备进行模拟，并在设备模拟器中使用它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;扩展设备模拟器&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;解释如何创建设备模拟器插件来扩展模拟器视图的功能和用户界面。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;设备模拟器简介&#34;&gt;设备模拟器简介 &lt;a href=&#34;#%e8%ae%be%e5%a4%87%e6%a8%a1%e6%8b%9f%e5%99%a8%e7%ae%80%e4%bb%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;设备模拟器是Unity编辑器的一个功能，用于模拟应用程序在移动设备上的外观和行为。&lt;/p&gt;
&lt;p&gt;设备模拟器由以下组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模拟器视图：在模拟的移动设备上查看应用程序。&lt;/li&gt;
&lt;li&gt;模拟类：测试响应特定设备行为的代码。&lt;/li&gt;
&lt;li&gt;设备定义：描述要模拟的设备。&lt;/li&gt;
&lt;li&gt;设备模拟器插件：配置模拟器视图的用户界面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;模拟器视图中的控件&#34;&gt;模拟器视图中的控件 &lt;a href=&#34;#%e6%a8%a1%e6%8b%9f%e5%99%a8%e8%a7%86%e5%9b%be%e4%b8%ad%e7%9a%84%e6%8e%a7%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;模拟器视图模拟移动设备的许多常见功能，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自动旋转&lt;/li&gt;
&lt;li&gt;屏幕安全区域&lt;/li&gt;
&lt;li&gt;触摸输入&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;玩家设置&#34;&gt;玩家设置 &lt;a href=&#34;#%e7%8e%a9%e5%ae%b6%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;设备模拟器会与以下&lt;strong&gt;玩家设置&lt;/strong&gt;具有相同的反应，就像真实设备一样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全屏模式&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分辨率缩放&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认方向&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图形API&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;超出安全区域渲染&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;模拟触摸输入&#34;&gt;模拟触摸输入 &lt;a href=&#34;#%e6%a8%a1%e6%8b%9f%e8%a7%a6%e6%91%b8%e8%be%93%e5%85%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您使用鼠标光标在模拟设备屏幕上点击，设备模拟器将在活动的输入解决方案（根据项目设置，可以是输入管理器、输入系统或两者）中创建触摸事件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：只有在编辑器处于播放模式时，设备模拟器才会模拟输入。设备模拟器不支持多点触控，只能模拟单指触摸。&lt;/p&gt;
&lt;h2 id=&#34;限制&#34;&gt;限制 &lt;a href=&#34;#%e9%99%90%e5%88%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;设备模拟器的主要目的是查看应用程序在目标设备上的布局，并测试基本交互。它不能准确地表示应用程序在真实设备上的运行情况。&lt;/p&gt;
&lt;p&gt;模拟器视图不会模拟以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设备的性能特征，如处理器速度或可用内存。&lt;/li&gt;
&lt;li&gt;设备的渲染能力。&lt;/li&gt;
&lt;li&gt;在编辑器中无法使用的原生插件。&lt;/li&gt;
&lt;li&gt;模拟设备的平台#define指令，如UNITY_IOS。&lt;/li&gt;
&lt;li&gt;陀螺仪旋转。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只能同时模拟一个模拟器视图。这是活动的模拟器视图。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果只打开一个模拟器视图且没有打开游戏视图，则无论该模拟器视图是否可见，它都是活动的。&lt;/li&gt;
&lt;li&gt;如果打开了多个模拟器视图且没有打开游戏视图，则上次获取焦点的模拟器视图是活动的。&lt;/li&gt;
&lt;li&gt;如果同时打开了模拟器视图和游戏视图，如果将焦点放在游戏视图上，Unity将禁用所有模拟器；如果将焦点放在模拟器视图上，只要它具有焦点，模拟器视图始终是活动的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;设备模拟器不会模拟所有模拟类中的API。更多信息，请参阅模拟类。&lt;/p&gt;
&lt;h1 id=&#34;模拟器视图&#34;&gt;模拟器视图 &lt;a href=&#34;#%e6%a8%a1%e6%8b%9f%e5%99%a8%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;模拟器视图以模拟的移动设备显示您的应用程序。使用它来查看应用程序在该设备上的屏幕形状、分辨率和方向等外观。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-view-17217962357833.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用模拟器视图&#34;&gt;使用模拟器视图 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e6%a8%a1%e6%8b%9f%e5%99%a8%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要打开模拟器视图，请执行以下操作之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在游戏视图中，左上角使用下拉菜单在游戏视图和模拟器视图之间切换。&lt;/li&gt;
&lt;li&gt;在菜单中选择：&lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;Device Simulator&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity在模拟器视图中模拟设备。要控制模拟，请使用工具栏和控制面板。&lt;/p&gt;
&lt;h3 id=&#34;工具栏&#34;&gt;工具栏 &lt;a href=&#34;#%e5%b7%a5%e5%85%b7%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;工具栏位于模拟器视图的顶部，包含与控制面板一起控制模拟的选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-toolbar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;控制选项&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;游戏视图/模拟器视图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用此下拉菜单在模拟器视图和游戏视图之间切换。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;设备选择下拉菜单&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从可用的设备定义中选择要模拟的设备。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缩放&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;放大或缩小模拟屏幕的大小。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;适应屏幕&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将显示内容缩放以适应窗口内。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;旋转&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;模拟设备的物理旋转。如果启用自动旋转并且设备支持旋转，设备屏幕上的图像将与设备一起旋转。否则，旋转设备将导致图像横向或颠倒。&lt;strong&gt;注意&lt;/strong&gt;：设备模拟器不支持陀螺仪模拟。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;安全区域&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指示视图是否绘制当前设备屏幕的安全区域周围的线条。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;播放模式行为&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此部分根据以下选择描述了播放模式的行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;聚焦&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在编辑器处于播放模式时，启用聚焦可将焦点切换到选定的游戏视图。进入播放模式时，只能有一个游戏视图处于焦点状态。使用Display模式中的最大化或全屏模式意味着将焦点放在最大化的游戏视图上。在一个游戏视图上启用聚焦时，其他游戏视图上的聚焦将被禁用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;垂直同步（仅对游戏视图有效）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;启用**垂直同步（仅对游戏视图有效）**以允许同步，这对于录制视频等情况非常有用。Unity尝试以显示器刷新率渲染游戏视图，但不能保证。当启用此选项时，最好在播放模式下将游戏视图最大化，以隐藏其他视图并减少Unity渲染的视图数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;进入播放模式：&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据以下选项选择确定编辑器在进入播放模式时的设置。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;正常&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选择此选项以在不强制聚焦或将任何视图最大化到全屏的情况下查看游戏视图。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;最大化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选择此选项后，Unity会以100%的编辑器窗口大小最大化Simulator视图运行播放模式。&lt;strong&gt;注意&lt;/strong&gt;：如果禁用&lt;strong&gt;Play时创建游戏视图&lt;/strong&gt;的编辑器首选项，此选项不会创建Simulator视图。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;控制面板&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示或隐藏控制面板。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;控制面板&#34;&gt;控制面板 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e9%9d%a2%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要打开控制面板，请单击工具栏右上角的&lt;strong&gt;控制面板&lt;/strong&gt;。默认情况下，控制面板包含对应用程序模拟类的设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-control-panel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;System Language&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定从&lt;code&gt;Device.Application.systemLanguage&lt;/code&gt;接收的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Internet Reachability&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定从&lt;code&gt;Device.Application.internetReachability&lt;/code&gt;接收的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Low Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;调用&lt;code&gt;lowMemory&lt;/code&gt;事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;设备模拟器插件可以更改控制面板的外观，添加内容和控件。某些包（例如自适应性能包）包含设备模拟器插件。如果安装了该包，它们的&lt;strong&gt;UI&lt;/strong&gt;将显示在控制面板中。有关更多信息，请参阅设备模拟器插件。&lt;/p&gt;
&lt;h1 id=&#34;模拟类&#34;&gt;模拟类 &lt;a href=&#34;#%e6%a8%a1%e6%8b%9f%e7%b1%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Device Simulator提供了模拟类，您可以使用它们来测试对Device Simulator中的设备特定行为做出响应的代码。&lt;/p&gt;
&lt;p&gt;以下模拟类位于UnityEngine.Device命名空间中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;li&gt;Screen&lt;/li&gt;
&lt;li&gt;SystemInfo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些模拟类具有与它们的常规UnityEngine命名空间对应类相同的成员。您可以在代码库中的任何位置使用它们，就像正常类一样使用它们。它们不会对性能产生影响，并且可以在发布版本中使用。&lt;/p&gt;
&lt;p&gt;在编辑器中，当Device Simulator处于活动状态时，模拟类会模拟模拟设备的特定平台行为；例如，Device.SystemInfo.operatingSystem会返回模拟设备的Android或iOS版本。&lt;/p&gt;
&lt;p&gt;在构建的应用程序中或者当Device Simulator不活动时，模拟类的行为与它们在UnityEngine命名空间中的对应类相同。&lt;/p&gt;
&lt;p&gt;尽管模拟类具有与常规类相同的成员，但Device Simulator不会模拟每个行为。在Unity编辑器中，Device Simulator不模拟的成员会与它们在UnityEngine命名空间中的等效成员具有相同的行为，这些成员与特定平台无关。例如，Device Simulator不会模拟Device.Screen.brightness。这意味着此成员在编辑器中的行为与UnityEngine.Screen.brightness相同，始终返回&lt;code&gt;1&lt;/code&gt;。有关Device Simulator模拟的成员，请参阅以下API文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Device.Application&lt;/li&gt;
&lt;li&gt;Device.Screen&lt;/li&gt;
&lt;li&gt;Device.SystemInfo&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;更新脚本以使用模拟类&#34;&gt;更新脚本以使用模拟类 &lt;a href=&#34;#%e6%9b%b4%e6%96%b0%e8%84%9a%e6%9c%ac%e4%bb%a5%e4%bd%bf%e7%94%a8%e6%a8%a1%e6%8b%9f%e7%b1%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您想要将现有代码转换为使用UnityEngine.Device命名空间的类，最佳实践是使用别名指令。例如：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;using Screen = UnityEngine.Device.Screen;
using Application = UnityEngine.Device.Application;
using SystemInfo = UnityEngine.Device.SystemInfo;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这样，您可以更改整个文件使用的类，而无需更改每个API调用。&lt;/p&gt;
&lt;h1 id=&#34;添加设备&#34;&gt;添加设备 &lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e8%ae%be%e5%a4%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要将新设备添加到Device Simulator中，您需要创建设备定义和设备覆盖。&lt;/p&gt;
&lt;p&gt;设备定义是Unity项目中以&lt;code&gt;.device&lt;/code&gt;扩展名的文本文件。它包含描述设备属性的JSON数据。&lt;/p&gt;
&lt;p&gt;设备覆盖是一个图像，包含设备屏幕的边框，以及刘海、孔洞和屏幕矩形的任何其他元素。您可以选择将其与设备定义一起使用，以可视化硬件元素如何遮挡设备屏幕，并确定触摸输入何时失败。&lt;/p&gt;
&lt;h2 id=&#34;创建设备定义&#34;&gt;创建设备定义 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e8%ae%be%e5%a4%87%e5%ae%9a%e4%b9%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;设备定义是一个表示设备的JSON文件。它包含必需的属性和一些可选的属性。如果设备定义文件包含任何错误，选择文件时将在&lt;strong&gt;检查器&lt;/strong&gt;中显示错误信息。&lt;/p&gt;
&lt;h3 id=&#34;schema&#34;&gt;Schema &lt;a href=&#34;#schema&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;friendlyName&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在&lt;strong&gt;UI&lt;/strong&gt;中显示的设备名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设备定义文件的版本。当前版本为&lt;code&gt;1&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;screens&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;描述要模拟设备的每个屏幕的对象列表。必须至少包含一个屏幕。有关每个屏幕对象的架构信息，请参阅屏幕。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;systemInfo&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;描述设备的能力的对象。此对象中的值与SystemInfo对应。有关systemInfo对象的架构信息，请参阅systemInfo。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;screen&#34;&gt;screen &lt;a href=&#34;#screen&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;width&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;屏幕的宽度，以&lt;strong&gt;像素&lt;/strong&gt;为单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;屏幕的高度，以像素为单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;navigationBarHeight&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;非全屏模式下，在某些设备上显示的屏幕上的Android导航栏的高度，以像素为单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;dpi&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;屏幕的dpi。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;orientations&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;描述屏幕可以模拟的每个方向的对象列表。如果不为此属性设置值，则屏幕支持所有方向。有关每个方向对象的架构信息，请参阅orientation。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;presentation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;描述设备覆盖层的对象。有关此对象的架构信息，请参阅presentation。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;orientation&#34;&gt;orientation &lt;a href=&#34;#orientation&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;orientation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;屏幕的方向。此属性的值是一个映射到ScreenOrientation枚举类型的数字。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;safeArea&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定屏幕的安全区域的矩形。如果不为此属性设置值，则模拟器假设整个屏幕都是安全区域。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;cutouts&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定屏幕上不用于显示内容的区域的矩形列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;presentation&#34;&gt;presentation &lt;a href=&#34;#presentation&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;overlayPath&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设备定义文件到要用作设备覆盖的图像的相对路径。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;borderSize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;覆盖层到屏幕开始的距离，以像素为单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;systeminfo&#34;&gt;systeminfo &lt;a href=&#34;#systeminfo&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;此对象中的属性描述设备的能力和系统信息。由于它们描述系统信息，因此其中的许多属性与SystemInfo中的属性相对应。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;deviceModel&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.deviceModel。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;deviceType&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.deviceType。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;operatingSystem&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.operatingSystem。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;operatingSystemFamily&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.operatingSystemFamily。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;processorCount&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.processorCount。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;processorFrequency&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.processorFrequency。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;processorType&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.processorType。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsAccelerometer&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsAccelerometer。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsAudio&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsAudio。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsGyroscope&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsGyroscope。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsLocationService&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsLocationService。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsVibration&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsVibration。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;systemMemorySize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.systemMemorySize。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;unsupportedIdentifier&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.unsupportedIdentifier。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDependentData&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;否&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;描述设备支持的图形API的对象列表。有关每个对象的架构信息，请参阅graphicsDependentData。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;graphicsdependentdata&#34;&gt;graphicsDependentData &lt;a href=&#34;#graphicsdependentdata&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;该对象中的属性描述设备支持的图形API。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;必需的&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceType&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceType。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsMemorySize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsMemorySize。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceName&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceName。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceVendor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceVendor。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceID&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceID。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceVendorID&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceVendorID。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsUVStartsAtTop&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsUVStartsAtTop。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsDeviceVersion&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsDeviceVersion。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsShaderLevel&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsShaderLevel。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;graphicsMultiThreaded&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.graphicsMultiThreaded。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;renderingThreadingMode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.renderingThreadingMode。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;hasHiddenSurfaceRemovalOnGPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.hasHiddenSurfaceRemovalOnGPU。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;hasDynamicUniformArrayIndexingInFragmentShaders&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.hasDynamicUniformArrayIndexingInFragmentShaders。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsShadows&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsShadows。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsRawShadowDepthSampling&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsRawShadowDepthSampling。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsMotionVectors&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsMotionVectors。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supports3DTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supports3DTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supports2DArrayTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supports2DArrayTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supports3DRenderTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supports3DRenderTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsCubemapArrayTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsCubemapArrayTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;copyTextureSupport&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.copyTextureSupport。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsComputeShaders&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsComputeShaders。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsGeometryShaders&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsGeometryShaders。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsTessellationShaders&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsTessellationShaders。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsInstancing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsInstancing。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsHardwareQuadTopology&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsHardwareQuadTopology。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supports32bitsIndexBuffer&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supports32bitsIndexBuffer。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsSparseTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsSparseTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportedRenderTargetCount&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportedRenderTargetCount。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsSeparatedRenderTargetsBlend&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsSeparatedRenderTargetsBlend。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportedRandomWriteTargetCount&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportedRandomWriteTargetCount。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsMultisampledTextures&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsMultisampledTextures。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsMultisampleAutoResolve&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsMultisampleAutoResolve。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsTextureWrapMirrorOnce&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsTextureWrapMirrorOnce。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;usesReversedZBuffer&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.usesReversedZBuffer。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;npotSupport&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.npotSupport。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxTextureSize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxTextureSize。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxCubemapSize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxCubemapSize。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsVertex&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsVertex。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsFragment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsFragment。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsGeometry&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsGeometry。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsDomain&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsDomain。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsHull&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsHull。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeBufferInputsCompute&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeBufferInputsCompute。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeWorkGroupSize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeWorkGroupSize。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeWorkGroupSizeX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeWorkGroupSizeX。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeWorkGroupSizeY&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeWorkGroupSizeY。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;maxComputeWorkGroupSizeZ&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.maxComputeWorkGroupSizeZ。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsAsyncCompute&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsAsyncCompute。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsGraphicsFence&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsGraphicsFence。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsAsyncGPUReadback&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsAsyncGPUReadback。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsRayTracing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsRayTracing。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsRayTracingShaders&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsRayTracingShaders。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsInlineRayTracing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsInlineRayTracing。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsSetConstantBuffer&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsSetConstantBuffer。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;hasMipMaxLevel&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.hasMipMaxLevel。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;supportsMipStreaming&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.supportsMipStreaming。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;usesLoadStoreActions&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;参见Device.SystemInfo.usesLoadStoreActions。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;最低设备定义&#34;&gt;最低设备定义 &lt;a href=&#34;#%e6%9c%80%e4%bd%8e%e8%ae%be%e5%a4%87%e5%ae%9a%e4%b9%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;以下设备定义包含了每个必需的属性，没有可选的属性。这是您可以拥有的最小设备定义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：该设备定义没有提供方向数据，因此模拟器假设设备支持所有方向，并且安全区域覆盖整个屏幕。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;friendlyName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Minimal Device&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;screens&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1080&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1920&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dpi&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;450.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;systemInfo&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;operatingSystem&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Android&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;完整设备定义&#34;&gt;完整设备定义 &lt;a href=&#34;#%e5%ae%8c%e6%95%b4%e8%ae%be%e5%a4%87%e5%ae%9a%e4%b9%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;以下设备定义包含了每个必需和可选的属性。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;friendlyName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apple iPhone XR&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;screens&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;828&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1792&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;navigationBarHeight&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dpi&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;326.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;orientations&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;orientation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;safeArea&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;68.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;828.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1636.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;cutouts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;184.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1726.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;460.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;66.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;orientation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;safeArea&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;88.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;42.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1616.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;786.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;cutouts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;184.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;66.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;460.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;orientation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;safeArea&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;88.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;42.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1616.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;786.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;cutouts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;serializedVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1726.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;184.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;66.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;460.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;presentation&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;overlayPath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apple iPhone 11_Overlay.png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;borderSize&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;z&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;systemInfo&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;deviceModel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iPhone11,8&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;deviceType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;operatingSystem&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;iOS 12.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;operatingSystemFamily&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;processorCount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;processorFrequency&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;processorType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;arm64e&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsAccelerometer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsAudio&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsGyroscope&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsLocationService&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsVibration&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;systemMemorySize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2813&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;unsupportedIdentifier&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;n/a&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDependentData&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceType&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsMemorySize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apple A12 GPU&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceVendor&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Apple&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceID&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceVendorID&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsUVStartsAtTop&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsDeviceVersion&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Metal&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsShaderLevel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;graphicsMultiThreaded&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;renderingThreadingMode&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hasHiddenSurfaceRemovalOnGPU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hasDynamicUniformArrayIndexingInFragmentShaders&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsShadows&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsRawShadowDepthSampling&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsMotionVectors&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supports3DTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supports2DArrayTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supports3DRenderTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsCubemapArrayTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;copyTextureSupport&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsComputeShaders&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsGeometryShaders&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsTessellationShaders&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsInstancing&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsHardwareQuadTopology&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supports32bitsIndexBuffer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsSparseTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportedRenderTargetCount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsSeparatedRenderTargetsBlend&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportedRandomWriteTargetCount&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsMultisampledTextures&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsMultisampleAutoResolve&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsTextureWrapMirrorOnce&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;usesReversedZBuffer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;npotSupport&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxTextureSize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;16384&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxCubemapSize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;16384&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsVertex&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsFragment&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsGeometry&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsDomain&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsHull&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeBufferInputsCompute&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeWorkGroupSize&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeWorkGroupSizeX&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeWorkGroupSizeY&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;maxComputeWorkGroupSizeZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsAsyncCompute&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsGraphicsFence&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsAsyncGPUReadback&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsRayTracing&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsRayTracingShaders&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsInlineRayTracing&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsSetConstantBuffer&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hasMipMaxLevel&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportsMipStreaming&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;usesLoadStoreActions&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportedTextureFormats&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;supportedRenderTextureFormats&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;ldrGraphicsFormat&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;59&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hdrGraphicsFormat&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;74&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;创建设备叠加层&#34;&gt;创建设备叠加层 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e8%ae%be%e5%a4%87%e5%8f%a0%e5%8a%a0%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;设备叠加层是一个包含设备屏幕边框和其他特征（如凹槽、孔洞和屏幕矩形的任何其他附加部分）的图像。您可以选择性地与设备定义一起使用它，以可视化硬件元件如何阻碍设备屏幕，并确定触摸输入因此失败的时间。&lt;/p&gt;
&lt;p&gt;设备模拟器将透明像素解释为您可以点击的屏幕区域，将其他任何颜色的不透明像素解释为硬件阻碍的区域。纹理本身可以是任何形状。&lt;/p&gt;
&lt;p&gt;以下示例显示了两个iPhone型号的设备叠加层。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：为了模拟使用设备叠加层时所看到的效果，这些示例在您可以点击的屏幕区域显示了Unity的默认&lt;strong&gt;天空盒（skybox）&lt;/strong&gt;。在真实的设备叠加层中，这些像素应该是透明的。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Apple iPhone 8 Overlay&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Apple iPhone XS Overlay&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-overlay-iphone8.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-05-unity-document-15/device-simulator-overlay-iphonexs.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;使用设备叠加层&#34;&gt;使用设备叠加层 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e8%ae%be%e5%a4%87%e5%8f%a0%e5%8a%a0%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在创建设备叠加层纹理后，要将其与设备定义一起使用，您首先必须将设备叠加层纹理文件导入到项目中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：当设备模拟器加载设备叠加层纹理时，会尝试启用&lt;strong&gt;读/写&lt;/strong&gt;功能。如果这不可能实现，设备模拟器将显示纹理，但无法使用纹理来遮罩输入。这意味着如果您在设备叠加层应该遮挡的凹槽和其他区域上点击，设备模拟器会检测到输入。为确保不发生这种情况，请在导入设备叠加层纹理时，在“纹理导入设置”窗口中启用&lt;strong&gt;读/写&lt;/strong&gt;功能。&lt;/p&gt;
&lt;p&gt;当设备叠加层纹理在您的项目中时，打开设备定义文件，在定义设备支持的屏幕的对象中添加&lt;code&gt;presentation&lt;/code&gt;属性。在这里，设置图像文件的路径（&lt;code&gt;overlayPath&lt;/code&gt;）和边框的大小（&lt;code&gt;borderSize&lt;/code&gt;）。有关如何执行此操作的示例，请参见以下设备定义文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;friendlyName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Minimal Device with Overlay&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;screens&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1080&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1920&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dpi&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;450.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;presentation&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;overlayPath&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Overlays/MinimalDeviceOverlay.png&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;borderSize&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;y&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;z&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51.0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;130.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;systemInfo&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;operatingSystem&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Android&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：设备叠加层纹理文件的路径可以相对于设备定义文件，也可以相对于您的Unity项目中包含&lt;strong&gt;Assets&lt;/strong&gt;或&lt;strong&gt;Packages&lt;/strong&gt;目录的目录。例如，如果设备定义文件位于&lt;strong&gt;Assets/Devices&lt;/strong&gt;目录中，而设备叠加文件位于&lt;strong&gt;Assets/Devices/Overlays&lt;/strong&gt;目录中，则以下文件路径都是有效的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;相对于设备定义文件：&lt;strong&gt;Overlays/MinimalDeviceOverlay.png&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;相对于包含&lt;strong&gt;Assets&lt;/strong&gt;目录的目录：&lt;strong&gt;Assets/Devices/Overlays/MinimalDeviceOverlay.png&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;扩展设备模拟器&#34;&gt;扩展设备模拟器 &lt;a href=&#34;#%e6%89%a9%e5%b1%95%e8%ae%be%e5%a4%87%e6%a8%a1%e6%8b%9f%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;设备模拟器支持插件来扩展其功能并更改模拟器视图中控制面板的&lt;strong&gt;UI&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;创建插件&#34;&gt;创建插件 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e6%8f%92%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要创建一个设备模拟器插件，需要扩展DeviceSimulatorPlugin类。&lt;/p&gt;
&lt;p&gt;要将UI插入到设备模拟器视图中，您的插件必须满足以下条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重写&lt;code&gt;title&lt;/code&gt;属性以返回一个非空字符串。&lt;/li&gt;
&lt;li&gt;重写&lt;code&gt;OnCreateUI&lt;/code&gt;方法以返回包含UI的VisualElement。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您的插件不符合这些条件，设备模拟器会实例化插件，但不会在模拟器视图中显示其UI。&lt;/p&gt;
&lt;p&gt;以下示例演示如何创建一个插件，该插件重写title属性并向模拟器视图添加UI。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TouchInfoPlugin&lt;/span&gt; : DeviceSimulatorPlugin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; title =&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Touch Info&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Label m_TouchCountLabel;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Label m_LastTouchEvent;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Button m_ResetCountButton;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [SerializeField]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; m_TouchCount = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OnCreate()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        deviceSimulator.touchScreenInput += touchEvent =&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            m_TouchCount += &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            UpdateTouchCounterText();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            m_LastTouchEvent.text = &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Last touch event: {touchEvent.phase.ToString()}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; VisualElement OnCreateUI()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        VisualElement root = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; VisualElement();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_LastTouchEvent = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Label(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Last touch event: None&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_TouchCountLabel = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Label();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        UpdateTouchCounterText();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_ResetCountButton = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Button {text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Reset Count&amp;#34;&lt;/span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_ResetCountButton.clicked += () =&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            m_TouchCount = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            UpdateTouchCounterText();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        root.Add(m_LastTouchEvent);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        root.Add(m_TouchCountLabel);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        root.Add(m_ResetCountButton);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; root;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; UpdateTouchCounterText()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (m_TouchCount &amp;gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            m_TouchCountLabel.text = &lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Touches recorded: {m_TouchCount}&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            m_TouchCountLabel.text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;No taps recorded&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Game view(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/04/2023-08-04-unity-document-14/</link>
      <pubDate>Fri, 04 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/04/2023-08-04-unity-document-14/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;游戏视图&#34;&gt;游戏视图 &lt;a href=&#34;#%e6%b8%b8%e6%88%8f%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-04-unity-document-14/game-view-window.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;游戏视图是由应用程序中的相机渲染而来。游戏视图显示了最终构建的应用程序的外观。您需要使用一个或多个相机来控制玩家在使用应用程序时看到的内容。&lt;/p&gt;
&lt;p&gt;游戏视图包含在默认的Unity编辑器布局中。如果游戏视图未打开，请转到&lt;strong&gt;窗口 &amp;gt; 常规&lt;/strong&gt;，然后选择&lt;strong&gt;游戏&lt;/strong&gt;以打开游戏视图。&lt;/p&gt;
&lt;p&gt;在编辑器中，您可在游戏视图和模拟器视图之间切换。模拟器视图显示了您构建的应用程序在移动设备上的外观。&lt;/p&gt;
&lt;h2 id=&#34;播放模式&#34;&gt;播放模式 &lt;a href=&#34;#%e6%92%ad%e6%94%be%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-04-unity-document-14/Editor-PlayButtons.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用播放模式来运行项目并测试其在构建应用程序时的工作方式。&lt;/p&gt;
&lt;p&gt;在工具栏中使用播放模式控制按钮来控制播放模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击播放按钮以切换编辑器到播放模式。&lt;/li&gt;
&lt;li&gt;点击暂停按钮以暂停播放模式。&lt;/li&gt;
&lt;li&gt;点击步进按钮以将播放模式前进一帧。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在播放模式下，您所做的任何更改都是临时的，并在退出播放模式时重置。当您进入播放模式时，编辑器将变暗在游戏视图外的界面部分。&lt;/p&gt;
&lt;h2 id=&#34;使用模拟器视图&#34;&gt;使用模拟器视图 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e6%a8%a1%e6%8b%9f%e5%99%a8%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用模拟器视图来预览构建应用程序在移动设备上的外观。&lt;/p&gt;
&lt;p&gt;要在游戏视图和模拟器视图之间切换，在&lt;strong&gt;游戏/模拟器&lt;/strong&gt;选项卡中，从&lt;strong&gt;游戏/模拟器&lt;/strong&gt;菜单中选择一个选项。&lt;/p&gt;
&lt;p&gt;或者，要打开模拟器视图，转到&lt;strong&gt;窗口 &amp;gt; 通用&lt;/strong&gt;，然后选择&lt;strong&gt;设备模拟器&lt;/strong&gt;。如果没有打开模拟器视图的实例，它将作为一个浮动窗口打开。然而，如果模拟器视图已经在编辑器中打开，那么尝试从菜单中打开模拟器视图将使其获得焦点。&lt;/p&gt;
&lt;h2 id=&#34;游戏视图控制栏&#34;&gt;游戏视图控制栏 &lt;a href=&#34;#%e6%b8%b8%e6%88%8f%e8%a7%86%e5%9b%be%e6%8e%a7%e5%88%b6%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;游戏视图控制栏位于游戏视图的顶部，包含控制游戏视图的选项。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Game/Simulator&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&lt;strong&gt;游戏&lt;/strong&gt;或&lt;strong&gt;模拟器&lt;/strong&gt;视图。使用游戏视图预览构建后的应用程序外观。使用模拟器视图预览构建后的应用程序在移动设备上的外观。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Display&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择在游戏视图中渲染的显示器。如果在场景中有多个带有摄像机组件的&lt;strong&gt;游戏对象&lt;/strong&gt;，可选择一个选项在它们之间切换。默认情况下，&lt;strong&gt;显示器&lt;/strong&gt;设置为&lt;strong&gt;显示器 1&lt;/strong&gt;。您可以在摄像机组件的&lt;strong&gt;检视面板&lt;/strong&gt;中，通过&lt;strong&gt;目标显示器&lt;/strong&gt;选项为摄像机分配显示器。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Aspect ratio&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在具有不同纵横比的监视器上测试您的游戏外观。默认情况下，&lt;strong&gt;纵横比&lt;/strong&gt;设置为&lt;strong&gt;自由纵横比&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;低分辨率纵横比&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当选择一个纵横比时，模拟低分辨率显示屏的像素密度，并在选择纵横比时降低游戏视图的分辨率。当游戏视图在非Retina显示屏上时，&lt;strong&gt;低分辨率纵横比&lt;/strong&gt;始终可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;垂直同步（仅游戏视图）&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;允许同步。同步可以在录制视频时非常有用。编辑器会尝试以显示器的刷新率来渲染游戏视图，但这并不保证。当启用此选项时，将游戏视图最大化在播放模式下可以隐藏其他视图并减少编辑器渲染的视图数量，这仍然是有用的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale slider&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;增加或减小游戏视图的缩放比例。向右滚动以放大并详细查看游戏视图中的区域。当设备分辨率高于游戏视图窗口大小时，此滑块可让您缩小以显示整个屏幕。您还可以在应用程序停止或暂停时使用滚动轮和鼠标中键来进行此操作。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Play Mode behavior&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;本部分根据您所选择的内容描述了播放模式的行为。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;播放模式聚焦&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当编辑器处于播放模式时，将焦点切换到选定的游戏视图上。进入播放模式时，只能有一个游戏视图处于焦点状态。在最大化模式下使用时，意味着在最大化的游戏视图上聚焦。在一个游戏视图上启用聚焦将禁用其他游戏视图上的聚焦。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;播放模式最大化&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;以最大化到编辑器窗口的100％的大小运行播放模式的游戏视图。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;播放模式不聚焦&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;进入播放模式时不将焦点切换到选定的游戏视图上。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Open the Frame Debugger&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开帧调试器窗口。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Mute audio&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;进入播放模式时禁用应用程序内的音频。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity快捷键&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;在播放模式下，当游戏视图窗口不在焦点时，禁用编辑器的键盘快捷键触发。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Stats&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示或隐藏统计信息覆盖图，其中包含关于应用程序音频和图形的渲染统计信息。使用统计信息覆盖图来监控播放模式下应用程序的性能。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Gizmos&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示或隐藏Gizmos菜单。使用&lt;strong&gt;Gizmos&lt;/strong&gt;菜单来选择在播放模式中隐藏或显示的Gizmos。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;gizmos菜单&#34;&gt;Gizmos菜单 &lt;a href=&#34;#gizmos%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Gizmos菜单包含Unity在场景视图和游戏视图中为游戏对象和其他项目显示的Gizmos的选项。此菜单在场景视图和游戏视图中均可用。有关更多信息，请参阅Gizmos菜单。&lt;/p&gt;
&lt;h2 id=&#34;高级选项&#34;&gt;高级选项 &lt;a href=&#34;#%e9%ab%98%e7%ba%a7%e9%80%89%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;右键单击&lt;strong&gt;游戏&lt;/strong&gt;选项卡以显示高级的游戏视图选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-04-unity-document-14/GameView-AdvancedOptions.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;高级游戏视图选项包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;当没有摄像机渲染时警告&lt;/strong&gt;：如果没有摄像机渲染到屏幕上，则引擎会显示警告。例如，用于诊断问题，如意外删除或禁用摄像机。除非您有意不使用摄像机来渲染应用程序，请启用此选项。此选项默认启用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;在编辑模式下每帧清空&lt;/strong&gt;：在应用程序不播放时，引擎会清空游戏视图中的每帧内容。这样可以避免在配置应用程序时出现模糊效果。除非不在播放模式下时需要使用上一帧的内容，否则保持启用。此选项默认启用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Scene view(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/03/2023-08-03-unity-document-13/</link>
      <pubDate>Thu, 03 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/03/2023-08-03-unity-document-13/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unity界面-场景视图&#34;&gt;Unity界面-场景视图 &lt;a href=&#34;#unity%e7%95%8c%e9%9d%a2-%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;场景&lt;/strong&gt;视图是您在编辑器中查看和与创建的世界进行交互的地方。在&lt;strong&gt;场景视图&lt;/strong&gt;中，您可以选择、操作和修改充当景物、角色、摄像机、灯光等的&lt;strong&gt;游戏对象&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Overlays&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;管理包含场景视图制作工具的持续存在的、可定制的面板和&lt;strong&gt;工具栏&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Position GameObjects&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;修改游戏对象的变换数值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Scene view navigation&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;高效地在场景视图中移动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Scene view Camera&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;配置场景摄像机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Control a camera in first person&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在查看摄像机时通过场景视图导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Pick and select GameObjects&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在场景视图中选择游戏对象并管理其可选性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Scene visibility&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在场景视图中隐藏和显示游戏对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Scene view View Options toolbar&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择场景视图的视图选项，并启用或禁用光照和音频。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Gizmos menu&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在场景视图中隐藏和显示&lt;strong&gt;图示&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Scene view context menu&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;直接在场景视图中访问常见的场景视图操作。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Custom Editor tools&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;创建可在场景视图中使用的编辑器工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;覆盖层&#34;&gt;覆盖层 &lt;a href=&#34;#%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中，制作工具以持久存在、可定制的面板和工具栏的形式作为覆盖层提供。覆盖层还可以显示关于您选择的上下文信息。&lt;/p&gt;
&lt;p&gt;为了提高工作效率，您可以调整覆盖层的位置、选择显示或隐藏的覆盖层，并保存、导入或导出覆盖层配置。&lt;/p&gt;
&lt;p&gt;要查看&lt;strong&gt;场景视图&lt;/strong&gt;中有哪些可用的覆盖层，请按键 `键打开覆盖层菜单。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认场景视图覆盖层参考&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解场景视图中的默认覆盖层面板和工具栏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;显示或隐藏覆盖层&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择在场景视图中显示哪些覆盖层。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;调整覆盖层位置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;移动和停靠覆盖层。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;更改覆盖层布局&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将覆盖层的方向更改为面板、水平或垂直。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建和管理覆盖层配置&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;保存、切换、导入和导出覆盖层配置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;相机覆盖层&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在场景视图中管理相机，并对附有相机组件的游戏对象进行第一人称控制。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建自定义覆盖层&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为场景视图创建自定义覆盖层。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;默认场景视图覆盖层参考&#34;&gt;默认场景视图覆盖层参考 &lt;a href=&#34;#%e9%bb%98%e8%ae%a4%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e8%a6%86%e7%9b%96%e5%b1%82%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;通过覆盖层菜单，您可以控制在场景视图中显示哪些覆盖层，并管理您的覆盖层配置。要在&lt;strong&gt;场景&lt;/strong&gt;视图中显示覆盖层菜单，请按键 `键。要恢复默认的覆盖层配置，请从覆盖层菜单中选择&lt;strong&gt;默认&lt;/strong&gt;覆盖层配置。&lt;/p&gt;
&lt;p&gt;默认情况下，在&lt;strong&gt;场景视图&lt;/strong&gt;中显示以下覆盖层。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/overlays-default-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;覆盖层&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;A: &lt;strong&gt;Tools&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用工具覆盖层选择工具环境，使用变换工具，并且如果可用，使用组件工具。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;B: &lt;strong&gt;Tool Settings&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用工具设置覆盖层显示所选工具的可用设置。例如，如果选择了变换工具，则使用工具设置覆盖层选择任何变换工具图示的位置和用于操作图示的手柄。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;C: &lt;strong&gt;Grid and Snap&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用网格和对齐覆盖层控制&lt;strong&gt;游戏对象&lt;/strong&gt;对齐到网格的方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;D: &lt;strong&gt;View Options&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用视图选项覆盖层选择视图选项，控制场景视图的光照和音频。这些控件仅影响场景视图，不会影响构建后的游戏。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;E: &lt;strong&gt;Orientation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用方向覆盖层查看场景&lt;strong&gt;摄像机&lt;/strong&gt;的当前方向，并更改其视角和投影模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;显示或隐藏覆盖层&#34;&gt;显示或隐藏覆盖层 &lt;a href=&#34;#%e6%98%be%e7%a4%ba%e6%88%96%e9%9a%90%e8%97%8f%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;为了自定义您的工作空间，在&lt;strong&gt;场景&lt;/strong&gt;视图中选择要显示的覆盖层。&lt;/p&gt;
&lt;p&gt;如果您想保存您的覆盖层配置，请参考创建和管理覆盖层配置。&lt;/p&gt;
&lt;h2 id=&#34;显示或隐藏覆盖层-1&#34;&gt;显示或隐藏覆盖层 &lt;a href=&#34;#%e6%98%be%e7%a4%ba%e6%88%96%e9%9a%90%e8%97%8f%e8%a6%86%e7%9b%96%e5%b1%82-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要在&lt;strong&gt;场景视图&lt;/strong&gt;中显示或隐藏覆盖层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在场景视图中，按键 `键，以在光标处显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中，选择要在场景视图中显示或隐藏的覆盖层。在场景视图中显示的覆盖层旁边会显示一个眼睛图标。如果在场景视图中隐藏了覆盖层，眼睛图标则被划掉。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中，将鼠标悬停在覆盖层名称上，以突出显示其在场景视图中的位置。&lt;/p&gt;
&lt;h2 id=&#34;隐藏所有覆盖层&#34;&gt;隐藏所有覆盖层 &lt;a href=&#34;#%e9%9a%90%e8%97%8f%e6%89%80%e6%9c%89%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要从场景视图中隐藏所有覆盖层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在场景视图中，按键 `键，以在光标处显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中，取消选择&lt;strong&gt;覆盖层&lt;/strong&gt;复选框。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您还可以按下Shift+`来隐藏或显示场景视图中的所有覆盖层。&lt;/p&gt;
&lt;h1 id=&#34;调整覆盖层位置&#34;&gt;调整覆盖层位置 &lt;a href=&#34;#%e8%b0%83%e6%95%b4%e8%a6%86%e7%9b%96%e5%b1%82%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中移动覆盖层以整理您的工作空间。&lt;/p&gt;
&lt;p&gt;覆盖层可以浮动或停靠到&lt;strong&gt;场景视图&lt;/strong&gt;的边缘或角落。&lt;/p&gt;
&lt;p&gt;如果您想保存您的覆盖层配置，请参考创建和管理覆盖层配置。&lt;/p&gt;
&lt;h2 id=&#34;移动覆盖层&#34;&gt;移动覆盖层 &lt;a href=&#34;#%e7%a7%bb%e5%8a%a8%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;将覆盖层放置在场景视图的任意位置。&lt;/p&gt;
&lt;p&gt;要在场景视图中移动覆盖层:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;单击并按住您要移动的覆盖层的手柄 (&lt;strong&gt;=&lt;/strong&gt;)。&lt;/li&gt;
&lt;li&gt;拖动覆盖层以移动它。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在场景视图中浮动的覆盖层可能会重叠。选择一个覆盖层以将其置于前方。&lt;/p&gt;
&lt;h2 id=&#34;停靠覆盖层&#34;&gt;停靠覆盖层 &lt;a href=&#34;#%e5%81%9c%e9%9d%a0%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;覆盖层可以停靠到场景视图的顶部、底部、侧边和角落。&lt;/p&gt;
&lt;p&gt;您可以将多个覆盖层停靠到场景视图的同一边缘或角落。但是，停靠到同一位置的多个覆盖层之间没有连接。如果您移动一个停靠的覆盖层，停靠在相同位置的其他覆盖层不会移动。&lt;/p&gt;
&lt;p&gt;停靠到场景视图顶部或底部的展开的覆盖层以水平布局显示。停靠到场景视图侧边的展开的覆盖层以垂直布局显示。&lt;/p&gt;
&lt;p&gt;停靠到场景视图边缘的非&lt;strong&gt;工具栏&lt;/strong&gt;覆盖层在停靠时会折叠起来。例如，停靠时，方向覆盖层会折叠起来。点击向下箭头以访问折叠覆盖层的选项。&lt;/p&gt;
&lt;p&gt;要将覆盖层停靠到场景视图中:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;单击并按住您要停靠的覆盖层的手柄 (&lt;strong&gt;=&lt;/strong&gt;)。&lt;/li&gt;
&lt;li&gt;拖动覆盖层到场景视图的一个角落或边缘。如果覆盖层可以停靠，角落或边缘会以蓝色突出显示。&lt;/li&gt;
&lt;li&gt;释放覆盖层。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;管理覆盖层布局&#34;&gt;管理覆盖层布局 &lt;a href=&#34;#%e7%ae%a1%e7%90%86%e8%a6%86%e7%9b%96%e5%b1%82%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以设置覆盖层以以下布局之一显示：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;折叠&lt;/strong&gt;：只显示覆盖层的图标和一个向下箭头。点击箭头可以显示覆盖层的内容。如果覆盖层没有图标，则折叠容器的图标为覆盖层标签的前两个字母。您可以展开折叠的覆盖层。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;面板&lt;/strong&gt;：显示覆盖层的所有内容和标签。无法将停靠在&lt;strong&gt;场景&lt;/strong&gt;视图边缘的覆盖层设置为面板。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;水平&lt;/strong&gt;：以水平容器显示覆盖层的内容。以水平布局设置的覆盖层不会显示其标签。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;垂直&lt;/strong&gt;：以垂直容器显示覆盖层的内容。以垂直布局设置的覆盖层不会显示其标签。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您想保存您的覆盖层配置，请参考创建和管理覆盖层配置。&lt;/p&gt;
&lt;h2 id=&#34;更改覆盖层的布局&#34;&gt;更改覆盖层的布局 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e8%a6%86%e7%9b%96%e5%b1%82%e7%9a%84%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;非&lt;strong&gt;工具栏&lt;/strong&gt;类型的覆盖层（例如方向覆盖层）无法使用水平或垂直布局。&lt;/p&gt;
&lt;p&gt;要更改覆盖层的布局:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;右键单击覆盖层的手柄(&lt;strong&gt;=&lt;/strong&gt;)。&lt;/li&gt;
&lt;li&gt;选择一种布局:
&lt;ul&gt;
&lt;li&gt;如果覆盖层没有停靠在&lt;strong&gt;场景视图&lt;/strong&gt;的边缘，您可以选择任何布局。&lt;/li&gt;
&lt;li&gt;如果覆盖层停靠在&lt;strong&gt;场景视图&lt;/strong&gt;的边缘，您只能展开或折叠该覆盖层。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;展开折叠的覆盖层&#34;&gt;展开折叠的覆盖层 &lt;a href=&#34;#%e5%b1%95%e5%bc%80%e6%8a%98%e5%8f%a0%e7%9a%84%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;非&lt;strong&gt;工具栏&lt;/strong&gt;类型的覆盖层（例如方向覆盖层）在停靠在&lt;strong&gt;场景视图&lt;/strong&gt;的边缘时会折叠起来，无法展开。&lt;/p&gt;
&lt;p&gt;要展开覆盖层，右键单击折叠覆盖层的手柄(&lt;strong&gt;=&lt;/strong&gt;)，然后选择&lt;strong&gt;展开&lt;/strong&gt;。&lt;/p&gt;
&lt;h1 id=&#34;创建和管理覆盖层配置&#34;&gt;创建和管理覆盖层配置 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%92%8c%e7%ae%a1%e7%90%86%e8%a6%86%e7%9b%96%e5%b1%82%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;将覆盖层配置保存为可重用和共享的预设。&lt;/p&gt;
&lt;h2 id=&#34;保存覆盖层配置&#34;&gt;保存覆盖层配置 &lt;a href=&#34;#%e4%bf%9d%e5%ad%98%e8%a6%86%e7%9b%96%e5%b1%82%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;保存的覆盖层预设在计算机上的任何Unity项目中都可用。&lt;/p&gt;
&lt;p&gt;在保存编辑器布局时，也会保存覆盖层配置。&lt;/p&gt;
&lt;p&gt;将覆盖层配置保存为预设:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中，按键 `键，以显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中的下拉菜单中，选择&lt;strong&gt;保存预设&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;保存窗口预设&lt;/strong&gt;窗口中，为您的覆盖层预设命名。&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;保存&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;切换覆盖层配置&#34;&gt;切换覆盖层配置 &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e8%a6%86%e7%9b%96%e5%b1%82%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要切换覆盖层配置:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中，按键 `键，以显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中的下拉菜单中，选择一个覆盖层预设。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;导出覆盖层预设&#34;&gt;导出覆盖层预设 &lt;a href=&#34;#%e5%af%bc%e5%87%ba%e8%a6%86%e7%9b%96%e5%b1%82%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要导出覆盖层配置，请将其保存为文件，然后将其导入到另一个项目中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中，按键 `键，以显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中的下拉菜单中，选择&lt;strong&gt;导出预设到文件&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择要保存预设的位置。&lt;/li&gt;
&lt;li&gt;名称覆盖层预设。&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;保存&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;导入覆盖层预设&#34;&gt;导入覆盖层预设 &lt;a href=&#34;#%e5%af%bc%e5%85%a5%e8%a6%86%e7%9b%96%e5%b1%82%e9%a2%84%e8%ae%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要将覆盖层预设导入到您的项目中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;场景&lt;/strong&gt;视图中，按键 `键，以显示&lt;strong&gt;覆盖层&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;覆盖层&lt;/strong&gt;菜单中的下拉菜单中，选择&lt;strong&gt;从文件加载预设&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择要导入的覆盖层预设文件，然后点击&lt;strong&gt;打开&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;摄像机覆盖层&#34;&gt;摄像机覆盖层 &lt;a href=&#34;#%e6%91%84%e5%83%8f%e6%9c%ba%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用摄像机覆盖层在&lt;strong&gt;场景&lt;/strong&gt;视图中以第一人称控制摄像机并管理摄像机。&lt;/p&gt;
&lt;p&gt;要在&lt;strong&gt;场景&lt;/strong&gt;视图中显示摄像机覆盖层，请从覆盖层菜单中启用它。&lt;/p&gt;
&lt;h2 id=&#34;选择摄像机&#34;&gt;选择摄像机 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e6%91%84%e5%83%8f%e6%9c%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;摄像机覆盖层会在一个可搜索的下拉列表中列出在打开的场景中每个具有Camera或Cinemachine Camera组件的&lt;strong&gt;游戏对象&lt;/strong&gt;。当您在摄像机覆盖层下拉列表中选择摄像机时，摄像机所看到的内容将以画中画的方式显示在摄像机覆盖层中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果您在摄像机覆盖层下拉列表中选择了摄像机，则该摄像机不会在层级窗口中被选中。&lt;/p&gt;
&lt;h2 id=&#34;编辑摄像机组件设置&#34;&gt;编辑摄像机组件设置 &lt;a href=&#34;#%e7%bc%96%e8%be%91%e6%91%84%e5%83%8f%e6%9c%ba%e7%bb%84%e4%bb%b6%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在摄像机覆盖层中，选择&lt;strong&gt;打开摄像机属性&lt;/strong&gt;以配置摄像机覆盖层下拉列表中选中的摄像机的组件设置。要了解有关摄像机组件参数的详细信息，请参考相机组件和设置Cinemachine摄像机属性。&lt;/p&gt;
&lt;h2 id=&#34;控制摄像机&#34;&gt;控制摄像机 &lt;a href=&#34;#%e6%8e%a7%e5%88%b6%e6%91%84%e5%83%8f%e6%9c%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在摄像机覆盖层中，选择&lt;strong&gt;以第一人称控制摄像机&lt;/strong&gt;以进行摄像机的第一人称控制。要了解更多信息，请参考以第一人称控制摄像机。&lt;/p&gt;
&lt;h1 id=&#34;创建自定义覆盖层&#34;&gt;创建自定义覆盖层 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e8%87%aa%e5%ae%9a%e4%b9%89%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以为&lt;strong&gt;场景视图&lt;/strong&gt;窗口创建自定义面板覆盖层和&lt;strong&gt;工具栏&lt;/strong&gt;覆盖层。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;面板覆盖层&lt;/li&gt;
&lt;li&gt;工具栏覆盖层&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：有关创建UIElements的信息，请参考UI Elements开发人员指南。&lt;/p&gt;
&lt;h2 id=&#34;了解editortoolbarelement&#34;&gt;了解EditorToolbarElement &lt;a href=&#34;#%e4%ba%86%e8%a7%a3editortoolbarelement&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;工具栏元素可以包含文本、图标或两者的组合。&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;EditorToolbarElement(Identifier, EditorWindowType)&lt;/code&gt;来注册要在&lt;code&gt;ToolbarOverlay&lt;/code&gt;实现中使用的工具栏元素。&lt;/p&gt;
&lt;p&gt;您可以继承自任何&lt;code&gt;VisualElement&lt;/code&gt;类型并自己创建样式，但是工具栏元素需要特定的样式。最好继承自以下预定义的&lt;code&gt;EditorToolbar&lt;/code&gt;类型之一:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarButton&lt;/code&gt;: 基于 &lt;code&gt;UnityEditor.UIElements.ToolbarButton&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarToggle&lt;/code&gt;: 基于 &lt;code&gt;UnityEditor.UIElements.ToolbarToggle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarDropdown&lt;/code&gt;: 基于 &lt;code&gt;EditorToolbarButton&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarDropdownToggle&lt;/code&gt;: 基于 &lt;code&gt;UnityEngine.UIElements.BaseField&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：如果工具栏水平或垂直停靠，其文本可能不可见或被裁剪。您可以为每个工具栏指定一个图标以避免文本裁剪。&lt;/p&gt;
&lt;h2 id=&#34;创建面板覆盖层&#34;&gt;创建面板覆盖层 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e9%9d%a2%e6%9d%bf%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;所有覆盖层都必须继承自Overlay基类，并实现CreatePanelContent方法。这将创建一个基本面板，您可以将工具栏元素添加到其中。&lt;/p&gt;
&lt;p&gt;创建面板覆盖层的步骤如下:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在Editor文件夹中创建一个新的C#脚本并命名。&lt;/li&gt;
&lt;li&gt;打开您创建的脚本。&lt;/li&gt;
&lt;li&gt;删除脚本中的默认内容。&lt;/li&gt;
&lt;li&gt;从&lt;code&gt;UnityEditor.Overlays&lt;/code&gt;命名空间中实现&lt;code&gt;Overlay&lt;/code&gt;类。&lt;/li&gt;
&lt;li&gt;重写CreatePanelContent函数，并将您的内容添加到&lt;strong&gt;visual element&lt;/strong&gt;中。&lt;/li&gt;
&lt;li&gt;将OverlayAttribute属性添加到类中。&lt;/li&gt;
&lt;li&gt;在&lt;code&gt;OverlayAttribute&lt;/code&gt;中，指定您希望此覆盖层出现在哪种类型的窗口中：
&lt;ul&gt;
&lt;li&gt;如果您希望在所有编辑器窗口中都可用，指定&lt;code&gt;EditorWindow&lt;/code&gt;作为类型。&lt;/li&gt;
&lt;li&gt;如果您只希望在&lt;strong&gt;场景视图&lt;/strong&gt;中可用，指定&lt;code&gt;SceneView&lt;/code&gt;作为类型。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在&lt;code&gt;OverlayAttribute&lt;/code&gt;中，为覆盖层添加一个名字、ID和显示名。&lt;/li&gt;
&lt;li&gt;要添加一个在覆盖层折叠时显示的图标，请将&lt;code&gt;Icon&lt;/code&gt;属性添加到&lt;code&gt;Overlay&lt;/code&gt;类中，并指定一个图标。如果覆盖层没有图标，默认情况下系统将使用覆盖层名称的前两个字母或前两个单词的首字母作为图标。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;示例&#34;&gt;示例 &lt;a href=&#34;#%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.Overlays;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine.UIElements;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Overlay(typeof(SceneView), &amp;#34;Panel Overlay Example&amp;#34;, true)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyToolButtonOverlay&lt;/span&gt; : Overlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;override&lt;/span&gt; VisualElement CreatePanelContent()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; root = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; VisualElement() { name = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;My Toolbar Root&amp;#34;&lt;/span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        root.Add(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Label() { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; root;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;创建工具栏覆盖层&#34;&gt;创建工具栏覆盖层 &lt;a href=&#34;#%e5%88%9b%e5%bb%ba%e5%b7%a5%e5%85%b7%e6%a0%8f%e8%a6%86%e7%9b%96%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;工具栏覆盖层是容器，用于容纳工具栏项，并由多个&lt;code&gt;EditorToolbarElement&lt;/code&gt;组成。&lt;/p&gt;
&lt;p&gt;工具栏覆盖层具有内置的水平、垂直和面板布局。&lt;code&gt;ToolbarOverlay&lt;/code&gt;实现了一个无参数的构造函数，该构造函数传递了&lt;code&gt;EditorToolbarElementAttribute&lt;/code&gt;的ID。与面板覆盖层不同，工具栏覆盖层的内容被定义为独立的元素，它们被收集起来形成一系列元素。&lt;/p&gt;
&lt;p&gt;创建工具栏覆盖层时:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用&lt;code&gt;EditorToolbarElement(Identifier, EditorWindowType)&lt;/code&gt;来注册要在&lt;code&gt;ToolbarOverlay&lt;/code&gt;实现中使用的工具栏元素。&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;OverlayAttribute&lt;/code&gt;为所有覆盖层添加标记。&lt;/li&gt;
&lt;li&gt;确保工具栏覆盖层继承自&lt;code&gt;ToolbarOverlay&lt;/code&gt;并实现一个无参数的构造函数。&lt;/li&gt;
&lt;li&gt;确保工具栏的内容使用字符串ID进行填充，并将其传递给基类构造函数。&lt;/li&gt;
&lt;li&gt;确保ID由&lt;code&gt;EditorToolbarElementAttribute&lt;/code&gt;定义。&lt;/li&gt;
&lt;li&gt;使用&lt;code&gt;Icon&lt;/code&gt;属性为覆盖层添加图标。该图标在覆盖层折叠时可见。如果覆盖层没有图标，默认情况下会显示覆盖层名称的前两个字母（或前两个单词的首字母）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在覆盖层中实现特定于&lt;code&gt;ToolbarOverlay&lt;/code&gt;的元素时：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仅针对工具栏使用&lt;code&gt;IAccessContainerWindow&lt;/code&gt;接口。该元素对其上下文不可见。在&lt;code&gt;DropdownToggleExample&lt;/code&gt;中，如果切换元素，它不会执行任何操作。&lt;/li&gt;
&lt;li&gt;对于视觉效果，请使用&lt;code&gt;UIElement&lt;/code&gt;样式。工具栏元素不会在覆盖层中具备其样式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要创建工具栏覆盖层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在Editor文件夹中创建一个新的C#脚本并命名。&lt;/li&gt;
&lt;li&gt;打开您创建的脚本。&lt;/li&gt;
&lt;li&gt;删除脚本中的默认内容。&lt;/li&gt;
&lt;li&gt;在脚本中添加工具栏元素。&lt;/li&gt;
&lt;li&gt;将工具栏元素添加到覆盖层的构造函数中。&lt;/li&gt;
&lt;li&gt;添加面板覆盖层并实现工具栏元素。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;示例-1&#34;&gt;示例 &lt;a href=&#34;#%e7%a4%ba%e4%be%8b-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;下面的示例展示了一个名为&lt;strong&gt;Element Toolbars Example&lt;/strong&gt;的覆盖层，该覆盖层演示了以下工具栏元素:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarButton&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarToggle&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarDropdown&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EditorToolbarDropdownToggle&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个工具栏元素都作为独立的类创建，然后添加到覆盖层的面板中。&lt;/p&gt;
&lt;p&gt;该覆盖层具有以下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以作为面板、水平和垂直方式排列。&lt;/li&gt;
&lt;li&gt;按钮包括文本和工具提示。&lt;/li&gt;
&lt;li&gt;工具栏图标由&lt;code&gt;Icon&lt;/code&gt;属性定义。该图标在覆盖层折叠时显示。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Text;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.EditorTools;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.Toolbars;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.Overlays;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine.UIElements;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Use [EditorToolbarElement(Identifier, EditorWindowType)] to register toolbar elements for use in ToolbarOverlay implementation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DropdownExample&lt;/span&gt; : EditorToolbarDropdown
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Dropdown&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; dropChoice = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; DropdownExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Axis&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            clicked += ShowDropdown;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ShowDropdown()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; menu = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GenericMenu();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.ShowAsContext();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ToggleExample&lt;/span&gt; : EditorToolbarToggle
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Toggle&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; ToggleExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle OFF&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.RegisterValueChangedCallback(Test);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Test(ChangeEvent&amp;lt;&lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&amp;gt; evt)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (evt.newValue)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ON&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle ON&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OFF&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle OFF&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DropdownToggleExample&lt;/span&gt; : EditorToolbarDropdownToggle, IAccessContainerWindow
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/DropdownToggle&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// This property is specified by IAccessContainerWindow and is used to access the Overlay&amp;#39;s EditorWindow.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; EditorWindow containerWindow { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;readonly&lt;/span&gt; Color[] colors = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Color[] { Color.red, Color.green, Color.cyan };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; DropdownToggleExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Color Bar&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            tooltip = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Display a color rectangle in the top left of the Scene view. Toggle on or off, and open the dropdown&amp;#34;&lt;/span&gt; +
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to change the color.&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// When the dropdown is opened, ShowColorMenu is invoked and we can create a popup menu.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            dropdownClicked += ShowColorMenu;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Subscribe to the Scene view OnGUI callback so that we can draw our color swatch.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            SceneView.duringSceneGui += DrawColorSwatch;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; DrawColorSwatch(SceneView view)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#75715e&#34;&gt;// Test that this callback is for the Scene View that we&amp;#39;re interested in, and also check if the toggle is on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// or off (value).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (view != containerWindow || !&lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Handles.BeginGUI();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            GUI.color = colors[colorIndex];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            GUI.DrawTexture(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Rect(&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;120&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;), Texture2D.whiteTexture);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            GUI.color = Color.white;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Handles.EndGUI();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// When the dropdown button is clicked, this method will create a popup menu at the mouse cursor position.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ShowColorMenu()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; menu = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GenericMenu();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Red&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Green&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blue&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            menu.ShowAsContext();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CreateCube&lt;/span&gt; : EditorToolbarButton&lt;span style=&#34;color:#75715e&#34;&gt;//, IAccessContainerWindow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// This ID is used to populate toolbar elements.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Button&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// IAccessContainerWindow provides a way for toolbar elements to access the `EditorWindow` in which they exist.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Here we use `containerWindow` to focus the camera on our newly instantiated objects after creation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//public EditorWindow containerWindow { get; set; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Because this is a VisualElement, it is appropriate to place initialization logic in the constructor.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// In this method you can also register to any additional events as required. In this example there is a tooltip, an icon, and an action.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; CreateCube()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// A toolbar element can be either text, icon, or a combination of the two. Keep in mind that if a toolbar is&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// docked horizontally the text will be clipped, so usually it&amp;#39;s a good idea to specify an icon.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Create Cube&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            icon = AssetDatabase.LoadAssetAtPath&amp;lt;Texture2D&amp;gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Assets/CreateCubeIcon.png&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            tooltip = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Instantiate a cube in the scene.&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            clicked += OnClick;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// This method will be invoked when the `Create Cube` button is clicked.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OnClick()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; newObj = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// When writing editor tools don&amp;#39;t forget to be a good citizen and implement Undo!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Undo.RegisterCreatedObjectUndo(newObj.gameObject, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Create Cube&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//if (containerWindow is SceneView view)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//    view.FrameSelected();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// All Overlays must be tagged with the OverlayAttribute&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [Overlay(typeof(SceneView), &amp;#34;ElementToolbars Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// IconAttribute provides a way to define an icon for when an Overlay is in collapsed form. If not provided, the name initials are used.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;    [Icon(&amp;#34;Assets/unity.png&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Toolbar Overlays must inherit `ToolbarOverlay` and implement a parameter-less constructor. The contents of a toolbar are populated with string IDs, which are passed to the base constructor. IDs are defined by EditorToolbarElementAttribute.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditorToolbarExample&lt;/span&gt; : ToolbarOverlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;// ToolbarOverlay implements a parameterless constructor, passing the EditorToolbarElementAttribute ID.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// This is the only code required to implement a toolbar Overlay. Unlike panel Overlays, the contents are defined&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// as standalone pieces that will be collected to form a strip of elements.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        EditorToolbarExample() : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            CreateCube.id,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ToggleExample.id,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            DropdownExample.id,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            DropdownToggleExample.id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        { }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;工具栏元素实现&#34;&gt;工具栏元素实现 &lt;a href=&#34;#%e5%b7%a5%e5%85%b7%e6%a0%8f%e5%85%83%e7%b4%a0%e5%ae%9e%e7%8e%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;工具栏元素的控件与UIToolkit中的等效控件相同，但它们继承了一些工具栏功能和特定的样式。&lt;/p&gt;
&lt;p&gt;本节中包含以下工具栏元素的示例:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EditorToolbarButton&lt;/li&gt;
&lt;li&gt;EditorToolbarToggle&lt;/li&gt;
&lt;li&gt;EditorToolbarDropdown&lt;/li&gt;
&lt;li&gt;EditorToolbarDropdownToggle&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;editortoolbarbutton&#34;&gt;EditorToolbarButton &lt;a href=&#34;#editortoolbarbutton&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;EditorToolbarButton&lt;/code&gt;是一个独立的类，包含了元素的逻辑。下面的示例创建了一个按钮，当您点击该按钮时会生成一个立方体:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CreateCube&lt;/span&gt; : EditorToolbarButton
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// This ID is used to populate toolbar elements.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Button&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Because this is a VisualElement, it is appropriate to place initialization logic in the constructor.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// In this method you can also register to any additional events as required. In this example there is a tooltip, an icon, and an action.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; CreateCube()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// A toolbar element can be either text, icon, or a combination of the two. Keep in mind that if a toolbar is docked horizontally the text will be clipped, so it&amp;#39;s a good idea to specify an icon.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Create Cube&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            icon = AssetDatabase.LoadAssetAtPath&amp;lt;Texture2D&amp;gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Assets/CreateCubeIcon.png&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            tooltip = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Instantiate a cube in the scene.&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            clicked += OnClick;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OnClick()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; newObj = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// When writing editor tools, don&amp;#39;t forget to be a good citizen and implement Undo.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Undo.RegisterCreatedObjectUndo(newObj.gameObject, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Create Cube&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Note: Using ObjectFactory class instead of GameObject(like in this example) will register the undo entry automatically removing the need to register manually.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add the element’s ID to the Overlay constructor:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Overlay(typeof(SceneView), &amp;#34;ElementToolbar Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Icon(&amp;#34;Assets/unity.png&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditorToolbarExample&lt;/span&gt; : ToolbarOverlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    EditorToolbarExample() : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(CreateCube.id) { }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;editortoolbartoggle&#34;&gt;EditorToolbarToggle &lt;a href=&#34;#editortoolbartoggle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建包含元素所有逻辑的独立类。以下示例创建了一个切换按钮，它会将其状态打印到控制台并更新元素中的文本:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ToggleExample&lt;/span&gt; : EditorToolbarToggle
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Toggle&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; ToggleExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle OFF&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Register the class to a callback for when the toggle’s state changes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.RegisterValueChangedCallback(OnStateChange);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OnStateChange(ChangeEvent&amp;lt;&lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&amp;gt; evt)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (evt.newValue)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Put logic for when the state is ON here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle State -&amp;gt; ON&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle ON&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Put logic for when the state is OFF here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle State -&amp;gt; OFF&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Toggle OFF&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将元素的ID添加到Overlay构造函数中:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[[Overlay(typeof(SceneView), &amp;#34;ElementToolbar Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Icon(&amp;#34;Assets/unity.png&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditorToolbarExample&lt;/span&gt; : ToolbarOverlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    EditorToolbarExample() : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ToggleExample.id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;) { }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;editortoolbardropdown&#34;&gt;EditorToolbarDropdown &lt;a href=&#34;#editortoolbardropdown&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建一个独立的类，包含元素的所有逻辑。以下是一个简单的示例，演示了一个下拉菜单根据选择的选项调整其文本。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DropdownExample&lt;/span&gt; : EditorToolbarDropdown
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/Dropdown&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; dropChoice = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; DropdownExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Axis&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        clicked += ShowDropdown;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ShowDropdown()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// A simple GenericMenu to populate the dropdown content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; menu = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GenericMenu();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;X&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Y&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;), dropChoice == &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;, () =&amp;gt; { text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;; dropChoice = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Z&amp;#34;&lt;/span&gt;; });
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.ShowAsContext();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将元素的ID添加到Overlay构造函数中:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Overlay(typeof(SceneView), &amp;#34;ElementToolbar Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Icon(&amp;#34;Assets/unity.png&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditorToolbarExample&lt;/span&gt; : ToolbarOverlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    EditorToolbarExample() : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DropdownExample.id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;) { }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;editortoolbardropdowntoggle&#34;&gt;EditorToolbarDropdownToggle &lt;a href=&#34;#editortoolbardropdowntoggle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;创建一个包含元素所有逻辑的独立类。下拉菜单切换是一种类似于场景视图中的Gizmo菜单的下拉菜单切换。该示例在场景视图的角落创建一个矩形，您可以从覆盖中的下拉菜单中选择颜色。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[EditorToolbarElement(id, typeof(SceneView))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DropdownToggleExample&lt;/span&gt; : EditorToolbarDropdownToggle, IAccessContainerWindow
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; id = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ExampleToolbar/DropdownToggle&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// This property is specified by IAccessContainerWindow and is used to access the Overlay&amp;#39;s EditorWindow.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; EditorWindow containerWindow { &lt;span style=&#34;color:#66d9ef&#34;&gt;get&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt;; }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;readonly&lt;/span&gt; Color[] colors = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Color[] { Color.red, Color.green, Color.cyan };
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; DropdownToggleExample()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Color Bar&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        tooltip = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Display a color rectangle in the top left of the Scene view. Toggle on or off, and open the dropdown&amp;#34;&lt;/span&gt; +
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to change the color.&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;// When the dropdown is opened, ShowColorMenu is invoked and you can create a pop-up menu.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dropdownClicked += ShowColorMenu;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Subscribe to the Scene view OnGUI callback to draw a color swatch.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        SceneView.duringSceneGui += DrawColorSwatch;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; DrawColorSwatch(SceneView view)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// Test that this callback is for the correct Scene view, and check if the toggle is on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;// or off (value).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (view != containerWindow || !&lt;span style=&#34;color:#66d9ef&#34;&gt;value&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Handles.BeginGUI();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            GUI.color = colors[colorIndex];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        GUI.DrawTexture(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Rect(&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;120&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;), Texture2D.whiteTexture);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        GUI.color = Color.white;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Handles.EndGUI();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// When the drop-down button is clicked, this method creates a pop-up menu at the mouse cursor position.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; ShowColorMenu()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; menu = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GenericMenu();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Red&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Green&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.AddItem(&lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; GUIContent(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Blue&amp;#34;&lt;/span&gt;), colorIndex == &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, () =&amp;gt; colorIndex = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        menu.ShowAsContext();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将元素的ID添加到Overlay构造函数中:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cs&#34; data-lang=&#34;cs&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Overlay(typeof(SceneView), &amp;#34;ElementToolbar Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;[Icon(&amp;#34;Assets/unity.png&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditorToolbarExample&lt;/span&gt; : ToolbarOverlay
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    EditorToolbarExample() : &lt;span style=&#34;color:#66d9ef&#34;&gt;base&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DropdownToggleExample.id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;) { }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;position-gameobjects&#34;&gt;Position GameObjects &lt;a href=&#34;#position-gameobjects&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要改变GameObject的Transform组件，可以使用鼠标来操作任何Gizmo轴，或直接在Inspector的Transform组件的数字字段中输入数值。&lt;/p&gt;
&lt;p&gt;另外，您还可以从Scene视图的工具覆盖或使用热键选择五个不同的Transform模式:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用键盘上的 &lt;strong&gt;W&lt;/strong&gt; 键来选择移动模式&lt;/li&gt;
&lt;li&gt;使用键盘上的 &lt;strong&gt;E&lt;/strong&gt; 键来选择旋转模式&lt;/li&gt;
&lt;li&gt;使用键盘上的 &lt;strong&gt;R&lt;/strong&gt; 键来选择缩放模式&lt;/li&gt;
&lt;li&gt;使用键盘上的 &lt;strong&gt;T&lt;/strong&gt; 键来选择RectTransform模式&lt;/li&gt;
&lt;li&gt;使用键盘上的 &lt;strong&gt;Y&lt;/strong&gt; 键来选择Transform模式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/game-objects-transform-modes.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;移动&#34;&gt;移动 &lt;a href=&#34;#%e7%a7%bb%e5%8a%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在“移动”Gizmo的中心有三个小正方形，您可以使用它们在同一平面上拖动GameObject（这意味着您可以同时移动两个轴，而保持第三个轴不变）。&lt;/p&gt;
&lt;p&gt;如果您在Move Gizmo的中心点击并拖动时按住Shift键，Gizmo的中心将变成一个平面正方形。平面正方形表示您可以相对于场景视图相机面向的方向在平面上移动GameObject。&lt;/p&gt;
&lt;h3 id=&#34;旋转&#34;&gt;旋转 &lt;a href=&#34;#%e6%97%8b%e8%bd%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;选择“旋转”工具后，通过点击和拖动围绕GameObject出现的线框球状Gizmo的轴来更改GameObject的旋转。与“移动”Gizmo类似，您上次更改的轴会被标记为黄色。将红色、绿色和蓝色圆视为围绕在“移动”模式中出现的红色、绿色和蓝色轴周围执行旋转的圆圈（红色是x轴，绿色是y轴，蓝色是z轴）。最后，使用最外层的圆圈绕场景视图的z轴旋转GameObject。可以将其视为在屏幕空间中进行旋转。&lt;/p&gt;
&lt;h3 id=&#34;缩放&#34;&gt;缩放 &lt;a href=&#34;#%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;“缩放”工具可以通过在Gizmo中心的立方体上点击和拖动，使GameObject在所有轴上均匀地重新缩放。您还可以分别缩放各个轴，但如果在存在子GameObject时进行此操作时要小心，因为效果可能看起来相当奇怪。&lt;/p&gt;
&lt;h3 id=&#34;recttransform&#34;&gt;RectTransform &lt;a href=&#34;#recttransform&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;RectTransform通常用于定位2D元素，如Sprites或UI元素，但它也可以用于操作3D GameObjects。它将移动、缩放和旋转合并为一个Gizmo：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在矩形Gizmo内点击并拖动以移动GameObject。&lt;/li&gt;
&lt;li&gt;在矩形Gizmo的任何角落或边缘上点击并拖动以缩放GameObject。&lt;/li&gt;
&lt;li&gt;拖动边缘以沿一个轴缩放GameObject。&lt;/li&gt;
&lt;li&gt;拖动角落以在两个轴上缩放GameObject。&lt;/li&gt;
&lt;li&gt;要旋转GameObject，将光标放在矩形角的外面。光标会变成一个显示旋转图标的符号。从此区域点击并拖动以旋转GameObject。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请注意，在2D模式下，您无法使用Gizmos在Scene中更改z轴。然而，使用z轴进行某些脚本编写技术可能很有用，所以您仍然可以使用Inspector中的Transform组件来设置z轴。&lt;/p&gt;
&lt;p&gt;有关转换GameObject的更多信息，请参阅Transform组件的文档。&lt;/p&gt;
&lt;h3 id=&#34;transform&#34;&gt;Transform &lt;a href=&#34;#transform&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Transform&lt;/strong&gt;工具结合了&lt;strong&gt;Move&lt;/strong&gt;、&lt;strong&gt;Rotate&lt;/strong&gt;和&lt;strong&gt;Scale&lt;/strong&gt;工具。它的Gizmo提供了移动和旋转的控制手柄。当&lt;strong&gt;工具手柄旋转&lt;/strong&gt;设置为&lt;strong&gt;局部&lt;/strong&gt;（参见下文）时，Transform工具还提供了用于缩放选定的GameObject的控制手柄。&lt;/p&gt;
&lt;h2 id=&#34;gizmo控制柄位置切换&#34;&gt;&lt;strong&gt;Gizmo控制柄位置切换&lt;/strong&gt; &lt;a href=&#34;#gizmo%e6%8e%a7%e5%88%b6%e6%9f%84%e4%bd%8d%e7%bd%ae%e5%88%87%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/gizmo-handle-position-toggles.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在工具设置叠加中，可以找到&lt;strong&gt;Gizmo控制柄位置切换&lt;/strong&gt;功能，用于定义任何变换工具的Gizmo位置以及用于操作Gizmo本身的控制柄。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/gizmo-handle-position-toggles-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;关于位置&#34;&gt;关于位置 &lt;a href=&#34;#%e5%85%b3%e4%ba%8e%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用下拉菜单在&lt;strong&gt;Pivot&lt;/strong&gt;和&lt;strong&gt;Center&lt;/strong&gt;之间进行切换。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pivot&lt;/strong&gt; 将Gizmo定位在GameObject的实际枢轴点上，枢轴点由Transform组件定义。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Center&lt;/strong&gt; 将Gizmo定位在基于选定的GameObject的中心位置上。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;关于旋转&#34;&gt;关于旋转 &lt;a href=&#34;#%e5%85%b3%e4%ba%8e%e6%97%8b%e8%bd%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用下拉菜单在&lt;strong&gt;Local&lt;/strong&gt;和&lt;strong&gt;Global&lt;/strong&gt;之间进行切换。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Local&lt;/strong&gt; 保持Gizmo相对于GameObject的旋转不变。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Global&lt;/strong&gt; 将Gizmo约束为世界空间方向。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;对齐&#34;&gt;对齐 &lt;a href=&#34;#%e5%af%b9%e9%bd%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity提供了三种对齐方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;世界网格对齐：将GameObject与沿X、Y或Z轴投影的网格对齐，或按照X、Y或Z轴的增量转换GameObject。只有在使用世界或全局的操作柄方向时才可用。&lt;/li&gt;
&lt;li&gt;表面对齐：将GameObject对齐到任何&lt;strong&gt;Collider&lt;/strong&gt;的交点上。&lt;/li&gt;
&lt;li&gt;顶点对齐：将给定&lt;strong&gt;Mesh&lt;/strong&gt;的任何顶点对齐到另一个Mesh的顶点或表面的位置。可以进行顶点对顶点、顶点对表面和枢轴对顶点的对齐。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当您将&lt;strong&gt;Prefab&lt;/strong&gt;拖入场景时，Unity默认将它们放置在光标位置。您可以通过按住&lt;strong&gt;Alt&lt;/strong&gt;键拖动Prefab来保持其与光标位置的任何偏移量。&lt;/p&gt;
&lt;h3 id=&#34;表面对齐&#34;&gt;表面对齐 &lt;a href=&#34;#%e8%a1%a8%e9%9d%a2%e5%af%b9%e9%bd%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将GameObject对齐到Collider的交点上，请按照以下步骤操作:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确保&lt;strong&gt;移动&lt;/strong&gt;工具处于激活状态。&lt;/li&gt;
&lt;li&gt;按住&lt;strong&gt;Shift+Ctrl&lt;/strong&gt;（macOS：&lt;strong&gt;Shift+Command&lt;/strong&gt;），然后单击并按住一个GameObject的操作柄。&lt;/li&gt;
&lt;li&gt;将GameObject拖动到具有Collider的另一个GameObject上。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;顶点对齐&#34;&gt;顶点对齐 &lt;a href=&#34;#%e9%a1%b6%e7%82%b9%e5%af%b9%e9%bd%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用&lt;strong&gt;顶点对齐&lt;/strong&gt;可以快速组装场景：选择给定Mesh中的任何顶点，并将该顶点的位置与选择的任何其他Mesh中的任何顶点的位置相同。例如，在赛车游戏中使用顶点对齐来精确定位道路段，或者将道具物品放置在Mesh的顶点位置上。&lt;/p&gt;
&lt;p&gt;按照以下步骤使用顶点对齐:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择要操作的Mesh，并确保&lt;strong&gt;移动&lt;/strong&gt;工具处于激活状态。&lt;/li&gt;
&lt;li&gt;按住&lt;strong&gt;V&lt;/strong&gt;键来激活顶点对齐模式。&lt;/li&gt;
&lt;li&gt;将光标移到您希望用作枢轴点的Mesh的顶点上。&lt;/li&gt;
&lt;li&gt;一旦光标位于您想要的顶点上，请按住鼠标左键并将Mesh拖到另一个Mesh上的任何其他顶点旁边。
&lt;ul&gt;
&lt;li&gt;要将顶点对齐到另一个Mesh上的表面，请同时按住&lt;strong&gt;Shift+Ctrl&lt;/strong&gt;（macOS：&lt;strong&gt;Shift+Command&lt;/strong&gt;）并移动到您要对齐到的表面上。&lt;/li&gt;
&lt;li&gt;要将枢轴对齐到另一个Mesh上的顶点，请同时按住&lt;strong&gt;Ctrl&lt;/strong&gt;（macOS：&lt;strong&gt;Command&lt;/strong&gt;）并将光标移动到您要对齐到的顶点上。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在满意结果时释放鼠标按钮和&lt;strong&gt;V&lt;/strong&gt;键（&lt;strong&gt;Shift+V&lt;/strong&gt;用作此功能的切换）。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;将gameobject旋转至collider上的某一点&#34;&gt;将GameObject旋转至Collider上的某一点 &lt;a href=&#34;#%e5%b0%86gameobject%e6%97%8b%e8%bd%ac%e8%87%b3collider%e4%b8%8a%e7%9a%84%e6%9f%90%e4%b8%80%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用面向视点方式旋转GameObject，将其朝向Collider表面上的某一点。这在将GameObject朝向目标（如摄像机或玩家）时非常有用。&lt;/p&gt;
&lt;p&gt;使用面向视点旋转方式:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在场景视图中选择要旋转的GameObject。&lt;/li&gt;
&lt;li&gt;在工具叠加中选择&lt;strong&gt;旋转&lt;/strong&gt;工具或按下&lt;strong&gt;E&lt;/strong&gt;键。&lt;/li&gt;
&lt;li&gt;单击旋转Gizmo控制柄以选中它。&lt;/li&gt;
&lt;li&gt;按住&lt;strong&gt;Shift+Ctrl&lt;/strong&gt;（macOS：&lt;strong&gt;Shift+Command&lt;/strong&gt;），并将鼠标移动到您要将所选GameObject对齐到的Collider的表面上。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;屏幕空间变换&#34;&gt;屏幕空间变换 &lt;a href=&#34;#%e5%b1%8f%e5%b9%95%e7%a9%ba%e9%97%b4%e5%8f%98%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在使用&lt;strong&gt;变换&lt;/strong&gt;工具时，按住&lt;strong&gt;Shift&lt;/strong&gt;键可启用屏幕空间模式。这种模式允许您根据在屏幕上的显示情况移动、旋转和缩放GameObject，而不是在场景中进行操作。&lt;/p&gt;
&lt;h1 id=&#34;网格对齐&#34;&gt;网格对齐 &lt;a href=&#34;#%e7%bd%91%e6%a0%bc%e5%af%b9%e9%bd%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity在编辑器的&lt;strong&gt;场景视图&lt;/strong&gt;窗口中提供了一个可视化网格，可以通过将&lt;strong&gt;GameObjects&lt;/strong&gt;对齐到最近的网格位置来帮助精确对齐它们。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以通过以下几种方式将GameObject对齐到沿X、Y或Z轴投影的网格上:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将选定的GameObject对齐到最近的网格点上。&lt;/li&gt;
&lt;li&gt;在移动、旋转或缩放GameObject时打开网格对齐功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您还可以按增量对GameObject进行变换，而无需将其与网格线对齐。如果您需要更改移动、旋转或缩放的量大小，可以更改增量对齐值。&lt;/p&gt;
&lt;p&gt;默认情况下，网格是隐藏的，但您可以使其可见，并更改其出现的轴线。您可以通过更改以下内容来自定义网格的外观和行为:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网格的大小（调整线之间的距离）。&lt;/li&gt;
&lt;li&gt;网格线本身的颜色。&lt;/li&gt;
&lt;li&gt;网格线的透明度或不透明度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;许多操作都支持键盘快捷键。您可以查看分配给这些操作的按键组合，并使用快捷键管理器进行自定义设置。&lt;/p&gt;
&lt;h2 id=&#34;网格和对齐工具栏叠加层&#34;&gt;网格和对齐工具栏叠加层 &lt;a href=&#34;#%e7%bd%91%e6%a0%bc%e5%92%8c%e5%af%b9%e9%bd%90%e5%b7%a5%e5%85%b7%e6%a0%8f%e5%8f%a0%e5%8a%a0%e5%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-overlay.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;图标&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;操作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon.png&#34; alt=&#34;&#34;&gt;显示网格&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换网格的显示或隐藏 切换网格轴线 更改网格的透明度 将网格移动到工具柄或返回原点&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Mode-icon.png&#34; alt=&#34;&#34;&gt;对齐网格&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换网格对齐的开启或关闭 更改网格的大小 将GameObject对齐到轴线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-increment-icon.png&#34; alt=&#34;&#34;&gt;对齐增量&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改默认的增量对齐值&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: &lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层上的设置对所有的&lt;strong&gt;场景视图&lt;/strong&gt;都是全局的。&lt;/p&gt;
&lt;h2 id=&#34;对齐对准网格和增量移动&#34;&gt;对齐、对准网格和增量移动 &lt;a href=&#34;#%e5%af%b9%e9%bd%90%e5%af%b9%e5%87%86%e7%bd%91%e6%a0%bc%e5%92%8c%e5%a2%9e%e9%87%8f%e7%a7%bb%e5%8a%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本节提供以下操作的信息:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对齐到网格&lt;/li&gt;
&lt;li&gt;激活自动对齐&lt;/li&gt;
&lt;li&gt;以增量方式移动、旋转和缩放&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;对齐到网格&#34;&gt;对齐到网格 &lt;a href=&#34;#%e5%af%b9%e9%bd%90%e5%88%b0%e7%bd%91%e6%a0%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以将GameObject对齐到单个轴上最近的网格点，或同时对齐到所有轴上的网格点。&lt;/p&gt;
&lt;p&gt;要将GameObject对齐到特定轴线上最近的网格点:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层的工具栏中，打开网格对齐的下拉菜 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Mode-icon-inline.png&#34; alt=&#34;&#34;&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;对齐选定物体&lt;/strong&gt;部分，点击与要对齐到的轴线匹配的&lt;strong&gt;X&lt;/strong&gt;、&lt;strong&gt;Y&lt;/strong&gt;或&lt;strong&gt;Z&lt;/strong&gt;按钮。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grid-align-selection.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要同时将GameObject对齐到所有轴线上：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;选择要对齐到网格的GameObject。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用**Ctrl +（Windows）&lt;strong&gt;或&lt;/strong&gt;Cmd +（macOS）**快捷键将GameObject推入所有轴上的网格上。&lt;/p&gt;
&lt;p&gt;或者，从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏中，打开网格可见性的下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Mode-icon-inline-172137287267825.png&#34; alt=&#34;&#34;&gt;) ，在&lt;strong&gt;对齐选定物体&lt;/strong&gt;部分，点击&lt;strong&gt;所有轴&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;激活自动对齐&#34;&gt;激活自动对齐 &lt;a href=&#34;#%e6%bf%80%e6%b4%bb%e8%87%aa%e5%8a%a8%e5%af%b9%e9%bd%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要启用自动对齐到网格:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;激活&lt;strong&gt;移动&lt;/strong&gt;工具，并确保在&lt;strong&gt;工具设置&lt;/strong&gt;叠加层中，将处理器方向设置为全局 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Global-icon.png&#34; alt=&#34;&#34;&gt;).&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;网格和对齐&lt;/strong&gt;工具栏叠加层中的网格对齐图标 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Mode-icon-inline-172137294316330.png&#34; alt=&#34;&#34;&gt;) 激活时图标为蓝色。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当您启用自动网格对齐时，&lt;strong&gt;移动&lt;/strong&gt;、&lt;strong&gt;旋转&lt;/strong&gt;和&lt;strong&gt;缩放&lt;/strong&gt;变换工具将选定的GameObject对齐到沿着活动的&lt;strong&gt;工具柄&lt;/strong&gt;轴线的网格上。如果您需要以较小的增量移动GameObject，您还可以进行增量变换。&lt;/p&gt;
&lt;h3 id=&#34;以增量方式移动旋转和缩放&#34;&gt;以增量方式移动、旋转和缩放 &lt;a href=&#34;#%e4%bb%a5%e5%a2%9e%e9%87%8f%e6%96%b9%e5%bc%8f%e7%a7%bb%e5%8a%a8%e6%97%8b%e8%bd%ac%e5%92%8c%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要按增量对齐值进行移动、旋转或缩放:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在使用变换工具柄时，按住&lt;strong&gt;Control&lt;/strong&gt;键（Windows）或&lt;strong&gt;Command&lt;/strong&gt;键（macOS）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要更改默认的增量对齐值:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;工具栏叠加层中，打开增量对齐的下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-increment-icon-inline.png&#34; alt=&#34;&#34;&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;增量对齐&lt;/strong&gt;部分包含几个属性，可让您为所有轴设置相同的值或不同的值:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grid-snapping-increment.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;移动&lt;/strong&gt;：选中链接图标时，输入所有轴的统一增量对齐值，或取消链接轴并在&lt;strong&gt;X&lt;/strong&gt;、&lt;strong&gt;Y&lt;/strong&gt;和&lt;strong&gt;Z&lt;/strong&gt;轴属性中设置不同的增量对齐值。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;旋转&lt;/strong&gt;：输入旋转增量值（以度为单位）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缩放&lt;/strong&gt;：以缩放因子的形式输入缩放增量值。例如，如果缩放值为2，则选定的GameObject将以原始大小的两倍进行缩放。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;自定义网格&#34;&gt;自定义网格 &lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bd%91%e6%a0%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本节提供有关以下内容的自定义信息:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;显示和隐藏网格线&lt;/li&gt;
&lt;li&gt;更改网格出现的轴线&lt;/li&gt;
&lt;li&gt;调整网格大小&lt;/li&gt;
&lt;li&gt;更改网格线的默认颜色&lt;/li&gt;
&lt;li&gt;更改网格的透明度&lt;/li&gt;
&lt;li&gt;将网格移动到GameObject的工具柄上&lt;/li&gt;
&lt;li&gt;将值和设置重置为默认值&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;显示和隐藏网格线&#34;&gt;显示和隐藏网格线 &lt;a href=&#34;#%e6%98%be%e7%a4%ba%e5%92%8c%e9%9a%90%e8%97%8f%e7%bd%91%e6%a0%bc%e7%ba%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;通过单击网格可见性图标 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon-inline.png&#34; alt=&#34;&#34;&gt;) 在网格和对齐叠加层工具栏上开启或关闭网格的显示。您可以选择在任何轴（X、Y、Z）上显示或隐藏网格。如果您处于正交模式 (Iso)，Unity会选择视图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGridsAxis.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;更改网格出现的轴线&#34;&gt;更改网格出现的轴线 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e7%bd%91%e6%a0%bc%e5%87%ba%e7%8e%b0%e7%9a%84%e8%bd%b4%e7%ba%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要更改网格出现的轴线:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;工具栏的网格可见性下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon-inline-172137312556545.png&#34; alt=&#34;&#34;&gt;)中打开。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;网格平面&lt;/strong&gt;部分，选择您想要出现的轴线。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-select-axis.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;调整网格的大小&#34;&gt;调整网格的大小 &lt;a href=&#34;#%e8%b0%83%e6%95%b4%e7%bd%91%e6%a0%bc%e7%9a%84%e5%a4%a7%e5%b0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以设置在&lt;strong&gt;场景视图&lt;/strong&gt;窗口中显示的网格线的大小。网格的大小会影响网格的外观以及GameObject在网格上的自动对齐方式，但不会影响GameObject的移动、旋转或缩放的增量方式。&lt;/p&gt;
&lt;p&gt;如果同时设置所有轴的大小，将显示一个统一的、基于正方形的网格。但您也可以在任意三个轴上使用不同的值，以显示一个非统一的、基于矩形的网格。默认情况下，网格在所有轴上的距离都设置为1。&lt;/p&gt;
&lt;p&gt;要调整网格的大小:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层中，单击&lt;strong&gt;网格对齐&lt;/strong&gt;按钮旁边的箭头，以打开&lt;strong&gt;对齐&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;要输入网格大小的统一值，并使所有网格线的长度相同:
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;大小&lt;/strong&gt;属性中，选择链接图标。&lt;/li&gt;
&lt;li&gt;输入&lt;strong&gt;X&lt;/strong&gt;属性的值，以设置所有轴上的网格线的大小。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;要输入网格大小的非统一值，并为每个轴指定网格线的大小:
&lt;ol&gt;
&lt;li&gt;确保&lt;strong&gt;大小&lt;/strong&gt;属性中的链接图标未选择。&lt;/li&gt;
&lt;li&gt;输入&lt;strong&gt;X&lt;/strong&gt;、&lt;strong&gt;Y&lt;/strong&gt;和&lt;strong&gt;Z&lt;/strong&gt;属性的值，以设置每个轴上的网格线的大小。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：使用以下快捷键增加或减小网格的大小:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要增加网格大小，请按&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;]&lt;/strong&gt;（macOS：&lt;strong&gt;Cmd&lt;/strong&gt;+&lt;strong&gt;]&lt;/strong&gt;）。&lt;/li&gt;
&lt;li&gt;要减小网格大小，请按&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;[&lt;/strong&gt;（macOS：&lt;strong&gt;Cmd&lt;/strong&gt;+&lt;strong&gt;[&lt;/strong&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;更改网格线的默认颜色&#34;&gt;更改网格线的默认颜色 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e7%bd%91%e6%a0%bc%e7%ba%bf%e7%9a%84%e9%bb%98%e8%ae%a4%e9%a2%9c%e8%89%b2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要更改&lt;strong&gt;场景视图&lt;/strong&gt;窗口中可见网格线的颜色:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开首选项窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从列表中选择&lt;strong&gt;颜色&lt;/strong&gt;类别，以查看&lt;strong&gt;颜色&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGridsPrefs.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;strong&gt;网格&lt;/strong&gt;属性的颜色选择器选择新的颜色。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;更改网格的透明度&#34;&gt;更改网格的透明度 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e7%bd%91%e6%a0%bc%e7%9a%84%e9%80%8f%e6%98%8e%e5%ba%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果网格线过亮或过暗，您可以进行调整：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏，打开网格可见性下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon-inline-172137322662254.png&#34; alt=&#34;&#34;&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用滑块调整&lt;strong&gt;不透明度&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-opacity.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;将网格移动到gameobject的工具柄上&#34;&gt;将网格移动到GameObject的工具柄上 &lt;a href=&#34;#%e5%b0%86%e7%bd%91%e6%a0%bc%e7%a7%bb%e5%8a%a8%e5%88%b0gameobject%e7%9a%84%e5%b7%a5%e5%85%b7%e6%9f%84%e4%b8%8a&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏的网格可见性下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon-inline-172137323770157.png&#34; alt=&#34;&#34;&gt;) 中，使用&lt;strong&gt;移动到&lt;/strong&gt;部分将网格移动到所选GameObject的工具柄（&lt;strong&gt;Handle&lt;/strong&gt;），或将其移回默认位置（&lt;strong&gt;Origin&lt;/strong&gt;)。&lt;/p&gt;
&lt;h3 id=&#34;将值和设置重置为默认值&#34;&gt;将值和设置重置为默认值 &lt;a href=&#34;#%e5%b0%86%e5%80%bc%e5%92%8c%e8%ae%be%e7%bd%ae%e9%87%8d%e7%bd%ae%e4%b8%ba%e9%bb%98%e8%ae%a4%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将网格轴和不透明度设置重置为默认值：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏，打开网格可见性下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Vis-icon-inline-172137325088560.png&#34; alt=&#34;&#34;&gt;).&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;更多&lt;/strong&gt;菜单（⋮），然后点击&lt;strong&gt;重置&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要将网格大小重置为默认值：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏，打开网格对齐下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneGrids-Mode-icon-inline-172137325454863.png&#34; alt=&#34;&#34;&gt;).&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;更多&lt;/strong&gt;菜单（⋮），然后点击&lt;strong&gt;重置&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要将增量对齐值重置为默认值：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从&lt;strong&gt;网格和对齐&lt;/strong&gt;叠加层工具栏，打开增量对齐下拉菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-grids-increment-icon-inline-172137325851666.png&#34; alt=&#34;&#34;&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;strong&gt;更多&lt;/strong&gt;菜单（⋮），然后点击&lt;strong&gt;重置&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;只有&lt;strong&gt;增量对齐&lt;/strong&gt;部分下的值会返回到其原始默认值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;快捷键默认设置&#34;&gt;快捷键默认设置 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae%e9%bb%98%e8%ae%a4%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以使用以下默认的Unity快捷键执行以下操作：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;默认快捷键&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;增加网格大小&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;]&lt;/strong&gt;（Windows）或&lt;strong&gt;Command&lt;/strong&gt;+&lt;strong&gt;]&lt;/strong&gt;（macOS）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;减小网格大小&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;strong&gt;[&lt;/strong&gt;（Windows）或&lt;strong&gt;Command&lt;/strong&gt;+&lt;strong&gt;[&lt;/strong&gt;（macOS）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将选择对象对齐到网格 Push to Grid&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl&lt;/strong&gt;+&lt;em&gt;&lt;strong&gt;*（Windows）或&lt;/strong&gt;Command&lt;/em&gt;*+****（macOS）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;重置网格&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;（默认没有快捷键）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;要更改这些默认键盘快捷键，请使用“快捷键管理器”。&lt;/p&gt;
&lt;h1 id=&#34;场景视图导航&#34;&gt;场景视图导航 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e5%af%bc%e8%88%aa&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;默认情况下，当您在&lt;strong&gt;场景&lt;/strong&gt;视图中导航时，您会通过场景摄像机查看并控制。要通过附有&lt;strong&gt;相机&lt;/strong&gt;组件的&lt;strong&gt;GameObject&lt;/strong&gt;查看并控制，请使用相机叠加层。&lt;/p&gt;
&lt;p&gt;您可以使用以下导航控件在&lt;strong&gt;场景视图&lt;/strong&gt;中移动场景摄像机或附有相机组件的GameObject：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;场景Gizmo&lt;/li&gt;
&lt;li&gt;移动、旋转和缩放工具&lt;/li&gt;
&lt;li&gt;中心工具&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;场景gizmo&#34;&gt;场景Gizmo &lt;a href=&#34;#%e5%9c%ba%e6%99%afgizmo&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;场景&lt;strong&gt;Gizmo&lt;/strong&gt;出现在场景视图中。它显示了场景摄像机的当前方向，并允许您更改观察角度和投影模式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/Editor-SceneGizmo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;场景Gizmo在立方体的每一侧都有一个锥形的臂。最前面的臂上标有&lt;strong&gt;X&lt;/strong&gt;、&lt;strong&gt;Y&lt;/strong&gt;和&lt;strong&gt;Z&lt;/strong&gt;。单击任何一个锥形轴臂，可以将场景摄像机对齐到它代表的轴上（例如：俯视图、左视图和前视图）。您也可以右键单击立方体，查看带有视角列表的菜单。要返回到默认的视角，请右键单击场景Gizmo并选择&lt;strong&gt;Free&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;您还可以切换&lt;strong&gt;透视&lt;/strong&gt;模式。这会在场景视图的透视模式和正交模式（有时称为“等角”）之间切换。要执行此操作，单击场景Gizmo中心的立方体或其下方的文字。正交视图没有透视效果，在与单击其中一个锥形轴臂以获得前景、顶面或侧面高程结合使用时很有用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-view-perspect-and-ortho.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneViewOrthoTopAndSide.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果您的场景视图处于不便的视角（倒置或令您感到困惑的角度），请&lt;strong&gt;Shift&lt;/strong&gt;点击场景Gizmo中心的立方体，以返回到一个稍微从侧面和略微从上方查看场景的&lt;strong&gt;透视&lt;/strong&gt;视图。&lt;/p&gt;
&lt;p&gt;单击场景Gizmo右上角的锁形图标可启用或禁用场景的旋转。一旦禁用场景旋转，右键单击可平移视图而不是旋转。这与查看工具相同。&lt;/p&gt;
&lt;p&gt;请注意，在&lt;strong&gt;2D模式&lt;/strong&gt;下，场景Gizmo不会显示。&lt;strong&gt;2D模式&lt;/strong&gt;下的唯一视图选项是垂直查看XY平面。&lt;/p&gt;
&lt;h3 id=&#34;mac触控板手势&#34;&gt;Mac触控板手势 &lt;a href=&#34;#mac%e8%a7%a6%e6%8e%a7%e6%9d%bf%e6%89%8b%e5%8a%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在具有触控板的Mac上，您可以用双指拖动来缩放视图。&lt;/p&gt;
&lt;p&gt;您还可以使用三个手指来模拟点击&lt;strong&gt;场景Gizmo&lt;/strong&gt;的效果：向上、向左、向右或向下拖动以将场景摄像机对齐到相应的方向。您必须在MacOS触控板手势设置中启用三指滑动才能使用此功能。&lt;/p&gt;
&lt;h2 id=&#34;在场景视图中移动旋转和缩放&#34;&gt;在场景视图中移动、旋转和缩放 &lt;a href=&#34;#%e5%9c%a8%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e4%b8%ad%e7%a7%bb%e5%8a%a8%e6%97%8b%e8%bd%ac%e5%92%8c%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在场景视图导航中，移动、旋转和缩放是关键操作。Unity提供了多种方法来执行这些操作，以实现最大可访问性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用箭头键&lt;/li&gt;
&lt;li&gt;使用视图工具&lt;/li&gt;
&lt;li&gt;使用飞行模式&lt;/li&gt;
&lt;li&gt;更改摄像机的移动速度&lt;/li&gt;
&lt;li&gt;使用移动快捷键&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;使用箭头键&#34;&gt;使用箭头键 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e7%ae%ad%e5%a4%b4%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以使用&lt;strong&gt;箭头键&lt;/strong&gt;在场景中移动，就像“步行”一样。向上和向下箭头键将相机向前和向后移动，朝向所面向的方向。左右箭头键将视图向侧面平移。按住&lt;strong&gt;Shift&lt;/strong&gt;和箭头键，可以更快地移动。&lt;/p&gt;
&lt;h3 id=&#34;使用视图工具&#34;&gt;使用&lt;strong&gt;视图工具&lt;/strong&gt; &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e8%a7%86%e5%9b%be%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;选择视图工具（快捷键：&lt;strong&gt;Q&lt;/strong&gt;）后，可以使用以下鼠标控件：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;控制&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;平移&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/Editor-MoveTool.png&#34; alt=&#34;&#34;&gt;  单击并拖动以在场景中平移相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;旋转&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/Editor-EyeTool.png&#34; alt=&#34;&#34;&gt;  按住&lt;strong&gt;Alt&lt;/strong&gt;（Windows）或&lt;strong&gt;Option&lt;/strong&gt;（macOS），左键单击并拖动以围绕当前枢轴点旋转相机。2D模式下无法使用此选项，因为视图是正交的。&lt;strong&gt;注意&lt;/strong&gt;：如果无法旋转相机，请确保场景Gizmo右上角的锁形图标处于禁用状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缩放&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/Editor-ZoomTool.png&#34; alt=&#34;&#34;&gt;  按住&lt;strong&gt;Alt&lt;/strong&gt;（Windows）或&lt;strong&gt;Option&lt;/strong&gt;（macOS），右键单击并拖动以缩放场景视图。在macOS上，您还可以按住&lt;strong&gt;Control&lt;/strong&gt;键，然后左键单击并拖动。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;按住&lt;strong&gt;Shift&lt;/strong&gt;键可以加快移动和缩放的速度。&lt;/p&gt;
&lt;h3 id=&#34;使用飞行模式&#34;&gt;使用&lt;strong&gt;飞行模式&lt;/strong&gt; &lt;a href=&#34;#%e4%bd%bf%e7%94%a8%e9%a3%9e%e8%a1%8c%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用&lt;strong&gt;飞行模式&lt;/strong&gt;以第一人称视角在场景视图中飞行，类似于在许多游戏中导航的方式。&lt;/p&gt;
&lt;p&gt;飞行模式专为&lt;strong&gt;透视模式&lt;/strong&gt;设计。在&lt;strong&gt;正交模式&lt;/strong&gt;下，如果您点击并按住右鼠标按钮，然后移动鼠标，视图会围绕相机旋转。&lt;/p&gt;
&lt;p&gt;飞行模式在2D模式下不可用。在2D模式下，如果您点击并按住右鼠标按钮，然后移动鼠标，视图会在场景视图中平移。&lt;/p&gt;
&lt;p&gt;要进入&lt;strong&gt;飞行模式&lt;/strong&gt;并在&lt;strong&gt;飞行模式&lt;/strong&gt;下导航场景视图，请执行以下操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击并按住右鼠标按钮。&lt;/li&gt;
&lt;li&gt;使用以下操作来导航场景视图：
&lt;ul&gt;
&lt;li&gt;使用鼠标移动视图。&lt;/li&gt;
&lt;li&gt;要向前或向后移动，请按下&lt;strong&gt;W&lt;/strong&gt;或&lt;strong&gt;S&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;要向左或向右移动，请按下&lt;strong&gt;A&lt;/strong&gt;或&lt;strong&gt;D&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;要向上或向下移动，请按下&lt;strong&gt;Q&lt;/strong&gt;或&lt;strong&gt;E&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;要加快速度，请按住&lt;strong&gt;Shift&lt;/strong&gt;键。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;更改相机的移动速度&#34;&gt;更改相机的移动速度 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e7%9b%b8%e6%9c%ba%e7%9a%84%e7%a7%bb%e5%8a%a8%e9%80%9f%e5%ba%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;场景摄像机在编辑器中显示场景视图。默认情况下，当您在场景视图中导航时，可通过控制和查看场景摄像机来进行操作。有关如何控制附有摄像机组件的游戏对象，请参阅以第一人称控制摄像机。&lt;/p&gt;
&lt;p&gt;要更改场景视图中摄像机的移动速度，请在“视图选项”叠加层中选择摄像机图标，然后调整&lt;strong&gt;相机速度&lt;/strong&gt;属性的值以设置所需速度。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：要找到“视图选项”叠加层，请按**`&lt;strong&gt;键打开叠加菜单。在叠加菜单中，将鼠标悬停在&lt;/strong&gt;视图选项**上，以在场景视图中突出显示“视图选项”叠加层。&lt;/p&gt;
&lt;p&gt;在&lt;strong&gt;飞行模式&lt;/strong&gt;下，使用鼠标滚轮或在触控板上用两根手指滑动来改变场景摄像机在场景中的移动速度。&lt;/p&gt;
&lt;h3 id=&#34;移动快捷键&#34;&gt;移动快捷键 &lt;a href=&#34;#%e7%a7%bb%e5%8a%a8%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;为了提高效率，无论选择了哪个变换工具，都可以使用这些控件。最方便的控件取决于您使用的鼠标或触控板。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;三键鼠标&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;双键鼠标或触控板&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;只有一个鼠标按钮或触控板的Mac&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;平移视图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住中间鼠标按钮然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;+&lt;strong&gt;Control&lt;/strong&gt;键+左键单击，然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Option&lt;/strong&gt;+&lt;strong&gt;Command&lt;/strong&gt;键+左键单击，然后拖动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;围绕旋转&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;+左键单击，然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;+左键单击，然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Option&lt;/strong&gt;+左键单击，然后拖动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;缩放视图&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用滚轮滚动，或按住&lt;strong&gt;Alt&lt;/strong&gt;+右键单击，然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;+右键单击，然后拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用两指滑动的方法进行缩放，或按住&lt;strong&gt;Option&lt;/strong&gt;+&lt;strong&gt;Control&lt;/strong&gt;键+左键单击，然后拖动&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;更改速度&lt;/strong&gt;（仅在飞行模式下可用）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动时使用滚轮滚动。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动时用两根手指拖动&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动时用两根手指拖动&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;将视图居中于gameobject&#34;&gt;将视图居中于GameObject &lt;a href=&#34;#%e5%b0%86%e8%a7%86%e5%9b%be%e5%b1%85%e4%b8%ad%e4%ba%8egameobject&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要将场景视图居中于GameObject，请在Hierarchy中选择GameObject，然后将鼠标移动到场景视图上并按下键&lt;strong&gt;F&lt;/strong&gt;。如果GameObject已经被选择，&lt;strong&gt;F&lt;/strong&gt;将缩放到轴心点。此功能还可以在菜单栏中找到，路径为&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Frame Selected&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;要在GameObject移动时锁定视图，请按键&lt;strong&gt;Shift+F&lt;/strong&gt;。此功能也可以在菜单栏中找到，路径为&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Lock View to Selected&lt;/strong&gt;。&lt;/p&gt;
&lt;h1 id=&#34;场景视图摄像机&#34;&gt;场景视图摄像机 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e6%91%84%e5%83%8f%e6%9c%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;摄像机设置菜单包含配置&lt;strong&gt;场景&lt;/strong&gt;摄像机的选项。这些调整不会影响具有摄像机组件的&lt;strong&gt;游戏对象&lt;/strong&gt;的设置。&lt;/p&gt;
&lt;p&gt;要打开场景摄像机设置菜单，请在&lt;strong&gt;场景视图&lt;/strong&gt;中的视图选项叠加层中点击摄像机图标。&lt;/p&gt;
&lt;p&gt;您还可以使用SceneView.CameraSetting API在脚本中配置场景摄像机。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：要将属性重置为默认值，点击场景摄像机设置菜单右上角的齿轮图标，然后选择&lt;strong&gt;重置&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneViewCameraSettings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Field of View&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改场景摄像机的视野角度。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Dynamic Clipping&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用后，编辑器会根据场景的视口大小自动计算摄像机的近裁剪面和远裁剪面。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Clipping Planes&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置摄像机开始和停止渲染场景中的游戏对象距摄像机的距离。这些距离适用于透视投影模式和正交（等距）投影模式。当禁用&lt;strong&gt;动态裁剪&lt;/strong&gt;时，&lt;strong&gt;近裁剪面&lt;/strong&gt;和&lt;strong&gt;远裁剪面&lt;/strong&gt;属性是可修改的。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;近裁剪面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;设置编辑器渲染游戏对象时距离摄像机最近的点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;远裁剪面&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;设置编辑器渲染游戏对象时距离摄像机最远的点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Occlusion Culling&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在场景视图中启用遮挡剔除。这样可以防止编辑器渲染位于其他游戏对象后面而摄像机无法看到的游戏对象。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Camera Easing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使摄像机在场景视图中的运动中起到缓动效果。这样，当摄像机开始移动时，它会缓慢启动而不是立即以全速开始，并在停止时缓慢减速。您可以在API中设置持续时间。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Camera Acceleration&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动摄像机时启用加速度。启用后，摄像机开始时以基于速度值的速度移动，并持续增加速度，直到停止移动。禁用后，摄像机根据&lt;strong&gt;相机速度&lt;/strong&gt;加速到一个恒定速度。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Camera Speed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置场景视图中场景摄像机使用的当前速度。在飞行模式下，您可以在移动时更改摄像机的速度。要执行此操作，请使用鼠标滚轮或在触控板上拖动两个手指。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;最小值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;设置场景视图中摄像机的最小速度。有效值介于0.01和98之间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;最大值&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;设置场景视图中摄像机的最大速度。有效值介于0.02和99之间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;在第一人称视角下控制摄像机&#34;&gt;在第一人称视角下控制摄像机 &lt;a href=&#34;#%e5%9c%a8%e7%ac%ac%e4%b8%80%e4%ba%ba%e7%a7%b0%e8%a7%86%e8%a7%92%e4%b8%8b%e6%8e%a7%e5%88%b6%e6%91%84%e5%83%8f%e6%9c%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;通过摄像机浏览&lt;strong&gt;场景&lt;/strong&gt;视图，在第一人称视角下工作，以更好地构图。&lt;/p&gt;
&lt;p&gt;您可以使用摄像机覆盖层选择并控制具有相机或Cinemachine相机组件的&lt;strong&gt;游戏对象&lt;/strong&gt;，以第一人称视角来进行操作。&lt;/p&gt;
&lt;p&gt;在控制摄像机时，您可以像使用场景摄像机时一样使用编辑器工具。例如，选择一个游戏对象并按下F键，将镜头定位到特定的游戏对象上。您还可以在控制摄像机时调整游戏对象的位置、方向和比例，以改变画面的构图。&lt;/p&gt;
&lt;p&gt;可以使用摄像机覆盖层来调整直接控制的摄像机的过扫描。使用过扫描，您可以有意地在摄像机的视图中看到更多或更少的场景，而不是摄像机的最终输出所显示的内容。&lt;/p&gt;
&lt;p&gt;摄像机覆盖层支持时间轴和动画摄像机路径编辑和动画摄像机。通过以第一人称视角控制摄像机来为其游戏对象生成关键帧，以便动画摄像机的编辑和生成。&lt;/p&gt;
&lt;p&gt;要在第一人称视角下控制摄像机，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按下**`**键打开覆盖层菜单。&lt;/li&gt;
&lt;li&gt;在覆盖层菜单中，启用摄像机覆盖层。&lt;/li&gt;
&lt;li&gt;在摄像机覆盖层的下拉列表中，选择要以第一人称视角控制的摄像机。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;以第一人称视角控制所选摄像机&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;要调整过扫描的大小和不透明度，请选择&lt;strong&gt;配置过扫描设置&lt;/strong&gt;，然后执行以下操作：
&lt;ul&gt;
&lt;li&gt;要选择视图指南的大小，请输入&lt;strong&gt;过扫描&lt;/strong&gt;的值或使用鼠标上的滚轮。1是默认值。输入大于1的值以查看比摄像机视锥更多的内容。输入小于1的值进行缩放，并查看比摄像机视锥更少的内容。&lt;/li&gt;
&lt;li&gt;要调整视图指南的不透明度，请输入&lt;strong&gt;过扫描不透明度&lt;/strong&gt;的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;使用场景视图导航控件在场景中移动摄像机。&lt;/li&gt;
&lt;li&gt;要退出摄像机视图，在摄像机覆盖层中选择&lt;strong&gt;返回场景摄像机&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;挑选并选择游戏对象&#34;&gt;挑选并选择游戏对象 &lt;a href=&#34;#%e6%8c%91%e9%80%89%e5%b9%b6%e9%80%89%e6%8b%a9%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以在场景视图或层级窗口中选择一个单独的&lt;strong&gt;游戏对象&lt;/strong&gt;，也可以同时选择多个游戏对象。&lt;/p&gt;
&lt;p&gt;Unity会在场景视图中突出显示选定的游戏对象及其子对象。默认情况下，选择的轮廓颜色为橙色，子对象的轮廓颜色为蓝色。您还可以选择使用不同颜色突出显示选定游戏对象的线框。可以从首选项窗口中更改所有这些轮廓突出显示的颜色。要打开&lt;strong&gt;首选项&lt;/strong&gt;窗口，请转到主菜单中的&lt;strong&gt;Edit &amp;gt; Preferences&lt;/strong&gt;（macOS：&lt;strong&gt;Unity &amp;gt; Settings&lt;/strong&gt;）。&lt;/p&gt;
&lt;p&gt;有关轮廓和线框选择可视化效果的更多信息，请参阅Gizmos菜单的文档。&lt;/p&gt;
&lt;h2 id=&#34;选择游戏对象&#34;&gt;选择游戏对象 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要选择单个游戏对象，请选择以下方法之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在场景视图中单击它。如果您反复单击重叠游戏对象之间的共享空间，则选择将在它们之间循环。&lt;/li&gt;
&lt;li&gt;在层级窗口中点击其名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要选择或取消选择多个游戏对象，请选择以下方法之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在多个游戏对象周围拖动一个矩形框。Unity会选择在此边界框内的所有内容。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按住&lt;strong&gt;Shift&lt;/strong&gt;键并在&lt;strong&gt;场景&lt;/strong&gt;中单击游戏对象。您还可以使用&lt;strong&gt;Ctrl&lt;/strong&gt;（Windows）或&lt;strong&gt;Command&lt;/strong&gt;（macOS）键添加或删除选定的游戏对象。&lt;/p&gt;
&lt;p&gt;**注意：**当编辑器中的某个功能需要选择一个单一的游戏对象执行操作时，它会寻找一个“活动”对象。例如，在轴心模式下，Unity需要决定在转换工具中使用哪个游戏对象作为轴心点。默认情况下，Unity认为您最后选择的游戏对象是“活动”对象。当您Shift+单击所选的多个游戏对象中的其中一个时，您会改变哪一个是活动对象。如果一个游戏对象在场景视图中处于活动状态，Unity不会显示任何可见的提示。但是，在轴心模式下使用多个对象重复Shift+单击时，您可以看到哪个游戏对象是活动对象。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是，如果您正在使用包含大量场景物体（如游戏对象、地形对象、摄像机和灯光）的大型场景，并选择多个对象可能会非常棘手。为了帮助您只选择您想要的物体，您可以使用场景拾取控件来阻止一些物体被拾取。&lt;/p&gt;
&lt;h2 id=&#34;场景拾取控件&#34;&gt;场景拾取控件 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e6%8b%be%e5%8f%96%e6%8e%a7%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以在编辑器中切换场景拾取控件的打开和关闭以标记哪些物体在您的编辑器工作中是可选的。默认情况下，所有物体都是可选的，但是您可以选择Unity在您单击它们时跳过的场景物体。例如，如果您正在使用超过10,000个对象的大型场景，您可以临时阻止特定的游戏对象被选择，以防止意外编辑。&lt;/p&gt;
&lt;p&gt;一旦将物体标记为不可选，Unity将继续渲染它们，即使您无法再在场景视图中选择或编辑它们。选择状态仅在编辑器中持续存在，并且仅适用于设置状态的项目中的用户。更改选择状态不会“脏化”场景（即，不计为修改）。&lt;/p&gt;
&lt;p&gt;场景拾取控件与场景可见性控件非常相似。&lt;/p&gt;
&lt;h3 id=&#34;切换拾取能力&#34;&gt;切换拾取能力 &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e6%8b%be%e5%8f%96%e8%83%bd%e5%8a%9b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以从层级窗口控制单个游戏对象的场景拾取能力。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-picking-icons-hierarchy.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要切换场景拾取能力，可以执行以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;单击层级窗口中游戏对象的拾取能力图标，以在启用和禁用拾取游戏对象及其子对象之间切换。&lt;/p&gt;
&lt;p&gt;切换游戏对象及其子对象的拾取能力会影响所有子游戏对象，从“目标”游戏对象一直到层级的底部。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;键点击层级窗口中游戏对象的拾取能力图标，以仅切换拾取游戏对象的启用和禁用。&lt;/p&gt;
&lt;p&gt;仅切换单个游戏对象的拾取能力不会影响其子对象。它们会保留先前的拾取能力状态。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于可以为整个分支或单个游戏对象切换拾取能力，您可能会出现可以拾取的游戏对象，但却无法拾取其子对象或父对象的情况。为了帮助您跟踪情况，拾取能力图标会更改以指示每个游戏对象的状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/scene-picking-icons-ovw.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/ScenePickingPickableUnpickableChildren.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以选择游戏对象，但无法选择其中某些子对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;B&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/ScenePickingUnpickablePickableChildren.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您无法选择游戏对象，但可以选择其中某些子对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/ScenePickingUnpickable.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您无法选择游戏对象及其子对象。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;D&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/ScenePickingPickable.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以选择游戏对象及其子对象。此图标仅在将鼠标悬停在游戏对象上时才会出现。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;您在层级窗口中对场景拾取进行的任何更改都是持久的。Unity会在您使用&lt;strong&gt;选择全部&lt;/strong&gt;或&lt;strong&gt;取消选择全部&lt;/strong&gt;功能、关闭并重新打开场景等操作时重新应用这些更改。&lt;/p&gt;
&lt;h1 id=&#34;场景可见性&#34;&gt;场景可见性 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity的&lt;strong&gt;场景&lt;/strong&gt;可见性控件允许您在场景视图中快速隐藏和显示&lt;strong&gt;游戏对象&lt;/strong&gt;，而不会改变它们在游戏中的可见性。这对于处理大型或复杂场景非常有用，可以更轻松地查看和选择特定的游戏对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisExVisible.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisExHidden.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用可见性选项比停用游戏对象更安全，因为可见性选项仅影响场景视图。这意味着您不会意外地从渲染的场景中移除游戏对象，也不会触发不必要的光照、遮挡和其他系统的烘焙作业。&lt;/p&gt;
&lt;p&gt;编辑器将场景可见性设置保存到一个名为&lt;code&gt;SceneVisibilityState.asset&lt;/code&gt;的文件中，该文件位于项目的&lt;code&gt;Library&lt;/code&gt;文件夹中。场景会从此文件中读取并在您更改可见性设置时自动更新它。这使得您的设置可以持久保存，从而在不同的会话之间保持一致。由于Unity的源代码管理设置通常会忽略&lt;code&gt;Library&lt;/code&gt;文件夹，更改可见性设置不应该导致源代码管理冲突。&lt;/p&gt;
&lt;p&gt;您可以在层级窗口中为特定的场景项设置可见性，但如果场景范围内的可见性设置被禁用，则被标记为隐藏的项仍可能出现在场景视图中。要更改此设置，您可以在工具栏中切换场景可见性。&lt;/p&gt;
&lt;p&gt;要从脚本中控制场景可见性，请参考SceneVisibilityManager。&lt;/p&gt;
&lt;p&gt;场景可见性控制与场景拾取控制非常相似。&lt;/p&gt;
&lt;h2 id=&#34;设置游戏对象及其子对象的场景可见性&#34;&gt;设置游戏对象及其子对象的场景可见性 &lt;a href=&#34;#%e8%ae%be%e7%bd%ae%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1%e5%8f%8a%e5%85%b6%e5%ad%90%e5%af%b9%e8%b1%a1%e7%9a%84%e5%9c%ba%e6%99%af%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以从层级窗口控制单个游戏对象的场景可见性。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisIconsHierarchy.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要切换场景可见性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单击层级窗口中游戏对象的可见性图标，或按下&lt;strong&gt;H&lt;/strong&gt;键，以在隐藏和显示游戏对象及其子对象之间进行切换。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;切换对象及其子对象的可见性会影响所有子对象，从“目标”对象一直到层级结构的最底部。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按住&lt;strong&gt;Alt&lt;/strong&gt;键并单击层级窗口中游戏对象的可见性图标，以在隐藏和显示游戏对象之间进行切换。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;切换单个对象的可见性不会影响其子对象。它们将保留其先前的可见性状态。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您还可以单击场景的可见性图标，以在场景中隐藏和显示标记为隐藏的项目之间进行切换。&lt;/p&gt;
&lt;p&gt;由于您可以为整个分支或单个游戏对象切换可见性，可能会出现游戏对象是可见的，但其子对象或父对象是隐藏的情况。为了帮助您跟踪发生了什么，可见性图标会更改以指示每个游戏对象的状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisIconsOvw.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisVisibleHiddenChildren.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;游戏对象是可见的，但其中一些子对象是隐藏的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisHiddenVisibleChildren.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;游戏对象是隐藏的，但其中一些子对象是可见的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisVisible.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;游戏对象及其子对象是可见的。当您将鼠标悬停在游戏对象上时，此图标才会出现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;D&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisHidden.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td&gt;游戏对象及其子对象是隐藏的。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;您在层级窗口中进行的场景可见性更改是持久的。Unity会在您在场景视图中切换场景可见性开关、关闭并重新打开场景等操作时重新应用这些更改。&lt;/p&gt;
&lt;h2 id=&#34;打开和关闭场景可见性&#34;&gt;打开和关闭场景可见性 &lt;a href=&#34;#%e6%89%93%e5%bc%80%e5%92%8c%e5%85%b3%e9%97%ad%e5%9c%ba%e6%99%af%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在场景视图的&lt;strong&gt;工具栏&lt;/strong&gt;中，场景可见性开关可以显示或隐藏场景中的游戏对象。单击它以切换场景可见性开关的状态。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisSceneViewToggle.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;关闭场景可见性实际上是将您在层级窗口中设置的场景可见性设置静音，但不会删除或更改它们。所有隐藏的游戏对象都暂时可见。&lt;/p&gt;
&lt;p&gt;重新打开场景可见性将重新应用在层级窗口中设置的可见性设置。&lt;/p&gt;
&lt;h2 id=&#34;隔离选定的游戏对象&#34;&gt;隔离选定的游戏对象 &lt;a href=&#34;#%e9%9a%94%e7%a6%bb%e9%80%89%e5%ae%9a%e7%9a%84%e6%b8%b8%e6%88%8f%e5%af%b9%e8%b1%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;隔离视图临时覆盖场景可见性设置，以使只有选定的游戏对象可见，其他所有内容都会被隐藏。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneVisIsolation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要进入隔离视图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;按下&lt;strong&gt;Shift + H&lt;/strong&gt;键。&lt;/p&gt;
&lt;p&gt;这将隔离所有选定的游戏对象及其子对象。隔离隐藏的游戏对象会使它们可见，直到您退出隔离视图。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在隔离视图中，您可以继续更改场景可见性设置，但在退出视图时，所做的任何更改都将丢失。&lt;/p&gt;
&lt;p&gt;要退出隔离视图：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;再次按下&lt;strong&gt;Shift + H&lt;/strong&gt;键，或在场景视图中单击&lt;strong&gt;退出&lt;/strong&gt;按钮。&lt;/p&gt;
&lt;p&gt;退出隔离视图会恢复您最初的场景可见性设置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;场景视图视图选项工具栏&#34;&gt;场景视图视图选项工具栏 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e8%a7%86%e5%9b%be%e9%80%89%e9%a1%b9%e5%b7%a5%e5%85%b7%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用&lt;strong&gt;场景&lt;/strong&gt;视图视图选项&lt;strong&gt;工具栏&lt;/strong&gt;覆盖来选择各种查看场景的选项，以及启用/禁用光照和音频。这些控件只会在开发期间影响&lt;strong&gt;场景视图&lt;/strong&gt;，不会对构建游戏产生影响。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/SceneViewControlBar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;绘制模式菜单&#34;&gt;绘制模式菜单 &lt;a href=&#34;#%e7%bb%98%e5%88%b6%e6%a8%a1%e5%bc%8f%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;第一个下拉菜单选择要用于表示场景的&lt;strong&gt;绘制模式&lt;/strong&gt;。可用选项如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;绘制模式&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shading Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;平面着色&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示带有其纹理的表面。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;线框&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用线框表示绘制网格。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;带线框的平面着色&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示带纹理且带有覆盖线框的网格。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Miscellaneous&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;阴影级联&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示定向光的阴影级联。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;渲染路径&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用颜色代码为每个游戏对象显示渲染路径：蓝色表示延迟着色，黄色表示正向渲染，红色表示顶点光照。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Alpha通道&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用Alpha渲染颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;重绘&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将&lt;strong&gt;游戏对象&lt;/strong&gt;渲染为透明的“轮廓”。透明颜色会叠加，使您可以轻松发现一个对象绘制在另一个对象上的位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Mipmaps&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用颜色代码显示理想纹理大小：红色表示纹理比所需的尺寸大（在当前的距离和分辨率下），蓝色表示纹理可能较大。理想纹理大小取决于应用程序运行的分辨率以及相机能接近特定表面的程度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;纹理流&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据纹理流系统中的状态以绿色、红色或蓝色对游戏对象进行着色。有关详细信息，请参阅有关纹理流调试的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;精灵遮罩&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;精灵遮罩用于隐藏或显示精灵或一组精灵的部分。有关更多信息，请参阅精灵遮罩文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Deferred&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这些模式允许您单独查看G缓冲区（&lt;strong&gt;反照率&lt;/strong&gt;，&lt;strong&gt;高光&lt;/strong&gt;，&lt;strong&gt;光滑度&lt;/strong&gt;和&lt;strong&gt;法线&lt;/strong&gt;）的各个元素。有关更多信息，请参阅延迟渲染文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Global Illumination&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可用以下模式来帮助可视化全局照明系统的各个方面：&lt;strong&gt;系统&lt;/strong&gt;，&lt;strong&gt;聚类&lt;/strong&gt;，&lt;strong&gt;聚光&lt;/strong&gt;，&lt;strong&gt;UV图&lt;/strong&gt;和&lt;strong&gt;贡献者/接收器&lt;/strong&gt;。有关每个模式的详细信息，请参阅全局照明可视化文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Realtime Global Illumination&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可用以下模式来帮助可视化Enlighten实时全局照明系统的各个方面：&lt;strong&gt;反照率&lt;/strong&gt;，&lt;strong&gt;自发光&lt;/strong&gt;，&lt;strong&gt;间接光&lt;/strong&gt;和&lt;strong&gt;方向性&lt;/strong&gt;。有关每个模式的详细信息，请参阅全局照明可视化文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Baked Global Illumination&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可用以下模式来帮助可视化烘焙全局照明系统的各个方面：&lt;strong&gt;烘焙光照贴图&lt;/strong&gt;，&lt;strong&gt;方向性&lt;/strong&gt;，&lt;strong&gt;阴影蒙版&lt;/strong&gt;，&lt;strong&gt;反照率&lt;/strong&gt;，&lt;strong&gt;自发光&lt;/strong&gt;，&lt;strong&gt;UV图&lt;/strong&gt;，&lt;strong&gt;像素有效性&lt;/strong&gt;，&lt;strong&gt;UV重叠&lt;/strong&gt;，&lt;strong&gt;烘焙光照剔除&lt;/strong&gt;，&lt;strong&gt;光照图索引&lt;/strong&gt;和&lt;strong&gt;光照重叠&lt;/strong&gt;。有关每个模式的详细信息，请参阅全局照明可视化文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Material Validator&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;有两种&lt;strong&gt;材质验证器&lt;/strong&gt;模式：&lt;strong&gt;反照率&lt;/strong&gt;和&lt;strong&gt;金属高光&lt;/strong&gt;。这些模式可用于检查您的基于物理的材质是否使用了推荐范围内的值。有关更多信息，请参阅基于物理的材质验证器文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2d灯光和音频开关&#34;&gt;2D，灯光和音频开关。 &lt;a href=&#34;#2d%e7%81%af%e5%85%89%e5%92%8c%e9%9f%b3%e9%a2%91%e5%bc%80%e5%85%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在&lt;strong&gt;渲染模式&lt;/strong&gt;菜单右侧有三个按钮，用于打开或关闭特定的场景视图选项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2D&lt;/strong&gt;：在场景中切换2D和3D视图。在2D模式下，&lt;strong&gt;相机&lt;/strong&gt;朝向正Z轴，X轴指向右侧，Y轴指向上方。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;灯光&lt;/strong&gt;：打开或关闭场景视图的光照效果（光源，物体阴影等）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;音频&lt;/strong&gt;：打开或关闭场景视图的音频效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;特效按钮和菜单&#34;&gt;特效按钮和菜单 &lt;a href=&#34;#%e7%89%b9%e6%95%88%e6%8c%89%e9%92%ae%e5%92%8c%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;菜单（通过右侧&lt;strong&gt;音频&lt;/strong&gt;按钮旁边的图标激活）具有用于在场景视图中启用或禁用渲染效果的选项。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;天空盒&lt;/strong&gt;：在场景的背景中渲染天空盒纹理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云层&lt;/strong&gt;：显示云层和体积云。仅在使用支持云层的SRP时才可用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;雾效&lt;/strong&gt;：随着距离相机的增加逐渐将视图淡化为一个平面颜色。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;光晕&lt;/strong&gt;：在光源上显示&lt;strong&gt;镜头光晕&lt;/strong&gt;效果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;始终刷新&lt;/strong&gt;：定义动画材质是否显示动画效果。当选中时，任何基于时间的效果（例如着色器）将会动画。例如，场景效果（例如地形上的草波动）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;后期处理&lt;/strong&gt;：显示后期处理效果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;粒子系统&lt;/strong&gt;：显示粒子系统效果。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特效&lt;/strong&gt;按钮本身是一个开关，可以一次启用或禁用所有选定的效果。&lt;/p&gt;
&lt;h2 id=&#34;场景可见性开关&#34;&gt;场景可见性开关 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e5%8f%af%e8%a7%81%e6%80%a7%e5%bc%80%e5%85%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;场景可见性开关用于切换游戏对象的场景可见性。当开启时，Unity应用场景可见性设置。当关闭时，Unity将忽略这些设置。&lt;/p&gt;
&lt;p&gt;有关更多信息，请参阅场景可见性的文档。&lt;/p&gt;
&lt;h2 id=&#34;相机设置菜单&#34;&gt;相机设置菜单 &lt;a href=&#34;#%e7%9b%b8%e6%9c%ba%e8%ae%be%e7%bd%ae%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;相机设置菜单包含用于配置场景视图相机的选项。有关更多信息，请参阅相机设置的文档。&lt;/p&gt;
&lt;h2 id=&#34;gizmos菜单&#34;&gt;Gizmos菜单 &lt;a href=&#34;#gizmos%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Gizmos&lt;/strong&gt;菜单包含用于显示对象、图标和Gizmos的选项。此菜单在场景视图和游戏视图中都可用。有关更多信息，请参阅Gizmos菜单的文档页面。&lt;/p&gt;
&lt;h1 id=&#34;gizmos菜单-1&#34;&gt;Gizmos菜单 &lt;a href=&#34;#gizmos%e8%8f%9c%e5%8d%95-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;场景视图和游戏视图都有一个&lt;strong&gt;Gizmos&lt;/strong&gt;菜单。在场景视图或游戏视图的&lt;strong&gt;工具栏&lt;/strong&gt;中点击&lt;strong&gt;Gizmos&lt;/strong&gt;按钮以访问&lt;strong&gt;Gizmos&lt;/strong&gt;菜单。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/gizmo-button-scene-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/gizmo-button-game-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;属性&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;功能&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;3D Icons&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;3D图标&lt;/strong&gt;复选框用于控制编辑器是否在场景视图中以3D方式绘制组件图标（例如光源和相机）。当勾选&lt;strong&gt;3D图标&lt;/strong&gt;复选框时，组件图标会根据其与相机的距离进行编辑器缩放，并被场景中的游戏对象遮挡。使用滑块来控制它们的外观整体大小。当未勾选&lt;strong&gt;3D图标&lt;/strong&gt;复选框时，组件图标以固定大小绘制，并始终显示在场景视图中的任何游戏对象的前面。有关图像和进一步信息，请参见下面的Gizmos和Icons部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fade Gizmos&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;淡出并停止渲染在屏幕上较小的Gizmos。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Selection Outline&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&lt;strong&gt;选择轮廓&lt;/strong&gt;以显示带有彩色轮廓的选定游戏对象，以及带有不同彩色轮廓的其子对象。默认情况下，Unity以橙色突出显示选定的游戏对象，并以蓝色突出显示子游戏对象。**注意：**此选项仅在场景视图的Gizmos菜单中可用；无法在游戏视图的Gizmos菜单中启用。有关图像和进一步信息，请参见下面的选择轮廓和选择线框部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Selection Wire&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&lt;strong&gt;选择线框&lt;/strong&gt;以显示带有网格线框的选定游戏对象。要更改选择线框的颜色，转到主菜单中的&lt;strong&gt;Edit &amp;gt; Preferences&lt;/strong&gt;（macOS：&lt;strong&gt;Unity &amp;gt; Settings&lt;/strong&gt;），选择&lt;strong&gt;Colors&lt;/strong&gt;，并更改&lt;strong&gt;Selected Wireframe&lt;/strong&gt;设置。此选项仅在场景视图的Gizmos菜单中可用；无法在游戏视图的Gizmos菜单中启用。有关图像和进一步信息，请参见下面的选择轮廓和选择线框部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Light Probe Visualization&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择要在场景视图中显示的光探头。默认值为&lt;strong&gt;仅使用的探头&lt;/strong&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;仅使用的探头&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Display only Light Probes that affect the current selection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;全部探头，没有单元格&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Display all Light Probes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;全部探头，包括单元格&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Display all Light Probes, and the tetrahedrons that Unity uses for interpolation of Light Probe data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;无&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Display no Light Probes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Display Weights&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用时，Unity会从用于活动选择的光探头绘制一条线到用于插值的四面体上的位置。这是一种调试探头插值和放置问题的方法。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Display Occlusion&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用时，如果&lt;strong&gt;照明模式&lt;/strong&gt;设置为&lt;strong&gt;Shadowmask&lt;/strong&gt;，Unity会显示光探头的遮挡数据。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Highlight Invalid Cells&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用以突出显示Unity无法用于间接照明的四面体。例如，如果光探头非常靠近。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Recently Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控制已最近修改的组件和脚本的图标和Gizmos的可见性。此部分在您首次更改一个或多个项后出现，并在随后的更改后更新。有关更多信息，请参见下面的内置组件、脚本和最近更改的项部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scripts&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控制场景中脚本的图标和Gizmos的可见性。此部分仅在您的场景使用符合特定条件的脚本时出现。有关更多信息，请参见下面的内置组件、脚本和最近更改的项部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Built-in Components&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控制所有具有图标或Gizmos的组件类型的图标和Gizmos的可见性。有关更多信息，请参见下面的内置组件、脚本和最近更改的项部分。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;gizmos和icons&#34;&gt;Gizmos和Icons &lt;a href=&#34;#gizmos%e5%92%8cicons&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;gizmos&#34;&gt;Gizmos &lt;a href=&#34;#gizmos&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Gizmos&lt;/strong&gt;是与场景中的游戏对象相关联的图形。某些Gizmos仅在选择了&lt;strong&gt;GameObject&lt;/strong&gt;时绘制，而其他Gizmos无论选择了哪个GameObject都会由编辑器绘制。它们通常是用代码绘制而不是位图图形的线框，并且可以是交互式的。&lt;strong&gt;Camera&lt;/strong&gt; Gizmo和&lt;strong&gt;Light direction&lt;/strong&gt; Gizmo（如下所示）都是内置的Gizmos的示例；您还可以使用脚本创建自己的Gizmos。有关相机的更多信息，请参见Understanding Frustum文档。&lt;/p&gt;
&lt;p&gt;某些Gizmos是被动的图形覆盖，用于参考（例如&lt;strong&gt;Light direction&lt;/strong&gt; Gizmo，显示了光线的方向）。其他一些Gizmos是交互式的，例如AudioSource的&lt;strong&gt;spherical range&lt;/strong&gt; Gizmo，您可以点击并拖动以调整AudioSource的最大范围。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Move&lt;/strong&gt;、&lt;strong&gt;Scale&lt;/strong&gt;、&lt;strong&gt;Rotate&lt;/strong&gt;和&lt;strong&gt;Transform&lt;/strong&gt;工具也是交互式的Gizmos。请参阅位置游戏对象文档以了解有关这些工具的更多信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/IconAndGizmoForLightAndCamera.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请参阅脚本参考页面的OnDrawGizmos函数以了解有关在脚本中实现自定义Gizmos的更多信息。&lt;/p&gt;
&lt;h3 id=&#34;icons&#34;&gt;Icons &lt;a href=&#34;#icons&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以在游戏视图或场景视图中显示&lt;strong&gt;图标&lt;/strong&gt;。它们是扁平的广告牌式覆盖层，您可以使用它们清楚地指示游戏对象在工作时的位置。&lt;strong&gt;Camera&lt;/strong&gt;图标和&lt;strong&gt;Light&lt;/strong&gt;图标是内置图标的示例；您还可以将自己的图标分配给游戏对象或单独的脚本（参见指南文档以了解如何进行分配图标）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GizmosMenu2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GizmoMenu2Dvs3Dicons.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;选择轮廓和选择线框&#34;&gt;选择轮廓和选择线框 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e8%bd%ae%e5%bb%93%e5%92%8c%e9%80%89%e6%8b%a9%e7%ba%bf%e6%a1%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;选择轮廓&#34;&gt;选择轮廓 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e8%bd%ae%e5%bb%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;启用&lt;strong&gt;选择轮廓&lt;/strong&gt;后，选定的游戏对象及其子游戏对象周围会出现一个轮廓。默认情况下，Unity使用橙色突出显示选定的游戏对象，使用蓝色突出显示子游戏对象。您可以在Unity首选项中更改这些颜色（请参见下面的选择颜色）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GameObjectSelectedOutline.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当您选择一个游戏对象时，Unity会突出显示其所有的子游戏对象（以及它们的子游戏对象，依此类推），但不会突出显示父游戏对象（或者它们的父游戏对象，依此类推）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GameObjectSelectedOutlineParentChild.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果选定的游戏对象超出了场景视图的边界，选择轮廓会沿着窗口边缘运行：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GameObjectSelectedBeyondEdges.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;选择线框&#34;&gt;选择线框 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e7%ba%bf%e6%a1%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;启用&lt;strong&gt;选择线框&lt;/strong&gt;时，当您在场景视图或层级窗口中选择一个游戏对象时，该游戏对象的网格线框就会在场景视图中变得可见：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GameObjectSelectedWire.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;选择颜色&#34;&gt;选择颜色 &lt;a href=&#34;#%e9%80%89%e6%8b%a9%e9%a2%9c%e8%89%b2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以为选择的线框设置自定义颜色。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开&lt;strong&gt;Unity&lt;/strong&gt; &amp;gt; &lt;strong&gt;Preferences&lt;/strong&gt;（macOS）或&lt;strong&gt;Edit&lt;/strong&gt; &amp;gt; &lt;strong&gt;Preferences&lt;/strong&gt;（Windows）以打开首选项编辑器。&lt;/li&gt;
&lt;li&gt;在颜色选项卡上，更改以下一个或多个颜色：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Selected Children Outline&lt;/strong&gt;：选定的游戏对象子级的轮廓颜色。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selected Outline&lt;/strong&gt;：选定的游戏对象的轮廓颜色。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wireframe Selected&lt;/strong&gt;：选定的游戏对象的线框颜色。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/game-object-selected-custom-colors.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;内置组件脚本和最近更改的项目&#34;&gt;内置组件、脚本和最近更改的项目 &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e7%bb%84%e4%bb%b6%e8%84%9a%e6%9c%ac%e5%92%8c%e6%9c%80%e8%bf%91%e6%9b%b4%e6%94%b9%e7%9a%84%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;strong&gt;Gizmos&lt;/strong&gt;菜单中的列表来控制各种组件的图标和Gizmos的可见性。该列表分为以下几个部分：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GizmosMenuAll.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;最近更改&#34;&gt;最近更改 &lt;a href=&#34;#%e6%9c%80%e8%bf%91%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;最近更改&lt;/strong&gt;部分控制您最近修改的项目的图标和Gizmos的可见性。当您第一次更改一个或多个项目时，它会出现。在随后的更改后，Unity会更新该列表。&lt;/p&gt;
&lt;h3 id=&#34;脚本&#34;&gt;脚本 &lt;a href=&#34;#%e8%84%9a%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;脚本&lt;/strong&gt;部分控制具有以下条件的脚本的图标和Gizmos的可见性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为它们分配了一个图标（详见分配图标的文档）。&lt;/li&gt;
&lt;li&gt;实现了OnDrawGizmos函数。&lt;/li&gt;
&lt;li&gt;实现了OnDrawGizmosSelected函数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当您的场景包含一个或多个满足上述条件的脚本时，该部分将显示。&lt;/p&gt;
&lt;h3 id=&#34;内置组件&#34;&gt;内置组件 &lt;a href=&#34;#%e5%86%85%e7%bd%ae%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;内置组件&lt;/strong&gt;部分控制所有具有图标或Gizmo的组件类型的可见性。&lt;/p&gt;
&lt;p&gt;在场景视图中没有显示图标或Gizmo的内置组件类型（例如Rigidbody）不在此列表中。&lt;/p&gt;
&lt;h3 id=&#34;切换图标可见性&#34;&gt;切换图标可见性 &lt;a href=&#34;#%e5%88%87%e6%8d%a2%e5%9b%be%e6%a0%87%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;图标&lt;/strong&gt;列显示或隐藏每个组件类型的图标。在主场景视图窗口中会显示完整彩色的图标，而半透明的图标则不会显示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/gizmos-icon.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要在场景视图中切换图标的可见性，请单击&lt;strong&gt;图标&lt;/strong&gt;列中的任何图标。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;strong&gt;如果列表中的某个项目具有Gizmo但没有图标，则该项目的&lt;/strong&gt;图标&lt;/strong&gt;列为空。&lt;/p&gt;
&lt;h3 id=&#34;更改脚本图标&#34;&gt;更改脚本图标 &lt;a href=&#34;#%e6%9b%b4%e6%94%b9%e8%84%9a%e6%9c%ac%e5%9b%be%e6%a0%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;具有自定义图标的脚本在&lt;strong&gt;图标&lt;/strong&gt;列中显示一个小的下拉菜单箭头。要更改自定义图标，请单击箭头以打开选择图标菜单。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-03-unity-document-13/GizmosMenuIconsMenu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;切换gizmo可见性&#34;&gt;切换Gizmo可见性 &lt;a href=&#34;#%e5%88%87%e6%8d%a2gizmo%e5%8f%af%e8%a7%81%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要控制编辑器是否为特定的组件类型（例如，&lt;strong&gt;Collider&lt;/strong&gt;的线框Gizmo或&lt;strong&gt;Camera&lt;/strong&gt;的视野锥体Gizmo）或脚本绘制Gizmo图形，请使用&lt;strong&gt;Gizmo&lt;/strong&gt;列中的复选框。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当复选框被选中时，编辑器会为该组件类型绘制Gizmo。&lt;/li&gt;
&lt;li&gt;当复选框被取消选中时，编辑器不会为该组件类型绘制Gizmo。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;strong&gt;如果列表中的某个项目具有图标但没有Gizmo，则该项目的&lt;/strong&gt;Gizmo&lt;/strong&gt;列为空。&lt;/p&gt;
&lt;p&gt;要切换整个部分（所有&lt;strong&gt;内置组件&lt;/strong&gt;，所有&lt;strong&gt;脚本&lt;/strong&gt;等）的Gizmo可见性，请使用各部分名称旁边的复选框。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;内置组件&lt;/strong&gt;复选框切换了该部分中列出的每种组件类型的Gizmo可见性。&lt;/p&gt;
&lt;p&gt;当复选框被切换为启用状态时，该部分中的一个或多个项目类型的Gizmo可见性也会被切换为启用状态。&lt;/p&gt;
&lt;h1 id=&#34;场景视图上下文菜单&#34;&gt;场景视图上下文菜单 &lt;a href=&#34;#%e5%9c%ba%e6%99%af%e8%a7%86%e5%9b%be%e4%b8%8a%e4%b8%8b%e6%96%87%e8%8f%9c%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用&lt;strong&gt;场景&lt;/strong&gt;视图上下文菜单可以直接在场景中访问常见的&lt;strong&gt;场景视图&lt;/strong&gt;操作，而不是在菜单&lt;strong&gt;工具栏&lt;/strong&gt;中进行。&lt;/p&gt;
&lt;p&gt;显示在场景视图上下文菜单中的菜单选项取决于您当前的选择和工具覆盖层中启用的工具上下文。如果您选择了一个&lt;strong&gt;游戏对象&lt;/strong&gt;，场景视图上下文菜单将显示该游戏对象和任何相关的附加组件的选项。&lt;/p&gt;
&lt;p&gt;要显示上下文菜单，请在场景视图中右键单击。&lt;/p&gt;
&lt;p&gt;**注意：**您可以选择其他快捷方式以显示场景视图上下文菜单。&lt;/p&gt;
&lt;p&gt;场景视图中的默认工具上下文是&lt;strong&gt;游戏对象&lt;/strong&gt;。当启用&lt;strong&gt;游戏对象&lt;/strong&gt;工具上下文时，选择游戏对象时，默认情况下，场景视图上下文菜单会显示以下菜单项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;剪贴板操作，如剪切、复制、粘贴、删除和复制。&lt;/li&gt;
&lt;li&gt;游戏对象视图选项，帮助您在场景视图中可视化所选的游戏对象。&lt;/li&gt;
&lt;li&gt;在场景视图中隔离所选游戏对象的选项，以使只有所选的游戏对象可见。&lt;/li&gt;
&lt;li&gt;向所选的游戏对象添加组件的选项。&lt;/li&gt;
&lt;li&gt;以新窗口打开所选游戏对象的属性的选项。&lt;/li&gt;
&lt;li&gt;Prefab菜单。&lt;/li&gt;
&lt;li&gt;Transform菜单。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果游戏对象附加有其他组件，与这些组件相关的操作将显示在场景视图上下文菜单的末尾。&lt;/p&gt;
&lt;p&gt;如果您的项目包含多个工具上下文，您可以使用工具覆盖层中的第一个按钮来选择工具上下文。如果启用了一个不是&lt;strong&gt;游戏对象&lt;/strong&gt;的工具上下文，场景视图上下文菜单将显示与您在该工具上下文中的选择相关的选项。例如，如果您的项目包含Splines包并启用了&lt;strong&gt;Splines&lt;/strong&gt;工具上下文，则场景视图上下文菜单将显示创建和编辑样条的选项。&lt;/p&gt;
&lt;h1 id=&#34;自定义编辑器工具&#34;&gt;自定义编辑器工具 &lt;a href=&#34;#%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bc%96%e8%be%91%e5%99%a8%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用EditorTool API创建编辑器工具。&lt;/p&gt;
&lt;p&gt;编辑器工具的上下文决定了该工具在编辑器中所影响的内容。工具可以是全局工具或组件工具。&lt;/p&gt;
&lt;p&gt;您可以通过以下叠加层在场景视图中访问编辑器工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具叠加层&lt;/li&gt;
&lt;li&gt;工具设置叠加层&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;工具上下文&#34;&gt;工具上下文 &lt;a href=&#34;#%e5%b7%a5%e5%85%b7%e4%b8%8a%e4%b8%8b%e6%96%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;EditorToolContext API&lt;/code&gt;可更改编辑器内置的变换工具所影响的内容。&lt;/p&gt;
&lt;p&gt;默认的工具上下文是GameObject。具有GameObject工具上下文的工具会影响GameObject的变换值。其他上下文可以影响不同的元素。例如，Spline工具上下文使得&lt;strong&gt;移动&lt;/strong&gt;、&lt;strong&gt;旋转&lt;/strong&gt;和&lt;strong&gt;缩放&lt;/strong&gt;工具影响Spline的节点和切线。&lt;/p&gt;
&lt;p&gt;如果您的项目包含多个工具上下文，可以使用工具叠加层中的第一个按钮选择工具上下文。如果未选择工具上下文按钮，则默认的GameObject工具上下文处于活动状态。如果您的项目中没有额外的工具上下文，则无法从工具叠加层中使用工具上下文按钮。&lt;/p&gt;
&lt;h2 id=&#34;全局工具-vs-组件工具&#34;&gt;全局工具 vs 组件工具 &lt;a href=&#34;#%e5%85%a8%e5%b1%80%e5%b7%a5%e5%85%b7-vs-%e7%bb%84%e4%bb%b6%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用EditorTool API创建的工具可以是全局工具或组件工具。&lt;/p&gt;
&lt;h3 id=&#34;全局工具&#34;&gt;全局工具 &lt;a href=&#34;#%e5%85%a8%e5%b1%80%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;全局工具会影响任何GameObject。&lt;/p&gt;
&lt;p&gt;不管您选择的GameObject的类型是什么，全局工具始终可用。例如，您始终可以访问变换工具，因为变换工具适用于任何GameObject。&lt;/p&gt;
&lt;p&gt;工具叠加层在内置的变换工具（如&lt;strong&gt;移动&lt;/strong&gt;、&lt;strong&gt;旋转&lt;/strong&gt;、&lt;strong&gt;缩放&lt;/strong&gt;和&lt;strong&gt;矩形&lt;/strong&gt;）之后的部分显示全局工具。&lt;/p&gt;
&lt;h3 id=&#34;组件工具&#34;&gt;组件工具 &lt;a href=&#34;#%e7%bb%84%e4%bb%b6%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;组件工具只影响特定的组件。&lt;/p&gt;
&lt;p&gt;只有当您选择的GameObject上附加了工具所属的组件时，才能使用组件工具。例如，只有在选择了带有Light组件的GameObject时，才能使用用于光源的自定义操作工具。&lt;/p&gt;
&lt;p&gt;工具叠加层中的最后几个按钮是组件工具。组件工具根据它们所属的组件分组。组件工具的可用性取决于您在&lt;strong&gt;场景视图&lt;/strong&gt;或&lt;strong&gt;层级&lt;/strong&gt;窗口中选择的内容。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface-The Project window(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/02/2023-08-02-unity-document-12/</link>
      <pubDate>Wed, 02 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/02/2023-08-02-unity-document-12/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unity界面-项目窗口&#34;&gt;Unity界面-项目窗口 &lt;a href=&#34;#unity%e7%95%8c%e9%9d%a2-%e9%a1%b9%e7%9b%ae%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;项目窗口显示与项目相关的所有文件，是您在应用程序中导航和查找资源及其他项目文件的主要方式。默认情况下，在开始新项目时，该窗口是打开的。但是，如果您找不到它或关闭了它，您可以通过&lt;strong&gt;窗口 &amp;gt; 常规 &amp;gt; 项目&lt;/strong&gt;或按Ctrl+5（macOS：Cmd+5）打开它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-02-unity-document-12/project-window-context.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;您可以通过点击窗口顶部并拖动来移动&lt;strong&gt;项目窗口&lt;/strong&gt;。您可以将其停靠在编辑器中的特定位置，或将其拖出编辑器窗口以使用它作为自由浮动窗口。您还可以更改窗口本身的布局。要做到这一点，选择窗口右上角的&lt;strong&gt;更多&lt;/strong&gt;菜单（⋮），然后从&lt;strong&gt;一列布局&lt;/strong&gt;或&lt;strong&gt;两列布局&lt;/strong&gt;中进行选择。&lt;strong&gt;两列布局&lt;/strong&gt;具有额外的窗格，显示每个文件的可视化预览。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-02-unity-document-12/project-window-wide-layout.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;浏览器的左侧面板显示项目的文件夹结构，以层级列表的形式呈现。当您从列表中选择一个文件夹时，Unity会在右侧窗格中显示其内容。您可以点击小三角形来展开或折叠文件夹，显示其包含的任何嵌套文件夹。按住&lt;strong&gt;Alt&lt;/strong&gt;键并单击可以递归地展开或折叠任何嵌套文件夹。&lt;/p&gt;
&lt;p&gt;单个资源显示在右侧面板中，以图标的形式表示其类型（例如，脚本、材质、子文件夹）。要调整图标的大小，使用面板底部的滑块；如果将滑块移至极左侧，它们将被替换为层级列表视图。滑块左侧的空间显示当前选择的项，包括项目正在进行搜索时的完整路径。&lt;/p&gt;
&lt;p&gt;在项目结构列表的上方是一个&lt;strong&gt;收藏夹&lt;/strong&gt;部分，您可以将常用项保存在那里以便快速访问。您可以将项目结构列表中的项拖动到收藏夹中，并且还可以将搜索查询保存在那里。&lt;/p&gt;
&lt;h2 id=&#34;项目窗口工具栏&#34;&gt;项目窗口工具栏 &lt;a href=&#34;#%e9%a1%b9%e7%9b%ae%e7%aa%97%e5%8f%a3%e5%b7%a5%e5%85%b7%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在窗口的顶部边缘是浏览器的&lt;strong&gt;工具栏&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-02-unity-document-12/project-window-toolbar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;创建菜单&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示一个可以添加到当前选定文件夹的资源和子文件夹的列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;搜索栏&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用搜索栏在项目中搜索文件。您可以选择在整个项目(&lt;strong&gt;全部&lt;/strong&gt;)、项目的顶层文件夹（逐个列出）、当前选定的文件夹内或&lt;strong&gt;资产商店&lt;/strong&gt;中搜索文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;在搜索中打开&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开Unity搜索工具以进一步细化搜索。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;按类型搜索&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此属性将限定搜索到特定类型，例如&lt;strong&gt;网格&lt;/strong&gt;、&lt;strong&gt;预设&lt;/strong&gt;、&lt;strong&gt;场景&lt;/strong&gt;等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;按标签搜索&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此属性选择要在其中搜索的标签。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;保存搜索&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将您的搜索保存在左侧面板的&lt;strong&gt;收藏夹&lt;/strong&gt;中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;隐藏的包数量&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此属性以切换在项目窗口中显示的包的可见性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;搜索过滤器&#34;&gt;搜索过滤器 &lt;a href=&#34;#%e6%90%9c%e7%b4%a2%e8%bf%87%e6%bb%a4%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;搜索过滤器通过在搜索文本中添加一个额外的项来起作用。以&lt;code&gt;t:&lt;/code&gt;开头的项按指定的资源类型进行过滤，而以&lt;code&gt;l:&lt;/code&gt;开头的项按标签进行过滤。如果您知道自己要查找的内容，可以直接在搜索框中输入这些项，而不必使用菜单。您可以同时搜索多个类型或标签。添加多个类型会扩展搜索以包括所有指定的类型（即，类型之间进行OR操作）。添加多个标签也会扩展搜索以包括所有指定的标签（即，标签之间进行OR操作）。如果您搜索类型和标签，搜索结果将返回与类型和标签都匹配的资源（即，类型和标签之间进行AND操作）。&lt;/p&gt;
&lt;h2 id=&#34;快捷键&#34;&gt;快捷键 &lt;a href=&#34;#%e5%bf%ab%e6%8d%b7%e9%94%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在浏览器视图具有焦点时，可以使用以下键盘快捷键。请注意，其中一些快捷键仅在视图使用双列布局时才有效（您可以使用右上角的面板菜单在单列布局和双列布局之间切换）。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;快捷键&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定位选择的项（即，在包含选定资源的文件夹中显示选定资源）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Tab&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在第一列和第二列之间切换焦点（双列布局）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl/Cmd + F&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;聚焦搜索字段&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl/Cmd + A&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择列表中所有可见项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ctrl/Cmd + D&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;复制选定的资源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;带有对话框的删除（Windows）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Delete + Shift&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不带对话框的删除（Windows）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Delete + Cmd&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不带对话框的删除（OSX）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enter&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;开始重命名选定项（OSX）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cmd + down arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开选定的资源（OSX）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cmd + up arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;跳转到父文件夹（OSX，双列布局）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;F2&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;开始重命名选定项（Windows）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Enter&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;打开选定的资源（Windows）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Backspace&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;跳转到父文件夹（Windows，双列布局）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Right arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;展开选定的项（树视图和搜索结果）。如果该项已展开，则会选择其第一个子项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Left arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;折叠选定的项（树视图和搜索结果）。如果该项已折叠，则会选择其父项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Alt + right arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在预览中显示资源时展开项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Alt + left arrow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在预览中显示资源时折叠项&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity’s interface(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/08/01/2023-08-01-unity-document-11/</link>
      <pubDate>Tue, 01 Aug 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/08/01/2023-08-01-unity-document-11/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unity的界面&#34;&gt;Unity的界面 &lt;a href=&#34;#unity%e7%9a%84%e7%95%8c%e9%9d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本节提供了对最常见的编辑器窗口的详细介绍，以及如何充分利用它们。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-08-01-unity-document-11/using-editor-window.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;(A)&lt;/strong&gt; 工具栏提供了访问您的Unity账户和Unity云服务的功能。它还包含了Play模式的控制、撤销历史记录、Unity搜索、图层可见性菜单以及编辑器布局菜单。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(B)&lt;/strong&gt; 层级窗口是一个层级文本表示，显示了场景中每个物体（GameObject）的层次结构。场景中的每个物体在层级窗口中都有一个条目，因此这两个窗口之间具有天然的联系。层级窗口揭示了物体之间的结构关系，显示了它们如何相互连接。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(C)&lt;/strong&gt;  游戏视图通过场景中的相机（Cameras）模拟了最终生成的游戏效果。当您点击播放按钮时，模拟会开始。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(D)&lt;/strong&gt; 场景视图允许您以可视化的方式导航和编辑场景。根据您所使用的项目类型，场景视图可以显示3D或2D透视图。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(E)&lt;/strong&gt; 叠加层包含了操作场景视图以及其中的物体的基本工具。您还可以添加自定义叠加层以提高工作流程。v&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(F)&lt;/strong&gt; 检查器窗口允许您查看和编辑当前选中的物体的所有属性。由于不同类型的物体具有不同的属性集，每次选择不同的物体时，检查器窗口的布局和内容都会发生变化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(G)&lt;/strong&gt; 项目窗口显示了你项目中可用的资源库。当你导入资源到项目中时，它们会显示在这里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(H)&lt;/strong&gt; 状态栏提供了关于Unity各个进程的通知，并快速访问相关的工具和设置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-2D or 3D projects(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/31/2023-07-31-unity-document-10/</link>
      <pubDate>Mon, 31 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/31/2023-07-31-unity-document-10/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;2d或3d项目&#34;&gt;2D或3D项目 &lt;a href=&#34;#2d%e6%88%963d%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity既适用于创建2D游戏，也适用于创建3D游戏。当您在Unity中创建一个新项目时，您可以选择以2D模式或3D模式开始。您可能已经知道您想要构建什么，但有一些细微的差别可能会影响您选择哪种模式。&lt;/p&gt;
&lt;p&gt;在2D或3D模式下开始的选择会为Unity编辑器设置一些参数，例如将图像导入为纹理还是精灵。您可以在任何时候在2D和3D模式之间切换，而不管您在创建项目时设置的模式是什么（请参阅2D和3D模式设置）。以下是一些指南，应该能帮助您做出选择。&lt;/p&gt;
&lt;h3 id=&#34;纯3d&#34;&gt;纯3D &lt;a href=&#34;#%e7%ba%af3d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-31-unity-document-10/3dGames.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;3D游戏通常利用三维几何形状，通过在&lt;strong&gt;游戏对象&lt;/strong&gt;的表面渲染材质和纹理，使它们呈现为实体的环境、角色和对象，构成了您的游戏世界。相机可以在&lt;strong&gt;场景&lt;/strong&gt;中自由移动，在世界中以逼真的方式投射光线和阴影。3D游戏通常使用透视渲染场景，因此随着物体靠近相机，它们在屏幕上显得更大。如果您的游戏符合此描述，请选择以&lt;strong&gt;3D&lt;/strong&gt;模式开始。&lt;/p&gt;
&lt;h3 id=&#34;正交3d&#34;&gt;正交3D &lt;a href=&#34;#%e6%ad%a3%e4%ba%a43d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-31-unity-document-10/3dOrthographicGames.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;有时候游戏使用3D几何形状，但使用正交相机而不是透视相机。这是在游戏中以鸟瞰视角展示动作的常用技术，有时被称为“2.5D”。如果您正在制作这样的游戏，您应该在&lt;strong&gt;3D&lt;/strong&gt;模式下使用编辑器，因为即使没有&lt;em&gt;透视&lt;/em&gt;，您仍然会使用3D模型和资源。不过，您需要将相机和场景视图切换为&lt;strong&gt;正交视图&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;纯2d&#34;&gt;纯2D &lt;a href=&#34;#%e7%ba%af2d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-31-unity-document-10/2dGames.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;许多2D游戏使用平面图形，有时被称为精灵（sprites），它们完全没有三维几何形状。它们作为平面图像绘制到屏幕上，游戏的相机没有透视效果。对于这种类型的游戏，您应该在&lt;strong&gt;2D&lt;/strong&gt;模式下启动编辑器。&lt;/p&gt;
&lt;h3 id=&#34;2d游戏中使用3d图形&#34;&gt;2D游戏中使用3D图形 &lt;a href=&#34;#2d%e6%b8%b8%e6%88%8f%e4%b8%ad%e4%bd%bf%e7%94%a83d%e5%9b%be%e5%bd%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-31-unity-document-10/2dGame3dSceneSideScroll.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;有些2D游戏在环境和角色方面使用3D几何形状，但将&lt;em&gt;游戏玩法&lt;/em&gt;限制在二维中。例如，相机可能显示一个横向滚动的视角，玩家只能在二维中移动，但游戏本身仍然使用3D模型作为障碍物，并使用3D透视效果作为相机效果。对于这些游戏来说，3D效果可能更多地用于风格而非功能方面。这种类型的游戏有时也被称为“2.5D”。尽管玩法是2D的，但您主要是通过操纵3D模型来构建游戏，因此您应该在&lt;strong&gt;3D&lt;/strong&gt;模式下启动编辑器。&lt;/p&gt;
&lt;h3 id=&#34;具有透视相机的2d游戏玩法和图形&#34;&gt;具有透视相机的2D游戏玩法和图形 &lt;a href=&#34;#%e5%85%b7%e6%9c%89%e9%80%8f%e8%a7%86%e7%9b%b8%e6%9c%ba%e7%9a%842d%e6%b8%b8%e6%88%8f%e7%8e%a9%e6%b3%95%e5%92%8c%e5%9b%be%e5%bd%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-31-unity-document-10/2dParallaxScroller.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这是另一种流行的2D游戏风格，使用2D图形，但通过透视相机来实现视差滚动效果。这是一种“纸板剧院”风格的场景，其中所有的图形都是平面的，但与相机的距离不同。在这种情况下，&lt;strong&gt;2D&lt;/strong&gt;模式可能最适合您的开发。不过，您需要将相机的投影模式更改为&lt;strong&gt;透视&lt;/strong&gt;，场景视图模式更改为&lt;strong&gt;3D&lt;/strong&gt;。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create with Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/29/2023-07-29-unity-document-9/</link>
      <pubDate>Sat, 29 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/29/2023-07-29-unity-document-9/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;使用unity创建&#34;&gt;使用Unity创建 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8unity%e5%88%9b%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-29-unity-document-9/BasicsIntroPic.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;本节介绍Unity界面、菜单项、使用资源、创建场景以及发布构建的方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装Unity&lt;/p&gt;
&lt;p&gt;下载、安装和激活Unity，使用Unity Hub，并了解如何管理您的许可证。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unity界面&lt;/p&gt;
&lt;p&gt;详细介绍了Unity中每个主要窗口，包括有用的快捷键和热键。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建游戏玩法&lt;/p&gt;
&lt;p&gt;如何开始创建场景、游戏对象和组件；读取输入；以及向项目中添加游戏玩法或交互性。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;资源工作流&lt;/p&gt;
&lt;p&gt;如何从各种不同的来源将资源导入Unity，包括来自外部程序的图形、艺术和声音、其他开发人员的打包文件，以及从我们的包管理器和资产商店中获取的现成资源。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑器功能&lt;/p&gt;
&lt;p&gt;有关编辑器许多强大功能的信息，帮助您自定义工作流程，与外部工具集成，并扩展编辑器本身。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分析&lt;/p&gt;
&lt;p&gt;使用Unity分析器获取有关应用程序性能的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;升级指南&lt;/p&gt;
&lt;p&gt;对使用较旧版本Unity创建的项目进行升级的重要说明。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Licenses and activation(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/27/2023-07-27-unity-document-8/</link>
      <pubDate>Thu, 27 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/27/2023-07-27-unity-document-8/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;licenses-and-activation许可和激活&#34;&gt;Licenses and activation(许可和激活) &lt;a href=&#34;#licenses-and-activation%e8%ae%b8%e5%8f%af%e5%92%8c%e6%bf%80%e6%b4%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要使用Unity，您需要一个激活的许可证。要了解Unity的计划和价格，请访问Unity商店。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;主题&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;许可证概述&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解Unity提供的不同许可模型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;许可证激活方法&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解可以使用的不同激活许可证的方法，并决定哪种方法最适合您。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过命令行管理许可证&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用命令行来激活或退还您的许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;手动许可证激活&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;手动激活许可证，按照3步请求许可证的流程完成。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;许可证故障排除&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;排除许可证管理问题。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;licensing-overview许可概述&#34;&gt;Licensing overview(许可概述) &lt;a href=&#34;#licensing-overview%e8%ae%b8%e5%8f%af%e6%a6%82%e8%bf%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity为所有层次提供了一系列的计划。有些计划是免费的，而其他的计划则需要订阅费用。请在https://unity.com/pricing上查看所有的计划。&lt;/p&gt;
&lt;p&gt;根据您选择的计划，您的Unity软件将使用以下其中一种模型进行许可：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命名用户许可。&lt;/li&gt;
&lt;li&gt;基于序列号的许可。&lt;/li&gt;
&lt;li&gt;浮动许可。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;named-user-licensing命名用户许可&#34;&gt;Named user licensing(命名用户许可) &lt;a href=&#34;#named-user-licensing%e5%91%bd%e5%90%8d%e7%94%a8%e6%88%b7%e8%ae%b8%e5%8f%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;命名用户许可是一种针对网络连接环境中的个人用户设计的许可解决方案。用户是一个或多个组织的成员，这些组织拥有一个或多个订阅。当用户登录时，他们将获得其组织订阅的所有特权。&lt;/p&gt;
&lt;p&gt;命名用户许可需要互联网连接，并要求您使用Unity Hub或Unity编辑器以您的Unity ID凭据登录。登录即在当前计算机上激活您的许可证。要将许可证移动到另一台计算机上，请在Unity应用程序上注销，然后在另一台计算机上登录以继续您的工作。&lt;/p&gt;
&lt;p&gt;许可证提供了一个宽限期，在您遇到临时互联网连接问题时使用。在此期间，您可以在离线状态下继续使用软件。但是，在宽限期结束之前，您必须重新连接到互联网进行重新验证。&lt;/p&gt;
&lt;p&gt;如果您是组织管理员，命名用户许可提供了改进的许可证可见性和合规性，因为您无需跟踪已许可的设备。&lt;/p&gt;
&lt;h2 id=&#34;serial-based-licensing基于序列号的许可&#34;&gt;Serial-based licensing(基于序列号的许可) &lt;a href=&#34;#serial-based-licensing%e5%9f%ba%e4%ba%8e%e5%ba%8f%e5%88%97%e5%8f%b7%e7%9a%84%e8%ae%b8%e5%8f%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;基于序列号的许可模型通过Unity向您发送的序列号密钥来管理您的访问。您可以使用Unity Hub或命令行激活密钥（或将其返回）。&lt;/p&gt;
&lt;p&gt;基于序列号的许可与您激活许可证的计算机相关联。&lt;/p&gt;
&lt;p&gt;此许可证类型允许您在线激活许可证后脱机工作。&lt;/p&gt;
&lt;h2 id=&#34;floating-licensing浮动许可&#34;&gt;Floating licensing(浮动许可) &lt;a href=&#34;#floating-licensing%e6%b5%ae%e5%8a%a8%e8%ae%b8%e5%8f%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity为复杂项目或较大组织设计了浮动许可，这些组织需要为其同时使用Unity的成员提供多个许可证。使用此模型，您的组织设置一个本地许可证服务器，并购买一定数量的许可证，以容纳同时使用Unity的成员。&lt;/p&gt;
&lt;p&gt;每当组织成员从连接到许可证服务器的客户端计算机上启动Unity编辑器时，服务器会从许可证池中移除一个许可证。服务器将该许可证分配给客户端计算机，并且该许可证可以在该计算机上使用一个会话。当在客户端计算机上关闭最后一个Unity编辑器实例时，许可证将被释放。该许可证返回到池中，供他人使用。&lt;/p&gt;
&lt;p&gt;要了解有关浮动许可的更多信息，请联系Unity销售部门。有关设置浮动许可证服务器的信息，请参阅Unity许可证服务器文档。&lt;/p&gt;
&lt;h1 id=&#34;license-activation-methods许可证激活方法&#34;&gt;License activation methods(许可证激活方法) &lt;a href=&#34;#license-activation-methods%e8%ae%b8%e5%8f%af%e8%af%81%e6%bf%80%e6%b4%bb%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以选择多种方法来激活您的Unity许可证。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;方法&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;何时使用该方法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub是一个综合应用程序，可让您管理Unity项目、编辑器安装和许可证。Unity Hub是管理所有Unity许可证的主要方法，也是激活和退还Unity个人许可证的唯一方法。如果您可以安装Unity Hub并拥有互联网连接，请使用Unity Hub管理您的许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;命令行&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可能使用命令行激活或退还许可证的情况包括：您可以访问互联网，但您在无界面模式下（无GUI）使用Unity进行自动化任务，如构建和测试。您可以访问互联网，但无法或不愿安装Unity Hub。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;手动许可证激活&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当您拥有序列号密钥但对互联网的访问受限（如封闭网络环境或空隙网络）时，请使用手动许可证激活方法。手动许可证激活是一个三步流程，您只需要在其中一步骤中访问互联网，并且可以在任何计算机上完成这一步骤，而不一定是您计划使用Unity的计算机。这种方法不适用于个人计划下的Unity许可证。您可以使用此方法激活您的许可证，但不能使用它退还许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;manage-your-license-through-the-command-line通过命令行管理许可证&#34;&gt;Manage your license through the command line(通过命令行管理许可证) &lt;a href=&#34;#manage-your-license-through-the-command-line%e9%80%9a%e8%bf%87%e5%91%bd%e4%bb%a4%e8%a1%8c%e7%ae%a1%e7%90%86%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要使用Unity，您需要一个激活的许可证。对于Unity Pro许可证，您需要获取一个序列号密钥。对于Unity个人许可证，您不需要序列号密钥。&lt;/p&gt;
&lt;p&gt;Unity Pro和Unity个人的主要许可证激活方法是Unity Hub。有关激活Unity行业许可证的信息，请参阅Unity支持文章《如何激活或退还Unity行业许可证》。&lt;/p&gt;
&lt;p&gt;以下信息介绍了通过命令行来激活和退还Unity Pro许可证的另一种方法，您可以在以下情况下考虑使用该方法:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您可以访问互联网，但您以无界面模式（无GUI）使用Unity进行自动化任务，如构建和测试。&lt;/li&gt;
&lt;li&gt;您可以访问互联网，但无法或不愿安装Unity Hub。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**注意：**以下命令行步骤仅适用于Unity Pro许可证。以下步骤不适用于不带序列号的Unity个人许可证。激活和退还Unity个人许可证的唯一方法是分别登录和注销Unity Hub。&lt;/p&gt;
&lt;p&gt;如果您不知道您的Unity许可证信息，请与您的许可证所有者联系。所有者可以通过组织为您分配一个席位，或者您可以联系Unity客户服务部门。&lt;/p&gt;
&lt;h2 id=&#34;activate-a-license-from-the-command-line通过命令行激活许可证&#34;&gt;Activate a license from the command line(通过命令行激活许可证) &lt;a href=&#34;#activate-a-license-from-the-command-line%e9%80%9a%e8%bf%87%e5%91%bd%e4%bb%a4%e8%a1%8c%e6%bf%80%e6%b4%bb%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在使用命令行激活Unity许可证之前，请确保许可证文件夹存在。请参考许可证故障排除中的Unity许可证文件位置。同时，请确保您对该文件夹具有写入权限。&lt;/p&gt;
&lt;h3 id=&#34;macos&#34;&gt;macOS &lt;a href=&#34;#macos&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在终端中输入以下命令以启动Unity并激活您的许可证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;unity-command-location&amp;gt; -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name@example.com&amp;#39;&lt;/span&gt; -password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XXXXXXXXXXXXX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;&amp;lt;unity-command-location&amp;gt;&lt;/code&gt; 替换为Unity编辑器应用程序的完整路径，结合 &lt;code&gt;/Contents/MacOS/Unity&lt;/code&gt;。例如，如果您将 &lt;code&gt;2022.2.0b4&lt;/code&gt; 编辑器安装到默认位置，则 &lt;code&gt;&amp;lt;unity-command-location&amp;gt;&lt;/code&gt; 为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;macos示例&#34;&gt;macOS示例 &lt;a href=&#34;#macos%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -quit -batchmode -serial SB-XXXX-XXXX-XXXX-XXXX-XXXX -username &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name@example.com&amp;#39;&lt;/span&gt; -password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XXXXXXXXXXXXX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：如果您使用Jenkins等持续集成（CI）工具通过命令行激活，可以添加 &lt;code&gt;-nographics&lt;/code&gt; 参数以避免WindowServer错误。&lt;/p&gt;
&lt;h3 id=&#34;windows&#34;&gt;Windows &lt;a href=&#34;#windows&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在命令提示符中输入以下命令以启动Unity并激活您的许可证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;editor-installation-location&amp;gt;&amp;#34;&lt;/span&gt; -batchmode -username name@example.com -password XXXXXXXXXXXXX -serial E3-XXXX-XXXX-XXXX-XXXX-XXXX -quit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt; 替换为您的编辑器应用程序的完整路径。例如，如果您将 &lt;code&gt;2022.2.0b4&lt;/code&gt; 编辑器安装到默认位置，则 &lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt; 为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C:&lt;span style=&#34;color:#ae81ff&#34;&gt;\P&lt;/span&gt;rogram Files&lt;span style=&#34;color:#ae81ff&#34;&gt;\U&lt;/span&gt;nity&lt;span style=&#34;color:#ae81ff&#34;&gt;\H&lt;/span&gt;ub&lt;span style=&#34;color:#ae81ff&#34;&gt;\E&lt;/span&gt;ditor&lt;span style=&#34;color:#ae81ff&#34;&gt;\2&lt;/span&gt;022.2.0b4&lt;span style=&#34;color:#ae81ff&#34;&gt;\E&lt;/span&gt;ditor&lt;span style=&#34;color:#ae81ff&#34;&gt;\U&lt;/span&gt;nity.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;windows示例&#34;&gt;Windows示例 &lt;a href=&#34;#windows%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;#34;&lt;/span&gt; -batchmode -username name@example.com -password XXXXXXXXXXXXX -serial E3-XXXX-XXXX-XXXX-XXXX-XXXX -quit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;next-steps-and-troubleshooting接下来的步骤和故障排除&#34;&gt;Next steps and troubleshooting(接下来的步骤和故障排除) &lt;a href=&#34;#next-steps-and-troubleshooting%e6%8e%a5%e4%b8%8b%e6%9d%a5%e7%9a%84%e6%ad%a5%e9%aa%a4%e5%92%8c%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;运行此命令后等待几秒钟，以便Unity有足够的时间与许可证服务器进行通信。如果激活失败，您可以打开Editor.log文件查看详细信息。针对任何激活错误，请查看激活问题以找到解决方案。&lt;/p&gt;
&lt;h2 id=&#34;returning-the-license-through-the-command-line通过命令行返回许可证&#34;&gt;Returning the license through the command line(通过命令行返回许可证) &lt;a href=&#34;#returning-the-license-through-the-command-line%e9%80%9a%e8%bf%87%e5%91%bd%e4%bb%a4%e8%a1%8c%e8%bf%94%e5%9b%9e%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;macos-1&#34;&gt;macOS &lt;a href=&#34;#macos-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在终端中输入以下命令以返回许可证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;unity-command-location&amp;gt; -quit -batchmode -returnlicense -username &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name@example.com&amp;#39;&lt;/span&gt; -password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XXXXXXXXXXXXX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;&amp;lt;unity-command-location&amp;gt;&lt;/code&gt; 替换为Unity编辑器应用程序的完整路径，结合 &lt;code&gt;/Contents/MacOS/Unity&lt;/code&gt;。例如，如果您将 &lt;code&gt;2022.2.0b4&lt;/code&gt; 编辑器安装到默认位置，则 &lt;code&gt;&amp;lt;unity-command-location&amp;gt;&lt;/code&gt; 为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;macos示例-1&#34;&gt;macOS示例 &lt;a href=&#34;#macos%e7%a4%ba%e4%be%8b-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -quit -batchmode -returnlicense -username &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;name@example.com&amp;#39;&lt;/span&gt; -password &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;XXXXXXXXXXXXX&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;windows-1&#34;&gt;Windows &lt;a href=&#34;#windows-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在命令提示符中输入以下命令以返回许可证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;editor-installation-location&amp;gt;&amp;#34;&lt;/span&gt; -quit -batchmode -returnlicense -username name@example.com -password XXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt; 替换为您的编辑器应用程序的完整路径。例如，如果您将 &lt;code&gt;2022.2.0b4&lt;/code&gt; 编辑器安装到默认位置，则 &lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt; 为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C:&lt;span style=&#34;color:#ae81ff&#34;&gt;\P&lt;/span&gt;rogram Files&lt;span style=&#34;color:#ae81ff&#34;&gt;\U&lt;/span&gt;nity&lt;span style=&#34;color:#ae81ff&#34;&gt;\H&lt;/span&gt;ub&lt;span style=&#34;color:#ae81ff&#34;&gt;\E&lt;/span&gt;ditor&lt;span style=&#34;color:#ae81ff&#34;&gt;\2&lt;/span&gt;022.2.0b4&lt;span style=&#34;color:#ae81ff&#34;&gt;\E&lt;/span&gt;ditor&lt;span style=&#34;color:#ae81ff&#34;&gt;\U&lt;/span&gt;nity.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;windows示例-1&#34;&gt;Windows示例 &lt;a href=&#34;#windows%e7%a4%ba%e4%be%8b-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;#34;&lt;/span&gt; -quit -batchmode -returnlicense -username name@example.com -password XXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;next-steps-and-troubleshooting接下来的步骤和故障排除-1&#34;&gt;Next steps and troubleshooting(接下来的步骤和故障排除) &lt;a href=&#34;#next-steps-and-troubleshooting%e6%8e%a5%e4%b8%8b%e6%9d%a5%e7%9a%84%e6%ad%a5%e9%aa%a4%e5%92%8c%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;运行此命令后等待几秒钟，以便Unity有足够的时间与许可证服务器进行通信。您可以使用Unity Hub通过打开“首选项”菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubPref.png&#34; alt=&#34;&#34;&gt;) 并选择&lt;strong&gt;许可证&lt;/strong&gt;来确认您已经返回许可证。如果您遇到问题，请参考故障排除。&lt;/p&gt;
&lt;h1 id=&#34;manual-license-activation手动许可证激活&#34;&gt;Manual license activation(手动许可证激活) &lt;a href=&#34;#manual-license-activation%e6%89%8b%e5%8a%a8%e8%ae%b8%e5%8f%af%e8%af%81%e6%bf%80%e6%b4%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果无法使用其他方法激活Unity许可证，可以通过手动激活进行许可证激活。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 仅支持基于序列号的订阅使用手动激活方法。如果使用个人计划的Unity，则不支持该方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示：&lt;/strong&gt; 手动许可证激活需要网络连接。然而，手动激活方法只需要在整个过程中的一部分中进行网络连接，您可以在任何已连接的计算机上完成这一部分，而不一定是使用Unity的同一台计算机。&lt;/p&gt;
&lt;p&gt;手动激活许可证有两个选项:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过Hub提交许可证请求&lt;/li&gt;
&lt;li&gt;通过命令行和浏览器提交许可证请求:
&lt;ul&gt;
&lt;li&gt;Windows指南&lt;/li&gt;
&lt;li&gt;macOS和Linux指南&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;returning-a-manually-activated-license返回手动激活的许可证&#34;&gt;Returning a manually activated license(返回手动激活的许可证) &lt;a href=&#34;#returning-a-manually-activated-license%e8%bf%94%e5%9b%9e%e6%89%8b%e5%8a%a8%e6%bf%80%e6%b4%bb%e7%9a%84%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果手动激活许可证，则无法使用其他许可证管理方法来返回许可证；您需要联系支持人员协助您返回许可证。&lt;/p&gt;
&lt;h1 id=&#34;submit-a-license-request-from-the-hub通过hub提交许可证请求&#34;&gt;Submit a license request from the Hub(通过Hub提交许可证请求) &lt;a href=&#34;#submit-a-license-request-from-the-hub%e9%80%9a%e8%bf%87hub%e6%8f%90%e4%ba%a4%e8%ae%b8%e5%8f%af%e8%af%81%e8%af%b7%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果无法使用其他激活方法，可以通过Unity Hub提交许可证请求来手动激活许可证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 仅支持基于序列号的订阅使用手动激活方法。如果使用个人计划的Unity，则不支持该方法。&lt;/p&gt;
&lt;p&gt;尽管可以从计划使用Unity的计算机上提交许可证请求，但以下步骤介绍了一种解决方法，以防该计算机无法连接到互联网。以下步骤假设您可以访问两台计算机，具体如下:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一台计算机是安装了Unity的计算机，但无法连接到互联网。&lt;/li&gt;
&lt;li&gt;第二台计算机是任何可以连接到互联网的计算机。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure步骤&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;在第一台计算机上打开Unity Hub。&lt;/li&gt;
&lt;li&gt;打开“首选项”菜单: &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubPref-17207768739163.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;从侧边菜单中选择&lt;strong&gt;许可证&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;添加&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;使用许可证请求激活&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;按照屏幕上的&lt;strong&gt;下载许可证请求&lt;/strong&gt;步骤操作。这一步在第一台计算机上创建了一个&lt;code&gt;.alf&lt;/code&gt;文件。请勿关闭Unity Hub，因为您将在后面的步骤中返回该界面。&lt;/li&gt;
&lt;li&gt;将上一步中的&lt;code&gt;.alf&lt;/code&gt;文件复制到一台有互联网访问权限的第二台计算机上。&lt;/li&gt;
&lt;li&gt;使用第二台计算机前往&lt;a href=&#34;https://license.unity3d.com/manual&#34;&gt;license.unity3d.com/manual&lt;/a&gt;，并按照其中的说明进行操作。这一步将生成一个&lt;code&gt;.ulf&lt;/code&gt;文件。如果无法访问该网站:
&lt;ul&gt;
&lt;li&gt;前往&lt;a href=&#34;https://id.unity.com/&#34;&gt;id.unity.com&lt;/a&gt;，并确保已登录到您的Unity ID。您需要有效的登录凭证才能请求Unity许可文件。&lt;/li&gt;
&lt;li&gt;尝试将&lt;code&gt;https://license.unity3d.com/manual&lt;/code&gt;粘贴到浏览器的地址栏中。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;将第二台计算机上的&lt;code&gt;.ulf&lt;/code&gt;许可文件复制到第一台计算机上。&lt;/li&gt;
&lt;li&gt;在第一台计算机上，按照Unity Hub的&lt;strong&gt;使用许可证文件激活&lt;/strong&gt;步骤进行操作。此步骤不需要互联网连接。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubLicenseRequest.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;完成该过程后，您可以通过打开首选项菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubPref-17207769274388.png&#34; alt=&#34;&#34;&gt;) 并选择&lt;strong&gt;许可证&lt;/strong&gt;来查看您的活动许可证。&lt;/p&gt;
&lt;h1 id=&#34;submit-a-license-request-from-a-command-line-and-browser-windows从命令行和浏览器提交许可证请求windows&#34;&gt;Submit a license request from a command line and browser (Windows)(从命令行和浏览器提交许可证请求（Windows）) &lt;a href=&#34;#submit-a-license-request-from-a-command-line-and-browser-windows%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%92%8c%e6%b5%8f%e8%a7%88%e5%99%a8%e6%8f%90%e4%ba%a4%e8%ae%b8%e5%8f%af%e8%af%81%e8%af%b7%e6%b1%82windows&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果无法使用其他激活方法，您可以通过命令行提交许可证请求来手动激活许可证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 仅支持基于序列号的订阅使用手动激活方法。如果使用个人计划的Unity，则不支持该方法。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前&#34;&gt;Before you begin(&lt;strong&gt;开始之前&lt;/strong&gt;) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;查看手动许可证激活，确保您了解使用此过程、其限制以及网络连接要求的情况。&lt;/li&gt;
&lt;li&gt;确保知道您安装Unity编辑器的路径。使用Unity Hub确定路径。打开Unity Hub，从侧边菜单中选择&lt;strong&gt;安装&lt;/strong&gt;。列表显示了每个已安装编辑器的路径。有关更多信息，请参阅确定编辑器位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity编辑器的默认安装路径为&lt;code&gt;&amp;quot;C:\Program Files\Unity\Hub\Editor\&amp;lt;version&amp;gt;\Editor\Unity.exe&amp;quot;&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;procedure步骤-1&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要手动激活Unity许可证，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从命令行创建许可证请求文件（&lt;code&gt;.alf&lt;/code&gt;）。您必须从安装Unity的计算机上执行此步骤。&lt;/li&gt;
&lt;li&gt;使用该 &lt;code&gt;.alf&lt;/code&gt; 文件从Unity生成Unity许可文件（&lt;code&gt;.ulf&lt;/code&gt;）。您必须从任何具有互联网访问权限的计算机上执行此步骤。&lt;/li&gt;
&lt;li&gt;使用该 &lt;code&gt;.ulf&lt;/code&gt; 文件从命令行激活您的许可证。您必须从安装Unity的计算机上执行此步骤。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;1-create-a-license-request-file-from-the-command-line从命令行创建许可证请求文件&#34;&gt;1) Create a license request file from the command line(从命令行创建许可证请求文件) &lt;a href=&#34;#1-create-a-license-request-file-from-the-command-line%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%88%9b%e5%bb%ba%e8%ae%b8%e5%8f%af%e8%af%81%e8%af%b7%e6%b1%82%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要提示：&lt;/strong&gt; 您必须从安装Unity的计算机上运行此命令，但是此步骤不需要计算机具有互联网访问权限。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;以管理员身份打开命令提示符。如果缺少管理员特权，请确保在您的用户文件夹中运行此过程的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保您所在的目录。您运行命令的目录与输出&lt;code&gt;.alf&lt;/code&gt;文件的目录相同。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入以下命令，将&lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt;替换为&lt;code&gt;Unity.exe&lt;/code&gt;的实际完整路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;editor-installation-location&amp;gt;&amp;#34;&lt;/span&gt; -batchmode -createManualActivationFile -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 此命令不会将输出返回给命令提示符。命令完成后，将控制权返回给命令提示符。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;命令完成后，请检查您运行命令的目录，确保它创建了一个激活许可证文件，例如&lt;code&gt;Unity_v2022.2.0b4.alf&lt;/code&gt;。如果遇到问题，请参阅故障排除。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，您已准备好生成Unity许可证文件。&lt;/p&gt;
&lt;h5 id=&#34;example示例&#34;&gt;Example(示例) &lt;a href=&#34;#example%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;假设您在&lt;code&gt;&amp;quot;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;quot;&lt;/code&gt;安装了一个 &lt;code&gt;2022.2.0b4&lt;/code&gt; 的编辑器，请使用以下命令完成此步骤：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;#34;&lt;/span&gt; -batchmode -createManualActivationFile -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-generate-a-unity-license-file生成unity许可证文件&#34;&gt;2) Generate a Unity license file(生成Unity许可证文件) &lt;a href=&#34;#2-generate-a-unity-license-file%e7%94%9f%e6%88%90unity%e8%ae%b8%e5%8f%af%e8%af%81%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;接下来的步骤是使用您刚刚创建的许可证激活文件（&lt;code&gt;.alf&lt;/code&gt;）请求一个Unity许可证文件（&lt;code&gt;.ulf&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示：&lt;/strong&gt; 您可以从任何计算机生成Unity许可证文件，不一定是您安装Unity的计算机。但是，您在此步骤中使用的计算机必须有互联网连接。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往id.unity.com，并确保已登录到您的Unity ID。您需要有效的登录凭证才能请求Unity许可证文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用同一个浏览器会话前往license.unity3d.com/manual。将会显示&lt;strong&gt;手动激活&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 如果无法访问该页面，请尝试将&lt;code&gt;https://license.unity3d.com/manual&lt;/code&gt;粘贴到浏览器的地址栏中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-ulf.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;浏览&lt;/strong&gt;按钮，使用您计算机的文件浏览器选择创建许可证请求文件步骤中的许可证激活（&lt;code&gt;.alf&lt;/code&gt;）文件。&lt;/p&gt;
&lt;p&gt;如果上传成功，并且Unity检测到您选择的文件是许可证激活文件，则文件名将显示在文本框中，并带有绿色的勾号。如果您看到的是一个红色的&lt;strong&gt;X&lt;/strong&gt;，请再试一次。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下一步&lt;/strong&gt;按钮。将显示&lt;strong&gt;激活您的许可证&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-activate.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入您在购买单个许可证时收到的序列号。您需要按照电子邮件中出现的确切格式输入该序列号。例如，&lt;code&gt;PS/SC/E3-XXXX-XXXX-XXXX-XXXX&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下一步&lt;/strong&gt;按钮。将显示&lt;strong&gt;下载许可证文件&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-download.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下载许可证文件&lt;/strong&gt;按钮。如果出现提示，请允许在license.unity3d.com/manual页面下载。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开您浏览器的下载位置，并确认新的Unity许可证文件，该文件的扩展名为&lt;code&gt;.ulf&lt;/code&gt;。例如，&lt;code&gt;Unity_v2017.x.ulf&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，您已经准备好从命令行激活您的Unity许可证了。&lt;/p&gt;
&lt;h3 id=&#34;3-activate-your-license-from-the-command-line从命令行激活您的许可证&#34;&gt;3) Activate your license from the command line(从命令行激活您的许可证) &lt;a href=&#34;#3-activate-your-license-from-the-command-line%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e6%bf%80%e6%b4%bb%e6%82%a8%e7%9a%84%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：您必须在安装Unity的计算机上运行此命令，但该计算机在此步骤中不需要互联网访问。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;确保您知道以下路径:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt;是实际的&lt;code&gt;Unity.exe&lt;/code&gt;所在的完整路径。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;yourUlfFile&amp;gt;&lt;/code&gt;是您在生成Unity许可证文件步骤中生成的&lt;code&gt;.ulf&lt;/code&gt;文件的完整路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以管理员身份打开命令提示符。如果您没有管理员权限，请确保从用户个人文件夹内运行该过程的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令，将&lt;code&gt;&amp;lt;editor-installation-location&amp;gt;&lt;/code&gt;和&lt;code&gt;&amp;lt;yourUlfFile&amp;gt;&lt;/code&gt;替换为实际的完整路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;editor-installation-location&amp;gt;&amp;#34;&lt;/span&gt; -batchmode -manualLicenseFile &amp;lt;yourUlfFile&amp;gt; -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此命令不会返回输出到命令提示符。命令完成后，将返回控制到命令提示符。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当命令完成后，您可以通过打开偏好设置菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubPref-172077709957117.png&#34; alt=&#34;&#34;&gt;) 并选择&lt;strong&gt;许可证&lt;/strong&gt;来查看您的活动许可证。如果遇到问题，请参阅故障排除。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;示例&#34;&gt;示例 &lt;a href=&#34;#%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;此示例假设您：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在&lt;code&gt;&amp;quot;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;quot;&lt;/code&gt;位置安装了&lt;code&gt;2022.2.0b4&lt;/code&gt;版本的Unity编辑器。&lt;/li&gt;
&lt;li&gt;生成了一个&lt;code&gt;.ulf&lt;/code&gt;文件并将其存储在&lt;code&gt;&amp;quot;C:\Users\myAccount\Downloads\Unity_v2017.x.ulf&amp;quot;&lt;/code&gt;位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Unity\Hub\Editor\2022.2.0b4\Editor\Unity.exe&amp;#34;&lt;/span&gt; -batchmode -manualLicenseFile &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\myAccount\Downloads\Unity_v2017.x.ulf&amp;#34;&lt;/span&gt; -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;troubleshooting故障排除&#34;&gt;Troubleshooting(故障排除) &lt;a href=&#34;#troubleshooting%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果命令行操作没有产生预期的结果，请查看&lt;code&gt;Editor.log&lt;/code&gt;文件。在日志文件中查找此文件的位置。&lt;/p&gt;
&lt;h1 id=&#34;submit-a-license-request-from-a-command-line-and-browser-macos-linux通过命令行和浏览器提交许可证请求macoslinux&#34;&gt;Submit a license request from a command line and browser (macOS, Linux)(通过命令行和浏览器提交许可证请求（macOS、Linux）) &lt;a href=&#34;#submit-a-license-request-from-a-command-line-and-browser-macos-linux%e9%80%9a%e8%bf%87%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%92%8c%e6%b5%8f%e8%a7%88%e5%99%a8%e6%8f%90%e4%ba%a4%e8%ae%b8%e5%8f%af%e8%af%81%e8%af%b7%e6%b1%82macoslinux&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果无法使用其他激活方法，则可以通过命令行提交许可证请求，手动激活许可证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：仅支持基于序列号的订阅使用手动激活方法。如果您使用的是个人计划，不支持此方法。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前-1&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;请查看手动激活许可证以确保您理解使用此过程的情景、限制和互联网连接要求。&lt;/li&gt;
&lt;li&gt;确保您知道安装Unity编辑器的路径。使用Unity Hub确定路径。打开Unity Hub，选择侧边菜单中的&lt;strong&gt;Installs&lt;/strong&gt;。列表显示每个安装的编辑器的路径。有关更多信息，请参阅定位编辑器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity编辑器的默认安装路径如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;/Applications/Unity/Hub/Editor/&amp;lt;version&amp;gt;/Unity.app&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Linux: &lt;code&gt;/Applications/Unity/Hub/Editor/&amp;lt;version&amp;gt;/Unity.app&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure步骤-2&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4-2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照以下步骤手动激活Unity许可证：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从命令行创建许可证请求文件（&lt;code&gt;.alf&lt;/code&gt;）。您必须在安装了Unity的计算机上完成此步骤。&lt;/li&gt;
&lt;li&gt;使用该&lt;code&gt;.alf&lt;/code&gt;文件从Unity生成Unity许可证文件（&lt;code&gt;.ulf&lt;/code&gt;）。您必须在任何具有互联网访问的计算机上完成此步骤。&lt;/li&gt;
&lt;li&gt;使用该&lt;code&gt;.ulf&lt;/code&gt;文件从命令行激活您的许可证。您必须在安装了Unity的计算机上完成此步骤。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;1-create-a-license-request-file-from-the-command-line从命令行创建许可证请求文件-1&#34;&gt;1) Create a license request file from the command line(从命令行创建许可证请求文件) &lt;a href=&#34;#1-create-a-license-request-file-from-the-command-line%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%88%9b%e5%bb%ba%e8%ae%b8%e5%8f%af%e8%af%81%e8%af%b7%e6%b1%82%e6%96%87%e4%bb%b6-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：您必须在安装了Unity的计算机上运行此命令，但该计算机在此步骤中不需要互联网访问。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;确保您知道Unity编辑器的安装位置（以&lt;code&gt;Unity.app&lt;/code&gt;结尾），如前面所述。在macOS上，您需要在此路径后添加&lt;code&gt;/Contents/MacOS/Unity&lt;/code&gt;以进行下一步。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在macOS上，尽管您在此步骤中不需要使用Finder，但是除非右键单击Unity应用程序（&lt;code&gt;Unity.app&lt;/code&gt;）并选择&lt;strong&gt;显示包内容&lt;/strong&gt;，否则Finder不会显示此后面的子目录结构。&lt;/p&gt;
&lt;p&gt;例如，对于&lt;code&gt;2022.2.0b4&lt;/code&gt;版本的编辑器，macOS上&lt;code&gt;Unity&lt;/code&gt;命令的完整路径是:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开一个终端会话（macOS）或命令行（Linux），确保您知道当前所在的目录。您运行命令的目录与&lt;code&gt;.alf&lt;/code&gt;文件输出的目录相同。您可以使用&lt;code&gt;pwd&lt;/code&gt;命令确定您的目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令，将&lt;code&gt;&amp;lt;editor-command-location&amp;gt;&lt;/code&gt;替换为步骤1中Unity命令的完整路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;editor-command-location&amp;gt; -batchmode -createManualActivationFile -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此命令不会在终端或命令行窗口返回输出。命令完成后，将返回控制到命令提示符。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当命令完成后，请检查您运行命令的目录，确保它创建了一个激活许可证文件，例如&lt;code&gt;Unity_v2022.2.0b4.alf&lt;/code&gt;。如果遇到问题，请参阅故障排除。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，您已经准备好生成一个Unity许可证文件了。&lt;/p&gt;
&lt;h5 id=&#34;example-macos示例macos&#34;&gt;Example (macOS)(示例（macOS）) &lt;a href=&#34;#example-macos%e7%a4%ba%e4%be%8bmacos&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;假设您在&lt;code&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app&lt;/code&gt;位置安装了一个&lt;code&gt;2022.2.0b4&lt;/code&gt;版本的编辑器，则此步骤的命令如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -batchmode -createManualActivationFile -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-generate-a-unity-license-file生成unity许可证文件-1&#34;&gt;2) Generate a Unity license file(生成Unity许可证文件) &lt;a href=&#34;#2-generate-a-unity-license-file%e7%94%9f%e6%88%90unity%e8%ae%b8%e5%8f%af%e8%af%81%e6%96%87%e4%bb%b6-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;下一步是使用刚刚创建的许可证激活文件（&lt;code&gt;.alf&lt;/code&gt;）请求一个Unity许可证文件（&lt;code&gt;.ulf&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：您可以从任何计算机生成Unity许可证文件；不一定要与您安装Unity的计算机相同。但在此步骤中使用的计算机必须具有互联网连接。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;前往 id.unity.com，并确保您已登录您的Unity ID。您需要有效的登录凭据来请求Unity许可证文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用同一浏览器会话前往 license.unity3d.com/manual。将显示&lt;strong&gt;手动激活&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果无法访问此页面，请尝试将&lt;code&gt;https://license.unity3d.com/manual&lt;/code&gt;粘贴到浏览器的地址栏中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-ulf-172077729218920.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;浏览&lt;/strong&gt;按钮，使用您计算机的文件浏览器选择创建许可证请求文件步骤中的许可证激活（&lt;code&gt;.alf&lt;/code&gt;）文件。&lt;/p&gt;
&lt;p&gt;如果上传成功并且Unity检测到您选择的文件是许可证激活文件，则文件名将显示在文本框中，并带有绿色的勾号。如果您看到一个红色的&lt;strong&gt;X&lt;/strong&gt;，请重试。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下一步&lt;/strong&gt;按钮。将显示&lt;strong&gt;激活您的许可证&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-activate-172077731379123.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入您在购买单个许可证时收到的序列号。您需要按照电子邮件中显示的精确格式输入该序列号。例如，&lt;code&gt;PS/SC/E3-XXXX-XXXX-XXXX-XXXX&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下一步&lt;/strong&gt;按钮。将显示&lt;strong&gt;下载许可证文件&lt;/strong&gt;页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/license-request-download-172077731949926.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;下载许可证文件&lt;/strong&gt;按钮。如果提示，请允许license.unity3d.com/manual页面下载。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开您浏览器的下载位置，确认新的Unity许可证文件，其扩展名为&lt;code&gt;.ulf&lt;/code&gt;。例如，&lt;code&gt;Unity_v2017.x.ulf&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，您可以准备从命令行激活您的Unity许可证。&lt;/p&gt;
&lt;h3 id=&#34;3-activate-your-license-from-the-command-line从命令行激活许可证&#34;&gt;3) Activate your license from the command line(从命令行激活许可证) &lt;a href=&#34;#3-activate-your-license-from-the-command-line%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e6%bf%80%e6%b4%bb%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：您必须从安装Unity的计算机上运行此命令，但该计算机不需要互联网访问来完成此步骤。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;确保您知道以下路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;editor-command-location&amp;gt;&lt;/code&gt;与在创建许可证请求文件步骤中描述的路径相同。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;yourUlfFile&amp;gt;&lt;/code&gt;是您在生成Unity许可证文件步骤中生成的&lt;code&gt;.ulf&lt;/code&gt;文件的完整路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开终端会话（macOS）或命令行（Linux），并运行以下命令，将&lt;code&gt;&amp;lt;editor-command-location&amp;gt;&lt;/code&gt;和&lt;code&gt;&amp;lt;yourUlfFile&amp;gt;&lt;/code&gt;替换为实际的完整路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;editor-command-location&amp;gt; -batchmode -manualLicenseFile &amp;lt;yourUlfFile&amp;gt; -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此命令不会将输出返回到终端或命令行窗口。命令完成后，它会返回控制到命令提示符。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当命令完成后，您可以通过打开首选项菜单 (&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-27-unity-document-8/hubPref-172077735988429.png&#34; alt=&#34;&#34;&gt;) 并选择&lt;strong&gt;Licenses&lt;/strong&gt;来查看您的有效许可证。如果遇到问题，请参阅故障排除。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;example-macos示例macos-1&#34;&gt;Example (macOS)(示例（macOS）) &lt;a href=&#34;#example-macos%e7%a4%ba%e4%be%8bmacos-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;以下示例假设您:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在&lt;code&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app&lt;/code&gt;上安装了&lt;code&gt;2022.2.0b4&lt;/code&gt;版本的编辑器。&lt;/li&gt;
&lt;li&gt;生成了一个&lt;code&gt;.ulf&lt;/code&gt;文件，并将其存储在&lt;code&gt;/Users/myAccount/Downloads/Unity_v2017.x.ulf&lt;/code&gt;路径下。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/Applications/Unity/Hub/Editor/2022.2.0b4/Unity.app/Contents/MacOS/Unity -batchmode -manualLicenseFile /Users/myAccount/Downloads/Unity_v2017.x.ulf -logfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;troubleshooting故障排除-1&#34;&gt;Troubleshooting(故障排除) &lt;a href=&#34;#troubleshooting%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果命令行操作未产生预期结果，请查看&lt;code&gt;Editor.log&lt;/code&gt;文件。检查此文件的位置在日志文件中。&lt;/p&gt;
&lt;h1 id=&#34;license-troubleshooting许可证故障排除&#34;&gt;License troubleshooting(许可证故障排除) &lt;a href=&#34;#license-troubleshooting%e8%ae%b8%e5%8f%af%e8%af%81%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本部分提供以下许可证管理问题的解决方法:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;激活问题&lt;/li&gt;
&lt;li&gt;退还许可证问题&lt;/li&gt;
&lt;li&gt;Unity许可证文件位置&lt;/li&gt;
&lt;li&gt;其他问题的答案&lt;/li&gt;
&lt;li&gt;其他资源&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;activation-issues激活问题&#34;&gt;Activation issues(激活问题) &lt;a href=&#34;#activation-issues%e6%bf%80%e6%b4%bb%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下问题可能在激活过程中导致错误代码或其他问题：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;问题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;解决方法&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;没有互联网访问&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;尝试使用许可证请求激活您的许可证。有关更多信息，请查阅手动许可证激活。 &lt;strong&gt;注意&lt;/strong&gt;：无法在没有互联网访问的情况下激活已命名的用户许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;安全设置阻止Unity&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;检查防火墙、代理或互联网安全设置。它们可能会阻止Unity发送和接收有关您许可证文件的数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;没有写入许可证文件权限&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;授予或请求对您使用来激活许可证的用户账户的写入权限。这通常发生在关闭网络（例如工作场所和学校）中。请与您的IT管理员联系，了解是否有任何限制。有关需要写入权限的目录列表，请查阅Unity许可证文件位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;许可证无法识别您的计算机&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;主要操作系统更改或更新可能会影响计算机的ID，从而导致许可证无法识别您的计算机。请参阅&amp;quot;我能在不同的操作系统上使用我的许可证吗？&amp;ldquo;以及Unity支持文章的以下类别： - 激活和管理 - 许可和支付&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity许可证服务器不可用&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅Unity云系统状态页面，获取Unity服务器的状态更新。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;许可证激活次数过多&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您不再需要特定计算机的许可证，请将其退还。可使用以下方法之一退还许可证： - &lt;strong&gt;Unity Hub&lt;/strong&gt;：在&lt;strong&gt;首选项窗口&lt;/strong&gt;的&lt;strong&gt;许可证&lt;/strong&gt;选项卡中，使用&lt;strong&gt;退还许可证&lt;/strong&gt;按钮退还基于序列号的许可证。通过注销Unity Hub退还基于命名用户的许可证。 - &lt;strong&gt;命令行&lt;/strong&gt;：按照&lt;strong&gt;通过命令行管理许可证&lt;/strong&gt; 中的说明退还基于序列号的许可证。 - &lt;strong&gt;ID门户&lt;/strong&gt;：从Unity ID门户 &amp;gt; &lt;strong&gt;我的帐户&lt;/strong&gt; &amp;gt; &lt;strong&gt;我的席位&lt;/strong&gt;中退还基于序列号和命名用户的许可证。即使您无法访问要退还许可证的计算机，或者该计算机的绑定发生了变化，也可以使用此方法。 在切换计算机之前，必须退还您的许可证。在对计算机进行任何硬件更改或操作系统更改之前，也必须退还许可证。如果未退还许可证，则Unity许可证服务器将看到来自另一台计算机的请求，并通知您已达到许可证的激活限制。 如果收到此消息，但您认为这是一个错误，请一次性退还所有许可证，然后根据需要重新激活每台计算机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;帐户凭据无法识别&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确保正确输入您的详细信息。密码区分大小写，所以请确保按照注册时的方式输入密码。要重置密码，请访问Unity ID门户：https://id.unity.com/en/password/new. 如果您或您的构建服务器超过特定用户每分钟登录尝试的登录速率限制（每分钟10次登录尝试），您也可能收到登录或激活失败错误。 如果您仍然无法登录，请联系support@unity3d.com。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;issues-with-returning-licenses退还许可证问题&#34;&gt;Issues with returning licenses(退还许可证问题) &lt;a href=&#34;#issues-with-returning-licenses%e9%80%80%e8%bf%98%e8%ae%b8%e5%8f%af%e8%af%81%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以下问题可能在退还许可证过程中导致错误代码或其他问题：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;问题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;解决方法&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;您无法退还许可证，因为您无法访问激活许可证的计算机&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;\1. 访问https://id.unity.com/，使用Unity ID登录。2. 在侧边菜单中选择&lt;strong&gt;我的帐户&lt;/strong&gt; &amp;gt; &lt;strong&gt;我的席位&lt;/strong&gt;。3. 选择您要取消激活的激活许可证，然后选择&lt;strong&gt;移除所选激活&lt;/strong&gt;。如果您想一次性退还所有激活许可证，请选择&lt;strong&gt;禁用所有激活&lt;/strong&gt;。 如果您的其他计算机也激活了许可证，您需要稍后重新激活它们。 如果您仍然无法退还许可证，并且您的许可证属于付费计划，请发送电子邮件至support@unity3d.com。对于基于序列号的许可证，请提供以下详细信息：- 您在计算机上使用的序列号密钥。- 您无法访问的计算机的（本地网络）名称。- 用于购买订阅的订单或发票号码。 对于基于命名用户的许可证，请提供以下详细信息：- 组织名称。- 用户名称。- 如果您在组织内拥有多个订阅，请提供订阅名称。 如果您提供了上述信息，支持团队可以手动退还您的许可证，但这可能需要一些时间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;unity-license-file-locationunity许可证文件位置&#34;&gt;Unity license file location(Unity许可证文件位置) &lt;a href=&#34;#unity-license-file-locationunity%e8%ae%b8%e5%8f%af%e8%af%81%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;问题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;答案&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;基于序列号的许可证文件存储在哪里？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- Windows：&lt;code&gt;%PROGRAMDATA%\Unity\Unity_lic.ulf&lt;/code&gt; - macOS：&lt;code&gt;/Library/Application\ Support/Unity/Unity_lic.ulf&lt;/code&gt; - Linux：&lt;code&gt;~/.local/share/unity3d/Unity/Unity_lic.ulf&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：如果Windows用户账户控制（UAC）限制了对&lt;code&gt;C:\ProgramData\Unity&lt;/code&gt;的访问权限，您可以在以下位置找到&lt;code&gt;ulf&lt;/code&gt;文件：&lt;code&gt;C:\Users\(username)\AppData\Local\VirtualStore\ProgramData\Unity&lt;/code&gt;（如果文件夹被删除或者第一次以管理员权限启动Unity编辑器时，UAC可以限制访问权限。）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;基于命名用户的许可证文件存储在哪里？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- Windows：&lt;code&gt;%LOCALAPPDATA%\Unity\licenses\UnityEntitlementLicense.xml&lt;/code&gt; - macOS：&lt;code&gt;~/Library/Unity/licenses/UnityEntitlementLicense.xml&lt;/code&gt; - Linux：&lt;code&gt;~/.config/unity3d/Unity/licenses/UnityEntitlementLicense.xml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;浮动许可证文件存储在哪里？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- Windows：&lt;code&gt;%LOCALAPPDATA%\Unity\licenses\&amp;lt;token-id&amp;gt;.xml&lt;/code&gt; - macOS：&lt;code&gt;~/Library/Unity/licenses/&amp;lt;token-id&amp;gt;.xml&lt;/code&gt; - Linux：&lt;code&gt;~/.config/unity3d/Unity/licenses/&amp;lt;token-id&amp;gt;.xml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;answers-to-other-questions其他问题的答案&#34;&gt;Answers to other questions(其他问题的答案) &lt;a href=&#34;#answers-to-other-questions%e5%85%b6%e4%bb%96%e9%97%ae%e9%a2%98%e7%9a%84%e7%ad%94%e6%a1%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;问题&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;答案&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;如何知道我有哪种类型的许可证？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅许可证概述。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;我的Unity副本可以在多少台计算机上安装？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;每个付费商业Unity许可证允许一个人在两台他们拥有独占使用权的计算机上使用Unity。计算机的物理位置和操作系统无关。 通过Unity或任何一个Unity的经销商销售的教育许可证只适用于单次激活。除非另有说明，试用许可证（仅限Unity 4.x）也适用于同样的限制。 免费版本的Unity不能由营利性、教育性、非盈利性或政府实体使用，其总收入或预算超过Unity服务条款中所指定的财务门槛。 如果您是一个法人实体，您不能将使用免费版本的Unity开发的文件与通过Unity Pro使用Unity开发的文件组合。 有关许可证使用的更多信息，请参阅法律信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;我可以使用最新版本的Unity与先前版本的序列号吗？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您拥有Unity 2017版或更高版本的序列号，打开Unity Hub并激活序列号。请参阅使用序列号激活。 如果您拥有Unity 5.x版本的序列号，请使用该版本的编辑器。有关激活信息，请参阅版本5.6文档。要获取新的Unity许可证，前往在线商店。 如果您对许可证选项不确定，请使用此表单联系Unity。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;我有两个许可证，每个许可证都有我需要的附加组件，如何在我的计算机上同时激活它们？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您一次只能在一台计算机上使用一个许可证。您不能同时在一台计算机上激活两个或多个许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;如何使用不同的Unity版本？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以在一台计算机上安装多个版本的Unity编辑器。但是，一次只能在一台计算机上激活一个许可证。这意味着您无法同时运行2017年之后发布的任何版本与旧版Unity。这些版本需要不同的许可证。如果您需要使用具有不同许可证的不同Unity版本，您需要管理激活过程。该过程涉及到激活您要使用的版本所需的许可证，并取消激活其他版本的许可证。管理此过程的另一种方法是激活所需的许可证并将其许可证文件存储在计算机上的备份文件夹中。然后，在启动特定版本的Unity之前，从Unity许可证文件夹中删除现有的许可证文件（带有&lt;code&gt;.ulf&lt;/code&gt;扩展名），并将适当的许可证文件从备份文件夹复制到Unity许可证文件夹中。此过程确保所需版本的正确许可证处于活动状态。 如需更多帮助，请联系support@unity3d.com。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;如果我计划更换硬件组件或更改操作系统，该怎么办？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在更改计算机的任何硬件或操作系统之前，您必须退还您的许可证。您必须在切换计算机之前退还许可证。如果未退还许可证，则Unity许可证服务器会看到来自另一台计算机的请求，并通知您已达到许可证的激活限制。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;如果因公司阻止我接受服务条款而无法登录该怎么办？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;联系您的销售代表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;如何跟踪和删除我在所有已激活许可证的计算机中激活的许可证？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;要跟踪和删除命名用户许可证，请转到Unity ID并选择&lt;strong&gt;我的帐户&lt;/strong&gt; &amp;gt; &lt;strong&gt;我的席位&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity编辑器的哪些版本可以使用命名用户许可证？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从2021版本开始，任何2020编辑版本都可以。对于2019版本的编辑器，必须使用2019.4.27或更高版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;为什么我在Unity Hub中看不到退还许可证按钮？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您有一个Unity Personal的命名用户许可证，将不会显示&lt;strong&gt;退还许可证&lt;/strong&gt;按钮。退还Unity Personal的命名用户许可证的唯一方法是退出Unity Hub。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;我在获得Unity Personal的命名用户许可证时意外不同意服务条款，该如何激活这个许可证？&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;退出Unity Hub并重新登录。Unity Hub将再次显示确认窗口，在其中您可以同意服务条款并激活许可证。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Install Unity(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/25/2023-07-25-unity-document-7/</link>
      <pubDate>Tue, 25 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/25/2023-07-25-unity-document-7/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;install-unity安装unity&#34;&gt;Install Unity(安装Unity) &lt;a href=&#34;#install-unity%e5%ae%89%e8%a3%85unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Hub是安装Unity编辑器、创建项目和管理Unity体验的主要方式。它提供了一个集中管理编辑器安装、账户和授权、项目的位置。有关更多信息，请参阅使用Hub安装Unity。&lt;/p&gt;
&lt;h2 id=&#34;other-installation-options其他安装选项&#34;&gt;Other installation options(其他安装选项) &lt;a href=&#34;#other-installation-options%e5%85%b6%e4%bb%96%e5%ae%89%e8%a3%85%e9%80%89%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您还可以以以下方式安装Unity编辑器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您可以使用命令行安装编辑器。如果随后选择安装Hub，您可以在那时将其添加到Hub中。有关更多信息，请参阅从命令行安装Unity。&lt;/li&gt;
&lt;li&gt;您可以离线安装Unity而不使用Hub。这允许您下载安装Unity所需的所有文件，并生成一个脚本，在没有互联网访问的计算机上安装编辑器。有关更多信息，请参阅在没有Hub的情况下离线安装Unity。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;system-requirements-for-unity-20232unity-20232的系统要求&#34;&gt;System requirements for Unity 2023.2(Unity 2023.2的系统要求) &lt;a href=&#34;#system-requirements-for-unity-20232unity-20232%e7%9a%84%e7%b3%bb%e7%bb%9f%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;此页面概述了运行Unity 2023.2所需的最低系统要求，适用于所有支持的平台。&lt;/p&gt;
&lt;h2 id=&#34;unity-editor-system-requirementsunity编辑器系统要求&#34;&gt;Unity Editor system requirements(Unity编辑器系统要求) &lt;a href=&#34;#unity-editor-system-requirementsunity%e7%bc%96%e8%be%91%e5%99%a8%e7%b3%bb%e7%bb%9f%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本节列出了运行Unity编辑器所需的最低要求。实际性能和渲染质量可能会因项目的复杂性而有所不同。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;最低要求&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Operating system version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本（仅 x64 架构）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Big Sur 11.0&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Ubuntu 20.04 和 Ubuntu 22.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x64 架构 (英特尔处理器) Apple M1 及以上（基于 Apple Silicon 的处理器）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x64 架构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 DX10、DX11 和 DX12 的显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 Metal 的英特尔和 AMD 显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 OpenGL 3.2+ 或 Vulkan 的 Nvidia 和 AMD 显卡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;其他要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;硬件供应商官方支持的驱动程序&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Apple 官方支持的驱动程序（英特尔处理器）需在 Apple Silicon 设备上通过 Rosetta 2 运行基于 Apple Silicon 或英特尔版本的 Unity Editor&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基于 X11 窗口系统运行的 Gnome 桌面环境、Nvidia 官方专有图形驱动或 AMD Mesa 图形驱动。其他配置和用户环境与支持的发行版提供的原始配置相同（内核、组合器等）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对于所有操作系统，Unity 编辑器仅在工作站或笔记本设备上支持运行，不支持使用仿真、容器或兼容性层&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;unity-editor-platform-limitationsunity编辑器平台限制&#34;&gt;Unity Editor platform limitations(Unity编辑器平台限制) &lt;a href=&#34;#unity-editor-platform-limitationsunity%e7%bc%96%e8%be%91%e5%99%a8%e5%b9%b3%e5%8f%b0%e9%99%90%e5%88%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;apple&#34;&gt;Apple &lt;a href=&#34;#apple&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;在macOS上，辅助编辑器窗口只能最大化，并不进入全屏模式。&lt;/p&gt;
&lt;h4 id=&#34;apple-silicon-devices&#34;&gt;Apple silicon devices &lt;a href=&#34;#apple-silicon-devices&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Apple Silicon 编辑器有以下限制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过 Unity Hub 下载和安装 Apple Silicon 编辑器只能通过 3.0 Beta 6 或更高版本的 Hub 进行，而 3.0 Beta 6 中存在一些限制。有关更多信息，请参阅 Hub 发布说明：
&lt;ul&gt;
&lt;li&gt;要切换到 Hub 的最新 Beta 版本，请在首选项 &amp;gt; 高级中将“通道”更改为“Beta”，或从 &lt;a href=&#34;https://unity.com/download&#34;&gt;https://unity.com/download&lt;/a&gt; 重新下载。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果您使用的是 Hub 2.4.5 并且想要使用 Apple Silicon 编辑器：卸载 Apple Intel 版本，从 &lt;a href=&#34;https://unity3d.com/unity/whats-new/2023.2.0&#34;&gt;https://unity3d.com/unity/whats-new/2023.2.0&lt;/a&gt; 下载并运行独立安装程序，然后通过 Hub 找到它。&lt;/li&gt;
&lt;li&gt;原生的 Apple Silicon 编辑器不支持 CPU 光照贴图器（lightmapper）或从 SketchUp 导入。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;linux&#34;&gt;Linux &lt;a href=&#34;#linux&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Linux 编辑器有以下限制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;视频导入仅支持 VP8 视频格式&lt;/li&gt;
&lt;li&gt;文件系统区分大小写&lt;/li&gt;
&lt;li&gt;如果编辑器生成“Pipe error !”错误信息，则需要在当前的编辑器会话中增加最大打开文件限制。例如，在启动编辑器之前，在终端中运行 &lt;code&gt;ulimit -n 4096&lt;/code&gt;。有关详细信息，请参阅Linux编辑器问题排除页面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;unity-player-system-requirementsunity-player系统要求&#34;&gt;Unity Player system requirements(Unity Player系统要求) &lt;a href=&#34;#unity-player-system-requirementsunity-player%e7%b3%bb%e7%bb%9f%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;本节列出了构建和运行Unity Player所需的最低要求。实际性能和渲染质量可能会因项目的复杂性而有所不同。&lt;/p&gt;
&lt;h3 id=&#34;mobile移动设备&#34;&gt;Mobile(移动设备) &lt;a href=&#34;#mobile%e7%a7%bb%e5%8a%a8%e8%ae%be%e5%a4%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;ChromeOS&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;iOS/iPadOS&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;tvOS&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;6.0 (API 23) 或更高版本。自定义Android版本必须包含所有支持的Google标准API。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;稳定发布频道上的 R89+ 版本（Android API 28+）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;13+&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;13+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持ARMv7 Neon指令集的ARMv7处理器 (32位)或ARM64处理器&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持ARMv7、ARM64、x86和x86_64的处理器&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;A7 SoC+&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;A8芯片及以上&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;OpenGL ES 3.0+、Vulkan&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;OpenGL ES 3.0+、Vulkan&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Metal&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Metal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;其他要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 1GB+ RAM - 支持的硬件设备必须符合或超过Google Android兼容性定义（版本9.0）的要求，仅适用于以下设备类型： 1. 手持设备（第2.2节） 2. 电视（第2.3节） 3. 平板电脑（第2.6节） - 硬件设备必须使用原生的Android操作系统。除了ChromeOS上的Android外，不支持在容器或模拟器内运行Android。 - 用于开发：Android SDK（12 / API 31）、Android NDK（r23b）和OpenJDK（11），这些工具默认与Unity Hub一起安装&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 支持2019年后发布的ChromeOS设备，如Chromebook、Chromebase、Chromebox和能够运行Android应用并在其自动更新到期日内的平板电脑。 - 使用Android Debug Bridge（adb）通过WiFi或以太网进行脚本调试和性能分析。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;有关开发和调试：请参阅Apple关于XCode支持的文档。有关App Store提交：请参阅苹果的提交指南获取所需的Xcode版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;第四代及以上的Apple TV&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;console游戏主机&#34;&gt;Console(游戏主机) &lt;a href=&#34;#console%e6%b8%b8%e6%88%8f%e4%b8%bb%e6%9c%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;有关PlayStation 4（包括PS VR）、PlayStation 5（包括PS VR2）、Xbox One、Xbox Series S|X和Nintendo Switch的信息，请参阅游戏主机平台开发页面。只支持在Windows版本的Unity上构建主机平台。有关所需的任何其他特定于平台的软件的具体要求，请参阅平台持有人网站上的开发者文档，或直接联系平台代表以获取进一步的信息。&lt;/p&gt;
&lt;p&gt;有关Unity编辑器的具体系统要求，请参阅在Unity下载页面上使用的Unity版本。&lt;/p&gt;
&lt;h3 id=&#34;desktop桌面设备&#34;&gt;Desktop(桌面设备) &lt;a href=&#34;#desktop%e6%a1%8c%e9%9d%a2%e8%ae%be%e5%a4%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;**&lt;em&gt;*Universal Windows Platform*&lt;/em&gt; **&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本，Xbox One、Xbox Series X&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Big Sur 11.0+&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Ubuntu 20.04、Ubuntu 22.04 和 CentOS 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x86、x64 架构及 ARM64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x86、x64 架构及 ARM、ARM64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Apple Silicon、支持 SSE2 指令集的 x64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x64 架构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 DX10、DX11、DX12 的显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 DX10、DX11、DX12 的显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 Metal 的英特尔和 AMD 显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 OpenGL 3.2+ 或 Vulkan 的显卡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;其他要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;硬件供应商官方支持的驱动程序。开发时需要使用 IL2CPP 脚本后端，需要使用 Visual Studio 2019 的 C++ 工具组件或更高版本，并使用 Windows SDK 版本 10.0.19041.0 或更高版本。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;硬件供应商官方支持的驱动程序。开发时需要使用 IL2CPP 脚本后端。需要安装 Visual Studio 2019 的 C++ 工具组件或更高版本，并使用 Windows SDK 版本 10.0.19041.0 或更高版本。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Apple 官方支持的驱动程序。开发时需要使用 IL2CPP 脚本后端，需要使用 Xcode。针对 Apple Silicon 的开发需要 macOS Catalina 10.15.4 和 Xcode 12.2 或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基于 X11 窗口系统运行的 Gnome 桌面环境。其他配置和用户环境与支持的发行版提供的原始配置相同（如内核或窗口管理器）。使用 Nvidia 官方专有显卡驱动程序或 AMD Mesa 显卡驱动程序的 Nvidia 和 AMD 显卡支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对于所有操作系统，Unity Player 仅在工作站、笔记本电脑或平板电脑上支持运行，不支持使用仿真、容器或兼容性层&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;server-platform服务器平台&#34;&gt;Server platform(服务器平台) &lt;a href=&#34;#server-platform%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%b9%b3%e5%8f%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Operating system&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;macOS&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Linux&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本，运行在工作站和机架形态，不支持仿真或兼容性层&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Big Sur 11.0+，运行在工作站和机架形态，不支持仿真或兼容性层&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Ubuntu 20.04、Ubuntu 22.04 和 CentOS 7，运行在工作站和机架形态，不支持仿真或兼容性层&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x86、x64 架构及 ARM64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 Apple Silicon、x64 架构&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持 SSE2 指令集的 x64 架构&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不支持显卡&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;其他要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;硬件供应商官方支持的驱动程序&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;web&#34;&gt;Web &lt;a href=&#34;#web&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;运行浏览器的操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Windows, macOS, and Linux&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;硬件&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;工作站和笔记本电脑形态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;其他要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Chrome、Firefox、Safari 或 Edge (基于 Chromium 的版本) 的版本应满足以下要求： - 支持 WebGL 2.0 - 符合 HTML 5 标准 - 64 位 - 支持 WebAssembly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;运行浏览器的操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Android and iOS&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;硬件&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Android 或 iOS 设备&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;浏览器要求&lt;/strong&gt;v&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- iOS Safari 15 及以上版本 - Chrome 58 及以上版本&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;xr-platform-system-requirementsxr平台系统要求&#34;&gt;XR platform system requirements(XR平台系统要求) &lt;a href=&#34;#xr-platform-system-requirementsxr%e5%b9%b3%e5%8f%b0%e7%b3%bb%e7%bb%9f%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要启用&lt;strong&gt;XR&lt;/strong&gt;并正确配置Unity项目，请按照XR插件架构页面中的步骤进行操作。&lt;/p&gt;
&lt;h3 id=&#34;oculus&#34;&gt;Oculus &lt;a href=&#34;#oculus&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;硬件&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Oculus Rift/Rift S&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Oculus Quest&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Oculus Quest 2&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Android&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅 Oculus 的推荐规格&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARM 64位（Snapdragon 835）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARM 64位（Snapdragon XR2）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅 Oculus 的推荐规格&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;NVIDIA GTX 1050Ti/AMD Radeon RX 470 或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;DX11&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;OpenGL ES 3.0, Vulkan*&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：*Oculus Quest 的 Vulkan支持是实验性功能，不应在生产环境中使用。有关更多信息，请参阅Oculus XR插件包文档。&lt;/p&gt;
&lt;h3 id=&#34;openxr&#34;&gt;OpenXR &lt;a href=&#34;#openxr&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;请参阅OpenXR插件文档以获取兼容的运行时列表。&lt;/p&gt;
&lt;h3 id=&#34;windows-mixed-reality&#34;&gt;Windows Mixed Reality &lt;a href=&#34;#windows-mixed-reality&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;硬件&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;WMR 交互式（VR）&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;HoloLens&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;HoloLens 2&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows 10 版本 21H1（构建 19043）或更高版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;64 位 Intel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Intel Atom&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARM 64位（Snapdragon 850）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;DX11&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;magic-leap&#34;&gt;Magic Leap &lt;a href=&#34;#magic-leap&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Magic Leap One&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Lumin OS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅 Magic Leap 的规格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;GPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅 Magic Leap 的规格&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;OpenGL ES 3.2+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;arcore&#34;&gt;ARCore &lt;a href=&#34;#arcore&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Android phones&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;请参阅支持 ARCore 的设备列表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARM 32位和64位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;OpenGL ES 3.0+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Latest supported SDK version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARCore 1.24&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;arkit&#34;&gt;ARKit &lt;a href=&#34;#arkit&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;iPhone and iPad&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统版本&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;iOS 12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CPU&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;A9+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphics API&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Metal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Latest supported SDK version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;ARKit 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Additional requirements&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当编译包含 ARKit XR 插件的 iOS Player 时，您必须使用 Xcode 12.5 或更高版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;install-unity-from-the-command-line从命令行安装unity&#34;&gt;Install Unity from the command line(从命令行安装Unity) &lt;a href=&#34;#install-unity-from-the-command-line%e4%bb%8e%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%ae%89%e8%a3%85unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您想要在组织中自动部署Unity，可以通过命令行安装编辑器和其他组件。这些组件是普通的可执行安装程序和包，可以用于自动部署Unity。&lt;/p&gt;
&lt;p&gt;要下载这些组件，您可以使用Unity安装程序将Unity组件下载到计算机上的一个文件夹中。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载并运行安装程序。安装程序的稳定版本可在Unity下载存档中获取。如果需要预发布版本的安装程序，请参阅Beta程序页面。&lt;/li&gt;
&lt;li&gt;在“选择组件”中，选择要自动部署的所有组件。&lt;/li&gt;
&lt;li&gt;在“选择下载和安装位置”中，选择“下载至”选项。&lt;/li&gt;
&lt;li&gt;输入一个位置，用于存储组件的安装程序。&lt;/li&gt;
&lt;li&gt;完成安装。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;打开指定的下载位置。在文件夹中，您会找到所选组件的安装程序文件，以及一个脚本文件（Windows上为&lt;code&gt;install.bat&lt;/code&gt;，Linux或OS X上为&lt;code&gt;install.sh&lt;/code&gt;），您可以运行该脚本文件来安装这些组件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/gs_hub_downloaded_installers.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要在另一台计算机上使用已下载的组件安装Unity，请将文件夹的内容复制到目标计算机，并运行安装脚本。&lt;/p&gt;
&lt;h2 id=&#34;installing-individual-unity-components-on-windows-from-the-command-line在windows上使用命令行安装单独的unity组件&#34;&gt;Installing individual Unity components on Windows from the command line(在Windows上使用命令行安装单独的Unity组件) &lt;a href=&#34;#installing-individual-unity-components-on-windows-from-the-command-line%e5%9c%a8windows%e4%b8%8a%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%ae%89%e8%a3%85%e5%8d%95%e7%8b%ac%e7%9a%84unity%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在Windows上使用命令行安装编辑器和其他组件时，请使用以下选项。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：安装程序命令行参数区分大小写。&lt;/p&gt;
&lt;h3 id=&#34;unity-editor-install安装unity编辑器&#34;&gt;Unity Editor install(安装Unity编辑器) &lt;a href=&#34;#unity-editor-install%e5%ae%89%e8%a3%85unity%e7%bc%96%e8%be%91%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Command&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;/S&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;执行静默安装（不需要确认）的安装。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;/D=PATH&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;设置默认安装目录。与静默安装选项结合使用时非常有用。默认文件夹为&lt;strong&gt;C:\Program Files (x86)\Unity&lt;/strong&gt;（32位）或&lt;strong&gt;C:\Program Files\Unity&lt;/strong&gt;（64位）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;UnitySetup64.exe /S /D=E:\Development\Unity
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个示例将Unity静默安装到&lt;strong&gt;E:\Development\Unity&lt;/strong&gt;文件夹，并将其作为Unity安装的根目录。在这种情况下，编辑器可执行文件将安装在&lt;strong&gt;E:\Development\Unity\Editor\Unity.exe&lt;/strong&gt;中。默认安装目录必须作为命令行的最后一个参数。提供的路径不能包含引号，即使路径中包含了空格。&lt;/p&gt;
&lt;h3 id=&#34;卸载unity编辑器&#34;&gt;卸载Unity编辑器 &lt;a href=&#34;#%e5%8d%b8%e8%bd%bdunity%e7%bc%96%e8%be%91%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要执行静默卸载，请从命令行或脚本中运行&lt;code&gt;Uninstall.exe /S&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：虽然进程会立即完成，但实际上文件被删除之前会有一段延迟。这是因为卸载程序被复制到临时位置以便删除自身。请确保工作目录不在Unity安装位置内，否则卸载程序无法删除该文件夹。&lt;/p&gt;
&lt;h3 id=&#34;standard-assets-install安装standard-assets&#34;&gt;Standard Assets install(安装Standard Assets) &lt;a href=&#34;#standard-assets-install%e5%ae%89%e8%a3%85standard-assets&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要静默安装Standard Assets：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;UnityStandardAssetsSetup.exe /S /D=E:\Development\Unity
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果指定一个文件夹，请使用Unity根目录（即包含Editor文件夹的文件夹），而不是安装&lt;strong&gt;Unity.exe&lt;/strong&gt;的文件夹。&lt;/p&gt;
&lt;h3 id=&#34;example-project-install安装示例项目&#34;&gt;Example Project install(安装示例项目) &lt;a href=&#34;#example-project-install%e5%ae%89%e8%a3%85%e7%a4%ba%e4%be%8b%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要静默安装示例项目，请使用：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;UnityExampleProjectSetup.exe /S /D=E:\Development\Unity
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：默认文件夹为&lt;code&gt;C:\Users\Public\Documentation\Unity Projects\Standard Assets Example Project&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;installing-unity-on-os-x-from-the-command-line在os-x上使用命令行安装unity&#34;&gt;Installing Unity on OS X from the command line(在OS X上使用命令行安装Unity) &lt;a href=&#34;#installing-unity-on-os-x-from-the-command-line%e5%9c%a8os-x%e4%b8%8a%e4%bd%bf%e7%94%a8%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%ae%89%e8%a3%85unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity的单独安装程序以.pkg文件的形式提供，可以使用&lt;code&gt;installer&lt;/code&gt;命令进行安装，如下所述。&lt;/p&gt;
&lt;h3 id=&#34;unity-editor-install安装unity编辑器-1&#34;&gt;Unity Editor install(安装Unity编辑器) &lt;a href=&#34;#unity-editor-install%e5%ae%89%e8%a3%85unity%e7%bc%96%e8%be%91%e5%99%a8-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将编辑器安装到指定目标卷的&lt;code&gt;/Applications/Unity&lt;/code&gt;文件夹中，请输入：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo installer [-dumplog] -package Unity.pkg -target /
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;standard-assets-install安装standard-assets-1&#34;&gt;Standard Assets install(安装Standard Assets) &lt;a href=&#34;#standard-assets-install%e5%ae%89%e8%a3%85standard-assets-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将Standard Assets安装到指定卷的&lt;code&gt;/Applications/Unity/Standard Assets&lt;/code&gt;文件夹中，请输入：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo installer [-dumplog] -package StandardAssets.pkg -target /
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;example-project-install安装示例项目-1&#34;&gt;Example Project install(安装示例项目) &lt;a href=&#34;#example-project-install%e5%ae%89%e8%a3%85%e7%a4%ba%e4%be%8b%e9%a1%b9%e7%9b%ae-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要将示例项目安装到指定卷的&lt;code&gt;/Users/Shared/Unity/Standard-Assets&lt;/code&gt;文件夹中，请输入：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo installer [-dumplog] -package Examples.pkg -target /
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;torrent-download&#34;&gt;Torrent download &lt;a href=&#34;#torrent-download&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您喜欢通过BitTorrent客户端下载Unity，您可以从Unity下载存档页面获取一个Torrent下载链接。并非所有版本都支持Torrent下载。如果某个版本可以作为Torrent下载，该选项将在&lt;strong&gt;下载&lt;/strong&gt;下拉菜单中以**Torrent下载（Win+Mac）**的形式呈现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/InstallingUnityTorrentDownload.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;installing-several-versions-at-once同时安装多个版本&#34;&gt;Installing several versions at once(同时安装多个版本) &lt;a href=&#34;#installing-several-versions-at-once%e5%90%8c%e6%97%b6%e5%ae%89%e8%a3%85%e5%a4%9a%e4%b8%aa%e7%89%88%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以在同一台计算机上安装多个版本的Unity。&lt;/p&gt;
&lt;p&gt;在Mac上，安装程序会创建一个名为&lt;strong&gt;Unity&lt;/strong&gt;的文件夹，并覆盖任何具有相同名称的现有文件夹。要在Mac上安装多个Unity版本，请在安装另一个版本之前重命名现有的&lt;strong&gt;Unity&lt;/strong&gt;文件夹。&lt;/p&gt;
&lt;p&gt;在Windows上，安装文件夹的名称始终为&lt;strong&gt;Unity X.Y.Z[fp]W&lt;/strong&gt;，其中&lt;strong&gt;f&lt;/strong&gt;表示官方版本，&lt;strong&gt;p&lt;/strong&gt;用于标记补丁版本。&lt;/p&gt;
&lt;p&gt;我们强烈建议，如果要重命名Unity文件夹，将新文件夹命名为逻辑上的名称（例如，在名称末尾添加版本号）。任何现有的快捷方式、别名和链接到离线文档的链接可能会不再指向旧版本的Unity。这在离线文档中可能尤其令人困惑；如果您突然发现浏览器书签到离线文档无法正常工作，请检查URL中的文件夹名称是否正确。&lt;/p&gt;
&lt;h1 id=&#34;install-unity-offline-without-the-hub在没有unity-hub的情况下离线安装unity&#34;&gt;Install Unity offline without the Hub(在没有Unity Hub的情况下离线安装Unity) &lt;a href=&#34;#install-unity-offline-without-the-hub%e5%9c%a8%e6%b2%a1%e6%9c%89unity-hub%e7%9a%84%e6%83%85%e5%86%b5%e4%b8%8b%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity下载助手支持离线部署。使用下载助手下载安装Unity所需的文件，以及生成用于在其他没有互联网访问的计算机上重复安装的脚本。&lt;/p&gt;
&lt;p&gt;有关手动激活Unity的更多信息，请参考Unity手动激活指南。&lt;/p&gt;
&lt;h2 id=&#34;prerequisites先决条件&#34;&gt;Prerequisites(先决条件) &lt;a href=&#34;#prerequisites%e5%85%88%e5%86%b3%e6%9d%a1%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;进行以下步骤，您需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一台有互联网访问的计算机&lt;/li&gt;
&lt;li&gt;一台没有互联网访问的计算机&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;download-files-with-an-internet-connected-machine在有互联网访问的计算机上下载文件&#34;&gt;Download files with an internet connected machine(在有互联网访问的计算机上下载文件) &lt;a href=&#34;#download-files-with-an-internet-connected-machine%e5%9c%a8%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e8%ae%bf%e9%97%ae%e7%9a%84%e8%ae%a1%e7%ae%97%e6%9c%ba%e4%b8%8a%e4%b8%8b%e8%bd%bd%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;在具有互联网访问的计算机上，打开以下网站：https://unity3d.com/get-unity/download/archive&lt;/li&gt;
&lt;li&gt;选择离线计算机操作系统和所需的Unity版本的下载选项卡。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;Unity安装程序&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;继续安装，并选择您想要的任何构建支持选项。&lt;/li&gt;
&lt;li&gt;将文件下载到指定位置，例如下载文件夹，而不是临时位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要确认下载成功，请执行以下操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开文件管理器。&lt;/li&gt;
&lt;li&gt;导航到您之前指定的位置文件夹。&lt;/li&gt;
&lt;li&gt;确认&lt;code&gt;.sh&lt;/code&gt;或&lt;code&gt;.bat&lt;/code&gt;文件位于该文件夹内。&lt;/li&gt;
&lt;li&gt;检查此文件的内容，确保其类似于以下示例：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://docs.unity3d.com/2023.2/Documentation/uploads/Main/deploying-unity-offline-install-bat.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;install-unity-on-the-offline-computer在离线计算机上安装unity&#34;&gt;Install Unity on the offline computer(在离线计算机上安装Unity) &lt;a href=&#34;#install-unity-on-the-offline-computer%e5%9c%a8%e7%a6%bb%e7%ba%bf%e8%ae%a1%e7%ae%97%e6%9c%ba%e4%b8%8a%e5%ae%89%e8%a3%85unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;将所有下载的文件复制到离线计算机。如果离线计算机使用Windows操作系统:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从管理员shell中运行提供的&lt;code&gt;.bat&lt;/code&gt;文件:
&lt;ol&gt;
&lt;li&gt;在&lt;strong&gt;开始&lt;/strong&gt;菜单中搜索&lt;code&gt;cmd.exe&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;右键点击。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;以管理员身份运行&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;导航到包含&lt;strong&gt;scripts&lt;/strong&gt;的文件夹。通常位于下载文件夹中（&lt;code&gt;cd C:\Users\[YourName]\Download\UnityPackages&lt;/code&gt;）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果离线计算机使用OSX操作系统：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将所有下载的文件复制到离线计算机。&lt;/li&gt;
&lt;li&gt;运行提供的&lt;code&gt;.sh&lt;/code&gt;文件。&lt;/li&gt;
&lt;li&gt;运行&lt;code&gt;sudo install.sh&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;导航到包含脚本的文件夹。通常位于下载文件夹中（&lt;code&gt;cd ~/Downloads/UnityPackages&lt;/code&gt;）。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;根据需要重复这些步骤，为每台需要安装Unity的计算机执行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装Unity后，通过桌面快捷方式打开Unity。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;activate-a-license-on-the-offline-computer在离线计算机上激活许可证&#34;&gt;Activate a license on the offline computer(在离线计算机上激活许可证) &lt;a href=&#34;#activate-a-license-on-the-offline-computer%e5%9c%a8%e7%a6%bb%e7%ba%bf%e8%ae%a1%e7%ae%97%e6%9c%ba%e4%b8%8a%e6%bf%80%e6%b4%bb%e8%ae%b8%e5%8f%af%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照手动激活指南上的说明，在离线计算机上激活您的许可证。&lt;/p&gt;
&lt;h2 id=&#34;install-unity-hub-offline离线安装unity-hub&#34;&gt;Install Unity Hub offline(离线安装Unity Hub) &lt;a href=&#34;#install-unity-hub-offline%e7%a6%bb%e7%ba%bf%e5%ae%89%e8%a3%85unity-hub&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;作为Unity下载助手的一部分，有一个名为“UnityHubSetup.exe”的文件。在离线机器上运行此文件以安装Unity Hub。Unity Hub用于管理您的Unity项目和编辑器安装。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要定位现有的Unity安装，请导航到先前安装的“Unity.exe”文件。例如：&lt;/p&gt;
&lt;p&gt;C:\Program Files\Unity XXXXXX\Editor\Unity.exe（不使用Hub的默认Unity安装路径）&lt;/p&gt;
&lt;p&gt;或&lt;/p&gt;
&lt;p&gt;C:\Program Files\Unity\Hub\Editor\20XXXX\Editor\Unity.exe（使用Hub的默认Unity安装路径）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要禁用欢迎屏幕：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果您以前从未设置过services-config.json文件，则需要创建配置目录和services-config.json文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MacOS：/Library/Application Support/Unity/config&lt;/li&gt;
&lt;li&gt;Windows：C:\ProgramData\Unity\config&lt;/li&gt;
&lt;li&gt;Linux：/usr/share/unity3d/config&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在此文件中添加以下选项：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;hubDisableWelcomeScreen&amp;#34;: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;deploy-unity-across-your-enterprise在企业中部署unity&#34;&gt;Deploy Unity across your enterprise(在企业中部署Unity) &lt;a href=&#34;#deploy-unity-across-your-enterprise%e5%9c%a8%e4%bc%81%e4%b8%9a%e4%b8%ad%e9%83%a8%e7%bd%b2unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity为在企业基础架构中使用其产品的大型组织提供解决方案。这些解决方案可以帮助在企业环境中使用Unity的IT管理员和创作者。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Topic&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用标准用户安装Unity（Windows）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;允许Windows上的标准用户在没有管理员权限的情况下安装Unity。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过Web代理使用Unity&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解在使用Web代理的组织中使用Unity的不同方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;enable-unity-installation-by-standard-users-windows启用标准用户安装unitywindows&#34;&gt;Enable Unity installation by standard users (Windows)(启用标准用户安装Unity（Windows）) &lt;a href=&#34;#enable-unity-installation-by-standard-users-windows%e5%90%af%e7%94%a8%e6%a0%87%e5%87%86%e7%94%a8%e6%88%b7%e5%ae%89%e8%a3%85unitywindows&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;默认情况下，安装Unity编辑器是一个需要管理员权限的过程。&lt;/p&gt;
&lt;p&gt;从2023.1版本开始，您可以启用Windows上的标准用户在没有提升的权限下安装Unity编辑器。&lt;/p&gt;
&lt;p&gt;一旦启用了此功能，管理员只需安装Unity安装程序检测到的缺失依赖项（如Visual C++运行时库），就可以减少管理员的参与。这些依赖项很少更改，因此标准用户在安装其他Unity编辑器实例时无需每次都需要管理员干预。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;确保您对&lt;code&gt;C:\ProgramData\Unity\config&lt;/code&gt;文件夹具有写入权限。&lt;/p&gt;
&lt;p&gt;在编辑JSON文件时，请遵循以下实践:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用直角双引号(&amp;quot;&amp;quot;)，而不是弯曲引号（“”）。&lt;/li&gt;
&lt;li&gt;用逗号分隔键值对。&lt;/li&gt;
&lt;li&gt;使用JSON验证器检查JSON的语法。您可以使用PowerShell中的&lt;code&gt;Get-Content&lt;/code&gt;和&lt;code&gt;ConvertFrom-Json&lt;/code&gt;命令，如以下示例所示。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure步骤&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要启用标准用户安装Unity编辑器，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;确保以下路径存在。如果需要，创建其中的任何文件夹：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:\ProgramData\Unity\config
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保以下文件存在。如果需要，创建该文件:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;C:\ProgramData\Unity\config\services-config.json
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果需要创建该文件，请确保它至少具有以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;code&gt;services-config.json&lt;/code&gt;的花括号之间添加以下条目：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hubDisableElevate&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：为了让同一台计算机的多个用户共享Unity编辑器的二进制文件而不需要多次安装相同的版本，请创建一个用于所有Unity编辑器的共同目标文件夹，例如&lt;code&gt;C:\UnityEditors&lt;/code&gt;。&lt;strong&gt;重要：**确保为**所有用户&lt;/strong&gt;授予该文件夹的&lt;strong&gt;读取&lt;/strong&gt;和&lt;strong&gt;写入&lt;/strong&gt;访问权限。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：如果您在上一步创建了共享文件夹，请在&lt;code&gt;services-config.json&lt;/code&gt;中添加&lt;code&gt;machineWideSecondaryInstallLocation&lt;/code&gt;键，以便Unity Hub使用该文件夹。根据上一步的文件夹路径，条目如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;machineWideSecondaryInstallLocation&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\\UnityEditors&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;退出Unity Hub，并确保它已停止运行，而不仅仅是最小化到任务栏中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;sample-configuration-file示例配置文件&#34;&gt;Sample configuration file(示例配置文件) &lt;a href=&#34;#sample-configuration-file%e7%a4%ba%e4%be%8b%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用上述步骤中的值，示例&lt;code&gt;services-config.json&lt;/code&gt;文件如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;hubDisableElevate&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;machineWideSecondaryInstallLocation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\\UnityEditors&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;next-steps下一步&#34;&gt;Next steps(下一步) &lt;a href=&#34;#next-steps%e4%b8%8b%e4%b8%80%e6%ad%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;现在，标准用户的计算机可以在没有管理员干预的情况下安装Unity编辑器，除非存在依赖项。管理员必须安装任何依赖项。&lt;/p&gt;
&lt;h3 id=&#34;missing-dependencies-warning缺少依赖项警告&#34;&gt;Missing dependencies warning(缺少依赖项警告) &lt;a href=&#34;#missing-dependencies-warning%e7%bc%ba%e5%b0%91%e4%be%9d%e8%b5%96%e9%a1%b9%e8%ad%a6%e5%91%8a&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下是标准用户可能会看到的依赖项警告示例：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/ent-unpriv-install-00.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;list-of-missing-dependencies依赖项列表&#34;&gt;List of missing dependencies(依赖项列表) &lt;a href=&#34;#list-of-missing-dependencies%e4%be%9d%e8%b5%96%e9%a1%b9%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果标准用户收到有关缺少依赖项的警告，安装程序将把依赖项列表写入一个文本文件中。警告会指示这个文本文件的位置。管理员必须在标准用户能够稳定使用Unity之前安装这些依赖项。&lt;/p&gt;
&lt;p&gt;以下是Unity安装程序可能生成的一个缺少依赖项列表的示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dependency: Visual C++ 2010 runtime (x64)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Download location: https://www.microsoft.com/en-ca/download/details.aspx?id=26999
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Local Installer: C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\MissingDependencies\vcredist_x64_2010.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dependency: Visual C++ 2013 runtime (x64)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Download location: https://www.microsoft.com/en-ca/download/details.aspx?id=40784
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Local Installer: C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\MissingDependencies\vcredist_x64_2013.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Dependency: Visual C++ 2015 runtime (x64)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Download location: https://www.microsoft.com/en-ca/download/details.aspx?id=48145
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Local Installer: C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\MissingDependencies\vcredist_x64_2015.exe
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Make sure that the following rules are set:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netsh advfirewall firewall delete rule name=all program=&amp;#39;C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\Editor\Unity.exe&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netsh advfirewall firewall delete rule name=all program=&amp;#39;C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\Editor\Data\Tools\nodejs\node.exe&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netsh advfirewall firewall add rule name=&amp;#39;Unity 2023.1.0a5 Editor&amp;#39; dir=in action=allow program=&amp;#39;C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\Editor\Unity.exe&amp;#39; profile=domain protocol=any
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;netsh advfirewall firewall add rule name=&amp;#39;Unity 2023.1.0a5 Editor&amp;#39; dir=in action=block program=&amp;#39;C:\Users\nonadmin\AppData\Local\Unity 2023.1.0a5\Editor\Unity.exe&amp;#39; profile=public protocol=any
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;using-unity-through-web-proxies通过web代理使用unity&#34;&gt;Using Unity through web proxies(通过Web代理使用Unity) &lt;a href=&#34;#using-unity-through-web-proxies%e9%80%9a%e8%bf%87web%e4%bb%a3%e7%90%86%e4%bd%bf%e7%94%a8unity&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;一些组织使用Web代理，它是用户与互联网资源之间的中间服务器。组织使用Web代理的原因有多种，包括安全性、隐私性和网络效率。&lt;/p&gt;
&lt;p&gt;如果您在需要通过Web代理访问互联网的环境中部署Unity，您可能需要配置Web代理、客户端计算机或两者兼而有之。根据您的环境，此配置可能包括以下一些或全部任务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;准备您的环境，以便Unity应用程序可以使用您的Web代理&lt;/li&gt;
&lt;li&gt;Web代理拦截安全通信&lt;/li&gt;
&lt;li&gt;允许Web代理下载可执行文件&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;preparing-your-environment-so-unity-applications-can-use-your-web-proxy准备您的环境以便unity应用程序可以使用您的web代理&#34;&gt;Preparing your environment so Unity applications can use your web proxy(准备您的环境，以便Unity应用程序可以使用您的Web代理) &lt;a href=&#34;#preparing-your-environment-so-unity-applications-can-use-your-web-proxy%e5%87%86%e5%a4%87%e6%82%a8%e7%9a%84%e7%8e%af%e5%a2%83%e4%bb%a5%e4%be%bfunity%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e5%8f%af%e4%bb%a5%e4%bd%bf%e7%94%a8%e6%82%a8%e7%9a%84web%e4%bb%a3%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从Unity Editor 2023.1开始，自动代理配置功能可以使Unity应用程序在需要通过Web代理进行通信时无缝使用。Unity应用程序可以在不中断和不安装其他软件的情况下与Web代理进行通信。所需的配置量取决于以下因素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unity版本和操作系统&lt;/strong&gt;：从Unity Editor 2023.1开始，Unity应用程序可以从Windows操作系统访问Web代理配置。较早的版本和其他操作系统需要额外的配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;身份验证类型&lt;/strong&gt;：检查您的代理是否支持基本身份验证（用户名和密码），或者是否使用SPNEGO机制和协议（如Kerberos或NTLM）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请使用以下表格来确定与您的环境相匹配的解决方案：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;操作系统&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Unity 版本&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;代理身份验证&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;解决方案&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;其他信息&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2023.1或更新的版本的Unity Editor和3.4.2或更新的Hub版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持基本身份验证&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用自动代理配置。将凭据存储在凭据管理器中。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您必须能够将代理信息存储在操作系统设置或环境变量中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2023.1或更新的版本的Unity Editor和3.4.2或更新的Hub版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不支持基本身份验证，或者不需要身份验证&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用自动代理配置。如果您的代理需要身份验证，请在代理异常列表中允许Unity应用程序进行无身份验证访问。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您必须能够将代理信息存储在操作系统设置或环境变量中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2022.x或更早版本的Unity Editor或3.4.1或更早版本的Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;支持基本身份验证&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用环境变量来标识Web代理。在代理异常列表中允许Unity应用程序进行无身份验证访问（首选），或者在环境变量中存储代理的用户名和密码。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在2023.1版本之前，自动代理配置的支持不完整。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;2022.x或更早版本的Unity Editor或3.4.1或更早版本的Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;需要身份验证，但不支持基本身份验证&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您的代理需要身份验证，请在代理异常列表中允许Unity应用程序进行无身份验证访问。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在2023.1版本之前，自动代理配置的支持不完整。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;macOS, Linux&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任意&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;任意&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用环境变量来标识Web代理。如果您的代理需要身份验证，请在代理异常列表中允许Unity应用程序进行无身份验证访问。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;interception-of-secure-communication-by-the-web-proxyweb代理拦截安全通信&#34;&gt;Interception of secure communication by the web proxy(Web代理拦截安全通信) &lt;a href=&#34;#interception-of-secure-communication-by-the-web-proxyweb%e4%bb%a3%e7%90%86%e6%8b%a6%e6%88%aa%e5%ae%89%e5%85%a8%e9%80%9a%e4%bf%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检查您的Web代理是否使用SSL检查，一些企业使用它来检查安全（TLS）请求的内容。如果您的企业使用SSL检查，请配置客户端计算机信任Web代理证书。&lt;/p&gt;
&lt;h2 id=&#34;allow-the-web-proxy-to-download-executable-files允许web代理下载可执行文件&#34;&gt;Allow the web proxy to download executable files(允许Web代理下载可执行文件) &lt;a href=&#34;#allow-the-web-proxy-to-download-executable-files%e5%85%81%e8%ae%b8web%e4%bb%a3%e7%90%86%e4%b8%8b%e8%bd%bd%e5%8f%af%e6%89%a7%e8%a1%8c%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检查您的Web代理是否阻止下载可执行文件，或者是否需要用户在下载可执行文件之前确认。如果是这样，您需要配置Web代理以允许特定端点上的此流量。否则，用户将无法运行Unity Hub用于安装Unity Editor所需组件的安装程序。详细信息请参阅下载可执行文件的端点。&lt;/p&gt;
&lt;h2 id=&#34;known-issues已知问题&#34;&gt;Known issues(已知问题) &lt;a href=&#34;#known-issues%e5%b7%b2%e7%9f%a5%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;对于使用代理自动配置（PAC）文件配置Web代理的组织，不支持&lt;code&gt;HTTP&lt;/code&gt;关键字。请改用&lt;code&gt;PROXY&lt;/code&gt;关键字来指定使用HTTP通信的代理。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;enable-automatic-proxy-configuration启用自动代理配置&#34;&gt;Enable automatic proxy configuration(启用自动代理配置) &lt;a href=&#34;#enable-automatic-proxy-configuration%e5%90%af%e7%94%a8%e8%87%aa%e5%8a%a8%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您的环境与Unity的自动代理配置功能兼容，则必须配置客户端计算机来使用它。&lt;/p&gt;
&lt;p&gt;请查看在“通过Web代理使用Unity”中的解决方案，以检查您的环境是否支持Unity的自动代理配置功能。&lt;/p&gt;
&lt;p&gt;无论是手动启用Unity的自动代理配置功能，还是使用更可伸缩的方法，都要按照以下步骤配置客户端计算机：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;检查客户端计算机上是否存在以下目录，如果缺少，则创建它：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows: &lt;code&gt;C:\ProgramData\Unity\config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macOS: &lt;code&gt;/Library/Application\ Support/Unity/config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查上一步中的目录是否有一个 &lt;code&gt;services-config.json&lt;/code&gt; 文件，如果缺少，则创建它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在文件中添加 &lt;code&gt;&amp;quot;enableProxyAutoconfig&amp;quot;&lt;/code&gt; 键，并赋值为 &lt;code&gt;true&lt;/code&gt;。如果您正在创建文件，请确保其类似于以下示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;enableProxyAutoconfig&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;保存 &lt;code&gt;services-config.json&lt;/code&gt; 文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;启用自动代理配置后，Unity应用程序将查找存储的用户凭据（如果您的组织的Web代理需要身份验证）。如果凭据未存储或不正确，您将遇到以下问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在创建新项目时，Unity Hub 中将无法使用项目模板。&lt;/li&gt;
&lt;li&gt;包管理器的操作（如搜索或下载软件包）将失败。在这种情况下，编辑器会在&amp;quot;控制台窗口&amp;quot;中显示错误消息：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/ent-proxy-autoconfig-00.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;next-steps后续步骤&#34;&gt;Next steps(后续步骤) &lt;a href=&#34;#next-steps%e5%90%8e%e7%bb%ad%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;如果您的组织设置了需要身份验证的Web代理，用户需要存储他们的凭据以进行Web代理身份验证。有关存储凭据的信息，请参阅存储凭据以进行自动代理配置。&lt;/li&gt;
&lt;li&gt;查看“通过Web代理使用Unity”中的解决方案，以检查您的环境是否需要任何其他操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;store-credentials-for-automatic-proxy-configuration存储凭据以进行自动代理配置&#34;&gt;Store credentials for automatic proxy configuration(存储凭据以进行自动代理配置) &lt;a href=&#34;#store-credentials-for-automatic-proxy-configuration%e5%ad%98%e5%82%a8%e5%87%ad%e6%8d%ae%e4%bb%a5%e8%bf%9b%e8%a1%8c%e8%87%aa%e5%8a%a8%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您的组织的Web代理要求用户身份验证，并配置为接受基本身份验证（用户名和密码），那么用户在使用Unity应用程序之前必须存储他们的凭据。&lt;/p&gt;
&lt;p&gt;如果您在Windows上使用Unity，请按照以下步骤进行操作。对于其他平台和环境，请参阅其他平台和环境的替代方法。&lt;/p&gt;
&lt;p&gt;开始之前，请确保您已启用自动代理配置。&lt;/p&gt;
&lt;h2 id=&#34;procedure步骤-1&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照以下步骤在Windows中存储您的代理凭据，将 &lt;code&gt;webproxy.mycompany.com&lt;/code&gt; 的代理地址和 &lt;code&gt;proxyuser&lt;/code&gt; 的用户名替换为您自己的信息。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在任务栏的搜索框中输入 &lt;code&gt;凭据管理器&lt;/code&gt;，找到&lt;strong&gt;凭据管理器控制面板&lt;/strong&gt;并打开。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;凭据管理器&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;Windows凭据&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;添加通用凭据&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/ent-proxy-autoconfig-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;Internet 或网络地址&lt;/strong&gt;中，输入Web代理的主机名或IP地址。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入您的&lt;strong&gt;用户名&lt;/strong&gt;和&lt;strong&gt;密码&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-25-unity-document-7/ent-proxy-autoconfig-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;单击&lt;strong&gt;确定&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Unity应用程序将在与指定的Web代理进行身份验证时使用这些存储的凭据。&lt;/p&gt;
&lt;h2 id=&#34;alternatives-for-other-platforms-and-environments其他平台和环境的替代方法&#34;&gt;Alternatives for other platforms and environments(其他平台和环境的替代方法) &lt;a href=&#34;#alternatives-for-other-platforms-and-environments%e5%85%b6%e4%bb%96%e5%b9%b3%e5%8f%b0%e5%92%8c%e7%8e%af%e5%a2%83%e7%9a%84%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;某些平台和环境不完全支持Unity的自动代理配置功能，或者不支持存储用户凭据，或者两者都不支持。以下是一些例子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS 支持Unity的自动代理配置功能，但不支持存储用户凭据。&lt;/li&gt;
&lt;li&gt;在持续集成（CI）或持续交付（CD）环境中，流水线（而不是用户）与Web代理进行交互。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这种情况下，请考虑以下替代方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于在Windows环境中运行的CI/CD流水线，可以使用 &lt;code&gt;cmdkey&lt;/code&gt; 命令将凭据从命令行界面（CLI）添加到Windows凭据管理器中。可参考 Microsoft Learn 上的 cmdkey 文档了解示例用法。&lt;/li&gt;
&lt;li&gt;对于不支持存储凭据的环境，可以在环境变量中定义代理配置。这个定义也可以包括用户名和密码（如果有必要）。更多信息，请参阅使用环境变量来标识您的Web代理。&lt;/li&gt;
&lt;li&gt;如果基本身份验证和Unity的自动代理配置都不可行，您需要在Web代理中定义例外情况，以便Unity应用程序请求的资源无需身份验证。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps后续步骤-1&#34;&gt;Next steps(后续步骤) &lt;a href=&#34;#next-steps%e5%90%8e%e7%bb%ad%e6%ad%a5%e9%aa%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;查看“通过Web代理使用Unity”中的解决方案，以检查您的环境是否需要任何其他操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;trusting-the-web-proxy-security-certificate信任web代理的安全证书&#34;&gt;Trusting the web proxy security certificate(信任Web代理的安全证书) &lt;a href=&#34;#trusting-the-web-proxy-security-certificate%e4%bf%a1%e4%bb%bbweb%e4%bb%a3%e7%90%86%e7%9a%84%e5%ae%89%e5%85%a8%e8%af%81%e4%b9%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;一些企业在其网络环境中使用SSL检查来检查、跟踪和控制网络流量。&lt;/p&gt;
&lt;p&gt;通过SSL检查，Web代理作为实际客户端的服务器，然后作为实际服务器的客户端。为了防止客户端看到安全警告，Web代理必须代表服务器向客户端呈现有效的SSL/TLS证书。如果没有有效的SSL/TLS证书，客户端可能不信任Web代理，并可能阻止或警告用户其连接不安全。&lt;/p&gt;
&lt;p&gt;SSL检查有时与中间人攻击（MITM）相关联。&lt;/p&gt;
&lt;p&gt;假设您已设置使用SSL检查的Web代理。也假设客户端计算机在操作系统级别配置为接受SSL/TLS证书，以便它们可以与Web代理进行通信。&lt;/p&gt;
&lt;p&gt;即使在操作系统级别信任证书，客户端计算机也必须进行以下配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;启用自动代理配置，以使Unity Hub信任证书。&lt;/li&gt;
&lt;li&gt;设置 NODE_EXTRA_CA_CERTS 环境变量或设置全局配置文件，以使Unity Package Manager信任证书。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作为替代方案，您可以在Web代理上定义例外情况，以使Unity的URL不受SSL检查的影响。&lt;/p&gt;
&lt;h2 id=&#34;set-certificates-with-the-node_extra_ca_certs-environment-variable使用-node_extra_ca_certs-环境变量设置证书&#34;&gt;Set certificates with the NODE_EXTRA_CA_CERTS environment variable(使用 NODE_EXTRA_CA_CERTS 环境变量设置证书) &lt;a href=&#34;#set-certificates-with-the-node_extra_ca_certs-environment-variable%e4%bd%bf%e7%94%a8-node_extra_ca_certs-%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e8%ae%be%e7%bd%ae%e8%af%81%e4%b9%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要使使用 SSL 检查的 Web 代理与 Unity Package Manager 一起正常工作，您需要设置 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量或使用配置文件设置证书。&lt;/p&gt;
&lt;p&gt;证书文件必须分发到每台运行 Unity 的计算机。然后，必须设置 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量，使其值指向证书文件的绝对路径。无论是手动设置还是使用更可扩展的方法，证书和环境变量都必须在每个与 Web 代理通信的设备上进行设置。按照以下通用步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建一个文本文件，其中包含一个或多个自定义证书颁发机构的证书。该文件必须由一个或多个以 Privacy-Enhanced Mail (PEM) 格式表示的可信任证书组成。有关详细信息，请参阅您的 Web 代理软件的帮助文档。&lt;/li&gt;
&lt;li&gt;将 &lt;code&gt;.pem&lt;/code&gt; 文件分发到每台计算机上的 Unity 实例。&lt;/li&gt;
&lt;li&gt;在一个命令文件中定义 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量。请参阅创建命令文件以设置环境变量和打开应用程序。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;examples示例&#34;&gt;Examples(示例) &lt;a href=&#34;#examples%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在以下示例中，&lt;code&gt;mycert.pem&lt;/code&gt; 是证书的名称，它存在于用户的主目录中。&lt;/p&gt;
&lt;h4 id=&#34;windows&#34;&gt;Windows &lt;a href=&#34;#windows&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;set NODE_EXTRA_CA_CERTS=C:\Users\username\mycert.pem
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;macos-and-linux&#34;&gt;macOS and Linux &lt;a href=&#34;#macos-and-linux&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;export NODE_EXTRA_CA_CERTS=/Users/username/mycert.pem
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;您可以在 Node.js 文档中找到有关 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量的更多信息。&lt;/p&gt;
&lt;h2 id=&#34;set-certificates-with-a-configuration-file使用配置文件设置证书&#34;&gt;Set certificates with a configuration file(使用配置文件设置证书) &lt;a href=&#34;#set-certificates-with-a-configuration-file%e4%bd%bf%e7%94%a8%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e8%ae%be%e7%bd%ae%e8%af%81%e4%b9%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果无法使用 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量来启用 Unity Package Manager 操作，则按照以下过程进行操作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：无论是手动添加还是使用更可扩展的方法更新配置文件，都必须将添加或更新应用于每台客户端计算机。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;找到 &lt;code&gt;upmconfig.toml&lt;/code&gt; 全局配置文件。如果该文件尚不存在，请创建一个空的文本文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建一个文本文件，其中包含一个或多个自定义证书颁发机构的证书。该文件必须由一个或多个以 Privacy-Enhanced Mail (PEM) 格式表示的可信任证书组成。例如：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-pem&#34; data-lang=&#34;pem&#34;&gt;-----BEGIN CERTIFICATE-----
MIIC+zCCAeOgAwIBAgIJAO0U6hVJnbvjMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0xOTAzMTIwMTIxMzRaFw0yOTAzMDkwMTIxMzRaMBQx
(additional lines omitted for conciseness)
LFwHSUdqk0lJK4b0mCwyTHNvYO1IDziE5EKwfuaKVgOa62iCHVahgIVa+een4EfS
hCCr3M3cq11Mi+mnRi1scxxrOno4OEEChWg2szZLlxBrkVJllrrq620XJ6RLB/8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
(additional lines omitted for conciseness)
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
-----END CERTIFICATE-----
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将此文件保存到全局配置文件所在的同一文件夹，如果可能的话。虽然 Unity 支持文件系统上的任何位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在全局配置文件中，添加 &lt;strong&gt;caFile&lt;/strong&gt; 键，并将其值设置为您 PEM 文件的绝对文件路径。&lt;strong&gt;重要提示&lt;/strong&gt;：在 TOML 文件中设置 Windows 路径时，请使用斜杠 (&lt;code&gt;/&lt;/code&gt;) 或双反斜杠 (&lt;code&gt;\\&lt;/code&gt;)。不要使用单反斜杠 (&lt;code&gt;\&lt;/code&gt;)，因为它们是特殊字符，用于标记转义序列，可能导致 TOML 解析错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;caFile&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\\ProgramData\\Unity\\config\\cert.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;macOS and Linux example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;caFile&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/etc/cert.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;use-environment-variables-to-identify-your-web-proxy使用环境变量标识您的-web-代理&#34;&gt;Use environment variables to identify your web proxy(使用环境变量标识您的 Web 代理) &lt;a href=&#34;#use-environment-variables-to-identify-your-web-proxy%e4%bd%bf%e7%94%a8%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e6%a0%87%e8%af%86%e6%82%a8%e7%9a%84-web-%e4%bb%a3%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您的环境不支持自动代理配置，您可以使用环境变量来标识您的 Web 代理。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;HTTP_PROXY&lt;/code&gt; 和 &lt;code&gt;HTTPS_PROXY&lt;/code&gt; 是您将用于标识您的 Web 代理的环境变量。如果您的企业使用 Unity 许可服务器，请同时设置 &lt;code&gt;NO_PROXY&lt;/code&gt; 环境变量。无论您是手动设置这些环境变量还是使用更可扩展的方法，它们都必须在每个通过 Web 代理进行通信的设备上设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：在环境变量中指定代理配置将会覆盖自动代理配置。&lt;/p&gt;
&lt;p&gt;根据您的环境，您使用的环境变量和分配的值可能有所不同。请在以下部分或多个部分中找到最适合您情况的指导。&lt;/p&gt;
&lt;h3 id=&#34;proxy-environment-variable-values-that-exclude-authentication-information排除身份验证信息的代理环境变量值&#34;&gt;Proxy environment variable values that exclude authentication information(排除身份验证信息的代理环境变量值) &lt;a href=&#34;#proxy-environment-variable-values-that-exclude-authentication-information%e6%8e%92%e9%99%a4%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e4%bf%a1%e6%81%af%e7%9a%84%e4%bb%a3%e7%90%86%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果您的环境变量定义可以排除身份验证信息，则代理值采用以下形式:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://&amp;lt;proxy_name_or_IP_address&amp;gt;:&amp;lt;proxy_port&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;示例： &lt;code&gt;http://webproxy.mycompany.com:8080&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;proxy-environment-variable-values-that-include-authentication-information包含身份验证信息的代理环境变量值&#34;&gt;Proxy environment variable values that include authentication information(包含身份验证信息的代理环境变量值) &lt;a href=&#34;#proxy-environment-variable-values-that-include-authentication-information%e5%8c%85%e5%90%ab%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e4%bf%a1%e6%81%af%e7%9a%84%e4%bb%a3%e7%90%86%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：如果您在环境变量中使用密码，会存在安全风险。&lt;/p&gt;
&lt;p&gt;如果您的环境变量定义需要包含身份验证信息，则代理值采用以下形式:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;proxy_name_or_IP_address&amp;gt;:&amp;lt;proxy_port&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;示例： &lt;code&gt;http://DanaLee:My1337password@webproxy.mycompany.com:8080&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;proxy-environment-variable-value-for-unity-licensing-server适用于-unity-许可服务器的代理环境变量值&#34;&gt;Proxy environment variable value for Unity Licensing Server(适用于 Unity 许可服务器的代理环境变量值	) &lt;a href=&#34;#proxy-environment-variable-value-for-unity-licensing-server%e9%80%82%e7%94%a8%e4%ba%8e-unity-%e8%ae%b8%e5%8f%af%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9a%84%e4%bb%a3%e7%90%86%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e5%80%bc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果您的企业使用 Unity 许可服务器，请设置 &lt;code&gt;NO_PROXY&lt;/code&gt; 环境变量，并分配您的许可服务器的名称或 IP 地址。&lt;/p&gt;
&lt;h2 id=&#34;next-steps下一步操作&#34;&gt;Next steps(下一步操作) &lt;a href=&#34;#next-steps%e4%b8%8b%e4%b8%80%e6%ad%a5%e6%93%8d%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;不同的操作系统有多种设置环境变量的方法。但是，创建一个命令文件是一种在所有操作系统上都适用的方法，可以为每个会话设置环境变量。&lt;/p&gt;
&lt;p&gt;现在，您已经知道了在您的环境中使用哪些环境变量以及如何设置它们的值，请使用它们来创建一个命令文件。&lt;/p&gt;
&lt;h1 id=&#34;create-a-command-file-to-set-environment-variables-and-open-applications创建一个命令文件以设置环境变量和打开应用程序&#34;&gt;Create a command file to set environment variables and open applications(创建一个命令文件以设置环境变量和打开应用程序) &lt;a href=&#34;#create-a-command-file-to-set-environment-variables-and-open-applications%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e5%91%bd%e4%bb%a4%e6%96%87%e4%bb%b6%e4%bb%a5%e8%ae%be%e7%bd%ae%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e5%92%8c%e6%89%93%e5%bc%80%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当您从命令行定义环境变量时，这些值不会跨会话保留。如果是从同一个会话启动该流程，它可以使用那些环境变量，但是在结束该会话之后，您必须再次定义这些值。&lt;/p&gt;
&lt;p&gt;管理员可以在操作系统级别设置环境变量。如果没有这个选项，您可以创建一个命令文件来设置环境变量并从同一个会话启动 Unity 应用程序，例如 Hub。这个可执行文件成为了一个重复使用的方法，可以使用您的环境所需的环境变量来打开 Unity Hub。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：创建命令文件后，请确保始终使用该文件来启动 Unity Hub，而不是使用标准方法，例如 &lt;strong&gt;开始&lt;/strong&gt; 菜单（Windows）或 &lt;strong&gt;应用程序&lt;/strong&gt; 文件夹（macOS）。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前-1&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;决定您需要设置哪些环境变量，并仅包含所需的环境变量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果您的环境不支持自动代理配置，请设置 &lt;code&gt;HTTP_PROXY&lt;/code&gt; 和 &lt;code&gt;HTTPS_PROXY&lt;/code&gt; 环境变量以标识您的 Web 代理。有关详细信息，请参阅使用环境变量标识您的 Web 代理。&lt;/li&gt;
&lt;li&gt;如果您的环境使用 Unity 许可服务器进行浮动许可证，请设置 &lt;code&gt;NO_PROXY&lt;/code&gt; 环境变量。&lt;/li&gt;
&lt;li&gt;如果您的环境使用具有 SSL 检查的 Web 代理，请设置 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;/code&gt; 环境变量。有关详细信息，请参阅信任 Web 代理安全证书。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您设置 &lt;code&gt;HTTP_PROXY&lt;/code&gt; 和 &lt;code&gt;HTTPS_PROXY&lt;/code&gt; 环境变量，请确保使用正确的值来包含或排除身份验证信息。&lt;/p&gt;
&lt;h2 id=&#34;create-a-command-file-windows创建命令文件windows&#34;&gt;Create a command file (Windows)(创建命令文件（Windows）) &lt;a href=&#34;#create-a-command-file-windows%e5%88%9b%e5%bb%ba%e5%91%bd%e4%bb%a4%e6%96%87%e4%bb%b6windows&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些说明将创建一个名为 &lt;code&gt;launchUnityHub.cmd&lt;/code&gt; 的可执行文件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果 Unity Hub 正在运行，请关闭它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开一个文本编辑器，例如记事本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;输入以下文本，根据需要进行调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仅包含所需的环境变量，并正确设置它们的值。请参阅开始之前的部分。&lt;/li&gt;
&lt;li&gt;将 Hub 路径设置为与您的 Unity Hub 程序文件的位置匹配。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@echo off
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;REM *** NOTE: Add the next &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; lines only &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; you’re not using Automatic Proxy Configuration
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set HTTP_PROXY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;proxy_name_or_IP_address&amp;gt;:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set HTTPS_PROXY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;proxy_name_or_IP_address&amp;gt;:8080
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set NO_PROXY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;lt;licensing_server_name_or_IP_address&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;REM *** NOTE: Add the following line only &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; your web proxy uses SSL inspection
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set NODE_EXTRA_CA_CERTS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;lt;path_to_pem_file&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;start &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Unity Hub\Unity Hub.exe&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 如果路径中有空格，您必须在程序路径周围使用双引号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将文件保存到您可以找到的位置（例如 &lt;code&gt;桌面&lt;/code&gt;），确保文件具有 &lt;code&gt;.cmd&lt;/code&gt; 扩展名（例如 &lt;code&gt;launchUnityHub.cmd&lt;/code&gt;），而不是 &lt;code&gt;launchUnityHub.txt&lt;/code&gt; 或 &lt;code&gt;launchUnityHub.cmd.txt&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双击 &lt;code&gt;launchUnityHub.cmd&lt;/code&gt; 以使用所需的环境变量启动 Unity Hub。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Unity Hub会将这些环境变量传递给它生成的任何进程，例如 Unity 编辑器。&lt;/p&gt;
&lt;h2 id=&#34;create-a-command-file-macos-and-linux创建命令文件macos-和-linux&#34;&gt;Create a command file (macOS and Linux)(创建命令文件（macOS 和 Linux）) &lt;a href=&#34;#create-a-command-file-macos-and-linux%e5%88%9b%e5%bb%ba%e5%91%bd%e4%bb%a4%e6%96%87%e4%bb%b6macos-%e5%92%8c-linux&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些说明将创建一个名为 &lt;code&gt;launchUnityHub.command&lt;/code&gt; 的可执行文件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果 Unity Hub 正在运行，请关闭它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开一个终端窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令，根据需要进行调整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仅包含所需的环境变量，并正确设置它们的值。请参阅开始之前的部分。&lt;/li&gt;
&lt;li&gt;将 Hub 路径设置为与您的 Unity Hub 应用程序的位置匹配。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;# *** NOTE: Add the next 3 lines only if you’re not using Automatic Proxy Configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;export HTTP_PROXY=http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;proxy_name_or_IP_address&amp;gt;:8080
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;export HTTPS_PROXY=http://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@&amp;lt;proxy_name_or_IP_address&amp;gt;:8080
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;export NO_PROXY=&amp;lt;licensing_server_name_or_IP_address&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;# *** NOTE: Add the following line only if your web proxy uses SSL inspection
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;export NODE_EXTRA_CA_CERTS=&amp;lt;path_to_pem_file&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;nohup &amp;#34;/Applications/Unity Hub.app/Contents/MacOS/Unity Hub&amp;#34; &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;#39;&lt;/span&gt; &amp;gt; launchUnityHub.command
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;解释
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 如果路径中有空格，您必须在应用程序路径周围使用双引号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令以使 &lt;code&gt;launchUnityHub.command&lt;/code&gt; 可执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x launchUnityHub.command
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将 &lt;code&gt;launchUnityHub.command&lt;/code&gt; 文件移动到一个方便的位置（例如 &lt;code&gt;桌面&lt;/code&gt;），如果您愿意的话。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双击 &lt;code&gt;launchUnityHub.command&lt;/code&gt; 以使用所需的环境变量启动 Unity Hub。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Unity Hub会将这些环境变量传递给它生成的任何进程，例如 Unity 编辑器。&lt;/p&gt;
&lt;h1 id=&#34;define-exceptions-on-your-web-proxy在web代理上定义例外情况&#34;&gt;Define exceptions on your web proxy(在Web代理上定义例外情况) &lt;a href=&#34;#define-exceptions-on-your-web-proxy%e5%9c%a8web%e4%bb%a3%e7%90%86%e4%b8%8a%e5%ae%9a%e4%b9%89%e4%be%8b%e5%a4%96%e6%83%85%e5%86%b5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Web代理的一个用途是过滤和阻止某些网站。但是，在某些情况下，管理员需要允许某些网站或URL通过Web代理，在不需要身份验证的情况下访问。&lt;/p&gt;
&lt;p&gt;管理员可以在例外列表中定义这些例外情况，该列表标识了用户可以通过Web代理访问的批准或允许的网站。&lt;/p&gt;
&lt;p&gt;您的环境中的Unity用户需要访问多个URL，并且例外列表使他们能够在以下情况下访问这些资源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您的环境支持自动代理配置，但不支持基本身份验证。请参考Unity应用程序访问的终端点，以使Unity应用程序能够在不需要身份验证的情况下通过Web代理进行通信。&lt;/li&gt;
&lt;li&gt;您的Web代理使用SSL检查，而您无法使Unity应用程序信任Web代理证书。请参考Unity应用程序访问的终端点，以使Unity应用程序能够在不进行SSL检查的情况下通过Web代理进行通信。&lt;/li&gt;
&lt;li&gt;您的Web代理阻止下载可执行文件，或者在下载可执行文件之前需要用户确认。请参考下载可执行文件的终端点，以使Unity应用程序能够在无需用户确认的情况下下载可执行文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;定义您的例外列表，以便您可以在这些情况下绕过任何或所有限制。&lt;/p&gt;
&lt;p&gt;添加例外的过程因代理软件而异，但通常可以在Web代理配置设置或通过Web管理界面进行操作。请参阅您的Web代理软件的帮助文档获取详细信息。&lt;/p&gt;
&lt;h2 id=&#34;endpoints-that-unity-applications-accessunity应用程序访问的终端点&#34;&gt;Endpoints that Unity applications access(Unity应用程序访问的终端点) &lt;a href=&#34;#endpoints-that-unity-applications-accessunity%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e8%ae%bf%e9%97%ae%e7%9a%84%e7%bb%88%e7%ab%af%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;最简单的解决方法是在您的例外列表中添加以下资源的整个域名：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;unity.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unity3d.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;plasticscm.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;google.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;googleapis.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;microsoft.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aka.ms&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您希望选择性地控制用户可以访问的子域名，请将以下表格中的条目添加到您的例外列表中。&lt;strong&gt;注意&lt;/strong&gt;：除非另有说明，这些终端点的协议类型为&lt;code&gt;TCP&lt;/code&gt;，端口号为&lt;code&gt;80&lt;/code&gt;和&lt;code&gt;443&lt;/code&gt;。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;终端点或URL&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;使用该终端点的功能或服务&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;附加信息&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;live-platform-api.prd.ld.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于检索Hub内容的API，如Unity发行版、模板、学习内容等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;api.hub-proxy.unity3d.com core.hub-proxy.unity3d.com config.hub-proxy.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;各种管理数据的服务的代理。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;config.uca.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过远程配置使用的分析数据的选择加入状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;learn.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Hub链接到互联网上的Unity学习内容。仅在用户希望从Hub内部访问培训内容时才需要。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;aka.ms&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Visual Studio Tools for Unity的下载地址。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;analytics.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;api2.amplitude.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub的分析数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;id.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity ID portal&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;管理Unity ID、基于座位的订阅、组织等的门户。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;api.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Identity&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;身份验证和认证的API。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;accounts.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Web authentication&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;license.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;License&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;许可证操作的API，包括激活、更新和退还。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;activation.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Activation&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;许可证操作的API，包括激活。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;packages.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Registry&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于搜索包并检索包信息的主要注册服务终端点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;download.packages.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Registry&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;packages.unity.com的别名。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;packages-v2.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Registry&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Package Manager中Asset Store集成使用的终端点。packages.unity.com的别名。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;upm-cdn.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Files&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于下载公共可用Unity包的地理位置化内容传递网络。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;upm-cdn-china.unitychina.cn&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Files&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于从中国位置下载Unity包的内容传递网络。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;private.download.packages.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Files&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据仅具备许可权的包的请求提供的已签名URL。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;storage.googleapis.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Package Files&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据仅具备许可权的包的请求提供的已签名URL。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;assetstore.unity.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Asset Store&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Asset Store的核心URL。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;kharma.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Asset Store&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于Asset Store操作的终端点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;core.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Core Cloud services&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;developer.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Gaming Services&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于Unity游戏服务仪表板的终端点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;perf.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Performance&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于性能和崩溃报告的服务。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;perf-events.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Performance events&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;euwest4–00-cloud.plasticscm.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;PlasticSCM&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;适用于欧洲西部的Unity DevOps。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;useast4–00-cloud.plasticscm.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;PlasticSCM&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;适用于美国东部的Unity DevOps。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;asiaeast1–00-cloud.plasticscm.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;PlasticSCM&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;适用于东亚的Unity DevOps。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;asianortheast1–00-cloud.plasticscm.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;PlasticSCM&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;适用于东北亚的Unity DevOps。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;cdp.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Analytics&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于收集分析数据的Common Data Platform。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;prd-lender.cdp.internal.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Analytics&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于将数据中继给Unity进行内部分析。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;google-analytics.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Google Analytics&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;dashboard.unityads.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Ads Dashboard&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于广告和盈利的仪表板。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;重要&lt;/strong&gt;：继续查看下载可执行文件的终端点，并将该列表中的URL添加到您的列表中。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;endpoints-that-download-executable-files下载可执行文件的终端点&#34;&gt;Endpoints that download executable files(下载可执行文件的终端点) &lt;a href=&#34;#endpoints-that-download-executable-files%e4%b8%8b%e8%bd%bd%e5%8f%af%e6%89%a7%e8%a1%8c%e6%96%87%e4%bb%b6%e7%9a%84%e7%bb%88%e7%ab%af%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;即使您根据您的环境不需要根据之前的表格添加例外，如果满足以下任一条件，请将例外添加到您的Web代理中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;您的Web代理阻止下载可执行文件。&lt;/li&gt;
&lt;li&gt;您的Web代理在下载可执行文件之前需要用户确认。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果不添加这些例外，任何需要Unity应用程序下载可执行文件的操作都将失败。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;终端点或URL&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;下载的可执行文件&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;附加信息&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;public-cdn.cloud.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于存储配置（如自动更新）和二进制文件（如Hub安装程序）的内容传递网络。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;download.unity3d.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Editor installers&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在使用Unity Hub时下载。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;dl.google.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使Unity Hub能够下载Android模块。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;go.microsoft.com&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity Hub&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Microsoft提供的Visual Studio安装程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity&#39;s Package Manager(五)(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/23/2023-07-23-unity-document-6/</link>
      <pubDate>Sun, 23 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/23/2023-07-23-unity-document-6/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unitys-package-manager五&#34;&gt;Unity’s Package Manager(五) &lt;a href=&#34;#unitys-package-manager%e4%ba%94&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;creating-custom-packages创建自定义包&#34;&gt;Creating custom packages(创建自定义包) &lt;a href=&#34;#creating-custom-packages%e5%88%9b%e5%bb%ba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity Package Manager 是 Unity 的官方包管理系统。它具有以下功能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;允许 Unity 快速、轻松地分发新功能和更新现有功能。&lt;/li&gt;
&lt;li&gt;为用户提供了一个平台，用于发现和共享可重用的组件。&lt;/li&gt;
&lt;li&gt;推动 Unity 成为一个可扩展和开放的平台。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;您可以使用 Package Manager 来定义项目的依赖关系，解决包的依赖关系，下载包，添加包，以及在您的项目中集成内容。&lt;/p&gt;
&lt;p&gt;有关包是什么以及 Unity Package Manager 如何工作的一般信息，请参阅 Packages 文档。&lt;/p&gt;
&lt;h2 id=&#34;overview概览&#34;&gt;Overview(概览) &lt;a href=&#34;#overview%e6%a6%82%e8%a7%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包可以包含以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C# 脚本&lt;/li&gt;
&lt;li&gt;程序集&lt;/li&gt;
&lt;li&gt;本地插件&lt;/li&gt;
&lt;li&gt;模型、纹理、动画和音频剪辑等其他资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包管理器不支持在包中使用流式资源。请改用 Addressables 包。&lt;/p&gt;
&lt;p&gt;每个包还包含一个包清单文件，其中包含诸如包名称、版本、依赖关系列表和存储库 URL 等信息。&lt;/p&gt;
&lt;h2 id=&#34;procedure操作步骤&#34;&gt;Procedure(操作步骤) &lt;a href=&#34;#procedure%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;创建新包的方法如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用以下方法之一创建包的空壳：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置嵌入式包。&lt;/li&gt;
&lt;li&gt;设置本地包。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保您的文件夹结构布局符合 Unity 包的约定。例如，如果您有编辑器和运行时库，确保将它们存储在 &lt;code&gt;Editor&lt;/code&gt; 和 &lt;code&gt;Runtime&lt;/code&gt; 文件夹下。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果您的包包含代码，请确保您创建的包布局具有必要的程序集定义文件。有关创建和定义程序集定义文件的信息，请参阅程序集定义和包。有关更多信息，请参阅程序集定义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果在添加程序集定义文件后，&lt;strong&gt;控制台窗口&lt;/strong&gt;报告警告，请保存项目，关闭项目，然后重新打开。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加您的工具、库以及您的包所需的任何资源。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;向您的包添加测试。测试对于确保包在不同场景下按预期工作非常重要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将所有编辑器测试写入 &lt;code&gt;Tests/Editor&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;将所有播放模式测试写入 &lt;code&gt;Tests/Runtime&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果您的包包含示例，请将它们添加到适当的示例子文件夹中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包可以仅包含示例，但您也可以使用相同的布局和 JSON 结构将示例包含在工具或模板包的一部分中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;每次发布新版本时，您可以更新 &lt;code&gt;CHANGELOG.md&lt;/code&gt; 文件。每个新功能或错误修复都应在此文件中有记录。有关所选更改日志格式的详细信息，请参阅 Keep a Changelog 文档。&lt;/p&gt;
&lt;p&gt;对于您不共享的包，此步骤是可选的，但对于共享的包强烈推荐，以使用户了解哪个版本最适合他们的需求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以通过在包的 &lt;code&gt;package.json&lt;/code&gt; 清单文件中设置 changelogUrl 属性，为外部网页提供链接，其中托管了此包的更改日志。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;您可以在 &lt;code&gt;LICENSE.md&lt;/code&gt; 和 &lt;code&gt;THIRD PARTY NOTICES.md&lt;/code&gt; 文件中包含许可证和第三方通知。&lt;/p&gt;
&lt;p&gt;对于您不共享的包，此步骤是可选的，但对于共享的包强烈推荐，以防止用户滥用您的包或违反第三方许可证。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以通过在包的 &lt;code&gt;package.json&lt;/code&gt; 清单文件中设置 licensesUrl 属性，为外部网页提供链接，其中托管了此包的许可证和第三方通知。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编写您的包的文档。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以通过在包的 &lt;code&gt;package.json&lt;/code&gt; 清单文件中设置 documentationUrl 属性，为外部网页提供链接，其中托管了此包的文档。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;共享您的包。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;creating-a-new-embedded-package创建新的嵌入式包&#34;&gt;Creating a new embedded package(创建新的嵌入式包) &lt;a href=&#34;#creating-a-new-embedded-package%e5%88%9b%e5%bb%ba%e6%96%b0%e7%9a%84%e5%b5%8c%e5%85%a5%e5%bc%8f%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照以下说明在项目文件夹中创建自定义包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：这些说明是创建自定义包的更大过程的一部分。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 Unity Hub，并在计算机上创建一个空项目。&lt;/p&gt;
&lt;p&gt;您也可以使用计算机上的现有项目，在您的项目下嵌入包，或者从本地文件夹安装包。然而，从一个新项目开始可以减少包内容出现错误的可能性。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用计算机的文件管理器（例如 Windows 文件资源管理器或 macOS Finder），导航到您的项目文件夹，并找到 &lt;code&gt;Packages&lt;/code&gt; 子文件夹。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;Packages&lt;/code&gt; 文件夹中创建一个新的子文件夹，使用与包名称匹配且符合命名规范的名称。例如，如果您的包名称是 &lt;code&gt;com.example.mypackage&lt;/code&gt;，请创建一个名为 &lt;code&gt;com.example.mypackage&lt;/code&gt; 的子文件夹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果您的包包含资源，这一点尤其重要，因为 AssetDatabase 会寻找与 &lt;code&gt;Packages/&amp;lt;your-package-name&amp;gt;/Assets&lt;/code&gt; 匹配的资源路径，而不考虑实际文件夹名字。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开您喜欢的文本编辑器，在包文件夹的根目录中创建一个名为 &lt;code&gt;package.json&lt;/code&gt; 的 JSON 文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;package.json&lt;/code&gt; 文件中填写所有必填和推荐的字段。您可以使用包清单示例作为参考。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当您重新打开 Unity 时，新的包将出现在 Package Manager 窗口和&lt;strong&gt;项目窗口&lt;/strong&gt;中，您可以查看和修改包内容。如果在项目窗口中选择 &lt;code&gt;package.json&lt;/code&gt; 文件，您还可以在&lt;strong&gt;检查器&lt;/strong&gt;窗口中直接修改其 JSON 值。&lt;/p&gt;
&lt;p&gt;返回主要过程以完成包的创建。&lt;/p&gt;
&lt;h2 id=&#34;creating-a-new-local-package创建新的本地包&#34;&gt;Creating a new local package(创建新的本地包) &lt;a href=&#34;#creating-a-new-local-package%e5%88%9b%e5%bb%ba%e6%96%b0%e7%9a%84%e6%9c%ac%e5%9c%b0%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照以下说明在项目文件夹外部创建自定义包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：这些说明是创建自定义包的更大过程的一部分。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用计算机的文件管理器（例如 Windows 文件资源管理器或 macOS Finder），为您的包创建一个文件夹。&lt;/p&gt;
&lt;p&gt;如果您已经创建了一些包内容，您也可以使用现有位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开您喜欢的文本编辑器，在包文件夹的根目录中创建一个名为 &lt;code&gt;package.json&lt;/code&gt; 的 JSON 文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;package.json&lt;/code&gt; 文件中填写所有必填和推荐的字段，并确保 &lt;code&gt;name&lt;/code&gt; 属性符合命名规范。您可以使用包清单示例作为参考。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Unity 中，创建一个新项目或打开现有项目。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开 Package Manager 窗口，并按照安装本地包的说明操作，使用刚创建的 &lt;code&gt;package.json&lt;/code&gt; 文件。这一步骤对于确保创建所需的&lt;code&gt;.meta&lt;/code&gt;文件至关重要。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;新的包将出现在 Package Manager 窗口和项目窗口中，您可以在其中查看和修改包内容。如果在项目窗口中选择 &lt;code&gt;package.json&lt;/code&gt; 文件，您还可以在检查器窗口中直接修改其 JSON 值。&lt;/p&gt;
&lt;h1 id=&#34;naming-your-package给您的包命名&#34;&gt;Naming your package(给您的包命名) &lt;a href=&#34;#naming-your-package%e7%bb%99%e6%82%a8%e7%9a%84%e5%8c%85%e5%91%bd%e5%90%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包有两个名称：您在注册包时使用的官方名称和用户在编辑器中看到的用户界面显示名称。&lt;/p&gt;
&lt;p&gt;显示名称应该简洁，但应提供一些关于包含内容的指示。否则，Unity Package Manager 对显示名称没有限制。&lt;/p&gt;
&lt;p&gt;官方名称必须符合 Unity Package Manager 的命名约定，使用反向域名表示法。名称必须满足以下条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;以 &lt;strong&gt;&lt;!-- raw HTML omitted --&gt;.&lt;!-- raw HTML omitted --&gt;&lt;/strong&gt; 开头（例如 &lt;code&gt;com.example&lt;/code&gt; 或 &lt;code&gt;net.example&lt;/code&gt;），即使您的公司或网站名称以数字开头。&lt;/li&gt;
&lt;li&gt;如果您希望在编辑器中可见，则不超过 50 个字符。如果包名称无需在编辑器中显示，Unity Package Manager 对字符数限制为 214 个或更少。&lt;/li&gt;
&lt;li&gt;仅包含小写字母、数字、连字符(-)、下划线(_)和句点(.)。&lt;/li&gt;
&lt;li&gt;要指示嵌套的命名空间，请在命名空间后面加上额外的句点。例如，“&lt;strong&gt;com.unity.2d.animation&lt;/strong&gt;” 和 “&lt;strong&gt;com.unity.2d.ik&lt;/strong&gt;”。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如，“&lt;strong&gt;com.unity.2d.animation&lt;/strong&gt;” 和 “&lt;strong&gt;com.unity.2d.ik&lt;/strong&gt;” 是两个 Unity 2D 包的名称，但是位于 &lt;a href=&#34;https://example.net/&#34;&gt;https://example.net&lt;/a&gt; 的自定义包开发者可以创建一个名为 “&lt;strong&gt;net.example.physics&lt;/strong&gt;” 的包。在您的包名称中使用您自己的公司名称。请勿在您自己的包名称中使用 “unity” 前缀。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：这些命名限制仅适用于包名称本身，不需要与您代码中的命名空间匹配。例如，您可以在名为 &lt;strong&gt;net.example.3d.base&lt;/strong&gt; 的包中使用 &lt;code&gt;Project3dBase&lt;/code&gt; 作为命名空间。&lt;/p&gt;
&lt;h1 id=&#34;package-layout包布局&#34;&gt;Package layout(包布局) &lt;a href=&#34;#package-layout%e5%8c%85%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;这是自定义包推荐使用的包布局：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;package-root&amp;gt;
  ├── package.json
  ├── README.md
  ├── CHANGELOG.md
  ├── LICENSE.md
  ├── Third Party Notices.md
  ├── Editor
  │   ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.asmdef
  │   └── EditorExample.cs
  ├── Runtime
  │   ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.asmdef
  │   └── RuntimeExample.cs
  ├── Tests
  │   ├── Editor
  │   │   ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.Tests.asmdef
  │   │   └── EditorExampleTest.cs
  │   └── Runtime
  │        ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Tests.asmdef
  │        └── RuntimeExampleTest.cs
  ├── Samples~
  │        ├── SampleFolder1
  │        ├── SampleFolder2
  │        └── ...
  └── Documentation~
       └── &amp;lt;package-name&amp;gt;.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;许多官方 Unity 包也采用了这种结构。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Location&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包清单文件，定义了包的依赖关系和其他元数据。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;开发者包文档。通常是为了帮助想要更改包或在包的主分支上推送新更改的开发者而提供的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以逆时间顺序描述包的更改。建议使用标准格式，例如 Keep a Changelog。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;LICENSE.md&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包含包的许可证文本。通常，包管理器会从所选的 SPDX 列表网站上复制此文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Third Party Notices.md&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包含满足法律要求所需的信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Editor/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;特定于编辑器平台的资源文件夹。与 Assets 下的 Editor 文件夹不同，这只是一种约定，不影响资源导入管道。请参考程序集定义和包，以在此文件夹中正确配置特定于编辑器的程序集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Runtime/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;特定于运行时平台的资源文件夹。这只是一种约定，不影响资源导入管道。请参考程序集定义和包，以在此文件夹中正确配置运行时程序集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Tests/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;存储包中包含的任何测试的文件夹。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Tests/Editor/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;特定于编辑器平台的测试文件夹。请参考程序集定义和包，以在此文件夹中正确配置特定于编辑器的测试程序集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Tests/Runtime/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;特定于运行时平台的测试。请参考程序集定义和包，以在此文件夹中正确配置运行时测试程序集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Samples~/&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;存储包中包含的任何示例的文件夹。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Documentation~&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;存储包中包含的任何文档的文件夹。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Unity会忽略以&lt;code&gt;~&lt;/code&gt;字符结尾的文件夹名称的内容，并且不会通过&lt;code&gt;.meta&lt;/code&gt;文件追踪它们。但是，您需要为&lt;code&gt;Editor&lt;/code&gt;、&lt;code&gt;Runtime&lt;/code&gt;和&lt;code&gt;Tests&lt;/code&gt;文件夹及其内容包括&lt;code&gt;.meta&lt;/code&gt;文件，以便它们正常工作。有关&lt;code&gt;.meta&lt;/code&gt;文件以及Unity如何使用它们进行跟踪的更多信息，请参考资源工作流程。&lt;/p&gt;
&lt;h1 id=&#34;adding-tests-to-a-package为包添加测试&#34;&gt;Adding tests to a package(为包添加测试) &lt;a href=&#34;#adding-tests-to-a-package%e4%b8%ba%e5%8c%85%e6%b7%bb%e5%8a%a0%e6%b5%8b%e8%af%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;与任何类型的开发一样，为您的包添加测试是一个良好的实践。要在包中设置测试，您需要完成以下三个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建 C# 测试文件并将其放在 Tests 文件夹下。&lt;/li&gt;
&lt;li&gt;为您的测试创建 asmdef 文件。&lt;/li&gt;
&lt;li&gt;启用包的测试。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;location-of-test-files测试文件的位置&#34;&gt;Location of test files(测试文件的位置) &lt;a href=&#34;#location-of-test-files%e6%b5%8b%e8%af%95%e6%96%87%e4%bb%b6%e7%9a%84%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以将测试文件添加到包的 Tests 文件夹中的 Editor 和 Runtime 子文件夹中。例如，一个包含测试的简单包可能如下所示：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;package-root&amp;gt;
  ├── package.json
  ├── Editor
  │     ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.asmdef
  │     └── EditorExample.cs
  ├── Runtime
  │     ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.asmdef
  │     └── RuntimeExample.cs
  └── Tests
        ├── Editor
        │    ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.Tests.asmdef
        │    └── EditorExampleTest.cs
        └── Runtime
             ├── &amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Tests.asmdef
             └── RuntimeExampleTest.cs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;每个子文件夹都必须包含一个&lt;code&gt;.asmdef&lt;/code&gt;文件，该文件提供对编辑器和运行时程序集的引用。程序集定义文件还提供对测试程序集文件的引用。有关更多信息，请参阅用于测试的程序集定义文件。&lt;/p&gt;
&lt;h2 id=&#34;assembly-definition-files-for-tests用于测试的程序集定义文件&#34;&gt;Assembly definition files for tests(用于测试的程序集定义文件) &lt;a href=&#34;#assembly-definition-files-for-tests%e7%94%a8%e4%ba%8e%e6%b5%8b%e8%af%95%e7%9a%84%e7%a8%8b%e5%ba%8f%e9%9b%86%e5%ae%9a%e4%b9%89%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用测试框架包创建或编辑您的程序集定义文件。有关更多信息，请参阅创建测试程序集。&lt;/p&gt;
&lt;p&gt;虽然您可以选择直接编辑程序集定义文件，但您需要确保添加以下引用：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Attribute&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;没有文件扩展名的程序集名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;references&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对编辑器和运行时程序集的引用。程序集定义文件根据测试类型需要不同的引用：- 对于编辑器测试，添加对包的编辑器和运行时程序集的引用。- 对于运行时测试，只添加对包的运行时程序集的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;optionalUnityReferences&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此 Unity 引用列表必须包含&lt;code&gt;&amp;quot;TestAssemblies&amp;quot;&lt;/code&gt;，以将程序集标记为测试程序集。这将在程序集定义中添加对&lt;code&gt;nunit.framework.dll&lt;/code&gt;和&lt;code&gt;UnityEngine.TestRunner.dll&lt;/code&gt;库的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;includePlatforms&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对于编辑器测试，此平台列表必须包含&lt;code&gt;&amp;quot;Editor&amp;quot;&lt;/code&gt;平台。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您还可以在&lt;strong&gt;检查器&lt;/strong&gt;中编辑程序集定义文件。有关更多信息，请参阅程序集定义。&lt;/p&gt;
&lt;h3 id=&#34;editor-file-example编辑器文件示例&#34;&gt;Editor file example(编辑器文件示例) &lt;a href=&#34;#editor-file-example%e7%bc%96%e8%be%91%e5%99%a8%e6%96%87%e4%bb%b6%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;编辑器测试的&lt;code&gt;.asmdef&lt;/code&gt;文件如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyCompany.MyPackage.Editor.Tests&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;references&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyPackage.Editor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyPackage&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;optionalUnityReferences&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TestAssemblies&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;includePlatforms&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Editor&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;excludePlatforms&amp;#34;&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;runtime-file-example运行时文件示例&#34;&gt;Runtime file example(运行时文件示例) &lt;a href=&#34;#runtime-file-example%e8%bf%90%e8%a1%8c%e6%97%b6%e6%96%87%e4%bb%b6%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;运行时测试的&lt;code&gt;.asmdef&lt;/code&gt;文件如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyCompany.MyPackage.Tests&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;references&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyPackage&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;optionalUnityReferences&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TestAssemblies&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;includePlatforms&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;excludePlatforms&amp;#34;&lt;/span&gt;: []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;enabling-tests-for-a-package启用包的测试&#34;&gt;Enabling tests for a package(启用包的测试) &lt;a href=&#34;#enabling-tests-for-a-package%e5%90%af%e7%94%a8%e5%8c%85%e7%9a%84%e6%b5%8b%e8%af%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对于&lt;strong&gt;嵌入式包&lt;/strong&gt;，您无需明确启用测试，因为嵌入式包正在开发中。&lt;/p&gt;
&lt;p&gt;然而，对于其他类型的依赖项，您需要在**项目清单(Project manifest)*&lt;em&gt;中添加&lt;code&gt;testables&lt;/code&gt;属性，并添加要运行测试的包的名称。这包括项目的直接和*&lt;em&gt;间接依赖项&lt;/em&gt;&lt;/em&gt;。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.some-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.other-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.yet-another-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;testables&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.some-package&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.other-package&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个示例在Unity的测试框架包中为&lt;strong&gt;com.unity.&lt;em&gt;some-package&lt;/em&gt;&lt;/strong&gt;和&lt;strong&gt;com.unity.&lt;em&gt;other-package&lt;/em&gt;&lt;/strong&gt;添加了测试。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：您可能需要重新导入包，因为测试框架不会立即对&lt;code&gt;testables&lt;/code&gt;属性的更改进行查看。&lt;/p&gt;
&lt;h1 id=&#34;creating-samples-for-packages创建包的示例&#34;&gt;Creating samples for packages(创建包的示例) &lt;a href=&#34;#creating-samples-for-packages%e5%88%9b%e5%bb%ba%e5%8c%85%e7%9a%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;从Unity编辑器版本2019.1开始，您可以为包添加示例。示例可以是一段示例代码、一些&lt;strong&gt;着色器&lt;/strong&gt;(shaders)和纹理(textures)、一些动画或其他您通常可以在项目的&lt;code&gt;Assets&lt;/code&gt;文件夹下找到的文件。&lt;/p&gt;
&lt;p&gt;当您打开Package Manager窗口并选择包含示例的包时，包的详细信息面板中会出现一个&lt;strong&gt;Import&lt;/strong&gt;按钮，用于每个示例。当您选择&lt;strong&gt;Import&lt;/strong&gt;时，Package Manager会将该示例的整个子文件夹结构复制到项目的&lt;code&gt;Assets&lt;/code&gt;文件夹下。&lt;/p&gt;
&lt;p&gt;要将示例添加到您的包中，请按照以下步骤进行操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;将资产文件或示例C#代码文件放在&lt;code&gt;Samples~&lt;/code&gt;文件夹下。您可以在一个包中拥有多个示例；&lt;code&gt;Samples~&lt;/code&gt;文件夹的每个子文件夹对应一个示例。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：波浪字符(&lt;code&gt;~&lt;/code&gt;)告诉Unity忽略&lt;code&gt;Samples~&lt;/code&gt;文件夹的内容。此类文件夹不会被&lt;code&gt;meta&lt;/code&gt;文件跟踪。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;code&gt;package.json&lt;/code&gt;清单文件的&lt;code&gt;samples&lt;/code&gt;数组下为每个示例添加一个JSON对象。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;location-of-sample-files示例文件的位置&#34;&gt;Location of sample files(示例文件的位置) &lt;a href=&#34;#location-of-sample-files%e7%a4%ba%e4%be%8b%e6%96%87%e4%bb%b6%e7%9a%84%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以将示例资产添加到您的包的&lt;code&gt;Samples~&lt;/code&gt;文件夹的子文件夹中。例如，包含着色器示例的包可能如下所示：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MyPackage
  ├── package.json
  └── Samples~
        ├── SamplesHDRP
        │    ├── Textures
        │    |     ├── MossyRock.bmp
        │    |     └── SandyRock.bmp
        │    └── Shader
        │          ├── Lit Texture Blend HDRP.ShaderGraph
        │          └── Lit Vertex Color HDRP.ShaderGraph
        └── SamplesStandard
        │    ├── Textures
        │    |     ├── MossyRock.bmp
        │    |     └── SandyRock.bmp
        │    └── Shader
        │          ├── StandardTextureBlend.shader
        │          └── StandardVertexColor.shader
        └── SamplesUniversalRP
             ├── Textures
             |     ├── MossyRock.bmp
             |     └── SandyRock.bmp
             └── Shader
                   ├── Lit Texture Blend URP.ShaderGraph
                   └── Lit Vertex Color URP.ShaderGraph
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;include-your-samples-in-the-manifest在清单中包含示例&#34;&gt;Include your samples in the manifest(在清单中包含示例) &lt;a href=&#34;#include-your-samples-in-the-manifest%e5%9c%a8%e6%b8%85%e5%8d%95%e4%b8%ad%e5%8c%85%e5%90%ab%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在&lt;code&gt;package.json&lt;/code&gt;文件中添加一个名为&lt;code&gt;samples&lt;/code&gt;的JSON数组。对于每个示例，添加一个包含至少&lt;code&gt;displayName&lt;/code&gt;和示例文件夹&lt;code&gt;path&lt;/code&gt;的JSON对象：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;displayName&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;示例在Package Manager窗口中显示的名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;示例所展示或包含的简要描述。这仅用于&lt;strong&gt;包清单&lt;/strong&gt;。描述不会出现在界面中，甚至不会作为提示出现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;path&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从&lt;code&gt;Samples~&lt;/code&gt;文件夹到示例根文件夹的路径。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;例如，按照示例文件位置的示例结构，&lt;code&gt;samples&lt;/code&gt;部分看起来类似于以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;samples&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HDRP Shaders&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Contains sample shaders for the High Definition render pipeline&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Samples~/SamplesHDRP&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;URP Shaders&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Contains sample shaders for the Universal render pipeline&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Samples~/SamplesUniversalRP&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Standard RP Shaders&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Contains sample shaders for the Standard render pipeline&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Samples~/SamplesStandard&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;package-manifest包清单&#34;&gt;Package manifest(包清单) &lt;a href=&#34;#package-manifest%e5%8c%85%e6%b8%85%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity使用一个名为&lt;code&gt;package.json&lt;/code&gt;的&lt;strong&gt;包清单&lt;/strong&gt;文件来管理有关特定版本特定包的信息。包清单始终位于包的根目录，并包含关于包的重要信息，例如注册名称和版本号。&lt;/p&gt;
&lt;p&gt;包清单还定义了向用户传达的有用信息，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在用户界面中显示的友好名称。&lt;/li&gt;
&lt;li&gt;包的简要描述。&lt;/li&gt;
&lt;li&gt;与该包兼容的Unity编辑器的最早版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;包清单使用JSON（JavaScript对象表示法）语法来描述包的内容。该文件的格式类似于npm的&lt;code&gt;package.json&lt;/code&gt;格式，但对某些属性的语义使用不同。请参考示例来查看示例包清单文件。&lt;/p&gt;
&lt;p&gt;Package Manager读取此清单以查找包的内容，如何解压缩其内容以及在Package Manager窗口中显示哪些信息。清单以一系列必需、推荐和可选属性存储此信息。&lt;/p&gt;
&lt;h2 id=&#34;required-properties必需属性&#34;&gt;Required properties(必需属性) &lt;a href=&#34;#required-properties%e5%bf%85%e9%9c%80%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果缺少这些属性，注册表将在发布包时拒绝该包，或者Package Manager无法获取或加载该包。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JSON Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;符合Unity Package Manager命名约定的唯一标识符，其使用反转的域名表示法。有关命名约定的更多信息，请参阅命名您的包。 &lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;name&lt;/code&gt;标识符与在&lt;strong&gt;Package Manager&lt;/strong&gt;窗口的列表面板中显示的友好显示名称不同。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包版本号，使用格式 &lt;code&gt;&amp;quot;major.minor.patch&amp;quot;&lt;/code&gt;。例如，&lt;code&gt;&amp;quot;3.2.1&amp;quot;&lt;/code&gt;表示这是第3个主要版本、第2个次要版本和第1个修补程序。此值必须符合语义化版本控制。有关详细信息，请参阅版本控制。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;recommended-properties推荐属性&#34;&gt;Recommended properties(推荐属性) &lt;a href=&#34;#recommended-properties%e6%8e%a8%e8%8d%90%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;即使缺少或具有无效值，Package Manager也可以在项目中安装包。&lt;/p&gt;
&lt;p&gt;然而，推荐的最佳实践是为这些属性赋值，以确保您的包能够被发现，并为用户提供更好的体验。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JSON Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;description&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包的简要描述。这是出现在&lt;strong&gt;Package Manager&lt;/strong&gt;窗口的详细信息面板中的文本。该字段支持UTF-8字符代码。这意味着您可以使用特殊的格式化字符代码，例如换行符(&lt;code&gt;\n&lt;/code&gt;)和项目符号(&lt;code&gt;\u25AA&lt;/code&gt;)。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;displayName&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在Unity编辑器中显示的用户友好名称（例如，在&lt;strong&gt;Project&lt;/strong&gt;窗口、&lt;strong&gt;Package Manager&lt;/strong&gt;窗口等中）。&lt;code&gt;displayName&lt;/code&gt;值的示例有&lt;strong&gt;Unity Timeline&lt;/strong&gt;、&lt;strong&gt;ProBuilder&lt;/strong&gt;和&lt;strong&gt;In App Purchasing&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;unity&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指示该包兼容的最低Unity版本。如果省略，Package Manager会认为该包与所有Unity版本兼容。期望的格式为&lt;code&gt;&amp;quot;major.minor&amp;quot;&lt;/code&gt;（例如，&lt;code&gt;&amp;quot;2018.3&amp;quot;&lt;/code&gt;）。要指定到特定的修补程序版本，还需要包括&lt;code&gt;unityRelease&lt;/code&gt;属性，参见可选属性部分。&lt;strong&gt;注意&lt;/strong&gt;：与Unity不兼容的包将不会出现在Package Manager窗口中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;optional-properties可选属性&#34;&gt;Optional properties(可选属性) &lt;a href=&#34;#optional-properties%e5%8f%af%e9%80%89%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这些属性是可选的，这意味着您可以省略它们。但是，如果存在这些属性，它们必须具有有效的值。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JSON Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;author&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Object or string&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包的作者。此属性仅支持一个作者。该属性有一个必填字段&lt;strong&gt;name&lt;/strong&gt;和两个可选字段&lt;strong&gt;email&lt;/strong&gt;和&lt;strong&gt;url&lt;/strong&gt;。您可以将这些字段指定为JSON对象，也可以将其合并为一个字符串，其键为&lt;strong&gt;author&lt;/strong&gt;。对象示例： &lt;code&gt;{&lt;/code&gt; &lt;code&gt;&amp;quot;name&amp;quot; : &amp;quot;约翰·多伊&amp;quot;,&lt;/code&gt; &lt;code&gt;&amp;quot;email&amp;quot; : &amp;quot;john.doe@example.com&amp;quot;,&lt;/code&gt; &lt;code&gt;&amp;quot;url&amp;quot; : &amp;quot;http://john.doe.example.com/&amp;quot;&lt;/code&gt; &lt;code&gt;}&lt;/code&gt; 字符串示例：&lt;code&gt;&amp;quot;约翰·多伊 &amp;lt;john.doe@example.com&amp;gt; (http://john.doe.example.com/)&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;changelogUrl&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定该包的changelog的自定义位置，作为URL。例如：&lt;code&gt;&amp;quot;changelogUrl&amp;quot;: &amp;quot;https://example.com/changelog.html&amp;quot;&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：当Package Manager无法访问URL位置（例如，如果存在网络问题）时，执行以下操作： - 如果已安装该包，则Package Manager打开一个文件浏览器，显示包缓存中的&lt;code&gt;CHANGELOG.md&lt;/code&gt;文件。- 如果未安装该包，则Package Manager显示警告，表示离线changelog不可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Object&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包依赖关系的映射。键是包名称，值是特定版本。它们标识该包依赖的其他包。&lt;strong&gt;注意&lt;/strong&gt;：Package Manager不支持范围语法，仅支持&lt;strong&gt;Semantic Versioning&lt;/strong&gt;的版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;documentationUrl&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定该包文档的自定义位置，作为URL。例如：&lt;code&gt;&amp;quot;documentationUrl&amp;quot;: &amp;quot;https://example.com/&amp;quot;&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：当Package Manager无法访问URL位置（例如，如果存在网络问题）时，执行以下操作： - 如果已安装该包，则Package Manager打开一个文件浏览器，显示包缓存中的&lt;code&gt;Documentation~&lt;/code&gt;文件夹。- 如果未安装该包，则Package Manager显示警告，表示离线文档不可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;hideInEditor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Boolean&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;默认情况下，&lt;strong&gt;Project&lt;/strong&gt;窗口会隐藏包的资源并在在&lt;strong&gt;Inspector&lt;/strong&gt;窗口中使用对象选择器时省略它们的结果。将此属性设置为&lt;code&gt;&amp;quot;false&amp;quot;&lt;/code&gt;，确保该包的资源始终可见。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;keywords&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包管理器搜索API使用的关键字数组。这有助于用户找到相关的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;license&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用SPDX标识符格式或类似于“参见LICENSE.md文件”的字符串的OSS许可标识符。&lt;strong&gt;注意&lt;/strong&gt;：如果在您的包清单中省略了此属性，则您的包必须包含一个&lt;code&gt;LICENSE.md&lt;/code&gt;文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;licensesUrl&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定该包的许可信息的自定义位置，作为URL。例如：&lt;code&gt;&amp;quot;licensesUrl&amp;quot;: &amp;quot;https://example.com/licensing.html&amp;quot;&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：如果Package Manager无法访问URL位置（例如，如果存在网络问题），执行以下操作： - 如果已安装该包，则打开一个文件浏览器，显示包缓存中的&lt;code&gt;LICENSE.md&lt;/code&gt;文件。- 如果未安装该包，则Package Manager显示警告，表示离线许可信息不可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;samples&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Objects&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包中包含的示例列表。每个示例都具有显示名称、描述和从&lt;code&gt;Samples~&lt;/code&gt;文件夹开始到示例文件夹的路径：&lt;code&gt;{&lt;/code&gt; &lt;code&gt;&amp;quot;displayName&amp;quot;: &amp;quot;&amp;lt;在界面中显示的名称&amp;gt;&amp;quot;,&lt;/code&gt; &lt;code&gt;&amp;quot;description&amp;quot;: &amp;quot;&amp;lt;简要描述&amp;gt;&amp;quot;,&lt;/code&gt; &lt;code&gt;&amp;quot;path&amp;quot;: &amp;quot;Samples~/&amp;lt;示例子文件夹&amp;gt;&amp;quot;&lt;/code&gt; &lt;code&gt;}&lt;/code&gt; 有关详细信息，请参阅创建包的示例。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;保留供内部使用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;unityRelease&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity版本的一部分，指示包兼容的特定版本。在更新的包需要在Unity的alpha/beta开发周期内进行更改时，可以使用此属性。如果包需要新引入的API，或者使用现有的API在没有API更新规则的情况下以不向后兼容的方式进行更改，可能会出现这种情况。 期望的格式为&lt;code&gt;&amp;quot;&amp;lt;update&amp;gt;&amp;lt;release&amp;gt;&amp;quot;&lt;/code&gt;（例如，&lt;code&gt;&amp;quot;0b4&amp;quot;&lt;/code&gt;）。 &lt;strong&gt;注意&lt;/strong&gt;：如果省略了建议的unity属性，则此属性无效。与Unity不兼容的包将不会出现在Package Manager窗口中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;package-manifest-example包清单示例&#34;&gt;Package manifest example(包清单示例) &lt;a href=&#34;#package-manifest-example%e5%8c%85%e6%b8%85%e5%8d%95%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.[company-name].[package-name]&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.2.3&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;displayName&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Package Example&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;This is an example package&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;unity&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2019.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;unityRelease&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0b5&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;documentationUrl&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;changelogUrl&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/changelog.html&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;licensesUrl&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/licensing.html&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.[company-name].some-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.[company-name].other-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;keyword1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;keyword2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;keyword3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;author&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Unity&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unity@example.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.unity3d.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;versioning版本控制&#34;&gt;Versioning(版本控制) &lt;a href=&#34;#versioning%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包必须遵循&lt;strong&gt;语义化版本控制&lt;/strong&gt;（Semantic Versioning，SemVer）。语义化版本控制是一种策略，允许包作者以自动化工具可用的格式提供关于给定版本与上一个版本相比所包含的更改类型的信息。&lt;/p&gt;
&lt;p&gt;语义化版本控制将版本表示为&lt;strong&gt;主版本.次版本.修订版本&lt;/strong&gt;，其中主版本引入一个或多个重大更改，次版本引入一个或多个向后兼容的API更改，修订版本只引入不包含任何API更改的错误修复。&lt;/p&gt;
&lt;p&gt;当开始开发一个包时，将版本号设置为&lt;code&gt;0.1.0&lt;/code&gt;。主版本号&lt;code&gt;0&lt;/code&gt;保留用于处于初始开发阶段的包。在初始开发阶段，包的API经常发生变化，常常是一种破坏性的方式，因此保持主版本号为&lt;code&gt;0&lt;/code&gt;，直到您认为您的包足够稳定并准备好用于生产为止。&lt;/p&gt;
&lt;p&gt;包正式准备好用于生产后，将主版本增加到&lt;code&gt;1&lt;/code&gt;，并遵循以下指南进行后续更改：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Increment this value:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Under these conditions:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;主版本（MAJOR）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;至少有一项重大更改，且两个版本之间的包不能相互替代。破坏性更改包括： • 以可能引发编译或运行时错误的方式更改API表面（公开的API部分）或特性。 • 删除非API特性，包括删除资源或更改资源的GUID。 • 删除或重命名程序集和资源（因为编译器可能无法找到它们）。 &lt;strong&gt;注意&lt;/strong&gt;：当增加主版本时，始终将修订版本（PATCH）和次版本（MINOR）的值重置为&lt;code&gt;0&lt;/code&gt;。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;版本1.2.3和2.0.0不兼容，不能互换使用而不产生风险。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;次版本（同一主版本值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;最高的次版本以向后兼容的方式引入功能。向后兼容（或非破坏性）的API更改包括： • 在不引发编译或运行时错误的情况下更改API表面或特性。 • 添加非API特性。 • 添加程序集和资源（因为新项目没有现有的引用）。 &lt;strong&gt;注意&lt;/strong&gt;：当增加次版本时，始终将修订版本重置为&lt;code&gt;0&lt;/code&gt;。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以使用版本1.3.0来满足对1.2.0的依赖，因为1.3.0是向后兼容的。您不能使用1.2.0来满足对1.3.0的依赖。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;修订版本（同一主版本.次版本值）&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;最高的修订版本以向后兼容的方式引入错误修复，而不更改API。如果满足以下条件，则API不会更改： • API表面相同且特性保持不变。 • 更改不会影响公共API。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;版本1.3.0和1.3.1应该可以互换，因为它们具有相同的API，尽管1.3.1中包含了1.3.0中不存在的错误修复。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;遵循这些版本控制实践，可以使Package Manager自动解决冲突（如果可能）或升级到更新的向后兼容版本。&lt;/p&gt;
&lt;p&gt;以下节描述了几个情景，以帮助您确定这些规则如何影响各种包元素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通用资源（例如音频、纹理和模型）。&lt;/li&gt;
&lt;li&gt;程序集定义（&lt;em&gt;.asmdef&lt;/em&gt;文件）和预编译程序集（托管的*.dll*文件）。&lt;/li&gt;
&lt;li&gt;包清单文件（&lt;em&gt;package.json&lt;/em&gt;）。&lt;/li&gt;
&lt;li&gt;废弃的API。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除了这些情景之外，还有另一个因素可能会影响某些变化，这些变化通常只需要增加次版本或修订版本的版本号：自动引用的属性是启用还是禁用。&lt;/p&gt;
&lt;h2 id=&#34;automatic-referencing自动引用&#34;&gt;Automatic referencing(自动引用) &lt;a href=&#34;#automatic-referencing%e8%87%aa%e5%8a%a8%e5%bc%95%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您可以为程序集定义设置的一个属性是**自动引用（Auto Referenced）**属性，它控制在编译过程中Unity是否自动引用该文件。当启用此属性时，一些本来只需要递增次版本或修订版本的变化现在会成为破坏性更改。&lt;/p&gt;
&lt;p&gt;当您&lt;strong&gt;禁用&lt;/strong&gt;自动引用时，如果您进行的任何更改导致新的程序集可用，那么您引入了对API的向后兼容变更。向后兼容的API变更，例如添加平台、禁用Unity测试引用、添加新的*.asmdef*文件或删除定义约束，只需要递增次版本。&lt;/p&gt;
&lt;p&gt;然而，当您&lt;strong&gt;启用&lt;/strong&gt;自动引用时，新增的程序集会隐式地添加到其他各种程序集的引用中。由于这些情况可能导致其他程序集的编译错误，因此需要递增主版本。&lt;/p&gt;
&lt;p&gt;另一种常见情况是添加或更改包依赖项的版本。大多数情况下，更改包依赖项只需要递增修订版本。然而，新的包版本可能包含一个启用了自动引用属性的程序集，这会造成破坏性更改，因此需要递增主版本。&lt;/p&gt;
&lt;p&gt;为避免出现这些问题，您应尽量避免将第三方DLL文件放入与之无关的包中（例如，在SaveGameManager包中包含Newtonsoft.Json.dll文件）。&lt;/p&gt;
&lt;h2 id=&#34;assets资源&#34;&gt;Assets(资源) &lt;a href=&#34;#assets%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;项目可以引用任何在资源数据库中可见的资源。资源数据库使用其*.meta*文件中定义的GUID来唯一跟踪这些资源。&lt;/p&gt;
&lt;p&gt;当您对公共API引入以下更改时，这将需要进行新的主版本发布，因为它们是破坏性更改：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Why these are breaking changes:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;删除资源，而这些资源对资源数据库可见&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您删除一个资源，这可能会破坏用户项目或其他包中的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;改变资源的GUID&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您更改资源的GUID，资源数据库会将其理解为删除原始资源，然后添加一个新的（相同）资源。这会导致引用失效，因为原始GUID不再指向资源，所以资源数据库无法解析引用关系。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;assemblies程序集&#34;&gt;Assemblies(程序集) &lt;a href=&#34;#assemblies%e7%a8%8b%e5%ba%8f%e9%9b%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;程序集定义（&lt;em&gt;.asmdef&lt;/em&gt;）定义了一组&lt;strong&gt;脚本&lt;/strong&gt;，Unity编辑器的编译流程将其转换为单独的托管程序集（&lt;em&gt;.dll&lt;/em&gt;）。这些*.asmdef*资源包括驱动生成程序集属性的属性。其中包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;导入器设置，比如包括和排除的平台&lt;/li&gt;
&lt;li&gt;与编译相关的属性，比如输出程序集名称以及传递给编译器用于构建程序集的引用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大多数属性都会对程序集的使用者产生影响，因此修改任何这些属性都会构成对包公共API的更改。其他属性对程序集的使用者没有影响，因此修改任何这些属性不被视为对包API的更改。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;strong&gt;自动引用（Auto Referenced）&lt;/strong&gt; 属性是一个特例，因为通常情况下不会改变API或以向后兼容的方式改变API的变化，在启用或禁用该属性的情况下可能会导致编译错误。更多信息请参阅自动引用。&lt;/p&gt;
&lt;p&gt;Unity可以预编译程序集，也可以通过脚本和程序集定义来进行编译。因此，适用于程序集定义的任何内容通常也适用于预编译程序集。&lt;/p&gt;
&lt;p&gt;本节详细介绍了程序集定义和预编译程序集的更改，以及对包版本的影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;破坏性更改（仅在新的主版本中允许）&lt;/li&gt;
&lt;li&gt;向后兼容的API变更（允许在新的主版本或次版本中）&lt;/li&gt;
&lt;li&gt;不会改变API的向后兼容更改（允许在新的主版本、次版本或修订版本中）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;major-only-breaking-changes仅限主版本破坏性更改&#34;&gt;MAJOR only: breaking changes(仅限主版本：破坏性更改) &lt;a href=&#34;#major-only-breaking-changes%e4%bb%85%e9%99%90%e4%b8%bb%e7%89%88%e6%9c%ac%e7%a0%b4%e5%9d%8f%e6%80%a7%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;W当您对公共API引入破坏性更改时，这将需要进行新的主版本发布，因为它可能导致编译和运行时错误。以下场景中，所有都会从引用它的其他程序集中删除或隐藏一个程序集。当编译使用引用程序集中定义的类型的程序集时，如果编译器找不到其他程序集，将导致编译错误。有关使用程序集和程序集定义的更多信息，请参阅程序集定义。&lt;/p&gt;
&lt;p&gt;请注意，以下内容适用于包使用和消费的运行时和编辑器程序集。它不适用于测试程序集，因为包通常不使用它们，所以它们不是包的API的一部分。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scenario:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Why the compiler can’t find the referenced assembly:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;删除程序集定义或预编译程序集&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;删除程序集定义文件会阻止编译流程生成对应的程序集。&lt;strong&gt;请注意&lt;/strong&gt;：从2019.1开始，允许存在缺少的引用以支持“可选引用”用例，但重命名Unity需要编译程序集定义所需的程序集会导致编译错误。同样，如果编译的代码需要一个来自程序集的类型，重命名该程序集可能会导致运行时错误，如&lt;code&gt;TypeLoadException&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改程序集名称（无论是在*.asmdef&lt;em&gt;文件中还是重命名&lt;/em&gt;.dll*文件）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改程序集名称等效于删除程序集，然后添加一个具有不同名称的新程序集。这意味着Unity认为原始程序集丢失了，尽管API仍然以其他名称包含了相同的程序集代码。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;向*.asmdef*添加定义约束&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果添加了定义约束，当未满足定义约束时，Unity会跳过编译程序集。这会导致程序集丢失的情况，尽管先前可用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;删除平台&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您移除对特定平台的支持，Unity将不再在该平台上导入程序集，这等效于删除程序集。删除平台的方式有：• &lt;strong&gt;includePlatforms&lt;/strong&gt;，这会与所有未列出的平台不兼容• &lt;strong&gt;excludePlatforms&lt;/strong&gt;，这会添加条目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将公共API从一个程序集移动到另一个程序集&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当您将公共可访问代码从程序集A移动到程序集B时，任何引用A但不引用B的程序集都无法编译通过。对于程序集定义，如果您移动脚本位置，可能会将公共API移动到不同的程序集中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改**自动引用（Auto Referenced）**属性&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;禁用**自动引用（Auto Referenced）&lt;strong&gt;属性后，您将无法在没有显式引用的情况下使用此程序集的公共API：• 对于预编译程序集，禁用此属性将阻止Unity将预编译程序集隐式添加为程序集定义和项目编译程序集的引用。• 对于程序集定义，禁用此属性将阻止Unity将生成的程序集隐式添加为项目编译程序集的引用。启用&lt;/strong&gt;自动引用（Auto Referenced）**属性时，可能会产生与API、属性或依赖项的其他更改冲突的情况。更多信息请参阅自动引用部分。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在程序集定义中启用&lt;strong&gt;Unity References → Test Assemblies&lt;/strong&gt;属性&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用&lt;strong&gt;Unity References → Test Assemblies&lt;/strong&gt;属性会将该程序集标记为测试程序集，Unity通常不会在构建中包含它（或者在某些情况下不会编译它）。在此情况下，任何引用缺失的程序集都无法定位它，除非它也是一个测试程序集。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;major-minor-non-breaking-api-changes仅限主版本次版本非破坏性api更改&#34;&gt;MAJOR, MINOR: non-breaking API changes(仅限主版本、次版本：非破坏性API更改) &lt;a href=&#34;#major-minor-non-breaking-api-changes%e4%bb%85%e9%99%90%e4%b8%bb%e7%89%88%e6%9c%ac%e6%ac%a1%e7%89%88%e6%9c%ac%e9%9d%9e%e7%a0%b4%e5%9d%8f%e6%80%a7api%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下更改是向后兼容的非破坏性API更改。与破坏性更改删除程序集不同，这些场景都是添加程序集。由于添加程序集会增加API表面（API的公开部分），因此被视为API更改。然而，因为没有现有的引用，所以添加一个新程序集不会影响使用早期API创建的其他程序集。&lt;/p&gt;
&lt;p&gt;向后兼容的更改需要至少进行新的次版本发布。如果您还包括其他破坏性更改的更新，则这些更改也可以成为新的主版本发布的一部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：这些更改仅在禁用了**自动引用（Auto Referenced）&lt;strong&gt;属性时向后兼容。当启用&lt;/strong&gt;自动引用（Auto Referenced）**属性时，上表中列出的更改可能会导致破坏性更改。有关详情，请参阅自动引用部分。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Why these changes don’t break compilation&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;从.asmdef中删除定义约束&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;删除定义约束意味着编译和脚本流程不再跳过此程序集。因为Unity始终构建该程序集，所以编译器始终可以解析对其的引用，而不论是否满足该定义约束。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;添加平台&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;添加平台对现有平台支持没有影响，因此是向后兼容的。这是一项API更改，因为它增加了API表面。您可以通过修改以下属性来添加平台：• 添加条目到&lt;strong&gt;includePlatforms&lt;/strong&gt;属性中。• 完全删除&lt;strong&gt;includePlatforms&lt;/strong&gt;属性。这相当于添加所有之前未包含在&lt;strong&gt;includePlatforms&lt;/strong&gt;属性中的平台。• 从&lt;strong&gt;excludePlatforms&lt;/strong&gt;属性中删除条目。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用新的脚本创建程序集定义（之前不是在不同的*.asmdef*文件中）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;添加新的程序集会增加API表面（API的公开部分），而不会修改任何现有实现。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在程序集定义文件中禁用&lt;strong&gt;Unity References → Test Assemblies&lt;/strong&gt;属性&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;禁用&lt;strong&gt;Unity References → Test Assemblies&lt;/strong&gt;属性将该程序集标记为普通程序集，Unity不再将其视为与任何程序集定义不同。这是一项API更改，因为它增加了API表面。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;major-minor-patch-no-api-changes主版本次版本修订版本无api更改&#34;&gt;MAJOR, MINOR, PATCH: no API changes(主版本、次版本、修订版本：无API更改) &lt;a href=&#34;#major-minor-patch-no-api-changes%e4%b8%bb%e7%89%88%e6%9c%ac%e6%ac%a1%e7%89%88%e6%9c%ac%e4%bf%ae%e8%ae%a2%e7%89%88%e6%9c%ac%e6%97%a0api%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;以下更改不会影响公共API，允许在修订版本中进行。这些场景下的更改不会改变公共API，因为它们不会影响API表面（API的公开部分），也不会对其他使用者造成任何变化。&lt;/p&gt;
&lt;p&gt;不会改变公共API的更改需要至少进行新的修订版本发布。如果您还包括其他引入破坏性或非破坏性更改的更新，则还可以将它们包含在主版本或次版本发布中。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Why these changes don’t impact other consumers&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改*.asmdef*文件中引用的程序集和程序集定义的列表&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;引用另一个程序集的程序集不会自动引用该程序集的引用，而是必须显式列出它们。因此，在程序集定义或程序集中更改引用不会影响其他使用者。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在程序集定义中更改**允许不安全代码（Allow unsafe code）**属性&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此属性控制编译器是否允许编译具有&lt;strong&gt;unsafe&lt;/strong&gt;修饰符的代码。仅更改此标志不会修改公共API。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在程序集定义中更改**覆盖引用（Override References）**属性&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此属性控制Unity如何调用该程序集的编译器，对生成的程序集的使用者没有影响。仅更改此标志不会修改公共API。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;package-manifest-files包清单文件&#34;&gt;Package manifest files(包清单文件) &lt;a href=&#34;#package-manifest-files%e5%8c%85%e6%b8%85%e5%8d%95%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包清单文件（&lt;code&gt;package.json&lt;/code&gt;）指定了包的名称、版本、包依赖关系和其他关于包本身的元数据。&lt;/p&gt;
&lt;p&gt;本节详细介绍了包清单文件的更改以及对包版本的影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;名称更改（不允许）&lt;/li&gt;
&lt;li&gt;依赖项的更改（上下文决定了最小版本变化）&lt;/li&gt;
&lt;li&gt;其他更改（允许在新的主版本、次版本或修订版本中）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;name-changes-not-allowed名称更改不允许&#34;&gt;Name changes (not allowed)(名称更改（不允许）) &lt;a href=&#34;#name-changes-not-allowed%e5%90%8d%e7%a7%b0%e6%9b%b4%e6%94%b9%e4%b8%8d%e5%85%81%e8%ae%b8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;更改&lt;strong&gt;name&lt;/strong&gt;属性等同于删除一个包并添加一个具有不同名称的新包，这是不受支持的。您不能通过尝试发布一个更新来重命名一个包：您必须将其作为一个全新的包发布。不允许更改名称，因为现有的项目和包无法将这些名称解释为同义词。&lt;/p&gt;
&lt;h3 id=&#34;dependency-changes依赖项更改&#34;&gt;Dependency changes(依赖项更改) &lt;a href=&#34;#dependency-changes%e4%be%9d%e8%b5%96%e9%a1%b9%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在项目中更改依赖项本身不需要不同的主版本或次版本，除非它是API更改的一部分，或者启用了自动引用属性。&lt;/p&gt;
&lt;p&gt;本节提供了依赖项更改的示例及其适用的上下文（假设已禁用自动引用属性，并且除了每个示例所描述的更改外，没有其他API更改）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Dependency change&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Minimum version change&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;添加新的依赖项&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用新的包而不改变功能行为，并且不改变API表面。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;修订&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用新的包引入新的行为，而不修改API表面。•创建新的API公开了在新包中定义的类型。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;次版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用新的包以不向后兼容的方式更改现有行为，而不修改API表面。 • 以不向后兼容的方式修改现有的API以公开在新包中定义的类型。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;主版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;移除依赖项&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 移除包而不改变功能行为，并且不改变API表面。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;修订版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 移除包以不向后兼容的方式更改现有行为，而不改变API表面。  • 移除公开在该依赖项中定义的类型的API。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;主版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更改依赖项&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用修改后的包而不改变功能行为，并且不改变API表面。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;修订版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用修改后的包引入新的行为，而不修改API表面。   • 创建新的API公开了在修改后的包中定义的类型。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;次版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;• 使用修改后的包以不向后兼容的方式更改现有行为，而不修改API表面。•以不向后兼容的方式更改现有的API以公开在修改后的包中定义的类型。•在修改后的包中以非向后兼容的方式更改的API中公开一些类型。•在修改后的包中不再定义的API中公开一些类型。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;主版本&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;major-minor-or-patch-other-changes主版本次版本或修订版本其他更改&#34;&gt;MAJOR, MINOR or PATCH: other changes(主版本、次版本或修订版本：其他更改) &lt;a href=&#34;#major-minor-or-patch-other-changes%e4%b8%bb%e7%89%88%e6%9c%ac%e6%ac%a1%e7%89%88%e6%9c%ac%e6%88%96%e4%bf%ae%e8%ae%a2%e7%89%88%e6%9c%ac%e5%85%b6%e4%bb%96%e6%9b%b4%e6%94%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;您可以在任何发布版本中更改与包管理器、构建流程、脚本流程或资产数据库没有特殊影响的包清单属性。这包括更改&lt;strong&gt;description&lt;/strong&gt;、&lt;strong&gt;category&lt;/strong&gt;、&lt;strong&gt;keywords&lt;/strong&gt;或&lt;strong&gt;displayName&lt;/strong&gt;等字段。&lt;/p&gt;
&lt;p&gt;如果更改这些字段，可能表明您的更改涉及的不仅仅是错误修复。始终考虑新版本中的其他更改是否实际上需要一个新的次版本或主版本发布，而不是修订版本发布。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在包的清单中更改&lt;strong&gt;unity&lt;/strong&gt;或&lt;strong&gt;unityRelease&lt;/strong&gt;属性总是需要进行次版本或主版本发布。虽然这些属性不会影响包的API本身，但增加Unity版本会导致包版本无法在较早的Unity编辑器上工作，并可能导致依赖的项目或包出现故障。降低Unity版本将使包在旧的Unity编辑器上可用。&lt;/p&gt;
&lt;h2 id=&#34;deprecated-and-obsolete-apis弃用和过时的api&#34;&gt;Deprecated and obsolete APIs(弃用和过时的API) &lt;a href=&#34;#deprecated-and-obsolete-apis%e5%bc%83%e7%94%a8%e5%92%8c%e8%bf%87%e6%97%b6%e7%9a%84api&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当您想要从您的API中删除一些功能时，首先发布至少一个包含已弃用功能的次版本。这样可以向用户发出警告，使他们可以顺利过渡到新的API。然后，在新的主版本发布中删除该功能。&lt;/p&gt;
&lt;p&gt;如果另一个开发人员使用警告标记了一个过时的包，并且您在项目中启用了&lt;strong&gt;警告视为错误（Warnings as Errors）&lt;/strong&gt;，那么过时的包可能会在技术上破坏您的项目，即使它不是一个真正的破坏，因为代码仍然可以像以前一样工作。&lt;/p&gt;
&lt;p&gt;在这种情况下，您可以根据常见的期望顺序选择如何修复警告作为错误（从上到下）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更改代码，不再使用该API。&lt;/li&gt;
&lt;li&gt;在使用API的代码中使用&lt;code&gt;#pragma warning&lt;/code&gt;指令来消除警告。&lt;/li&gt;
&lt;li&gt;禁用**CS0612（已过时）&lt;strong&gt;和&lt;/strong&gt;CS0618（带有警告消息的已过时）**警告。&lt;/li&gt;
&lt;li&gt;在项目中禁用&lt;strong&gt;警告视为错误（Warnings as Errors）&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;assembly-definition-and-packages程序集定义和包&#34;&gt;Assembly definition and packages(程序集定义和包) &lt;a href=&#34;#assembly-definition-and-packages%e7%a8%8b%e5%ba%8f%e9%9b%86%e5%ae%9a%e4%b9%89%e5%92%8c%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您必须将包中的&lt;strong&gt;脚本&lt;/strong&gt;与程序集定义文件（&lt;code&gt;.asmdef&lt;/code&gt;）关联起来。程序集定义文件是Unity中对应.NET生态系统中的C#项目的概念。您必须在程序集定义文件中显式设置对其他程序集的引用（无论是在同一个包中还是在外部包中）。详情请参阅程序集定义的说明。&lt;/p&gt;
&lt;p&gt;请使用以下命名和存储程序集定义文件的约定，以确保编译后的程序集文件名符合.NET Framework设计准则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在根编辑器程序集定义文件下存储特定于编辑器的代码：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Editor/&amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.asmdef&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在根运行时程序集定义文件下存储特定于运行时的代码：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Runtime/&amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.asmdef&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;为编辑器和运行时脚本配置相关的测试程序集：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Tests/Editor/&amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Editor.Tests.asmdef&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Tests/Runtime/&amp;lt;company-name&amp;gt;.&amp;lt;package-name&amp;gt;.Tests.asmdef&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要获取有关推荐的包文件夹布局的更一般概述，请参阅包布局。&lt;/p&gt;
&lt;h2 id=&#34;example-file示例文件&#34;&gt;Example file(示例文件) &lt;a href=&#34;#example-file%e7%a4%ba%e4%be%8b%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在此示例中，程序集定义文件使用对其自己的程序集和一个作为包依赖项（HDRP）的程序集的引用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyCompany.MyPackageName&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;references&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyCompany.MyPackageName.Tools&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MyCompany.MyPackageName.Planes&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Unity.RenderPipelines.HighDefinition.Runtime&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;includePlatforms&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;excludePlatforms&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;allowUnsafeCode&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;overrideReferences&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;precompiledReferences&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;autoReferenced&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;defineConstraints&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;versionDefines&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.render-pipelines.high-definition&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;expression&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;7.1.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;define&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HDRP_7_1_0_OR_NEWER&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.modules.particlesystem&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;expression&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;define&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;USING_PARTICLE_SYSTEM&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;noEngineReferences&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有关程序集定义文件结构的详细信息，请参阅程序集定义文件格式。&lt;/p&gt;
&lt;h1 id=&#34;meeting-legal-requirements满足法律要求&#34;&gt;Meeting legal requirements(满足法律要求) &lt;a href=&#34;#meeting-legal-requirements%e6%bb%a1%e8%b6%b3%e6%b3%95%e5%be%8b%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;您可以使用&lt;code&gt;Third Party Notices.md&lt;/code&gt;和&lt;code&gt;LICENSE.md&lt;/code&gt;文件来确保您的包满足任何法律要求。例如，下面是来自Unity Timeline包的示例许可文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Unity Timeline copyright © 2017-2019 Unity Technologies ApS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Licensed under the Unity Companion License for Unity-dependent projects--see [&lt;span style=&#34;color:#f92672&#34;&gt;Unity Companion License&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;http://www.unity3d.com/legal/licenses/Unity_Companion_License&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;third-party-notices第三方声明&#34;&gt;Third Party Notices(第三方声明) &lt;a href=&#34;#third-party-notices%e7%ac%ac%e4%b8%89%e6%96%b9%e5%a3%b0%e6%98%8e&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果您的包含有第三方元素，您可以将许可证包含在&lt;code&gt;Third Party Notices.md&lt;/code&gt;文件中。您可以为每个要包含的许可证包括&lt;strong&gt;组件名称&lt;/strong&gt;、&lt;strong&gt;许可证类型&lt;/strong&gt;、&lt;strong&gt;版本号&lt;/strong&gt;和&lt;strong&gt;提供许可证详细信息&lt;/strong&gt;部分。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;This package contains third-party software components governed by the license(s) indicated below:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Component Name: Semver
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License Type: &amp;#34;MIT&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#f92672&#34;&gt;SemVer License&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;https://github.com/myusername/semver/blob/master/License.txt&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Component Name: MyComponent
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;License Type: &amp;#34;MyLicense&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#f92672&#34;&gt;MyComponent License&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;https://www.mycompany.com/licenses/License.txt&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;strong&gt;提供许可证详细信息&lt;/strong&gt;部分中的URL应指向包含复制的许可证和版权信息（如果适用）的位置。如果许可证适用于特定版本的组件，请尽可能提供该版本的URL。&lt;/p&gt;
&lt;h1 id=&#34;documenting-your-package文档化您的包&#34;&gt;Documenting your package(文档化您的包) &lt;a href=&#34;#documenting-your-package%e6%96%87%e6%a1%a3%e5%8c%96%e6%82%a8%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;大多数包需要某种形式的说明，以帮助用户获得最佳体验并优化其使用。本页面提供了一些关于如何结构化信息和格式化文档的提示。&lt;/p&gt;
&lt;h2 id=&#34;structure-of-the-information信息结构&#34;&gt;Structure of the information(信息结构) &lt;a href=&#34;#structure-of-the-information%e4%bf%a1%e6%81%af%e7%bb%93%e6%9e%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在包的标题之后，提供该包和其内容的基本概述。在概述和包内容之后，包括安装说明、系统要求和限制条件。您还可以提供获取帮助和提供反馈的链接，包括公共论坛或知识库以及支持联系方式。&lt;/p&gt;
&lt;p&gt;在这些初步信息之后，您可以提供更深入的工作流程、用户界面描述或示例目录列表，然后是更高级的主题。最好在最后提供参考页面。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Section&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;概述&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对包进行简洁、高层次的解释。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;包内容&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包括您希望用户知道的重要文件的位置。例如，如果这是一个包含纹理、模型和材质的示例包，并按示例组分成不同文件夹，您可能想要指定每个组的文件夹位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;安装说明&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以指向官方的Package Manager安装说明，但如果您有任何特殊的安装要求，比如安装示例，可以在这里添加它们。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;要求&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是一个很好的地方加入硬件或软件要求，包括这个包与哪些Unity编辑器版本兼容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;限制条件&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您的包有任何已知限制条件，您可以在这里列出。如果没有，或者如果限制条件是微不足道的，可以省略本节。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;工作流程&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包括用户可以按照的步骤列表，演示如何使用某个功能。您可以包含屏幕截图，以帮助描述如何使用该功能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;高级主题&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对您向用户提供的内容进行详细介绍。如果您不想一开始就给用户提供太多的信息，这是理想的选择。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;参考&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您的用户界面有很多属性，您可以在参考部分中描述其详细信息。使用表格是提供特定属性描述的好方法。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;示例&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对于包含示例文件的包，您可以提供有关用户如何在其项目和&lt;strong&gt;场景&lt;/strong&gt;中使用这些示例文件的详细信息。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;教程&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您想为复杂的步骤提供演示，也可以在这里添加。使用逐步说明，并包含图像，如果图像有助于用户理解的话。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;documentation-format文档格式&#34;&gt;Documentation format(文档格式) &lt;a href=&#34;#documentation-format%e6%96%87%e6%a1%a3%e6%a0%bc%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Markdown是一种常用的轻量级格式，在包中广泛使用。许多存储库托管服务（如GitHub和Bitbucket）支持Markdown格式的&lt;code&gt;README&lt;/code&gt;文件和文档站点。您可以在包根目录下的&lt;code&gt;Documentation~&lt;/code&gt;文件夹中包含一个Markdown文件。然后，当用户在Unity的Package Manager窗口的详细面板中点击&lt;strong&gt;Documentation&lt;/strong&gt;链接时，用户的默认Markdown查看器将打开该文件。&lt;/p&gt;
&lt;p&gt;您还可以使用自己的网站来托管您的文档。要将&lt;strong&gt;Documentation&lt;/strong&gt;链接的位置指向您自己的网站，请在&lt;code&gt;package.json&lt;/code&gt;文件中使用&lt;code&gt;documentationUrl&lt;/code&gt;属性进行设置。&lt;/p&gt;
&lt;p&gt;如果您决定使用Markdown来记录您的包，可以从许多站点找到有关撰写Markdown文件的信息，包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown指南&lt;/li&gt;
&lt;li&gt;Bitbucket的教程&lt;/li&gt;
&lt;li&gt;GitHub的Markdown备忘单&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;sharing-your-package分享您的包&#34;&gt;Sharing your package(分享您的包) &lt;a href=&#34;#sharing-your-package%e5%88%86%e4%ba%ab%e6%82%a8%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果您想控制包的访问权限，或者需要在封闭网络组织中设置包注册服务器，您可以设置自己的包注册服务器。&lt;/p&gt;
&lt;p&gt;当您开发完成包并希望与其他用户分享时，您有几个选项：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Compressed file&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您可以向其他Unity用户分发一个zip文件。这样，他们可以将zip文件解压缩到自己计算机上的本地文件夹，并从磁盘上安装该包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Tarball&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您可以向其他Unity用户分发一个tarball文件。这样，他们可以直接从本地tarball安装该包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Git URL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您可以通过链接到您的Git存储库，使用支持的协议。然后用户可以使用其Git URL安装您的包，因为Unity Package Manager可以从GitHub和GitLab等Git存储库托管服务中获取包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scoped Registry&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;您可以设置一个包注册服务器来托管您的包，并使用&lt;code&gt;npm&lt;/code&gt;发布命令将其发布到该注册服务器。然后，您的包的消费者可以在其项目中设置一个作用域注册配置，从您自己的包注册服务器中获取您的自定义包。Unity Package Manager支持基于&lt;code&gt;npm&lt;/code&gt;协议的注册表。请确保您选择的任何注册服务器实现了&lt;code&gt;/-/v1/search&lt;/code&gt;或&lt;code&gt;/-/all&lt;/code&gt;端点。 &lt;strong&gt;警告&lt;/strong&gt;：当您设置自己的包注册服务器时，请确保仅使用与Unity的Scoped Registries兼容的功能。例如，Unity不支持使用&lt;code&gt;npm&lt;/code&gt;支持的&lt;code&gt;@scope&lt;/code&gt;符号表示的命名空间。 在大多数情况下，在本地网络中匿名访问足以满足您的安全要求。 但是，如果您想对通过作用域注册表访问包的用户进行更多的控制，可以为特定用户启用npm身份验证。然后，您的包的用户可以配置其作用域注册表以使用其npm身份验证令牌。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>解密游戏中关卡难度的统计建模-中文版</title>
      <link>https://www.chenqiaoqian.com/2023/07/22/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/</link>
      <pubDate>Sat, 22 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/22/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/</guid>
      <description>&lt;p&gt;作者Jeppe Theiss Kristensen、Arturo Valdivia*、Paolo Burelli&lt;/p&gt;
&lt;h1 id=&#34;摘要&#34;&gt;摘要 &lt;a href=&#34;#%e6%91%98%e8%a6%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;成功和准确地对关卡难度进行建模是玩家体验操作化的基本组成部分，因为难度是内容设计和调整中最重要且常用的信号之一。在具有中间里程碑的游戏中，如可完成的区域或关卡，难度通常由完成的概率或完成率来定义；然而，这种操作化存在局限性，因为它并未描述玩家在该区域内的行为。
在这项研究工作中，我们为解密游戏形式化了一个超越经典成功概率的关卡难度模型。我们通过使用参数统计模型描述游戏关卡内执行的动作分布来实现这一点，从而创建了一个更丰富的难度描述符。该模型在由触觉游戏收集的《Lily&amp;rsquo;s Garden》游戏数据集上进行拟合和评估，评估结果显示该模型能够描述和解释绝大多数关卡的难度。
关键词—玩家建模、难度建模、游戏设计、动态游戏适应性、生存分析&lt;/p&gt;
&lt;h1 id=&#34;i-引言&#34;&gt;I. 引言 &lt;a href=&#34;#i-%e5%bc%95%e8%a8%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;游戏设计的一个核心方面是难度及其对玩家体验的影响——如果游戏太容易，玩家就不会足够投入其中；如果游戏太难，玩家会感到沮丧，导致他们放弃游戏。在由离散任务或关卡组成的游戏中，管理难度的常见方法是通过控制玩家完成任务或关卡所需的资源，例如，可用的行动次数或解决谜题的时间。平衡关卡中可用资源的正确数量以获得所需的难度是一项复杂的任务，通常依赖设计师将难度的抽象描述与玩家行为和关卡中可控组件相关联的能力。
例如，在提供玩家有限行动或移动次数来完成每个关卡的解密游戏中，如三消或泡泡射击风格的游戏，描述难度的直接方式是测量玩家平均完成一个关卡需要多少尝试次数。这个数量通常被称为尝试完成次数，其乘法倒数是我们所说的完成率。这个定义对于识别玩家可能感到困惑并因此停止玩游戏的关卡，控制游戏内容的消耗速率，甚至启用不同的货币化策略是有用的。然而，这样的描述符只是以聚合的方式考虑数据，因此缺乏可能会告诉关于改变行动限制的影响或玩家接近完成的程度等细节的细粒度。这使得其在表达上相对有限，给设计师提供了很少关于如何调整难度的信息，因此将关卡调整的任务转变为试错程序。
在当前发布的大多数解密游戏中，成功或失败不是关于玩家在游戏中行为的唯一数据；通常会跟踪执行的动作摘要和使用的资源。如果正确建模，这些信息有潜力成为关卡难度的一个更丰富描述符的基础。特别是，玩家在尝试中使用的动作数量既有助于描述他们在关卡内的进展，又直接与一个重要的关卡设计方面——移动次数限制相关。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图1. 玩家完成数据中一个关卡所花费的动作数量的直方图。在动作限制接近M = 32时，可以清楚地看到分布中的明显截断效应。如果我们能够准确估计完整的分布（由红色曲线表示），则可以计算使用不同动作限制的完成率。&lt;/p&gt;
&lt;p&gt;完成一个关卡所需的动作数量取决于许多因素，如玩家技能、关卡设置和运气。这导致玩家在每个关卡上花费的动作呈现出一定的分布（见图1）。本文的核心思想是，通过对这种动作分布的建模和理解，我们不仅可以评估完成率，还可以估计设计动作的影响，如改变移动限制，并更深入地了解玩家面临的挑战。
为实现这一目标，玩家行为模型需要既准确又可解释。因此，在这项研究工作中，我们研究了应用参数统计模型来表示潜在动作分布的方法。我们讨论了如何使用负二项分布对这种行为进行建模，并对这种建模方法在触觉游戏的热门移动解密游戏《Lily&amp;rsquo;s Garden》的数据集上进行了实证研究，并呈现和讨论了研究结果。&lt;/p&gt;
&lt;h1 id=&#34;ii-相关工作&#34;&gt;II. 相关工作 &lt;a href=&#34;#ii-%e7%9b%b8%e5%85%b3%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Flow [4] 描述了任务难度和用户技能匹配，从而产生引人入胜的游戏体验的心理状态。虽然难度可以分解为多个子组件（如认知、情感等 [6]），在需要将难度操作化的情况下，例如用于动态难度调整或自动化游戏测试，通常使用任务成功的概率作为难度的客观衡量标准 [5]，[7]，[9]，[13]，[15]，[17]。这种解释得到了 Pedersen 等人的支持 [16]，他们研究了超级马里奥兄弟中玩家情绪与关卡特征之间的相关性。在这里，感到受挑战的最大因素是关卡的完成率或类似的失败方面，如死亡次数。
在这项工作中，我们采用类似的概率定义：关卡的难度由胜率给出，实际上是完成率，可以计算为给定关卡已完成的次数除以该关卡上总尝试次数。然而，虽然将难度描述为完成率是直观的，但它并不能提供更深入和可操作的问题理解，例如，强加时间或行动限制如何影响完成率，或者玩家接近完成的程度。这种数据的性质是被审查的，因为我们没有关于完整游戏过程的信息，因此为了从中汲取应对方法的灵感，我们可以参考生存分析 [14]。&lt;/p&gt;
&lt;p&gt;生存分析是统计学的一个分支，专注于估计未见或审查的数据，通常用于估计事件发生的时间。有多个例子使用这种方法来使用参数分布描述玩家行为：Feng 等人 [8] 使用广义威布尔分布来建模在线会话长度，Bauckhage 等人 [2] 测试了各种分布，包括威布尔分布和泊松-伽玛分布，以估计人们失去对游戏兴趣的时间。生存分析方法已被用于描述 [10] 中与游戏玩法相关的行为，在该研究中，作者调查了游戏 Flappy Bird 中关卡的感知难度的操作化。通过使用玩家和游戏测试 AI 数据，他们计算了一个经验生存函数 S(x)，描述了在一个关卡中达到给定长度的尝试的分布。从中，危险函数可以用作感知难度的指标。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图2. Lily&amp;rsquo;s Garden 中一个关卡的示例。关卡目标在左侧指定，在游戏中的助推器在右侧。这些游戏中的助推器是非常强大的助推器，可以让玩家更轻松地完成关卡。&lt;/p&gt;
&lt;p&gt;本文呈现的工作与这些最近的研究具有相似的性质，即我们试图通过使用参数统计分布来操作化和抽象游戏玩法的一个方面——即关卡难度。关键的不同点在于，本文提出的模型既建立在大量真实玩家游戏数据的基础上，又在此基础上进行了评估；此外，我们提出了一个描述难度操作化、确定适当分布并评估其有效性的一般性框架。&lt;/p&gt;
&lt;h1 id=&#34;iii-方法&#34;&gt;III. 方法 &lt;a href=&#34;#iii-%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;让我们从简要描述益智游戏机制开始这一部分。每个关卡要求玩家在预定的最大行动次数或移动次数M内收集一系列目标。每次移动包括通过点击其中一个相邻的棋盘块来消除一组相邻的棋盘块。通过同时匹配至少5个棋盘块的组来创建清除棋盘大面积的更强大的棋盘块是可能的。图2显示了一个关卡的示例。
如果玩家在不超过M次移动的情况下完成了所有关卡目标，那么我们称该尝试是成功的，玩家将进入下一个关卡。因此，每个玩家最多可以完成每个关卡一次。现在，如果玩家在没有完成所有关卡目标的情况下使用了所有允许的移动次数M，那么我们称该尝试是失败的。在这种情况下，玩家可以花费虚拟货币获得额外的移动次数（例如，+5），或者决定再尝试一次以牺牲一条生命。这些生命会随着时间自动恢复，并且通常每个玩家在任何给定时间最多可以获得5条生命。
对于这项研究，我们使用了从2020年06月01日至2021年01月01日之间收集的L = 4000个关卡的数据样本。对于每个关卡，每次尝试的可用数据包括使用的移动次数以及尝试是否成功。首先进行了数据清洗步骤，通过排除所有不完整的尝试，即由于游戏中的技术问题或玩家故意退出游戏而提前终止的尝试。我们还排除了使用特殊游戏内助推器的尝试，这些助推器通常会增加在移动次数限制M内完成的尝试的次数k = 0, 1, 2。最终的输入数据集包括完成关卡所使用的移动次数的频率（参见图1）和总体完成率，定义为成功尝试占总尝试次数的百分比，每个关卡平均有350,000次成功尝试。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图3. 展示完成一个关卡所使用的移动次数的观察频率。垂直虚线表示移动次数限制设置为M = 15。拟合曲线用虚线标记。左上角的子图表明观察到的频率几乎呈线性增长，导致拟合负二项分布的左尾。&lt;/p&gt;
&lt;p&gt;该方法的目标是确定一个参数分布，该分布能够很好地适应完成一个关卡所使用的移动次数，即在移动次数限制M∗规定的截断点之上。拟合的曲线应该与观察到的频率相匹配，并且该曲线下的面积应该与观察到的完成率相匹配。作为说明，图3描述了拟合分布能够很好地描述观察到的频率，但未能匹配完成率的不良情况。我们可以期望这种情况发生，例如当观察到的频率的稳定增长几乎是线性的，因此被校准为分布的左尾时。这些想法在下面得到了形式化。
备注。在这里我们注意到，对于其他类型的游戏，输入数据集的定义将是类似的，例如，通过交换完成关卡所使用的移动次数的角色，改为完成任务所需的时间单位。&lt;/p&gt;
&lt;h2 id=&#34;a-模型参数的校准&#34;&gt;A. 模型参数的校准 &lt;a href=&#34;#a-%e6%a8%a1%e5%9e%8b%e5%8f%82%e6%95%b0%e7%9a%84%e6%a0%a1%e5%87%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;给定一个具有移动次数限制M∗的关卡，让我们用Fˆ表示完成该关卡所使用的移动次数的经验分布。让ˆc表示观察到的关卡完成率，即在最多M∗次移动内完成关卡的尝试的百分比。如图1所示，经验移动分布Fˆ在右侧被M∗截断，但我们假设这些数据对应于基础未截断分布F的受限观察。让我们假设Fˆ和F具有概率密度函数，并分别用fˆ和f表示。
在这些术语中，我们的目标是找到分布F的一个参数模型，使得满足以下两个条件：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图4. 展示完成关卡所剩移动次数的均值和方差之间的线性关系。&lt;/p&gt;
&lt;p&gt;条件1. 拟合分布F在整个范围（0，M∗]内紧密地跟随经验分布Fˆ。
条件2. 量F（M∗）近似于观察到的完成率ˆc。
在本文中，我们将条件2仅视为验证步骤；也就是说，我们不将此条件明确强制作为校准算法的一部分。决定背后的理由是，我们的目标是在这里建立一个基准，仅通过拟合截断数据来解释多少。换句话说，我们正在评估条件1能够确保条件2同样得到满足的程度。&lt;/p&gt;
&lt;p&gt;在本文中，我们将条件2仅视为验证步骤；也就是说，我们不会明确将此条件作为校准算法的一部分。决定背后的理由是，我们的目标是建立一个基准，仅通过拟合截断数据来解释多少。换句话说，我们正在评估条件1能够确保条件2同样得到满足的程度。
现在让我们描述模型参数的校准策略。给定分布F的一个参数模型，我们通过在范围（0，M∗]上应用非线性最小二乘（NLLS）回归来获得相应的参数集θ，在这个范围内我们可以完全观察到Fˆ。这种方法需要一个参数θ的初始猜测θ0作为输入，如果选择不当，可能会因拟合不佳而导致假阴性。为了最小化这种风险，我们通过解决以下优化问题来选择初始猜测：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/5.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这里，Θ表示初始猜测θ0的搜索空间；f(θ0)是我们通过使用初始猜测θ0从NLLS得到的分布；D是分布Fˆ和F(θ0)在范围（0，M]上的距离。在这里，我们将使用Kolmogorov-Smirnov距离（参见[1]），在这种情况下，它简单地由表示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/6.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请注意，在这些术语中，条件1可以重写为D(fˆ，f(θ0∗())) &amp;lt; δ，其中δ足够小，比如说5%。`&lt;/p&gt;
&lt;h2 id=&#34;b-底层参数分布的要求&#34;&gt;B. 底层参数分布的要求 &lt;a href=&#34;#b-%e5%ba%95%e5%b1%82%e5%8f%82%e6%95%b0%e5%88%86%e5%b8%83%e7%9a%84%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们的目标分布（即，完成级别所需的移动）仅采用非负整数值。因此，为了拟合参数模型，我们可以使用非负整数值分布（例如，负二项分布），或者可以使用非负连续分布的离散化（例如，伽玛分布）。
为了限定我们可以用于分析的潜在分布列表，我们首先查看图4所示的模式，该图表明完成级别所需的剩余移动次数的均值和方差之间存在强烈的线性关系。更具体地说：让M (n, i)表示第i个玩家在第n次尝试通过级别时剩余的移动次数。该图的每个点对应于我们样本中级别 = 1，&amp;hellip;，L（L = 4000）中的一个，坐标轴x和y分别等于M (n, i)的均值µ和方差σ，其中n和i变化在观察期间发生的所有尝试中。虚线显示了对σ2关于µ进行线性回归的结果，没有截距 - 即，我们考虑形式为σ2 ≈ ψµ的模型。这种拟合的好坏（即，R2 ≈ 85%，p值 &amp;lt; 10^(-16)）表明了均值µ和方差σ2之间的强线性关系，进一步暗示了我们对M的参数模型应满足的必要条件。&lt;/p&gt;
&lt;p&gt;C. 负二项分布作为基准线
根据以上内容，很明显，最自然且非平凡的起点是考虑负二项分布，因为它是一个众所周知的非负整数值分布，展现出其均值和方差之间的线性关系：
f(m) :=  m + n m - 1  (1 - p)^n p^m，对于m = 0, 1, 2, &amp;hellip; 至于初始猜测的搜索空间，我们将使用Θ := [1, 10M] × [0.001, 0.999]。 这里有两点需要注意：首先，注意到负二项分布也被称为Poisson-gamma分布，因为它等价于强度参数λ的Poisson分布，其中λ本身可以通过遵循伽马分布而成为随机变量。 其次，一个更复杂的方法是使用Tweedie分布的离散化，对于Tweedie分布，众所周知σ2 = ψµp，或者甚至是Poisson-Tweedie分布，对于该分布σ2 = µ + ψµp[3]，[11]。然而，我们将这个调查留给未来的工作，因为我们的初步探索（参见图4）表明，考虑一个离散参数p = 1可能已经提供了一个非常好的起点。&lt;/p&gt;
&lt;h1 id=&#34;iv-结果&#34;&gt;IV. 结果 &lt;a href=&#34;#iv-%e7%bb%93%e6%9e%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;为了评估我们方法的有效性，我们在谜题游戏《Lily&amp;rsquo;s Garden》的4000个级别上进行了测试：首先，我们分析了所有级别上拟合分布参数的整体结果。在第二步中，基于前一节中描述的关于拟合分布的条件，我们讨论了生成模型拟合的好坏，从而评估模型描述玩家行为的能力。最后，我们验证模型是否能够描述级别的难度经典定义 - 即完成概率 - 以及前述行为。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/7.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图5. 拟合参数p和n的对数线性图，每个级别对应一个。颜色表示玩过该级别的用户数量。&lt;/p&gt;
&lt;h2 id=&#34;a-分布参数&#34;&gt;A. 分布参数 &lt;a href=&#34;#a-%e5%88%86%e5%b8%83%e5%8f%82%e6%95%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;图5显示了从在谜题游戏《Lily&amp;rsquo;s Garden》的4000个级别上执行算法中获得的拟合参数。每个点代表一个负二项模型的参数（n，p），该模型适用于完成每个级别 = 1, 2, &amp;hellip;, L所使用的移动的分布。可以看到，大多数（即83%）的级别都落在由0.001 &amp;lt; p ≤ 1和1 ≤ n ≤ 200（）定义的中心簇内。对于这个中心簇，显然参数（n，p）遵循对数线性关系log(n) = ap + b关系（R2 = 87%），其中a和b是不依赖于级别的全局常数。这表明级别的移动分布可能由单个参数驱动，这将使级别设计者能够轻松地将级别相互比较。 为此，可以考虑所谓的尺度参数（ϑ），它描述了分布的扩展性 - 即，尺度参数越大，分布越分散。这个数值参数通常在概率分布的参数族的背景下考虑，在负二项分布的情况下，它由这个简单表达式给出。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请注意，从这个表达式中我们可以推导出（n，p）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;还有另外两个显著的簇。第一个簇由p = 0.001定义，包括了15%的采样级别。这个簇中所有实例的共同特征是已达到参数拟合阈值，这将在第四节详细探讨。第二个簇由n &amp;gt; 200定义，包括了我们样本中的2%的级别。检查这个高n，高p的簇中的实例，我们遇到了要么是教程级别，要么是具有特定游戏机制的级别，这些机制引导玩家进行相对受限制的游戏玩法。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/10.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图6. Kolmogorov-Smirnov检验统计量D和拟合分布均值的对数对数图。颜色显示了预期完成率与实际完成率之间的相对差异。&lt;/p&gt;
&lt;p&gt;值得注意的是，按设计，教程级别往往表现出比其他级别更低的方差，要么通过固定随机种子，要么通过整体布局和级别的理想策略。这种对随机性的降低可能导致移动分布的方差较小。同样，我们观察到，包含限制游戏玩法的引导机制的级别会导致玩体验不那么随机。这样的信息对级别设计者可能特别有用，因为创建完全由机会决定胜利机会的级别会剥夺玩家的主动性，可能并不是很有趣。因此，能够识别这样的级别可以提供对级别随机性的更量化度量。&lt;/p&gt;
&lt;h2 id=&#34;b-条件1和拟合的有效性&#34;&gt;B. 条件1和拟合的有效性 &lt;a href=&#34;#b-%e6%9d%a1%e4%bb%b61%e5%92%8c%e6%8b%9f%e5%90%88%e7%9a%84%e6%9c%89%e6%95%88%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在第III-A节中提出的初始条件是，拟合分布F应该与经验分布Fˆ非常接近。为了确定这一点是否成立，我们使用由方程（1）定义的Kolmogorov-Smirnov距离D。为了概述分布参数和D之间的关系，图6绘制了D与拟合分布的均值（µ = n / (1−p)）之间的关系，并根据相对差异（c −cˆ）/cˆ进行着色。我们发现99%的级别满足D &amp;lt; 5%，这意味着在许多情况下拟合分布很好地描述了经验数据，因此满足了条件1。&lt;/p&gt;
&lt;p&gt;需要注意的一点是，在某些情况下，在拟合过程中达到了参数边界。观察到大约15%的级别发生了这种情况，通常导致p = 0.001。这些级别出现在图6中最右侧的簇中，其定义为µ &amp;gt; 103。当经验移动分布仅呈现稳定增长趋势时，通常会发生这种情况，导致仅使用分布的尾部最能描述这种简单行为的情况。我们认为这些示例由于方法未收敛而被视为拟合不良，并在接下来的分析中将其排除。在继续分析的下一部分之前，我们首先尝试分离显示良好拟合的级别与其他级别之间的差异。具体来说，我们首先调查不同的游戏机制是否会影响移动分布。为此，我们使用逻辑回归模型来建模级别拟合是否收敛，以估计特定棋子的影响。结果表明，计时机制通常会导致更好的拟合，而一个特定的生成机制（即，首次与生成器交互后目标出现）会导致拟合不佳。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/11.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图7. 观察到的完成率与校准算法得到的拟合结果之间的比较。&lt;/p&gt;
&lt;p&gt;值得注意的是，用于此分析的数据忽略了使用各种游戏内辅助道具（例如额外移动、助推器等）的尝试。如果玩家发现某个级别很困难或令人沮丧，玩家后续的尝试可能会被忽略，因为他们使用了帮助道具，扭曲了移动分布。许多观察结果支持这一假设：当仅考虑玩家的第二次尝试的移动分布时，成功收敛的级别比例增加了约+5%。此外，在玩家使用游戏内助推器和辅助道具的尝试中，非收敛示例比收敛示例频率高出多达+18%；因此，对于非收敛示例，平均忽略的尝试更多。在我们的数据处理步骤中，这些尝试被过滤掉，因为它们显示出明显的曲线人为改变，特别是在级别的最后两个移动中。因此，对于拟合不一致的部分解释也可能与数据有关。&lt;/p&gt;
&lt;h2 id=&#34;c-条件2完成率比较&#34;&gt;C. 条件2：完成率比较 &lt;a href=&#34;#c-%e6%9d%a1%e4%bb%b62%e5%ae%8c%e6%88%90%e7%8e%87%e6%af%94%e8%be%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/12.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图8. 上方（a-c）和下方（d-f）的子图分别对应观察到的完成率ˆc&lt;code&gt; ≈ 20%和ˆc&lt;/code&gt; ≈ 40%的实例。
第一，第二和第三列分别举例说明了我们发现观察到的完成率和拟合完成率之间的好（a和d），中等（b和e）和低（c和f）一致性的情况。&lt;/p&gt;
&lt;p&gt;第二个条件规定，预期的完成率Fˆ(M∗)应接近观察到的完成率cˆ。为了评估这个条件，我们首先注意到这两个值有强烈的相关性，如它们的皮尔逊相关系数ρ = 83%所示。此外，图7暗示观察到的完成率和拟合完成率通过线性关系c ≈ 1.035ˆc - 0.104 (2)相互关联，调整后的决定系数R2 = 75%。公式(2)暗示完成率往往被低估，特别是在完成率低的情况下（即，对于非常困难的级别，平均玩家需要相当于8次或更多的尝试才能完成级别）。基于这些论点，我们可以认为条件2也得到了满足。&lt;/p&gt;
&lt;p&gt;在实践中，关卡设计师通常使用完成率的范围而不是点估计来工作，这样他们可以将关卡分类（例如，“简单”，“非常困难”）。因此，当前的结果是积极的，也很有希望。然而，人们也可以查看完成率的点估计，例如在绝对百分比误差ε := |c /ˆc - 1|的指导下。通过这样做，我们观察到ε的中位数大约是49%，并且根据公式（2）进行调整后，它降低到23%。
为了更好地理解导致上述低估（即，情况c &amp;lt; cˆ）的原因，我们在图8中举例说明了一系列场景中会发生什么：
场景1，如子图a和d所示，对应于ˆc和c之间的相对误差较小的情况。子图b和e中的场景2展示了误差中等的情况。最后，子图c和f中的场景3对应于大幅低估的情况。在场景3中，可以看到只用到了分布的尾部来描述数据。在拟合方法未收敛的情况下也观察到了类似的现象：由于可用的玩家数据和完成次数的稳步增加，只需要尾部就可以描述这种相对简单的行为。然而，与那些情况相反，这些级别更像是一个连续体：在完成率低的地方，更多的数据被审查，因此更可能低估，而对于更高的ˆc值（如场景1和场景2），我们有更多的关于分布的信息可用，这进一步限制了f。
为了看看是否有任何特定的游戏机制可能导致完成率之间的差异，使用了类似于第IV-B节的方法。而不是使用逻辑回归来预测是否拟合良好，而是使用线性回归来预测预期和实际完成率之间的差异。结果与前一节关于成功拟合的发现相似：具有时间或其他游戏限制机制的关卡导致更高的预期完成率。有趣的是，具有颜色匹配机制的棋盘部分往往导致过低的预期完成率。可能解释这一点的一种方法是，可以以稳定的速度完成的目标（如颜色机制）导致更稳步增加的坡度分布，由于在拟合中有更多的自由度，导致完全低估了完成率。另一方面，时间机制可能需要更多的规划，这可能表现为更受限制的最小移动次数，这导致围绕给定移动的分布更明确，而且方差更小，这可能对建模方法有害。也就是说，还有其他未考虑的因素（如关卡拓扑），因此需要更多的工作来建立完成率差异和游戏机制之间的任何联系。&lt;/p&gt;
&lt;h1 id=&#34;v-讨论和未来的工作&#34;&gt;V. 讨论和未来的工作 &lt;a href=&#34;#v-%e8%ae%a8%e8%ae%ba%e5%92%8c%e6%9c%aa%e6%9d%a5%e7%9a%84%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在85%的关卡中，我们能找到一个描述玩家数据的负二项分布。此外，我们能够推导出不同的游戏玩法特征的估计，如关卡随机性和棋盘部分描述符，这可以给游戏设计师提供额外的见解。也就是说，关于当前的建模方法和可能的使用情况，还有一些未解决的问题，这将在本节中讨论。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/13.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图9. 二维图，展示了初始完成率和移动限制的变化如何影响预期的完成率变化。初始完成率被分成跨度为2%的区间，并根据图7的趋势调整新的预期完成率。&lt;/p&gt;
&lt;h2 id=&#34;a-改变移动限制&#34;&gt;A. 改变移动限制 &lt;a href=&#34;#a-%e6%94%b9%e5%8f%98%e7%a7%bb%e5%8a%a8%e9%99%90%e5%88%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;讨论的一个用例是，通过建模这些分布，关卡设计师可以估计改变移动限制对完成率的影响。为了检查移动限制的变化如何影响完成率，图9显示了预期完成率的绝对变化如何取决于初始完成率和移动限制的变化。作为一个经验法则，完成率似乎平均变化2%，在高或低完成率时的敏感性略低。从与关卡设计师的讨论中，这与他们常用的启发式方法是一致的。
另一个见解是，增加或减少移动是一个不对称的操作，其中移动减少时的变化率更大。虽然这也是预期的，因为负二项分布本身可能是不对称的，并且可能有一个长的右尾（因此对增加移动的敏感度较低），但它表明，游戏设计师在移除时间或动作以增加难度时需要更加小心，因为这种不对称的变化。
这个论点的一个可能的局限性是，它假设如果移动限制改变，分布参数将保持不变。然而，这并不一定是真的，因为当玩家接近移动限制时，他们可能会改变他们的行为。例如，一个常见的策略是设置强大的棋盘组合，并在最后发动它们以最大化得分（无论是否有明确的得分）。&lt;/p&gt;
&lt;h2 id=&#34;b-玩家技能&#34;&gt;B. 玩家技能 &lt;a href=&#34;#b-%e7%8e%a9%e5%ae%b6%e6%8a%80%e8%83%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-22-Statistical.Modelling.of.Level.Difficulty.in.Puzzle.Games/14.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图10. 某个AI代理完成特定的Lily&amp;rsquo;s Garden所使用的移动次数的直方图。虚线代表负二项分布的拟合。&lt;/p&gt;
&lt;p&gt;感知的关卡难度不仅取决于关卡的随机性，还取决于玩家的技能。到目前为止，关卡的随机性与拟合分布的方差有关，但从逻辑上讲，移动分布也应受到玩过该关卡的技能的影响。事实上，这是关卡设计师在日常工作中经常遇到的现象：随着更多的玩家达到更高的关卡，完成率慢慢变化，这使得需要对所有关卡进行持续的维护。
作为下一步，研究关卡难度如何在使用不同玩家群体的纵向研究中随时间变化，可能会对玩家技能提供有意义的见解，并模拟这如何影响分布参数。然后，这可以用于更主动和自动的难度调整方法，确保新老用户都有连贯的游戏体验。&lt;/p&gt;
&lt;h2 id=&#34;c-游戏测试&#34;&gt;C. 游戏测试 &lt;a href=&#34;#c-%e6%b8%b8%e6%88%8f%e6%b5%8b%e8%af%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;游戏测试对于游戏开发者至关重要，因为这个过程在产品上市前提供了一种在安全环境中识别错误和潜在设计缺陷的可靠方法。然而，这个过程往往如此昂贵和缓慢，以至于游戏开发者越来越开始通过使用AI代理来自动化这个过程，例如，使用强化学习技术（例如[12]及其中的参考文献）。这个背景也为深入了解本文中提出的技术以及进一步的潜在应用提供了一个有趣的设置。
实际上，考虑到游戏测试代理是在与人类玩家相同的环境中进行训练的，我们可以让代理使用所有的正常规则和游戏机制进行游戏，但不受移动限制M`的约束。图10显示了[13]中考虑的一个游戏测试代理在测试给定关卡时生成的移动分布。这个特定的代理在与平均人类玩家相比的表现是次优的，但重要的是我们能够可视化其整个移动分布，甚至超过限制M。因此，我们可以在整个（0，10M]范围内拟合我们提出的负二项分布，即，不进行截断。
符合我们的期望，我们得到了一个非常好的拟合，如Kolmogorov-Smirnov距离D = 1.8%所描述的那样。这引发了关于游戏测试代理的以下问题：展现出负二项分布是否可以被视为声明AI代理以人类的方式进行游戏的必要条件？
最后，我们强调与[13]中报告的结果的另一个联系。在那项工作中，作者报告说，代理在给定关卡上的5%最好的运行是实际完成率的最强预测因素。显然，这个5%的百分位数是可以从拟合的负二项参数中明确推导出来的量。从这个意义上说，我们还可以研究这里提出的拟合程序是否可以进一步用作后处理策略，从子人类甚至超人类表现的游戏测试代理生成的数据中估计完成率。&lt;/p&gt;
&lt;h2 id=&#34;d-其他游戏&#34;&gt;D. 其他游戏 &lt;a href=&#34;#d-%e5%85%b6%e4%bb%96%e6%b8%b8%e6%88%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在这项工作中，我们研究了将所提出的方法应用于移动益智游戏的情况；然而，在我们的假设中没有任何规定排除了同样的分布不仅可以用于具有离散移动和行动限制的类似益智游戏，还可以用于平台甚至竞技游戏等其他类型的游戏。
一般来说，益智游戏往往非常注重尽快解决关卡目标。虽然一些游戏也提供分数，但影响移动分布的因素（随机性和技能）数量有限。然而，在其他类型的游戏中，可能有其他的因素和激励来玩游戏：在平台游戏中，玩家被鼓励去探索和尝试不同的策略，而在竞技游戏中，玩家可能希望尽快击败对手，随机性的作用比玩家的相对技能小。因此，未来研究的一个有前景的方向是在各种类型的游戏中使用这种建模方法来测试和验证其对不同玩家行为的普遍适用性。&lt;/p&gt;
&lt;h1 id=&#34;vi-结论&#34;&gt;VI. 结论 &lt;a href=&#34;#vi-%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在这项研究工作中，我们开始寻找一种更丰富的方式来描述益智游戏的关卡难度。具体来说，我们提出玩家完成一个关卡的移动频率分布遵循负二项分布。使用来自游戏Lily&amp;rsquo;s Garden的4000个关卡的数据作为案例研究，结果显示：
• 负二项分布能够描述大约85%的关卡的移动分布，而且这种方法可以轻易地扩展到其他类型的游戏。
• 可以使用一个参数——即规模参数ϑ——来描述分布的扩散，从而描述关卡。
• 这种更详细的难度描述使得：(i)估计改变移动限制的影响；(ii)估计关卡的随机性；和(iii)识别玩家在一个关卡上的行为偏差。
在剩下的大约15%的情况中，方法没有收敛；主要问题是由于数据只显示出增长趋势，这导致方法只使用分布的一小部分来匹配它。同样，该方法也倾向于低估观察到的完成率cˆ，特别是在完成率较低的情况下。因此，未来研究的一个可能的方向是扩展这个模型，并将cˆ作为建模的一个参数，而不是一个约束。这不仅有可能提高该方法的预测能力，而且最终可能实现估计玩家技能并动态调整难度，以确保最佳的玩家体验。&lt;/p&gt;
&lt;h1 id=&#34;vii-致谢&#34;&gt;VII. 致谢 &lt;a href=&#34;#vii-%e8%87%b4%e8%b0%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;这项工作得到了丹麦创新基金和Tactile Games的支持。我们也感谢Arnau Escapa和Rasmus Berg Palm的富有成效的讨论。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity&#39;s Package Manager(四)(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/21/2023-07-21-unity-Documents-5/</link>
      <pubDate>Fri, 21 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/21/2023-07-21-unity-Documents-5/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unitys-package-manager四&#34;&gt;Unity’s Package Manager(四) &lt;a href=&#34;#unitys-package-manager%e5%9b%9b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;package-manager-window包管理器窗口&#34;&gt;Package Manager window(包管理器窗口) &lt;a href=&#34;#package-manager-window%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;inspecting-packages检查包&#34;&gt;Inspecting packages(检查包) &lt;a href=&#34;#inspecting-packages%e6%a3%80%e6%9f%a5%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;项目视图显示了你的项目中当前从所有来源安装的包的列表。这意味着你从包注册表中安装的&lt;strong&gt;不可变&lt;/strong&gt;包是可见的，以及&lt;strong&gt;可变&lt;/strong&gt;的包（如嵌入式和本地包）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-inspect.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;左边是注册表包（不可变），右边是嵌入式包（可变）。&lt;/p&gt;
&lt;p&gt;你可以查看在项目视图中出现的任何包的内容。你还可以通过专用的&lt;strong&gt;检查器&lt;/strong&gt;查看&lt;strong&gt;包清单&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;要查看包清单，只需在项目视图中点击它。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-project-view.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;检查包清单&lt;/p&gt;
&lt;p&gt;对于嵌入式或本地包，你可以改变包的内容，并编辑包清单。&lt;/p&gt;
&lt;h1 id=&#34;package-manifest-window包清单窗口&#34;&gt;Package Manifest window(包清单窗口) &lt;a href=&#34;#package-manifest-window%e5%8c%85%e6%b8%85%e5%8d%95%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你在&lt;strong&gt;项目&lt;/strong&gt;窗口的&lt;code&gt;Packages&lt;/code&gt;子文件夹中选择包清单文件(&lt;code&gt;package.json&lt;/code&gt;)时，&lt;strong&gt;包清单&lt;/strong&gt;窗口将会打开。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/class-PackageManifestImporter.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在编辑器中检查包清单：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 选择&lt;strong&gt;打开&lt;/strong&gt;来在你的默认代码编辑器中（例如Visual Studio）加载这个包清单。选择&lt;strong&gt;在包管理器中查看&lt;/strong&gt;以打开包管理器窗口，并在其详绕面板中加载这个包。如果你想选择不同的导入器，选择&lt;strong&gt;导入器&lt;/strong&gt;下拉菜单并选择你想使用的包导入器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; 信息部分包含了这个特定包版本的详细信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; 使用&lt;strong&gt;简短描述&lt;/strong&gt;文本框来指定你想在包管理器窗口的详细面板中显示的文本。更多信息，参考描述属性的文档。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; 使用依赖项部分来管理这个包所依赖的包的列表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; 选择&lt;strong&gt;还原&lt;/strong&gt;以丢弃你对清单所作的任何更改。选择&lt;strong&gt;应用&lt;/strong&gt;来保存你对清单所作的任何更改。&lt;/p&gt;
&lt;h2 id=&#34;information信息&#34;&gt;Information(信息) &lt;a href=&#34;#information%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/class-PackageManifestImporter-Info.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个包的官方名称。对于Unity包，这是短名称（去掉&lt;code&gt;com.unity.&lt;/code&gt;字符串后的官方名称。）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Organization name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;创建这个包的Unity组织的标识符。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Display name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在&lt;strong&gt;项目窗口&lt;/strong&gt;和包管理器窗口中显示给用户看的名称。更多信息，请参考displayName属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包的版本号码。更多信息，请参考version属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Minimal Unity version&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用这个选项来指定这个包兼容的最低Unity版本。当你启用这个选项时，&lt;strong&gt;主要版本&lt;/strong&gt;，&lt;strong&gt;次要版本&lt;/strong&gt;，和&lt;strong&gt;发布版&lt;/strong&gt;属性会显示。如果这个包兼容所有Unity版本，取消勾选这个选项并移除&lt;strong&gt;主要版本&lt;/strong&gt;，&lt;strong&gt;次要版本&lt;/strong&gt;，和&lt;strong&gt;发布版&lt;/strong&gt;属性。更多信息，请参考unity属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Major&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定最小Unity版本的主要部分。更多信息，请参考unity属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Minor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定最小Unity版本的次要部分。更多信息，请参考unity属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Release&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定最小Unity版本的更新和发布部分。更多信息，请参考unityRelease属性的文档。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;dependencies依赖项&#34;&gt;Dependencies(依赖项) &lt;a href=&#34;#dependencies%e4%be%9d%e8%b5%96%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/class-PackageManifestImporter-Depend.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;依赖项部分&lt;/p&gt;
&lt;p&gt;列出了其他作为此包依赖项的包。每个条目由官方包名（例如，&lt;code&gt;com.unity.probuilder&lt;/code&gt;）和其版本号组成。&lt;/p&gt;
&lt;p&gt;要添加新的依赖项：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择&lt;strong&gt;添加&lt;/strong&gt;按钮。列表中会出现新的一行。&lt;/li&gt;
&lt;li&gt;在左边输入包名，在右边输入版本号。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;若要删除依赖项：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击你想删除的包左边的选择器按钮。&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;移除&lt;/strong&gt;按钮，该行将从列表中消失。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;scripting-api-for-packages包脚本api&#34;&gt;Scripting API for packages(包脚本API) &lt;a href=&#34;#scripting-api-for-packages%e5%8c%85%e8%84%9a%e6%9c%acapi&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以使用包管理器的脚本API通过C#&lt;strong&gt;脚本&lt;/strong&gt;与包管理器进行交互。例如，你可能想要根据目标机器的平台安装特定的包或版本。&lt;/p&gt;
&lt;p&gt;该系统严重依赖PackageManager.Client类，你可以使用它来寻找包，浏览包列表，以及通过脚本安装和卸载包。&lt;/p&gt;
&lt;p&gt;另一个重要的类是PackageManager.PackageInfo，它包含了包的状态，包括从&lt;strong&gt;包清单&lt;/strong&gt;和注册表获取的元数据。例如，你可以获取该包的可用版本列表，或者在查找或安装包时可能发生的任何错误的列表。&lt;/p&gt;
&lt;h2 id=&#34;adding-a-package-to-the-project把包添加到项目中&#34;&gt;Adding a package to the project(把包添加到项目中) &lt;a href=&#34;#adding-a-package-to-the-project%e6%8a%8a%e5%8c%85%e6%b7%bb%e5%8a%a0%e5%88%b0%e9%a1%b9%e7%9b%ae%e4%b8%ad&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个例子演示了如何使用Client类来安装或添加包到项目中。&lt;/p&gt;
&lt;p&gt;你可以使用Client.Add来添加包。当你调用&lt;code&gt;Client.Add&lt;/code&gt;方法时，你可以只指定包名，或者带有特定版本的名字。例如，使用&lt;code&gt;Client.Add(&amp;quot;com.unity.textmeshpro&amp;quot;)&lt;/code&gt;安装（或更新到）TextMesh Pro包的最新版本；使用&lt;code&gt;Client.Add(&amp;quot;com.unity.textmeshpro@1.3.0&amp;quot;)&lt;/code&gt;安装TextMesh Pro包的1.3.0版本。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Client.Add&lt;/code&gt;方法返回一个AddRequest实例，你可以使用它来获取状态，任何错误，或者包含新添加包的PackageInfo信息的Request响应。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager.Requests;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Unity.Editor.Example {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AddPackageExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; AddRequest Request;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;       [MenuItem(&amp;#34;Window/Add Package Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Add()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#75715e&#34;&gt;// Add a package to the project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Request = Client.Add(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.textmeshpro&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           EditorApplication.update += Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Progress()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.IsCompleted)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status == StatusCode.Success)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Installed: &amp;#34;&lt;/span&gt; + Request.Result.packageId);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status &amp;gt;= StatusCode.Failure)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   Debug.Log(Request.Error.message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               EditorApplication.update -= Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;browsing-the-list-of-packages-in-a-project浏览项目中的包列表&#34;&gt;Browsing the list of packages in a project(浏览项目中的包列表) &lt;a href=&#34;#browsing-the-list-of-packages-in-a-project%e6%b5%8f%e8%a7%88%e9%a1%b9%e7%9b%ae%e4%b8%ad%e7%9a%84%e5%8c%85%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个例子演示了如何使用Client类遍历项目中的包。&lt;/p&gt;
&lt;p&gt;Client.List方法返回一个ListRequest实例，你可以使用它获取List操作的状态、任何错误，或者包含你可以遍历的PackageCollection的Request响应。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager.Requests;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Unity.Editor.Example {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ListPackageExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; ListRequest Request;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;       [MenuItem(&amp;#34;Window/List Package Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; List()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Request = Client.List();    &lt;span style=&#34;color:#75715e&#34;&gt;// List packages installed for the project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           EditorApplication.update += Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Progress()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.IsCompleted)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status == StatusCode.Success)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; package &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; Request.Result)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Package name: &amp;#34;&lt;/span&gt; + package.name);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status &amp;gt;= StatusCode.Failure)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   Debug.Log(Request.Error.message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               EditorApplication.update -= Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;embedding-a-package-in-the-project将包嵌入项目中&#34;&gt;Embedding a package in the project(将包嵌入项目中) &lt;a href=&#34;#embedding-a-package-in-the-project%e5%b0%86%e5%8c%85%e5%b5%8c%e5%85%a5%e9%a1%b9%e7%9b%ae%e4%b8%ad&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个例子演示了如何使用Client类将已经安装在你的项目中的某个包嵌入其中。主要方法是Client.Embed方法，它复制一个包并将其存储在你的项目的&lt;code&gt;Packages&lt;/code&gt;文件夹下。&lt;/p&gt;
&lt;p&gt;Client.Embed方法返回一个EmbedRequest实例，你可以使用它获取Embed操作的状态、任何错误，或者包含新嵌入包的PackageInfo信息的Request响应。&lt;/p&gt;
&lt;p&gt;这个例子还使用了Client.List方法来访问当前已经安装在你的项目中的包集合，并选择出第一个既非嵌入也非内置的包。&lt;/p&gt;
&lt;p&gt;Client.List方法返回一个ListRequest实例，你可以使用它获取List操作的状态、任何错误，或者包含你可以遍历的PackageCollection的Request响应。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager.Requests;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Unity.Editor.Example
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EmbedPackageExample&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; String targetPackage;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; EmbedRequest Request;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; ListRequest LRequest;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;        [MenuItem(&amp;#34;Window/Embed Package Example&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; GetPackageName()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// First get the name of an installed package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            LRequest = Client.List();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            EditorApplication.update += LProgress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; LProgress()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (LRequest.IsCompleted)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (LRequest.Status == StatusCode.Success)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; package &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; LRequest.Result)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#75715e&#34;&gt;// Only retrieve packages that are currently installed in the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#75715e&#34;&gt;// project (and are neither Built-In nor already Embedded)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (package.isDirectDependency &amp;amp;&amp;amp; package.source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            != PackageSource.BuiltIn &amp;amp;&amp;amp; package.source
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            != PackageSource.Embedded)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            targetPackage = package.name;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Debug.Log(LRequest.Error.message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                EditorApplication.update -= LProgress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Embed(targetPackage);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Embed(&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; inTarget)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// Embed a package in the project&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Embed(&amp;#39;&amp;#34;&lt;/span&gt; + inTarget + &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#39;) called&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Request = Client.Embed(inTarget);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            EditorApplication.update += Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Progress()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.IsCompleted)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status == StatusCode.Success)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Embedded: &amp;#34;&lt;/span&gt; + Request.Result.packageId);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (Request.Status &amp;gt;= StatusCode.Failure)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Debug.Log(Request.Error.message);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                EditorApplication.update -= Progress;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;package-manager-events包管理器事件&#34;&gt;Package Manager events(包管理器事件) &lt;a href=&#34;#package-manager-events%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e4%ba%8b%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用Events类在包管理器中注册一个事件处理器。Events类包含两个你可以订阅的事件，包管理器在以下时机会触发这些事件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在包管理器更改依赖列表之前立即（registeringPackages）&lt;/li&gt;
&lt;li&gt;在包管理器导入并编译了更改后的包依赖列表之后（registeredPackages）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下示例演示了如何使用这两种事件。&lt;/p&gt;
&lt;h3 id=&#34;example-of-using-the-registeringpackages-event使用registeringpackages事件的示例&#34;&gt;Example of using the registeringPackages event(使用registeringPackages事件的示例) &lt;a href=&#34;#example-of-using-the-registeringpackages-event%e4%bd%bf%e7%94%a8registeringpackages%e4%ba%8b%e4%bb%b6%e7%9a%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Unity.Editor.Example
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EventSubscribingExample_RegisteringPackages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; EventSubscribingExample_RegisteringPackages()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// Subscribe to the event using the addition assignment operator (+=).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// This executes the code in the handler whenever the event is fired.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Events.registeringPackages += RegisteringPackagesEventHandler;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// The method is expected to receive a PackageRegistrationEventArgs event argument.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; RegisteringPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The list of registered packages is about to change!&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; addedPackage &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; packageRegistrationEventArgs.added)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Adding {addedPackage.displayName}&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; removedPackage &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; packageRegistrationEventArgs.removed)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Removing {removedPackage.displayName}&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// The changedFrom and changedTo collections contain the packages that are about to be updated.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// Both collections are guaranteed to be the same size with indices matching the same package name.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; i &amp;lt;= packageRegistrationEventArgs.changedFrom.Count; i++)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; oldPackage = packageRegistrationEventArgs.changedFrom[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; newPackage = packageRegistrationEventArgs.changedTo[i];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;$&amp;#34;Changing ${oldPackage.displayName} version from ${oldPackage.version} to ${newPackage.version}&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;example-of-using-the-registeredpackages-event使用registeredpackages事件的示例&#34;&gt;Example of using the registeredPackages event(使用registeredPackages事件的示例) &lt;a href=&#34;#example-of-using-the-registeredpackages-event%e4%bd%bf%e7%94%a8registeredpackages%e4%ba%8b%e4%bb%b6%e7%9a%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor.PackageManager;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;namespace&lt;/span&gt; Unity.Editor.Example
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EventSubscribingExample_RegisteredPackages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// You must use &amp;#39;[InitializeOnLoadMethod]&amp;#39; or &amp;#39;[InitializeOnLoad]&amp;#39; to subscribe to this event.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;        [InitializeOnLoadMethod]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SubscribeToEvent()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// This causes the method to be invoked after the Editor registers the new list of packages.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Events.registeredPackages += RegisteredPackagesEventHandler;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; RegisteredPackagesEventHandler(PackageRegistrationEventArgs packageRegistrationEventArgs)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// Code executed here can safely assume that the Editor has finished compiling the new list of packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;The list of registered packages has changed!&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;accessing-package-assets访问包内资产&#34;&gt;Accessing package assets(访问包内资产) &lt;a href=&#34;#accessing-package-assets%e8%ae%bf%e9%97%ae%e5%8c%85%e5%86%85%e8%b5%84%e4%ba%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本节解释如何访问或引用在包内定义的资产：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;引用包路径&lt;/li&gt;
&lt;li&gt;加载包内的纹理&lt;/li&gt;
&lt;li&gt;解析绝对路径&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包管理器不支持在包中流处理资产。请使用Addressables包代替。&lt;/p&gt;
&lt;h2 id=&#34;referring-to-package-paths引用包路径&#34;&gt;Referring to package paths(引用包路径) &lt;a href=&#34;#referring-to-package-paths%e5%bc%95%e7%94%a8%e5%8c%85%e8%b7%af%e5%be%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要引用在包内定义的资产，请使用这个路径方案：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Packages/&amp;lt;package-name&amp;gt;/...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;包内的资产路径以&lt;code&gt;Packages/&lt;/code&gt;和包名（而非显示名）开头。&lt;/p&gt;
&lt;p&gt;相比之下，你可以使用这个策略访问项目资产：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Assets/...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如，&lt;strong&gt;com.unity.images-library&lt;/strong&gt;包的&lt;code&gt;/Example/Images&lt;/code&gt;子文件夹中的&lt;code&gt;image.png&lt;/code&gt;文件的路径为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Packages/com.unity.images-library/Example/Images/image.png&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;要获取在你&lt;code&gt;Packages&lt;/code&gt;文件夹中的项目的绝对路径，你可以使用部分路径作为Path.GetFullPath()方法的参数。举例可参考解析绝对路径部分。&lt;/p&gt;
&lt;h2 id=&#34;loading-a-texture-inside-a-package加载包内的纹理&#34;&gt;Loading a Texture inside a package(加载包内的纹理) &lt;a href=&#34;#loading-a-texture-inside-a-package%e5%8a%a0%e8%bd%bd%e5%8c%85%e5%86%85%e7%9a%84%e7%ba%b9%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要加载存储在包内的纹理，使用LoadAssetAtPath方法，它需要&lt;code&gt;using UnityEditor&lt;/code&gt;指令。指定路径遵循&lt;code&gt;Packages/&amp;lt;package-name&amp;gt;/&lt;/code&gt;路径方案，如本示例所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEditor;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Texture2D texture = (Texture2D)AssetDatabase.LoadAssetAtPath(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Packages/com.unity.images-library/Example/Images/image.png&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt;(Texture2D));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;resolving-absolute-paths解析绝对路径&#34;&gt;Resolving absolute paths(解析绝对路径) &lt;a href=&#34;#resolving-absolute-paths%e8%a7%a3%e6%9e%90%e7%bb%9d%e5%af%b9%e8%b7%af%e5%be%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要获取打包资产的绝对路径，使用Path.GetFullPath()方法，它需要&lt;code&gt;using System.IO&lt;/code&gt;指令。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.IO;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// ...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; absolute =   Path.GetFullPath(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Packages/com.unity.images-library/Example/Images/image.png&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;scoped-registries作用域注册表&#34;&gt;Scoped registries(作用域注册表) &lt;a href=&#34;#scoped-registries%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;作用域注册表允许Unity将任何自定义包注册服务器的位置信息传递给包管理器，这样你可以同时访问多个包集合。&lt;/p&gt;
&lt;p&gt;以下是一些重要概念，以帮助你理解这个功能：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Concept概念&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description描述&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;package registry server包注册服务器&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一个跟踪包并提供存储它们的地方的应用程序。在Unity的包管理器窗口中，当你选择Unity注册表上下文时，所有在Unity注册表上注册的包都会在列表面板中显示。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;package manager包管理器&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一个告诉用户什么包可用，并根据用户对其项目的需求下载安装任何包的应用程序。Unity实现了其自己的包管理器版本，但在其他组织中有几个类似的应用程序。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;scope作用域&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义一个包名或名称空间(以反向域格式)，如&lt;code&gt;com.example.mycompany.animation&lt;/code&gt;或&lt;code&gt;com.example&lt;/code&gt;。当用户请求一个包时，包管理器从最匹配作用域的注册表中获取包。更多信息，请参考下方的为项目管理作用域注册表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;你与作用域注册表的交互方式取决于你的角色：&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;包提供者设置自定义注册服务器，除Unity注册表外，还托管并分发自定义包。&lt;/li&gt;
&lt;li&gt;包消费者为每个项目设置作用域注册表，以访问自定义包提供商的注册服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;integrity-and-security-of-scoped-registries作用域注册表的完整性和安全性&#34;&gt;Integrity and security of scoped registries(作用域注册表的完整性和安全性) &lt;a href=&#34;#integrity-and-security-of-scoped-registries%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8%e7%9a%84%e5%ae%8c%e6%95%b4%e6%80%a7%e5%92%8c%e5%ae%89%e5%85%a8%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;作为一个包提供者，确保你设置的任何包注册服务器都符合Unity的服务条款和Unity的包指导原则和指南。Unity提供了访问包管理器的权限以便分享知识和内容，但并非作为第三方产品的市场。&lt;/p&gt;
&lt;p&gt;作为一个包消费者，当你安装一个作用域注册表时，要像安装其他任何第三方软件一样保持警惕：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仅从可信赖的来源安装作用域注册表，因为那些注册表中的包可以包含可执行代码。&lt;/li&gt;
&lt;li&gt;警惕可能会带来危害或在没有适当控制的情况下捕获数据的第三方注册表。也要防备假扮为Unity，或者声明获得或得到Unity支持的第三方。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;benefits-of-scoped-registries作用域注册表的好处&#34;&gt;Benefits of scoped registries(作用域注册表的好处) &lt;a href=&#34;#benefits-of-scoped-registries%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8%e7%9a%84%e5%a5%bd%e5%a4%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;作用域注册表可以帮助：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;通过分发工具、库和其他资产来提供新功能&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;作为提供者，你可以创建你自己的注册表来分发工具和&lt;strong&gt;脚本&lt;/strong&gt;(或其他类型的资产)，版本号表示包的成熟程度。基于语义版本，版本号也表示更新是引入破坏性的API变更还是小修正。你的代码可以依赖其它包中的代码，因为包管理器支持包的依赖。&lt;/p&gt;
&lt;p&gt;作为消费者，你浏览和安装包管理器中的第三方自定义包的体验与浏览Unity的包一样。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;扩展现有Unity包的功能&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;作为消费者，你可以有一个无缝的体验，其中自定义包覆盖Unity包，而不需要手动更改注册表或明确安装不同的包版本。这是因为你可以将包映射到特定的注册表，以便包管理器从Unity注册表或自定义包注册服务器获取。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;在封闭网络环境中访问包&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;有些组织在封闭的网络内工作，这使得访问Unity的包注册表变得困难。在这些情况下，组织可以在他们封闭网络内的服务器上设置他们自己的包注册表。然后，网络管理员可以定期与Unity的包注册表同步，以确保作用域注册表有最新的包集合。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你是一个包消费者，参考为项目管理作用域注册表获取关于如何在你的Unity项目中连接到现有的自定义包注册服务器的信息。如果你是包生产者，参考分享你的包获取关于受支持的包注册服务器的信息。这些信息还包括如何设置他们与作用域注册表一起使用的链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意:&lt;/strong&gt; 如果你正在设置一个指向有访问限制的包注册服务器的作用域注册表，你可以配置包管理器将你的&lt;code&gt;npm&lt;/code&gt;验证令牌传递给服务器。更多信息，请参考作用域注册表验证。&lt;/p&gt;
&lt;h2 id=&#34;importing-scoped-registries导入作用域注册表&#34;&gt;Importing scoped registries(导入作用域注册表) &lt;a href=&#34;#importing-scoped-registries%e5%af%bc%e5%85%a5%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你正在一个共享项目中工作，另一个用户在项目中添加了一个作用域注册表，Unity会警告你另一个用户添加了一个新的作用域注册表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/class-PackageManager-scoped.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果你的项目的作用域注册表列表有更改，Unity会发出警告。&lt;/p&gt;
&lt;p&gt;当你点击&lt;strong&gt;关闭&lt;/strong&gt;时，包管理器项目设置窗口会出现，让你可以为你的项目添加、修改或移除作用域注册表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示：&lt;strong&gt;要在任何时候访问包管理器项目设置窗口，使用Unity的主菜单（&lt;strong&gt;Edit &amp;gt; Project Settings&lt;/strong&gt;，然后选择&lt;/strong&gt;Package Manager&lt;/strong&gt;类别）。你也可以在包管理器窗口的高级设置菜单中选择&lt;strong&gt;Advanced Project Settings&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;managing-scoped-registries-for-a-project对项目进行作用域注册表管理&#34;&gt;Managing scoped registries for a project(对项目进行作用域注册表管理) &lt;a href=&#34;#managing-scoped-registries-for-a-project%e5%af%b9%e9%a1%b9%e7%9b%ae%e8%bf%9b%e8%a1%8c%e4%bd%9c%e7%94%a8%e5%9f%9f%e6%b3%a8%e5%86%8c%e8%a1%a8%e7%ae%a1%e7%90%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要管理项目中的作用域包注册表，你可以直接编辑你的项目清单文件，或使用包管理器项目设置窗口让Unity为你更改清单。&lt;/p&gt;
&lt;p&gt;项目清单使用了一个scopedRegistries属性，它包含了一个作用域注册表配置对象的数组。每个对象都有如下属性：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JSON Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在用户界面中显示的作用域名称。包管理器窗口在详情面板中显示此名称。例如，&lt;code&gt;&amp;quot;name&amp;quot;: &amp;quot;工具&amp;quot;&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;url&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指向与npm兼容的注册表服务器的URL。例如，&lt;code&gt;&amp;quot;url&amp;quot;: &amp;quot;https://mycompany.example.com/tools-registry&amp;quot;&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：并非所有的注册表提供商都与Unity的包管理器兼容。确保你试图添加的包注册表服务器实现了 &lt;code&gt;/-/v1/search&lt;/code&gt; 或 &lt;code&gt;/-/all&lt;/code&gt; 端点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;scopes&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;你可以映射到包名的作用域数组，可以是包名的确切匹配，也可以是命名空间。不支持通配符和其他全局模式。例如，&lt;code&gt;&amp;quot;scopes&amp;quot;: [ &amp;quot;com.example&amp;quot;, &amp;quot;com.example.tools.physics&amp;quot; ]&lt;/code&gt; &lt;strong&gt;注意&lt;/strong&gt;：这种配置类型假设包遵循反向域名标记。这确保了 &lt;code&gt;com.unity&lt;/code&gt; 等同于匹配 &lt;code&gt;com.unity&lt;/code&gt; 命名空间的任何包名，如 &lt;code&gt;com.unity.timeline&lt;/code&gt; 或 &lt;code&gt;com.unity.2d.animation&lt;/code&gt;。 &lt;strong&gt;警告&lt;/strong&gt;：Unity不支持npm的作用域表示法。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;当包管理器决定从哪个注册表获取一个包时，它会比较包的&lt;strong&gt;名称&lt;/strong&gt;和&lt;strong&gt;作用域&lt;/strong&gt;值，找到与&lt;strong&gt;作用域&lt;/strong&gt;值最接近匹配的注册表。&lt;/p&gt;
&lt;p&gt;例如，在下面的项目清单中，有两个作用域注册表，“General”和“Tools”：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scopedRegistries&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;General&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com/registry&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scopes&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.example&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.example.tools.physics&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Tools&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://mycompany.example.com/tools-registry&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scopes&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.example.mycompany.tools&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.animation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.example.mycompany.tools.animation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.example.tools.physics&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.example.animation&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当包管理器查找 &lt;code&gt;com.example.animation&lt;/code&gt; 包时，它发现 &lt;code&gt;com.example&lt;/code&gt; 名称空间与其名称最接近，于是从&amp;quot;General&amp;quot;注册表中获取该包。&lt;/p&gt;
&lt;p&gt;当包管理器查找 &lt;code&gt;com.example.tools.physics&lt;/code&gt; 包时，&amp;ldquo;General&amp;quot;注册表具有与包名完全匹配的作用域。&lt;/p&gt;
&lt;p&gt;当包管理器查找 &lt;code&gt;com.example.mycompany.tools.animation&lt;/code&gt; 包时，包管理器发现 &lt;code&gt;com.example.mycompany.tools&lt;/code&gt; 名称空间与其名称最接近，于是从&amp;quot;Tools&amp;quot;注册表中获取该包。尽管它也匹配&amp;quot;General&amp;quot;作用域，但 &lt;code&gt;com.example&lt;/code&gt; 名称空间不是最接近的匹配。&lt;/p&gt;
&lt;p&gt;当包管理器查找 &lt;code&gt;com.unity.animation&lt;/code&gt; 包时，包管理器在任何作用域注册表中都找不到匹配项。在这种情况下，它是从默认注册表中获取包的。&lt;/p&gt;
&lt;h1 id=&#34;resolution-and-conflict解决和冲突&#34;&gt;Resolution and conflict(解决和冲突) &lt;a href=&#34;#resolution-and-conflict%e8%a7%a3%e5%86%b3%e5%92%8c%e5%86%b2%e7%aa%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你将一个包添加到&lt;strong&gt;项目清单&lt;/strong&gt;中，Unity将该包视为项目的依赖项（直接依赖）。然而，一个包也可以依赖于其他包，这在需要该包的任何项目中创建&lt;strong&gt;间接依赖&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;由于大多数项目在开发游戏和应用程序时需要不止一个包，包管理器必须评估要从注册表中检索的所有请求包版本（无论是直接还是间接的），并决定安装哪些包版本。为了做到这一点，它计算满足项目中所有直接和间接依赖项的包集合，从项目依赖项开始，递归地探索每个间接依赖项，收集所有依赖项信息，然后选择满足依赖性要求而没有任何冲突的包集合。例如，这个依赖图表示了一个有四个&lt;strong&gt;直接依赖&lt;/strong&gt;的项目以及他们所有的间接依赖：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;一个项目直接和间接包依赖的图表&lt;/p&gt;
&lt;p&gt;在这个例子中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;浅蓝色节点代表项目的直接依赖。&lt;/li&gt;
&lt;li&gt;深蓝色节点表示该项目中作为间接依赖的相同包和版本。&lt;/li&gt;
&lt;li&gt;红色节点显示两个版本不同的相同包，这是一个冲突。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：只有声明了版本的包依赖需要被解决。包管理器会选择从其他来源安装的包，例如嵌入式包，以及使用本地路径、Git URL和内置包声明的依赖，优先于基于版本的依赖。&lt;/p&gt;
&lt;h2 id=&#34;choosing-the-best-solution选择最佳解决方案&#34;&gt;Choosing the best solution(选择最佳解决方案) &lt;a href=&#34;#choosing-the-best-solution%e9%80%89%e6%8b%a9%e6%9c%80%e4%bd%b3%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;根据在项目清单中定义的包集合，评估所有可能的包组合可能需要很长时间：一个项目可能依赖于数百个包，每个包又依赖于数百个其他包，大多数需要不同的版本。&lt;/p&gt;
&lt;h3 id=&#34;lock-files-and-resolutionstrategy锁定文件和解决策略&#34;&gt;Lock files and resolutionStrategy(锁定文件和解决策略) &lt;a href=&#34;#lock-files-and-resolutionstrategy%e9%94%81%e5%ae%9a%e6%96%87%e4%bb%b6%e5%92%8c%e8%a7%a3%e5%86%b3%e7%ad%96%e7%95%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;为了提供最有效的解决方案，包管理器通过在锁定文件中跟踪它们来优先考虑之前使用过的包版本。这保证了使用相同输入进行后续依赖解决时，得到的输出是相同的。它也最小化了耗时的操作，如下载、解压或复制包。&lt;/p&gt;
&lt;p&gt;有时，包管理器无法找到只包括锁定包的解决方案。在这种情况下，包管理器会使用风险最小的升级方案，优先考虑补丁升级而不是小版本或大版本升级，默认情况下，小版本升级优先于大版本升级。然而，你可以通过解决策略属性自定义在考虑更高版本时，你希望包管理器有多大的进取心。&lt;/p&gt;
&lt;h2 id=&#34;example示例&#34;&gt;Example(示例) &lt;a href=&#34;#example%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在这个例子中，有以下几个包的多个版本被请求：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;burst@1.2.2&lt;/code&gt; (twice) and &lt;code&gt;burst@1.3.0-preview.3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collections@0.5.1-preview.11&lt;/code&gt; and &lt;code&gt;collections@0.5.2-preview.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jobs@0.2.4-preview.11&lt;/code&gt; (twice) and &lt;code&gt;jobs@0.2.5-preview.20&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用直接和间接依赖的集合，包管理器选择了 burst 包的最高版本(&lt;code&gt;burst@1.3.0-preview.3&lt;/code&gt;)，这满足了 &lt;code&gt;collections@0.5.2-preview.8&lt;/code&gt; 包的依赖：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在依赖关系图中，蓝色节点表示包管理器选择了哪些版本&lt;/p&gt;
&lt;h1 id=&#34;lock-files锁定文件&#34;&gt;Lock files(锁定文件) &lt;a href=&#34;#lock-files%e9%94%81%e5%ae%9a%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;锁定文件包含了包管理器对一个项目进行依赖解析的结果。包管理器用锁定文件来在解析包依赖图时提供一个确定的结果。当Unity包管理器计算出一个成功的解析时，它会将该解析存储在项目的&lt;code&gt;Packages&lt;/code&gt;文件夹中，名为&lt;code&gt;packages-lock.json&lt;/code&gt;的JSON文件里。对&lt;strong&gt;项目清单&lt;/strong&gt;或&lt;strong&gt;可变&lt;/strong&gt;包清单（嵌入的或从本地文件夹安装的）的任何修改都可能迫使包管理器重新计算已解析的包版本。但只要锁定文件中的包版本满足依赖版本和解析策略预设的范围，那么该包将被锁定在那个版本。&lt;/p&gt;
&lt;p&gt;例如，这是锁定文件中的一个典型条目：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.textmeshpro&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.0.1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;depth&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;registry&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.ugui&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://packages.unity.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;etc.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当包管理器解析任何冲突的间接依赖时，它尽量重用尽可能多的锁定包。这确保了对同一组依赖进行后续的依赖解析会产生相同的结果。它也最大程度地减少了耗时的操作，如下载、提取或复制包。&lt;/p&gt;
&lt;p&gt;如果没有只包括锁定包的解决方案，那么包管理器会选择一组风险最小的升级包，优先选择补丁级别的升级而不是小版本或大版本的升级，而小版本的升级优先于大版本的升级。实际上，你可以自定义升级的风险级别。有关更多信息，请查看自定义解析策略。&lt;/p&gt;
&lt;p&gt;要强制刷新间接依赖版本，就删除锁定文件。&lt;/p&gt;
&lt;p&gt;不要手动修改锁定文件：包管理器创建和维护锁定文件，因此它会覆盖你对文件做的任何更改。&lt;/p&gt;
&lt;p&gt;将锁定文件放在源代码控制下，这样你可以始终复现相同的包集，确保你的项目随着时间的推移和在不同的机器上保持一致。&lt;/p&gt;
&lt;h2 id=&#34;disabling-the-lock-file禁止锁定文件&#34;&gt;Disabling the lock file(禁止锁定文件) &lt;a href=&#34;#disabling-the-lock-file%e7%a6%81%e6%ad%a2%e9%94%81%e5%ae%9a%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，当包管理器成功计算出一个依赖图时，它会创建或更新锁定文件。如果你看到意外的结果，你可以在你的项目清单中设置enableLockFile属性为&lt;code&gt;false&lt;/code&gt;来禁用锁定。然而，如果你禁用了锁定文件，包管理器会再次克隆Git URL包，这会导致性能降低和额外的网络使用。如果你在两次解析之间向远程Git仓库提交了更新的提交，那么可能会导致结果不确定。&lt;/p&gt;
&lt;h1 id=&#34;project-manifest项目清单&#34;&gt;Project manifest(项目清单) &lt;a href=&#34;#project-manifest%e9%a1%b9%e7%9b%ae%e6%b8%85%e5%8d%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当Unity加载一个项目时，Unity包管理器会读取&lt;strong&gt;项目清单&lt;/strong&gt;，以便计算出要获取和加载哪些包的列表。当用户通过包管理器窗口安装或卸载一个包时，包管理器会将这些更改存储在项目清单文件中。项目清单文件通过依赖对象管理包的列表。&lt;/p&gt;
&lt;p&gt;此外，项目清单还充当包管理器的配置文件，包管理器使用清单来自定义注册表URL并注册自定义注册表。&lt;/p&gt;
&lt;p&gt;你可以在你的Unity项目的根文件夹下的&lt;code&gt;Packages&lt;/code&gt;文件夹中找到项目清单文件，名为&lt;code&gt;manifest.json&lt;/code&gt;。像包清单文件一样，项目清单文件使用JSON（JavaScript对象表示法）语法。&lt;/p&gt;
&lt;h2 id=&#34;properties属性&#34;&gt;Properties(属性) &lt;a href=&#34;#properties%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;所有属性都是可选的。然而，如果你的项目清单文件不包含任何值，包管理器窗口将无法加载，而且包管理器也不会加载任何包。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JSON Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;dependencies依赖&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Object&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;需要的包集合，仅包括直接依赖（间接依赖放在包清单中）。每个条目将包名映射到最低版本需求： &lt;code&gt;{&lt;/code&gt; &lt;code&gt;&amp;quot;dependencies&amp;quot;: {&lt;/code&gt; &lt;code&gt;&amp;quot;com.my-package&amp;quot;: &amp;quot;2.3.1&amp;quot;,&lt;/code&gt; &lt;code&gt;&amp;quot;com.my-other-package&amp;quot;: &amp;quot;1.0.1-preview.1&amp;quot;,&lt;/code&gt; &lt;code&gt;等.&lt;/code&gt; &lt;code&gt;}&lt;/code&gt; &lt;code&gt;}&lt;/code&gt; 指定版本号表示需要包管理器从包注册中心下载此包（也就是说，这个包的来源是注册中心）。然而，除了使用版本号外，你也可以指定一个本地文件夹或tarball文件的路径，或者一个Git的URL。 &lt;strong&gt;注意&lt;/strong&gt;：你不需要在这里指定内嵌包，因为包管理器会在你的项目的&lt;code&gt;Packages&lt;/code&gt;文件夹中找到它们，并自动加载。如果有与同名的内嵌包在它自己的包清单里，包管理器会忽略此项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;enableLockFile启动锁定文件&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Boolean&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用锁定文件，以确保以确定的方式解析依赖。这个默认设置为&lt;code&gt;true&lt;/code&gt;。更多信息，请查看使用锁定文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;resolutionStrategy解决策略&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;String&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基于语义化版本规则升级间接依赖。这个默认设置为&lt;code&gt;lowest&lt;/code&gt;。更多信息，请在下方查看设置解析策略。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;scopedRegistries范围注册&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Objects&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;除了默认注册中心，你可以指定自定义注册中心。这可以让你自己托管你的包。 更多详细信息，请查看范围注册中心。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;testables可测试&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of Strings&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;列出那些你想在Unity测试框架中加载的包。更多信息，请查看如何给包添加测试。 &lt;strong&gt;注意&lt;/strong&gt;：你不需要在这里指定内嵌包，因为Unity测试框架默认他们是可测试的。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scopedRegistries&amp;#34;&lt;/span&gt;: [{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;My internal registry&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://my.internal.registry.com&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scopes&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.company&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.package-1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.package-2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.company.my-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.0.0&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.my-local-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:&amp;lt;path&amp;gt;/my_package_folder&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.my-local-tarball&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:&amp;lt;path&amp;gt;/my_package_tarball.tgz&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.unity.my-git-package&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://my.repository/my-package.git#v1.2.3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;enableLockFile&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;resolutionStrategy&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;highestMinor&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;testables&amp;#34;&lt;/span&gt;: [ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.package-1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.package-2&amp;#34;&lt;/span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;setting-a-resolution-strategy设置解决策略&#34;&gt;Setting a resolution strategy(设置解决策略) &lt;a href=&#34;#setting-a-resolution-strategy%e8%ae%be%e7%bd%ae%e8%a7%a3%e5%86%b3%e7%ad%96%e7%95%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;虽然你可以通过在项目清单中显式添加它们来强制Unity的包依赖解析使用间接依赖的更高版本，但这并不是一个好的策略，原因有两点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这将更多的责任放在项目所有者身上，以维护依赖版本。&lt;/li&gt;
&lt;li&gt;随着时间的推移，你可能会有一些项目不需要的依赖。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个更好的方法是通过设置 &lt;strong&gt;resolutionStrategy&lt;/strong&gt; 属性来自定义包管理器根据语义化版本规则选择间接依赖的方式：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Value:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;lowest&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不升级间接依赖。相反，它使用的是精确的请求版本。这是默认模式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;highestPatch&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;升级到具有相同主要和次要组件的最高版本。例如，请求版本1.2.3，此策略选择范围 &lt;code&gt;[1.2.3, 1.3.0)&lt;/code&gt;（即，&lt;code&gt;&amp;gt;= 1.2.3&lt;/code&gt; 和 &lt;code&gt;&amp;lt; 1.3.0&lt;/code&gt;）中的最高版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;highestMinor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;升级到具有相同主要组件的最高版本。例如，请求版本1.2.3，此策略选择范围 &lt;code&gt;[1.2.3, 2.0.0)&lt;/code&gt;（即，&lt;code&gt;&amp;gt;= 1.2.3&lt;/code&gt; 和 &lt;code&gt;&amp;lt; 2.0.0&lt;/code&gt;）中的最高版本。 &lt;strong&gt;注意&lt;/strong&gt;：版本&lt;code&gt;1.0.0&lt;/code&gt;标记为第一个稳定的，生产就绪的版本。在那之下，版本&lt;code&gt;0.X.Y&lt;/code&gt;表明它们的API尚未稳定，连续的次要版本可能引入破坏性的变化。SemVer规范的这一部分允许在不妨碍快速开发的情况下发布包的早期版本。因此，当目标版本为&lt;code&gt;0.X.Y&lt;/code&gt;时，&lt;strong&gt;最高次要&lt;/strong&gt;表现得像&lt;strong&gt;最高补丁&lt;/strong&gt;，以确保选择一个向后兼容的版本。例如，请求版本&lt;code&gt;0.1.3&lt;/code&gt;，此策略选择范围 &lt;code&gt;[0.1.3,0.2.0)&lt;/code&gt; 中的最高版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;highest&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;升级到最高版本。例如，请求版本1.2.3，此策略选择范围 &lt;code&gt;[1.2.3,)&lt;/code&gt;（即，&lt;code&gt;&amp;gt;= 1.2.3&lt;/code&gt;，没有上限）中的最高版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：这些范围永远不允许依赖从稳定版本跳到实验性或预发布包中。&lt;/p&gt;
&lt;h1 id=&#34;embedded-dependencies嵌入式依赖&#34;&gt;Embedded dependencies(嵌入式依赖) &lt;a href=&#34;#embedded-dependencies%e5%b5%8c%e5%85%a5%e5%bc%8f%e4%be%9d%e8%b5%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你项目中&lt;code&gt;Packages&lt;/code&gt;文件夹下的任何包都被嵌入到那个项目中。你可以通过几种方式创建一个&lt;strong&gt;嵌入式包&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在项目的&lt;code&gt;Packages&lt;/code&gt;文件夹下直接创建新包。&lt;/li&gt;
&lt;li&gt;手动从项目的包缓存中复制Unity包，粘贴到你的项目的&lt;code&gt;Packages&lt;/code&gt;文件夹下。&lt;/li&gt;
&lt;li&gt;使用C#脚本将已安装的包版本嵌入到项目中。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;嵌入式包不需要作为依赖出现在&lt;strong&gt;项目清单&lt;/strong&gt;中。然而，如果你嵌入了一个已安装的包的版本，你的项目清单仍然会列出对原始已安装版本的依赖。在这种情况下，磁盘上的包优先于作为依赖列出的包版本，所以不需要从项目清单中删除它。例如，如果项目清单指定了对&lt;code&gt;com.unity.example&lt;/code&gt;包版本1.3.1的依赖，但项目也有一个嵌入了名为该名称的包，包管理器会使用嵌入式包，无论它的明显版本如何，而不会去从注册表中下载版本1.3.1。&lt;/p&gt;
&lt;p&gt;确保你跟踪你的嵌入式包的内容，以及你对其进行的任何更改。如果你的Unity项目在源代码控制之下，将在该项目中嵌入的任何包添加到同一源代码控制中。&lt;/p&gt;
&lt;h2 id=&#34;creating-a-new-custom-package创建新的自定义包&#34;&gt;Creating a new custom package(创建新的自定义包) &lt;a href=&#34;#creating-a-new-custom-package%e5%88%9b%e5%bb%ba%e6%96%b0%e7%9a%84%e8%87%aa%e5%ae%9a%e4%b9%89%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要嵌入一个新的包，将你的新包内容创建在&lt;code&gt;Packages&lt;/code&gt;文件夹下的一个子文件夹中。获取更多信息，可以按照创建自定义包的指示进行操作。&lt;/p&gt;
&lt;p&gt;通常，你的新包会一直嵌入在你的项目中，直到你准备好与其他用户分享并在其他项目中测试它。然后，你可以将它发布到有作用域的包注册表中。&lt;/p&gt;
&lt;h2 id=&#34;copying-a-unity-package-from-the-cache从缓存复制unity包&#34;&gt;Copying a Unity package from the cache(从缓存复制Unity包) &lt;a href=&#34;#copying-a-unity-package-from-the-cache%e4%bb%8e%e7%bc%93%e5%ad%98%e5%a4%8d%e5%88%b6unity%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从注册表安装的包是&lt;strong&gt;不可变的&lt;/strong&gt;，这意味着你不能编辑它。如果你想编辑一个包，你可以通过将它复制到你的&lt;code&gt;Projects&lt;/code&gt;文件夹来使其变为&lt;strong&gt;可变的&lt;/strong&gt;。这种类型的包被称为嵌入式包，它会覆盖你的包缓存中的内容。之后，你可以从&lt;code&gt;Project&lt;/code&gt;文件夹中删除该嵌入式包的文件夹，包管理器会自动切换到不可变的，已缓存的包。&lt;/p&gt;
&lt;p&gt;在缓存中找到你的包文件夹的最可靠方法是直接在Unity编辑器中定位已安装的版本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开项目窗口，选择&lt;strong&gt;Window&lt;/strong&gt;菜单，然后选择&lt;strong&gt;General&lt;/strong&gt; &amp;gt; &lt;strong&gt;Project&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从&lt;strong&gt;Project窗口&lt;/strong&gt;中找出你想要嵌入的已安装包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;右键点击所选包的文件夹，选择&lt;strong&gt;Show in Explorer&lt;/strong&gt;（Windows）或&lt;strong&gt;Reveal in Finder&lt;/strong&gt;（macOS）。此操作将在文件浏览器中使用&lt;code&gt;&amp;lt;package-name&amp;gt;@&amp;lt;package-version&amp;gt;&lt;/code&gt;命名规则直接打开该包的文件夹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你想要嵌入在你的项目中找不到的包，你可以直接从你项目的包缓存（&lt;code&gt;&amp;lt;project&amp;gt;/Library/PackageCache&lt;/code&gt;）获取，只需使用你的文件浏览器或命令行导航到正确的文件夹。然而，让编辑器为你找到它更为可靠，因为除了在项目缓存中定位包外，编辑器还会找到从本地文件夹或tarball安装，以及已经嵌入的包。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-embed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;文件浏览器打开到项目包缓存下的包文件夹&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;复制包文件夹并直接粘贴到你的项目的&lt;code&gt;Packages&lt;/code&gt;文件夹中。不要将它放在&lt;code&gt;Assets&lt;/code&gt;文件夹中，因为包管理器不会扫描该文件夹以寻找包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;移除文件夹名中的&lt;code&gt;@&amp;lt;package-version&amp;gt;&lt;/code&gt;部分。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你的项目已经在源代码控制下，那么将新嵌入的包添加到源代码控制中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你也可以在全局缓存下找到包文件夹，但全局缓存包含了你的系统上曾安装过的所有Unity编辑器版本的包，所以选择与你的项目的编辑器版本兼容的版本时要小心。&lt;/p&gt;
&lt;p&gt;如果你想删除嵌入式包，使用你的文件浏览器或命令行在你的&lt;code&gt;Packages&lt;/code&gt;文件夹中定位那个包。考虑给嵌入式包的文件夹备份，否则你会失去对该包作的任何更改。然后，从你的&lt;code&gt;Packages&lt;/code&gt;文件夹中删除那个包的文件夹。包管理器会自动切换回不可改变的，已缓存的包。&lt;/p&gt;
&lt;h1 id=&#34;git-dependenciesgit依赖项&#34;&gt;Git dependencies(Git依赖项) &lt;a href=&#34;#git-dependenciesgit%e4%be%9d%e8%b5%96%e9%a1%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当包管理器从Git仓库获取一个包时，它会将包本地添加到你的项目中。这允许你测试未发布的更改，但你不能用它来为那个Git仓库贡献代码。如果你想将一个已存在的本地Git仓库设为你的项目的依赖项，那么可以使用指向你本地Git仓库的路径来代替。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你不能在package.json文件中指定&lt;strong&gt;Git依赖项&lt;/strong&gt;，因为包管理器不支持包之间的Git依赖。它只支持项目的Git依赖，所以你只能在项目的manifest.json文件中声明Git依赖。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：如果你想更新你的Git依赖到仓库中的特定版本（修订版），请参阅Locked Git依赖项。&lt;/p&gt;
&lt;p&gt;本节包括以下主题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要求&lt;/li&gt;
&lt;li&gt;Git URLs
&lt;ul&gt;
&lt;li&gt;使用HTTP/HTTPS协议&lt;/li&gt;
&lt;li&gt;使用SSH协议&lt;/li&gt;
&lt;li&gt;使用FILE协议&lt;/li&gt;
&lt;li&gt;使用GIT协议&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;扩展语法
&lt;ul&gt;
&lt;li&gt;指定一个Git修订版&lt;/li&gt;
&lt;li&gt;在仓库的子文件夹中指定一个包&lt;/li&gt;
&lt;li&gt;同时指定修订版和路径&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;锁定的Git依赖项&lt;/li&gt;
&lt;li&gt;Git LFS支持&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;requirements要求&#34;&gt;Requirements(要求) &lt;a href=&#34;#requirements%e8%a6%81%e6%b1%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要在项目中使用Git依赖项，请确保你在电脑上安装了Git客户端（最低版本2.14.0），并已将Git可执行路径添加到PATH系统环境变量中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：Unity已经测试过包管理器与Git 2.14.0及以上版本的兼容性。如果你使用的Git版本低于2.14.0，Unity无法保证结果。&lt;/p&gt;
&lt;p&gt;如果仓库跟踪的文件使用的是Git LFS，确保你的机器上也安装了Git LFS客户端。如果未安装，包管理器无法获取存储在LFS服务器上的文件，而是在没有任何错误或警告消息的情况下检出LFS指针文件。&lt;/p&gt;
&lt;p&gt;你可以使用包管理器窗口直接从Git仓库安装一个包。要获取更多信息，请参考从Git URL安装。&lt;/p&gt;
&lt;h2 id=&#34;git-urls&#34;&gt;Git URLs &lt;a href=&#34;#git-urls&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包管理器支持所有的Git协议，除了本地文件路径。要将Git URL指定为依赖项，需要在&lt;strong&gt;项目清单&lt;/strong&gt;中添加包的名称，使用Git的URL而不是版本号或本地文件路径。例如，以下是如何使用不同协议指定远程Git的示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository1.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh://git@github.example.com/myuser/myrepository2.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file://localhost/github.example.com/myuser/myrepository3.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage4&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git://github.example.com/myuser/myrepository4.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;etc.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;包管理器通过查看仓库路径末尾的&lt;code&gt;.git&lt;/code&gt;文件扩展名，来识别格式为URL的依赖项是否为Git URL。一些Git仓库托管服务不支持带有此扩展名的URL，而其他一些则强制要求。因此，Git依赖项语法允许你在使用GIT协议，或在HTTP/HTTPS，SSH，FILE URL之前添加特殊的&lt;code&gt;git+&lt;/code&gt;前缀时，省略这个扩展名。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;git+&lt;/code&gt;前缀是&lt;code&gt;manifest.json&lt;/code&gt;文件中的一个特殊标记，表明依赖项是基于Git的。包管理器在克隆仓库时不会将它传递给Git。&lt;/p&gt;
&lt;p&gt;要获取有关Git支持的URL格式的更多信息，请参考git clone命令的文档。要了解Git使用的协议之间的区别，请参阅Git文档中关于使用协议的部分。&lt;/p&gt;
&lt;p&gt;你还可以为Git依赖项使用扩展语法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果你想要的包不在仓库的根目录，你可以指定到仓库中包的子文件夹的路径。只有当你需要的包不在仓库的根部时，才需要这样做。例如，在以下字符串中的&lt;code&gt;?path=/folder1/folder2&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git?path=/folder1/folder2&amp;quot;&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;要获取更多信息，请参阅在子文件夹中指定一个包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你可以指定一个Git修订版，它可以是一个标签，分支名，或一个特定的提交哈希来锁定。这确保包管理器始终加载那个确切的修订版。如果你不指定修订版，包管理器会克隆默认分支和最新提交的仓库，并锁定到那个修订版。例如，以下字符串中的&lt;code&gt;#v2.0.0&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git#v2.0.0&amp;quot;&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;要获取更多信息，请参阅指定一个Git修订版。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;using-the-httphttps-protocol&#34;&gt;Using the HTTP/HTTPS protocol &lt;a href=&#34;#using-the-httphttps-protocol&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;你可以使用带有完整URL的HTTPS协议：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你的Git服务器不支持&lt;code&gt;.git&lt;/code&gt;扩展，你可以添加特殊的&lt;code&gt;git+&lt;/code&gt;前缀，带或不带这个扩展：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+https://github.example.com/myuser/myrepository1.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+https://github.example.com/myuser/myrepository2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：或者，你可以使用GIT协议，而不是&lt;code&gt;git+&lt;/code&gt;前缀。要获取更多信息，请参阅使用GIT协议。&lt;/p&gt;
&lt;p&gt;如果仓库可以公开访问，对于与用户分享Git URLs，我们建议使用HTTPS方案，因为你可以直接从Git仓库托管服务网页复制和粘贴URL。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-git-cloning.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;从包仓库复制URL&lt;/p&gt;
&lt;p&gt;如果仓库不是公开可访问的，并且你正在使用HTTPS，仓库服务器会因为你无法与服务器交互以提供你的凭证而无法验证你的身份。在这种情况下，编辑器会通知你身份验证失败。&lt;/p&gt;
&lt;p&gt;要解决这些身份验证问题，你可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;预先使用Git凭证助手进行身份验证。获取更多信息，请参考&amp;quot;使用HTTPS Git URL与私有仓库进行交互&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;改为使用SSH协议。如果你设置并配置了与Git仓库托管服务的SSH密钥对，包管理器可以无缝地代表你验证请求。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;using-the-ssh-protocol&#34;&gt;Using the SSH protocol &lt;a href=&#34;#using-the-ssh-protocol&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;你可以使用带有完整URL的SSH协议：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ssh://git@mycompany.github.com/gitproject/com.mycompany.mypackage.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果你的Git服务器不支持&lt;code&gt;.git&lt;/code&gt;扩展，你可以添加特殊的&lt;code&gt;git+&lt;/code&gt;前缀，带或不带这个扩展：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+ssh://git@github.example.com/myuser/myrepository1.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+ssh://git@github.example.com/myuser/myrepository2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：或者，你可以使用GIT协议，而不是&lt;code&gt;git+&lt;/code&gt;前缀。要获取更多信息，请参见使用GIT协议的部分。&lt;/p&gt;
&lt;p&gt;你也可以使用类似SCP的简写，包管理器总是会识别它为Git依赖项：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git@mycompany.github.com:gitproject/com.mycompany.mypackage.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;using-putty-on-windows在windows上使用putty&#34;&gt;Using PuTTY on Windows(在Windows上使用PuTTY) &lt;a href=&#34;#using-putty-on-windows%e5%9c%a8windows%e4%b8%8a%e4%bd%bf%e7%94%a8putty&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;当你使用SSH进行身份验证时，Git将使用默认位置的密钥。然而，如果你在Windows上使用PuTTY作为SSH客户端，你需要配置&lt;code&gt;GIT_SSH&lt;/code&gt;环境变量，使其指向&lt;code&gt;plink.exe&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id=&#34;authenticating-with-sshssh身份验证&#34;&gt;Authenticating with SSH(SSH身份验证) &lt;a href=&#34;#authenticating-with-sshssh%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;如果你想使用SSH协议，你需要在Unity外部设置SSH密钥。有关为特定主机设置身份验证的更多信息，请参阅Bitbucket、GitLab和GitHub的帮助页面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你用密语加密了你的SSH密钥，包管理器就无法检索到包，因为它没有提供在终端或命令行中输入密语的方式。在这种情况下，编辑器会通知你身份验证失败。关于使用身份验证代理的信息，请参阅&amp;quot;使用SSH Git URLs的口令保护SSH密钥&amp;quot;。关于使用&lt;strong&gt;ssh-agent&lt;/strong&gt;进行身份验证的更多信息，请参阅SSH的解决方案。&lt;/p&gt;
&lt;h3 id=&#34;using-the-file-protocol使用file协议&#34;&gt;Using the FILE protocol(使用FILE协议) &lt;a href=&#34;#using-the-file-protocol%e4%bd%bf%e7%94%a8file%e5%8d%8f%e8%ae%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;除非它们格式正确，否则包管理器不会把带有&lt;code&gt;file:&lt;/code&gt;前缀的Git URL识别为Git依赖项。这意味着你必须使用&lt;code&gt;git+file:&lt;/code&gt;协议，或者使用带&lt;code&gt;.git&lt;/code&gt;后缀的&lt;code&gt;file:&lt;/code&gt;协议：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+file://github.example.com/myuser/myrepository1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+file:///github.example.com/myuser/myrepository2&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:///github.example.com/myuser/myrepository3.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：或者，你可以使用GIT协议，而不是&lt;code&gt;git+&lt;/code&gt;前缀。要获得更多信息，请参见使用GIT协议的部分。&lt;/p&gt;
&lt;p&gt;包管理器会将任何其他语法解读为本地路径。&lt;/p&gt;
&lt;h3 id=&#34;using-the-git-protocol使用git协议&#34;&gt;Using the GIT protocol(使用GIT协议) &lt;a href=&#34;#using-the-git-protocol%e4%bd%bf%e7%94%a8git%e5%8d%8f%e8%ae%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;包管理器能识别带或不带&lt;code&gt;.git&lt;/code&gt;路径后缀的&lt;code&gt;git:&lt;/code&gt;协议：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git://github.example.com/myuser/myrepository1.git&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git://github.example.com/myuser/myrepository2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GIT协议不需要也不支持&lt;code&gt;git+&lt;/code&gt;前缀。&lt;/p&gt;
&lt;h2 id=&#34;extended-syntax扩展语法&#34;&gt;Extended syntax(扩展语法) &lt;a href=&#34;#extended-syntax%e6%89%a9%e5%b1%95%e8%af%ad%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你可以使用扩展语法来标识特定的Git版本，一个子文件夹中的包，或者两者都标识。&lt;/p&gt;
&lt;p&gt;你可以在Unity支持的任何Git协议中使用扩展语法。&lt;/p&gt;
&lt;h3 id=&#34;specifying-a-git-revision指定git版本&#34;&gt;Specifying a Git revision(指定Git版本) &lt;a href=&#34;#specifying-a-git-revision%e6%8c%87%e5%ae%9agit%e7%89%88%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;为了声明你希望包管理器克隆的特定版本，在URL的末尾加上由井号(&lt;code&gt;#&lt;/code&gt;)前缀的版本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository1.git#revision&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage2&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;git+https://github.example.com/myuser/myrepository2#revision&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;版本可以是任何标签，分支或提交哈希。你必须提供完整的提交哈希。Unity不支持缩短的SHA-1哈希。以下表格展示了指定版本的例子：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Syntax语法&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;URL example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;最新默认分支&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定的分支&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git#my-branch&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;特定版本&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git#v2.0.0&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;提交哈希&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;quot;https://github.example.com/myuser/myrepository.git#9e72f9d5a6a3dadc38d813d8399e1b0e86781a49&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;specifying-a-package-in-a-subfolder-of-the-repository指定仓库子文件夹中的包&#34;&gt;Specifying a package in a subfolder of the repository(指定仓库子文件夹中的包) &lt;a href=&#34;#specifying-a-package-in-a-subfolder-of-the-repository%e6%8c%87%e5%ae%9a%e4%bb%93%e5%ba%93%e5%ad%90%e6%96%87%e4%bb%b6%e5%a4%b9%e4%b8%ad%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你使用Git URL语法指定一个仓库，包管理器会假设包必须位于仓库的根目录。然而，有些包并不在它们的仓库的根级别，有些仓库中包含了多个包。&lt;/p&gt;
&lt;p&gt;你可以在Git URL中使用&lt;code&gt;path&lt;/code&gt;查询参数通知包管理器在何处找到包。你指定的路径必须是相对于仓库根目录的，并且你指定的子文件夹必须包含&lt;strong&gt;包清单&lt;/strong&gt;（&lt;code&gt;package.json&lt;/code&gt;文件）。&lt;/p&gt;
&lt;p&gt;要为Git依赖关系指定一个仓库子文件夹，使用&lt;code&gt;path&lt;/code&gt;查询参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository.git?path=/subfolder&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这种情况下，包管理器会注册位于指定仓库子文件夹中的包，并忽略仓库的其他部分。&lt;/p&gt;
&lt;p&gt;有时，一个仓库包含几个相关的包。如果你想要从同一仓库添加多个包，你必须在你的项目清单中添加两个单独的条目：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage1&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository.git?path=/subfolder1&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage3&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository.git?path=/subfolder2/subfolder3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你多次指定同一仓库，包管理器会克隆同一个仓库多次，这将导致性能降低和额外的网络使用。&lt;/p&gt;
&lt;h3 id=&#34;specifying-revisions-and-paths-at-the-same-time同时指定修订版本和路径&#34;&gt;Specifying revisions and paths at the same time(同时指定修订版本和路径) &lt;a href=&#34;#specifying-revisions-and-paths-at-the-same-time%e5%90%8c%e6%97%b6%e6%8c%87%e5%ae%9a%e4%bf%ae%e8%ae%a2%e7%89%88%e6%9c%ac%e5%92%8c%e8%b7%af%e5%be%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;你可以使用Unity支持的任何Git协议指定路径和修订版本。然而，&lt;code&gt;path&lt;/code&gt;查询参数总是位于修订版本锚点的前面。反向顺序是无效的。以下是正确顺序的一个示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;com.mycompany.mypackage&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;locked-git-dependencies锁定的git依赖&#34;&gt;Locked Git dependencies(锁定的Git依赖) &lt;a href=&#34;#locked-git-dependencies%e9%94%81%e5%ae%9a%e7%9a%84git%e4%be%9d%e8%b5%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包管理器的核心原则之一是确定性。如果你与其他用户共享你的项目，包管理器应该安装相同的包依赖和版本集，并包括它从Git中获取的包。为了达到这个目标，包管理器通过使用锁文件来跟踪Git依赖的提交哈希。&lt;/p&gt;
&lt;p&gt;当你添加一个Git依赖项并将修订版本设置为一个分支或一个标签时，包管理器会获取相应的提交哈希以存储在锁文件中。随着时间的推移，分支和标签可能会指向Git仓库上的不同提交。例如，一个分支可能有更多的新提交添加到它上面。&lt;/p&gt;
&lt;p&gt;要更新包到分支或标签指向的不同提交，使用从git URL安装包的按钮并输入一个Git URL。你可以使用相同的Git URL，因为当你提交一个新请求时，包管理器会忽略锁定的提交哈希。然而，你也可以指定一个新的修订号、标签或分支作为修订。&lt;/p&gt;
&lt;p&gt;另外，你也可以使用那个Git URL创建一个带有Client.Add C# API方法的脚本。&lt;/p&gt;
&lt;h2 id=&#34;git-lfs-supportgit-lfs支持&#34;&gt;Git LFS Support(Git LFS支持) &lt;a href=&#34;#git-lfs-supportgit-lfs%e6%94%af%e6%8c%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包管理器支持使用Git LFS的Git依赖项仓库。由于Git LFS设计用来进行最小的配置开销，因此它支持HTTPS和SSH认证：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关于HTTPS认证的信息，请参考使用HTTP/HTTPS协议。&lt;/li&gt;
&lt;li&gt;关于SSH认证的信息，请参考使用SSH协议。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果用户需要认证并且没有访问远程仓库权限的有效凭据，则无法从LFS服务器检索存储的文件。&lt;/p&gt;
&lt;p&gt;包作者可以通过在仓库中的&lt;code&gt;.lfsconfig&lt;/code&gt;配置文件中提供URL来帮助Git LFS客户端定位LFS服务器。有两种方式可以做到这一点：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Option&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;global&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;setting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;lfs&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;ssh:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//git@HOSTNAME/path/to/repo.git
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;Option&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;per-remote&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;setting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;remote&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;origin&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;lfsurl&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;ssh:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//git@HOSTNAME/path/to/repo.git
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果仓库包含一个&lt;code&gt;.lfsconfig&lt;/code&gt;文件，确保你将其包含在&lt;code&gt;.npmignore&lt;/code&gt;文件中，以避免在发布包的版本中包含它。&lt;/p&gt;
&lt;h3 id=&#34;git-lfs-cachegit-lfs缓存&#34;&gt;Git LFS cache(Git LFS缓存) &lt;a href=&#34;#git-lfs-cachegit-lfs%e7%bc%93%e5%ad%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;从Unity 2021.2开始，你可以选择启用一个Git LFS缓存供包管理器在检出基于Git的依赖项时使用。这样可以避免在检出仓库的不同修改版本时下载相同的文件。&lt;/p&gt;
&lt;p&gt;包管理器的Git LFS缓存与你的Git仓库的&lt;code&gt;.git/lfs&lt;/code&gt;文件夹中的Git LFS缓存是不同的。包管理器不能使用默认的Git缓存，因为它在将包复制到项目缓存后不会保留克隆的仓库。&lt;/p&gt;
&lt;p&gt;要启用包管理器的Git LFS缓存，选择以下选项之一：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要启用Git LFS缓存并使用默认全局缓存根下的&lt;code&gt;git-lfs&lt;/code&gt;子文件夹作为其位置，将&lt;code&gt;UPM_ENABLE_GIT_LFS_CACHE&lt;/code&gt;环境变量设置为任何非空值。&lt;/li&gt;
&lt;li&gt;要启用Git LFS缓存并为其使用自定义位置，将&lt;code&gt;UPM_GIT_LFS_CACHE_PATH&lt;/code&gt;环境变量设置为自定义路径。当你设置位置时，Git LFS缓存选项将自动启用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关设置全局缓存的环境变量的更多信息，请参阅自定义全局缓存。&lt;/p&gt;
&lt;p&gt;**注意：**使用启用Git LFS的包时，这种优化需要额外的硬盘空间。你需要决定哪个更有利：Git LFS文件缓存消耗磁盘空间但避免了重新下载相同的文件。然而，有些情况不能利用缓存，并在不复用文件的情况下占用磁盘空间。例如，你的Git依赖项可能解析为引用不同LFS跟踪文件内容的修订，如下面的情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在多个项目的依赖项中使用不同的Git修订&lt;/li&gt;
&lt;li&gt;频繁更新包至包含不同变更的LFS文件的修订&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;local-folder-or-tarball-paths本地文件夹或压缩包路径&#34;&gt;Local folder or tarball paths(本地文件夹或压缩包路径) &lt;a href=&#34;#local-folder-or-tarball-paths%e6%9c%ac%e5%9c%b0%e6%96%87%e4%bb%b6%e5%a4%b9%e6%88%96%e5%8e%8b%e7%bc%a9%e5%8c%85%e8%b7%af%e5%be%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以将依赖项指定为包含包的任何本地文件夹或压缩包。此功能对本地离线开发和测试非常有用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你想将本地文件系统上的包作为Git依赖项引用，应使用&lt;code&gt;file://&amp;lt;url&amp;gt;&lt;/code&gt;格式。Unity不支持直接用文件路径引用本地可访问的Git仓库。有关&lt;code&gt;file://&amp;lt;url&amp;gt;&lt;/code&gt;格式的更多信息，请参考Git依赖。&lt;/p&gt;
&lt;p&gt;本节描述了如何使用&lt;strong&gt;项目清单&lt;/strong&gt;设置本地依赖项。如果你想使用包管理器窗口，可按照以下页面的说明操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从本地文件夹安装包&lt;/li&gt;
&lt;li&gt;从本地压缩包文件安装包&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;路径引用始终以&lt;code&gt;file:&lt;/code&gt;为前缀，并使用正斜杠(&lt;code&gt;/&lt;/code&gt;)作为路径分隔符。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在Windows上，你也可以使用反斜杠(&lt;code&gt;\&lt;/code&gt;)，但每个反斜杠都必须转义（例如，&lt;code&gt;&amp;quot;file:..\\github\\my_package_folder&amp;quot;&lt;/code&gt;或&lt;code&gt;&amp;quot;file:C:\\Users\\my_username\\github\\my_package_folder&amp;quot;&lt;/code&gt;）。这些路径并不容易阅读，容易打错，且只能在Windows机器上使用。因此，使用正斜杠是更好的选择。&lt;/p&gt;
&lt;p&gt;你可以使用绝对路径，或相对于项目的&lt;code&gt;Packages&lt;/code&gt;文件夹（即项目清单的根文件夹）的路径。换句话说，前缀为两个点(&lt;code&gt;..&lt;/code&gt;)的路径指的是项目路径的根，因此&lt;code&gt;../another_folder&lt;/code&gt;是&lt;code&gt;Packages&lt;/code&gt;文件夹的同级文件夹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：相对路径配合正斜杠在同一仓库中跟踪项目和包时，可以在不同的机器和操作系统上提供更好的可移植性。&lt;/p&gt;
&lt;p&gt;对于Windows的绝对路径，驱动器字母及其冒号（通常为&lt;code&gt;C:&lt;/code&gt;）跟在&lt;code&gt;file:&lt;/code&gt;前缀后，其余的与Linux或macOS路径相同。&lt;/p&gt;
&lt;h2 id=&#34;example-of-a-relative-path相对路径示例&#34;&gt;Example of a relative path(相对路径示例) &lt;a href=&#34;#example-of-a-relative-path%e7%9b%b8%e5%af%b9%e8%b7%af%e5%be%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在&lt;code&gt;file:&lt;/code&gt;前缀之后，路径是一个标准的相对路径。在以下示例中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;项目的&lt;code&gt;Packages&lt;/code&gt;文件夹是&lt;code&gt;C:\Users\my_username\Projects\my_project\Packages&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Projects&lt;/code&gt;，&lt;code&gt;github&lt;/code&gt;，和&lt;code&gt;Downloads&lt;/code&gt;文件夹是同级文件夹。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;my_package_c&lt;/code&gt;是一个&lt;strong&gt;嵌入式包&lt;/strong&gt;（复制到&lt;code&gt;Packages&lt;/code&gt;文件夹中以使其可变的包）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_a&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:../github/my_package_folder&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_b&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:../Downloads/my_package_tarball.tgz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;my_package_c&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:com.unity.textmeshpro&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;example-of-an-absolute-path-in-linux-or-macoslinux或macos中的绝对路径示例&#34;&gt;Example of an absolute path in Linux or macOS(Linux或macOS中的绝对路径示例) &lt;a href=&#34;#example-of-an-absolute-path-in-linux-or-macoslinux%e6%88%96macos%e4%b8%ad%e7%9a%84%e7%bb%9d%e5%af%b9%e8%b7%af%e5%be%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在&lt;code&gt;file:&lt;/code&gt;前缀之后，路径是一个标准的可移植操作系统接口（POSIX）路径，以正斜杠&lt;code&gt;/&lt;/code&gt;开头：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_a&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:/Users/my_username/github/my_package_folder&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_b&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:/Users/my_username/Downloads/my_package_tarball.tgz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;example-of-an-absolute-path-in-windowswindows中的绝对路径示例&#34;&gt;Example of an absolute path in Windows(Windows中的绝对路径示例) &lt;a href=&#34;#example-of-an-absolute-path-in-windowswindows%e4%b8%ad%e7%9a%84%e7%bb%9d%e5%af%b9%e8%b7%af%e5%be%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;注意，驱动器字母紧跟在&lt;code&gt;file:&lt;/code&gt;前缀之后：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_a&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:C:/Users/my_username/github/my_package_folder&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;my_package_b&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;file:C:/Users/my_username/Downloads/my_package_tarball.tgz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;troubleshooting故障排除&#34;&gt;Troubleshooting(故障排除) &lt;a href=&#34;#troubleshooting%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本节提供以下问题的信息：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Type of error:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Error message:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;一般启动问题&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 在包管理器窗口中的错误消息 - 包管理器缺失或窗口无法打开 - 升级Unity至新版本后出现的问题&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包安装问题&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 包安装失败 - 无法从Git URL添加包 - 硬盘空间不足&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包签名问题&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 包版本没有签名 - 包版本没有有效的签名&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;安装git依赖项的问题&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 没有找到&amp;rsquo;git&amp;rsquo;可执行文件 - git-lfs: 命令未找到 - 仓库未找到 - 无法读取用户名: 终端提示禁用 - 无法更新Git版本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;资产商店&lt;/strong&gt;中的&lt;strong&gt;资产包&lt;/strong&gt;（我的资产）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 在我的资产上下文中&amp;rsquo;解析http回应失败&#39;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;域注册&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 在包管理器窗口中找不到‘我的注册’&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;构建包时的问题&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 缺少MonoBehaviour错误&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果你遇到可能与网络有关的问题，你也可以运行Unity包管理器的&lt;strong&gt;诊断&lt;/strong&gt;工具。欲了解更多信息，请参考诊断网络问题。&lt;/p&gt;
&lt;h2 id=&#34;error-messages-in-the-package-manager-window包管理器窗口中的错误消息&#34;&gt;Error messages in the Package Manager window(包管理器窗口中的错误消息) &lt;a href=&#34;#error-messages-in-the-package-manager-window%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e7%aa%97%e5%8f%a3%e4%b8%ad%e7%9a%84%e9%94%99%e8%af%af%e6%b6%88%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当包管理器遇到问题时，它会在包管理器窗口中显示错误指示符。&lt;/p&gt;
&lt;h3 id=&#34;system-wide-issues系统范围的问题&#34;&gt;System-wide issues(系统范围的问题) &lt;a href=&#34;#system-wide-issues%e7%b3%bb%e7%bb%9f%e8%8c%83%e5%9b%b4%e7%9a%84%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络连接问题&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当包管理器检测到与特定包无关的问题时，错误消息会出现在状态栏中。例如，如果包管理器无法访问包注册服务器，它会在状态栏中显示此消息：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-ui-errors.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;刷新资产错误（或刷新包错误）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您的网络无法连接到包注册服务器，可能是因为网络连接问题。当您或您的系统管理员诊断并解决网络错误后，状态栏会被清空。&lt;/p&gt;
&lt;p&gt;如果您的网络连接正常，但你没有登录您的Unity账户，包管理器不会显示任何资产商店的包。当你试图使用&lt;strong&gt;我的资产&lt;/strong&gt;上下文时，包管理器会提示你登录：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-ui-unityid.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击列表面板内的&lt;strong&gt;登录&lt;/strong&gt;按钮，通过Unity Hub登录您的Unity账户。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;package-specific-issues特定包的问题&#34;&gt;Package-specific issues(特定包的问题) &lt;a href=&#34;#package-specific-issues%e7%89%b9%e5%ae%9a%e5%8c%85%e7%9a%84%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果在加载或安装特定包时出现问题（例如，确定要加载哪个版本的包时），错误图标会在被影响的包旁边的列表面板中出现 &lt;strong&gt;(A)&lt;/strong&gt;。要了解问题在哪，检查被影响的包的详细信息面板，以查看详细的错误消息 &lt;strong&gt;(B)&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-ui-errormsg.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-manager-missing-or-window-doesnt-open包管理器缺失或窗口无法打开&#34;&gt;Package Manager missing or window doesn’t open(包管理器缺失或窗口无法打开) &lt;a href=&#34;#package-manager-missing-or-window-doesnt-open%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e7%bc%ba%e5%a4%b1%e6%88%96%e7%aa%97%e5%8f%a3%e6%97%a0%e6%b3%95%e6%89%93%e5%bc%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包管理器窗口可能被移出屏幕或被其它窗口覆盖。当这种情况发生时，看起来就像包管理器窗口无法打开一样。在这种情况下，你可以尝试重置窗口布局（&lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;Layouts&lt;/strong&gt; &amp;gt; &lt;strong&gt;Default&lt;/strong&gt;），然后重试打开包管理器窗口。&lt;/p&gt;
&lt;p&gt;如果包管理器窗口仍然无法显示，你可以检查一下你的Unity &lt;strong&gt;Console window&lt;/strong&gt;。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Failed to resolve packages: The file [&amp;lt;project-path&amp;gt;/Packages/manifest.json] is not valid JSON:
  Unexpected token &amp;#39;}&amp;#39; at 44:1
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个错误信息表明 &lt;code&gt;manifest.json&lt;/code&gt; 文件存在问题。它还告诉你包管理器在解析文件失败的行号，因此你可以修复 JSON。你可以使用几个在线验证器尝试纠正问题。一旦你保存了修正后的文件，Unity就会重新加载包管理器窗口。&lt;/p&gt;
&lt;p&gt;如果你从早期版本的Unity编辑器升级，可能会存在其它的 &lt;strong&gt;包清单&lt;/strong&gt; 文件问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;从2019.3开始，你的 &lt;code&gt;manifest.json&lt;/code&gt; 文件中不应该包含对 &lt;strong&gt;com.unity.package-manager-ui&lt;/strong&gt; 包的引用。请从依赖列表中删除以下这行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;com.unity.package-manager-ui&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2.1.1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查你的 &lt;strong&gt;项目清单&lt;/strong&gt; 是否使用 &lt;strong&gt;“exclude”&lt;/strong&gt; 作为包版本。这是依赖性属性的已废弃值。如果你找到了类似的行，删除整行。包管理器只安装显式地作为项目依赖包含的包，所以一旦你删除了那个条目，包管理器就会忽略该包，不会进行安装。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;problems-after-upgrading-unity-to-new-version升级到新版unity后的问题&#34;&gt;Problems after upgrading Unity to new version(升级到新版Unity后的问题) &lt;a href=&#34;#problems-after-upgrading-unity-to-new-version%e5%8d%87%e7%ba%a7%e5%88%b0%e6%96%b0%e7%89%88unity%e5%90%8e%e7%9a%84%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当你将一个项目升级到更新的Unity版本后，包管理器会自动更新不兼容的包到新的适用的版本。然而，如果你的包无法编译，包管理器会在 &lt;strong&gt;控制台&lt;/strong&gt; 窗口显示错误信息。&lt;/p&gt;
&lt;p&gt;为了纠正这些信息，阅读错误消息并修复你能解决的任何问题。例如，一个包可能缺少对其他包或版本的依赖。在这种情况下，你可以尝试自行安装此包。&lt;/p&gt;
&lt;p&gt;你也可以尝试以下解决方案的顺序，直到你找到有效的方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;备份然后删除项目下的 &lt;code&gt;Packages&lt;/code&gt; 文件夹。&lt;/li&gt;
&lt;li&gt;备份并删除项目 &lt;code&gt;Packages&lt;/code&gt; 文件夹中的包源，只留下 &lt;code&gt;manifest.json&lt;/code&gt; 文件。然后尝试重新载入项目。&lt;/li&gt;
&lt;li&gt;创建一个新的空白项目。如果包管理器窗口在没有错误的情况下加载，将失败项目中的 &lt;code&gt;Library/PackageCache/com.unity.package-manager-ui@&amp;lt;version&amp;gt;&lt;/code&gt; 文件夹替换成新创建项目中的相同文件夹。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-installation-fails包安装失败&#34;&gt;Package installation fails(包安装失败) &lt;a href=&#34;#package-installation-fails%e5%8c%85%e5%ae%89%e8%a3%85%e5%a4%b1%e8%b4%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你正在尝试从注册表安装一个新的包但不行，可能是由于权限问题。&lt;/p&gt;
&lt;p&gt;你必须对缓存文件夹具有完全权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows（用户帐户）：&lt;code&gt;%LOCALAPPDATA%\Unity\cache\upm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows（系统账户）：&lt;code&gt;%ALLUSERSPROFILE%\Unity\cache\upm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;macOS：&lt;code&gt;$HOME/Library/Caches/Unity/upm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Linux: &lt;code&gt;$HOME/.cache/Unity/upm&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可能是网络问题。请检查你的防火墙和代理设置。&lt;/p&gt;
&lt;p&gt;有时，像学校、政府办公室或使用网络保护的工作场所等机构环境会设置代理服务器，以控制网络和互联网之间的流量，并使用他们自己的服务器证书，这些证书可能无法被Unity或包管理器识别。请联系你的网络管理员。&lt;/p&gt;
&lt;h2 id=&#34;unable-to-add-package-from-git-url无法从git-url添加包&#34;&gt;Unable to add package from Git URL(无法从Git URL添加包) &lt;a href=&#34;#unable-to-add-package-from-git-url%e6%97%a0%e6%b3%95%e4%bb%8egit-url%e6%b7%bb%e5%8a%a0%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;请参阅“无法找到存储库”&lt;/p&gt;
&lt;h2 id=&#34;insufficient-drive-space磁盘空间不足&#34;&gt;Insufficient drive space(磁盘空间不足) &lt;a href=&#34;#insufficient-drive-space%e7%a3%81%e7%9b%98%e7%a9%ba%e9%97%b4%e4%b8%8d%e8%b6%b3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你的安装盘空间不足，可以考虑下列解决方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;更改全局缓存的位置。参阅“自定义全局缓存”。&lt;/li&gt;
&lt;li&gt;更改资源包缓存的位置。参阅“自定义资源包缓存位置”。&lt;/li&gt;
&lt;li&gt;减少注册表数据缓存限制的最大大小。参阅“自定义全局缓存”。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-version-has-no-signature包版本没有签名&#34;&gt;Package version has no signature(包版本没有签名) &lt;a href=&#34;#package-version-has-no-signature%e5%8c%85%e7%89%88%e6%9c%ac%e6%b2%a1%e6%9c%89%e7%ad%be%e5%90%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当你从定制注册表获取Unity包时，可能会出现此信息。Unity会对其创建的包进行签名，除了较老的包，这些包在后续版本中不一定重新签名。如果你从定制注册表复制一个未签名的Unity包到另一个注册表，包管理器无法确定包内容是否安全，和原始包是否相同。&lt;/p&gt;
&lt;p&gt;如果你收到此信息，可以尝试以下解决方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用包的其他版本。&lt;/li&gt;
&lt;li&gt;从Unity注册表获取Unity包。&lt;/li&gt;
&lt;li&gt;如果你拥有定制注册表，确保你从Unity注册表复制包的最新版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-version-doesnt-have-a-valid-signature包版本没有有效的签名&#34;&gt;Package version doesn’t have a valid signature(包版本没有有效的签名) &lt;a href=&#34;#package-version-doesnt-have-a-valid-signature%e5%8c%85%e7%89%88%e6%9c%ac%e6%b2%a1%e6%9c%89%e6%9c%89%e6%95%88%e7%9a%84%e7%ad%be%e5%90%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包有一个签名以确保内容在传输前或传输过程中不被更改。无效签名通常发生在以下情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有人在他们自己的注册表上发布了修改后的包。&lt;/li&gt;
&lt;li&gt;在将文件传输给最终用户时发生了错误。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在这两种情况下，包管理器认为该包可能有恶意。&lt;/p&gt;
&lt;p&gt;当你收到一个无效的签名时，你可以尝试安装包的不同版本。同样，避免使用来自Unity注册表以外的注册表的Unity包。&lt;/p&gt;
&lt;p&gt;如果你正在分享一个有修复内容的Unity包，可以考虑使用Git URL，或者将包嵌入到你的项目中。&lt;/p&gt;
&lt;h2 id=&#34;no-git-executable-was-found未找到-git-可执行文件&#34;&gt;No ‘git’ executable was found(未找到 &amp;lsquo;git&amp;rsquo; 可执行文件) &lt;a href=&#34;#no-git-executable-was-found%e6%9c%aa%e6%89%be%e5%88%b0-git-%e5%8f%af%e6%89%a7%e8%a1%8c%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你尝试从git URL安装包，会出现类似这样的信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cannot perform upm operation: Unable to add package
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;https://github.example.com/myuser/myrepository.git&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;No &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;git&amp;#39;&lt;/span&gt; executable was found. Please install Git on your system and restart Unity &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;NotFound&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UnityEditor.EditorApplication:Internal_CallUpdateFunctions&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;git-lfs-command-not-found找不到git-lfs命令&#34;&gt;git-lfs: command not found(找不到git-lfs命令) &lt;a href=&#34;#git-lfs-command-not-found%e6%89%be%e4%b8%8d%e5%88%b0git-lfs%e5%91%bd%e4%bb%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你正在尝试下载使用了Git LFS（大型文件存储）的包，你可能会收到此错误信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Error when executing git command. git-lfs filter-process: command not found.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这表示你的计算机上可能没有安装Git LFS。为了确认，可以在命令行上进行测试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git lfs --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果命令返回类似以下内容，表示已安装Git LFS：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git-lfs/2.8.0 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;GitHub; darwin amd64; go 1.12.7&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;否则，你可以按照Bitbucket GitHub的说明进行安装。&lt;/p&gt;
&lt;h2 id=&#34;repository-not-found未找到存储库&#34;&gt;Repository not found(未找到存储库) &lt;a href=&#34;#repository-not-found%e6%9c%aa%e6%89%be%e5%88%b0%e5%ad%98%e5%82%a8%e5%ba%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你指定了一个不存在的位置，在Unity控制台会出现类似的信息：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]:
  Error when executing git command. fatal: repository &amp;#39;https://mycompany.github.com/gitproject/com.mycompany.mypackage.git/&amp;#39; not found
 [NotFound]
UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;检查你的拼写是否正确。为了确保你使用的URL是正确的，可以转到存储库的页面，从“克隆”按钮中复制URL。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-giturl-locate.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击GitHub &lt;strong&gt;（A）&lt;/strong&gt; 或GitLab **（B）**上URL右侧的按钮，将URL复制到剪贴板。&lt;/p&gt;
&lt;p&gt;如果存储库的位置是正确的，那么URL可能存在其他问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你定位特定的修订版本，确保你的修订版本在最后。例如：
&lt;code&gt;https://github.example.com/myuser/myrepository1.git#revision&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果你定位的是一个修订版本，并且包不在根目录，确保 &lt;code&gt;path&lt;/code&gt;查询参数在修订锚点之前。例如：
&lt;code&gt;https://github.example.com/myuser/myrepository.git?path=/example/folder#v1.2.3&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;could-not-read-username-terminal-prompts-disabled无法读取用户名终端提示已禁用&#34;&gt;Could not read Username: terminal prompts disabled(无法读取用户名：终端提示已禁用) &lt;a href=&#34;#could-not-read-username-terminal-prompts-disabled%e6%97%a0%e6%b3%95%e8%af%bb%e5%8f%96%e7%94%a8%e6%88%b7%e5%90%8d%e7%bb%88%e7%ab%af%e6%8f%90%e7%a4%ba%e5%b7%b2%e7%a6%81%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你正在尝试从需要认证的私有存储库安装包，在Unity控制台会显示类似这样的信息：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Cannot perform upm operation: Unable to add package [https://mycompany.github.com/gitproject/com.mycompany.mypackage.git]:
  Error when executing git command. fatal: could not read Username for &amp;#39;https://mycompany.github.com&amp;#39;: terminal prompts disabled
 [NotFound]
UnityEditor.EditorApplication:Internal_CallUpdateFunctions() (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:310)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;通常，这个信息出现是因为包管理器并没有提供一个交互式的终端或对话框，让你可以输入你的HTTP用户名和密码，或者输入你的SSH密钥的解锁密码：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于&lt;strong&gt;HTTP(S)&lt;/strong&gt;，每次你登录到Bitbucket、GitHub或GitLab，你需要在一个终端或对话框中输入你的用户名和密码。然而，包管理器并没有提供一个交互式的终端或对话框，让你可以为HTTP(S)输入你的用户名和密码。&lt;/p&gt;
&lt;p&gt;为了绕过这个问题，你可以使用HTTPS解决方案中给出的一些变通方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSH&lt;/strong&gt;使用一对公有和私有的SSH密钥。你可以将你的公有SSH密钥添加到Bitbucket、GitHub或GitLab，然后无需输入用户名和密码即可访问存储库。&lt;/p&gt;
&lt;p&gt;然而，如果你为了保护你的SSH密钥而设置了一个解锁密码，你仍然需要在一个终端或对话框中输入这个密码以授权你的密钥。在这种情况下，你可以使用一个SSH代理，该代理可以解锁你的SSH密钥，代你向包管理器进行验证。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;solutions-for-httpshttps的解决方案&#34;&gt;Solutions for HTTPS(HTTPS的解决方案) &lt;a href=&#34;#solutions-for-httpshttps%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;包管理器并没有提供一个交互式的终端或对话框，让你可以输入你的HTTP(S)用户名和密码。为了绕过这个问题，你可以采取以下的一些变通方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;遵循使用HTTPS Git URL的私有存储库和使用SSH Git URL的密码保护SSH密钥的说明。&lt;/li&gt;
&lt;li&gt;使用资格证书管理器（Git Credential Manager for Windows 或 OSXKeyChain）。资格证书管理器可以在无需使用终端或命令提示符的情况下发送密码。&lt;/li&gt;
&lt;li&gt;从终端或命令提示符使用git-credentials，然后从同一终端启动Hub，这样Unity就可以访问到已缓存或存储的凭据。&lt;/li&gt;
&lt;li&gt;使用SSH进行身份验证。如果你设置你的SSH密钥时没有使用密码，包管理器不需要解密它来进行Git服务器的身份验证。如果你决定为了增加安全性而使用密码，你可以在macOS或Windows上使用&lt;strong&gt;ssh-agent&lt;/strong&gt;来解决身份验证问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;solutions-for-sshssh的解决方案&#34;&gt;Solutions for SSH(SSH的解决方案) &lt;a href=&#34;#solutions-for-sshssh%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;如果你使用SSH协议通过Git URL安装包，你可能会从Git中收到一个身份验证错误。这种情况通常发生在你在本地计算机上设置了一个用密码保护的私有SSH密钥。&lt;/p&gt;
&lt;p&gt;解决这个问题的方法是，设置一个SSH代理，代理可以解锁你的SSH密钥，代你与包管理器进行身份验证。按照你的操作系统对应部分的说明进行操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为Windows设置OpenSSH&lt;/li&gt;
&lt;li&gt;为macOS添加SSH密钥到你的SSH代理&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;setting-up-openssh-for-windows为windows设置openssh&#34;&gt;Setting up OpenSSH for Windows(为Windows设置OpenSSH) &lt;a href=&#34;#setting-up-openssh-for-windows%e4%b8%bawindows%e8%ae%be%e7%bd%aeopenssh&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;内置的Windows OpenSSH版本的&lt;strong&gt;ssh-agent&lt;/strong&gt;比默认与Git for Windows一起提供的版本效果更好。此程序说明如何设置OpenSSH客户端并将您的密钥添加到其ssh-agent中。如果您正在使用Git for Windows，您也可以将内置Windows OpenSSH优先于Git for Windows SSH代理：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;确保已安装OpenSSH客户端。为此，在Windows设置&lt;strong&gt;可选功能&lt;/strong&gt;窗口中（&lt;strong&gt;开始&lt;/strong&gt; &amp;gt; &lt;strong&gt;设置&lt;/strong&gt;，然后搜索“可选功能”）中搜索它。这适用于Windows 10+。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查您的&lt;code&gt;%PATH%&lt;/code&gt;环境变量，确保内置的Windows OpenSSH位置出现（例如，&lt;code&gt;C:\WINDOWS\System32\OpenSSH\&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果您已经在使用Git for Windows，确保内置的Windows OpenSSH位置在&lt;code&gt;%PATH%&lt;/code&gt;变量中的Git for Windows SSH位置之前出现。这确保Windows使用内置Windows OpenSSH代理而非Git for Windows SSH代理。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在PowerShell终端中，启动&lt;code&gt;ssh-agent&lt;/code&gt;进程并确保它自动启动:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Set the ssh-agent service to start automatically and manually start it now&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-Service ssh-agent | Set-Service -StartupType Automatic
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Run the ssh-agent process to start the ssh-agent service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-agent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将您的密钥导入到ssh-agent中。要做到这一点，在命令行上运行&lt;code&gt;ssh-add&lt;/code&gt;，然后按照说明操作。默认情况下，代理添加&lt;code&gt;%USERPROFILE%\.ssh\id_rsa&lt;/code&gt;密钥并提示您输入密码。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Import the key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;要使用不同的密钥，您可以将其指定为参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Set the ssh-agent service to start automatically and manually start it now&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add &amp;lt;your-secure-ssh-key-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果您记不住密钥的名称，使用以下命令列出您的密钥：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果您安装了Git for Windows，重置&lt;code&gt;%GIT-SSH%&lt;/code&gt;环境变量以确保Git始终使用内置Windows OpenSSH版本的ssh-agent。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;Environment&lt;/span&gt;]::SetEnvironmentVariable(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GIT_SSH&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$((Get-Command ssh).Source)&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, [&lt;span style=&#34;color:#66d9ef&#34;&gt;System.EnvironmentVariableTarget&lt;/span&gt;]::User)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;adding-ssh-keys-to-your-ssh-agent-for-macos为macos向你的ssh代理添加ssh密钥&#34;&gt;Adding SSH keys to your SSH Agent for macOS(为macOS向你的SSH代理添加SSH密钥) &lt;a href=&#34;#adding-ssh-keys-to-your-ssh-agent-for-macos%e4%b8%bamacos%e5%90%91%e4%bd%a0%e7%9a%84ssh%e4%bb%a3%e7%90%86%e6%b7%bb%e5%8a%a0ssh%e5%af%86%e9%92%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;使用&lt;code&gt;ssh-add&lt;/code&gt;命令将SSH密钥添加到运行在macOS系统上的ssh-agent。你使用的命令参数取决于你的macOS版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在macOS 11及更早版本中，使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add -K ~/.ssh/&amp;lt;your-secure-ssh-key-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在macOS 12及更高版本中，使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add --apple-use-keychain ~/.ssh/&amp;lt;your-secure-ssh-key-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;运行此命令后，终端会要求你输入密码以解锁SSH密钥，然后将其添加到macOS的钥匙串中。然而，一旦你重新启动你的系统，存储在ssh-agent中的每个密钥都会被重置。&lt;/p&gt;
&lt;p&gt;为了确保你在重新启动系统后不需要重新输入密码，打开&lt;code&gt;~/.ssh/config&lt;/code&gt;文件（如果找不到则创建一个），并添加以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Host *
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    UseKeychain yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    AddKeysToAgent yes
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IdentityFile ~/.ssh/&amp;lt;your-secure-ssh-key-name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启你的电脑以应用这些更改。&lt;/p&gt;
&lt;h2 id=&#34;cant-update-git-version无法更新git版本&#34;&gt;Can’t update Git version(无法更新Git版本) &lt;a href=&#34;#cant-update-git-version%e6%97%a0%e6%b3%95%e6%9b%b4%e6%96%b0git%e7%89%88%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你试图从仓库更新你的&lt;strong&gt;Git依赖&lt;/strong&gt;到一个更新的版本，但它没有工作，那可能是因为一个锁定的Git依赖。如果你想从仓库更新你的Git依赖到一个新的版本，使用添加包从Git URL按钮并输入一个Git URL。要获取更多信息，请参考锁定的Git依赖项。&lt;/p&gt;
&lt;h2 id=&#34;failed-to-parse-http-response-in-my-assets-context在我的资产上下文中无法解析http响应&#34;&gt;‘Failed to parse http response’ in My Assets context(在我的资产上下文中“无法解析http响应”) &lt;a href=&#34;#failed-to-parse-http-response-in-my-assets-context%e5%9c%a8%e6%88%91%e7%9a%84%e8%b5%84%e4%ba%a7%e4%b8%8a%e4%b8%8b%e6%96%87%e4%b8%ad%e6%97%a0%e6%b3%95%e8%a7%a3%e6%9e%90http%e5%93%8d%e5%ba%94&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果当你试图从资产商店下载一个资产包时在&lt;strong&gt;控制台&lt;/strong&gt;窗口中收到以下消息，那可能是你的资产包缓存有问题：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[PackageManager] Error Failed to parse response. UnityEditor.AsyncHTTPClient![:D](https://forum.unity.com/styles/default/xenforo/clear.png)one(State, Int32)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要解决这个问题，从已下载的资产包文件的位置删除所有下载的资产，然后试图再次下载资产。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：如果你的项目有大量的资产数据，重新下载所有的内容可能需要大量的时间和带宽。&lt;/p&gt;
&lt;h2 id=&#34;missing-my-registries-in-the-package-manager-window在包管理器窗口中缺少我的注册表&#34;&gt;Missing ‘My Registries’ in the Package Manager window(在包管理器窗口中缺少&amp;quot;我的注册表&amp;quot;) &lt;a href=&#34;#missing-my-registries-in-the-package-manager-window%e5%9c%a8%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e7%aa%97%e5%8f%a3%e4%b8%ad%e7%bc%ba%e5%b0%91%e6%88%91%e7%9a%84%e6%b3%a8%e5%86%8c%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;并非所有的注册表提供商都与Unity的包管理器兼容。如果你添加的包注册服务没有实现&lt;code&gt;/-/v1/search&lt;/code&gt;或 &lt;code&gt;/-/all&lt;/code&gt;端点，那么你的范围内的注册表将与Unity的包管理器不兼容，而且在包管理器窗口的导航面板的&lt;strong&gt;我的注册表&lt;/strong&gt;中不会显示。&lt;/p&gt;
&lt;h2 id=&#34;missing-monobehaviour-errors缺少monobehaviour错误&#34;&gt;Missing MonoBehaviour errors(缺少MonoBehaviour错误) &lt;a href=&#34;#missing-monobehaviour-errors%e7%bc%ba%e5%b0%91monobehaviour%e9%94%99%e8%af%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在构建过程中，如果出现很多关于缺失行为的错误，那么UnityLinker可能错误地剔除了它认为未被引用的组件。通常是因为剔除级别过高导致的。例如，如果你在一个AssetBundle中有一个&lt;strong&gt;预设&lt;/strong&gt;，它引用了2D SpriteShape包中的SpriteShape组件，那么这个对象可能会丢失，并可能会生成编译器警告。&lt;/p&gt;
&lt;p&gt;为解决这个问题，你可以降低UnityLinker的剔除级别，或者在&lt;code&gt;link.xml&lt;/code&gt;文件中声明包的程序集，以防止它们被剔除。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;linker&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;assembly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fullname=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Unity.2D.SpriteShape.Runtime&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;preserve=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;all&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;assembly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fullname=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Unity.2D.Common.Runtime&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;preserve=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;all&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/linker&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有关剔除级别和UnityLinker的更多信息，请参考托管代码剔除。&lt;/p&gt;
&lt;h1 id=&#34;diagnose-network-issues诊断网络问题&#34;&gt;Diagnose network issues(诊断网络问题) &lt;a href=&#34;#diagnose-network-issues%e8%af%8a%e6%96%ad%e7%bd%91%e7%bb%9c%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用Unity包管理器诊断工具可以帮助你诊断与Unity包管理器相关的常见网络问题。诊断工具运行一些基本的网络测试并生成Unity支持团队需要的文件，以诊断常见的网络问题。运行工具后，你可以将结果分享给Unity支持团队，他们会更好地指导你解决这些问题。&lt;/p&gt;
&lt;p&gt;要诊断网络问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过使用Unity包管理器错误对话框或手动运行脚本来运行Unity包管理器诊断工具。&lt;/li&gt;
&lt;li&gt;查看shell窗口中的测试结果。工具的输出结果也会列出它创建的&lt;code&gt;upm-diagnostic-report.txt&lt;/code&gt;报告和&lt;code&gt;upm-diag.log&lt;/code&gt;文件的位置。&lt;/li&gt;
&lt;li&gt;如果你需要Unity支持团队的帮助，在提交错误时请附上&lt;code&gt;upm-diagnostic-report.txt&lt;/code&gt;和&lt;code&gt;upm-diag.log&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;method-1-use-the-unity-package-manager-error-dialog方法1使用unity包管理器错误对话框&#34;&gt;Method 1: Use the Unity Package Manager Error dialog(方法1：使用Unity包管理器错误对话框) &lt;a href=&#34;#method-1-use-the-unity-package-manager-error-dialog%e6%96%b9%e6%b3%951%e4%bd%bf%e7%94%a8unity%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e9%94%99%e8%af%af%e5%af%b9%e8%af%9d%e6%a1%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当Unity尝试启动时，它在加载项目之前运行包管理器进程。如果遇到包管理器的重大错误，Unity会显示以下错误信息：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-network.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要运行诊断工具，点击&lt;strong&gt;诊断&lt;/strong&gt;。Unity会关闭并在新窗口中启动诊断工具。&lt;/p&gt;
&lt;h2 id=&#34;method-2-manually-run-the-script方法2手动运行脚本&#34;&gt;Method 2: Manually run the script(方法2：手动运行脚本) &lt;a href=&#34;#method-2-manually-run-the-script%e6%96%b9%e6%b3%952%e6%89%8b%e5%8a%a8%e8%bf%90%e8%a1%8c%e8%84%9a%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在你的Unity编辑器安装文件夹中的&lt;code&gt;Diagnostics&lt;/code&gt;文件夹内找到&lt;code&gt;RunUnityPackageManagerDiagnostics&lt;/code&gt;脚本。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;操作系统:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;诊断命令行工具的路径&lt;/strong&gt;:&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;lt;path-to-unity-installation-folder&amp;gt;&lt;/code&gt;   &lt;code&gt;\Unity&lt;/code&gt;    &lt;code&gt;\Data&lt;/code&gt;      &lt;code&gt;\Resources&lt;/code&gt;       &lt;code&gt;\PackageManager&lt;/code&gt;         &lt;code&gt;\Diagnostics&lt;/code&gt;          &lt;code&gt;\RunUnityPackageManagerDiagnostics.bat&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;macOS Linux&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;lt;path-to-unity-installation-folder&amp;gt;&lt;/code&gt;   &lt;code&gt;\Unity.app&lt;/code&gt;    &lt;code&gt;\Contents&lt;/code&gt;      &lt;code&gt;\Resources&lt;/code&gt;       &lt;code&gt;\PackageManager&lt;/code&gt;         &lt;code&gt;\Diagnostics&lt;/code&gt;          &lt;code&gt;\RunUnityPackageManagerDiagnostics&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;要启动工具，你可以选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;从命令行运行脚本文件。&lt;/li&gt;
&lt;li&gt;在文件浏览器中双击脚本文件。&lt;strong&gt;注意：&lt;strong&gt;在macOS上，你必须右键单击&lt;code&gt;Unity.app&lt;/code&gt;，然后选择&lt;/strong&gt;显示包内容&lt;/strong&gt;来访问&lt;code&gt;Unity.app&lt;/code&gt;的内容。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sample-output样本输出&#34;&gt;Sample output(样本输出) &lt;a href=&#34;#sample-output%e6%a0%b7%e6%9c%ac%e8%be%93%e5%87%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-5/upm-network-diagnostics.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>基于深度神经网络预测游戏关卡难度-中文版</title>
      <link>https://www.chenqiaoqian.com/2023/07/21/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/</link>
      <pubDate>Fri, 21 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/21/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/</guid>
      <description>&lt;p&gt;作者SAMI PURMONEN&lt;/p&gt;
&lt;h1 id=&#34;摘要&#34;&gt;摘要 &lt;a href=&#34;#%e6%91%98%e8%a6%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;我们探索了蒙特卡洛树搜索（MCTS）和深度学习在预测Candy Crush游戏关卡难度（以成功尝试次数衡量）中的应用。通过大量的游戏玩家数据，我们训练了一个深度神经网络（DNN）来预测游戏状态的移动。该DNN在Candy Crush的大量关卡中游玩，然后我们拟合了一个回归模型来从机器人的难度中预测人类玩家的难度。我们将我们的结果与MCTS机器人的结果进行了对比。结果表明，DNN可以在明显较短的时间内，做出与MCTS相当的游戏关卡难度估计。&lt;/p&gt;
&lt;h1 id=&#34;总结&#34;&gt;总结 &lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;我们探索了使用蒙特卡洛树搜索（MCTS）和深度学习来评估Candy Crush游戏关卡的难度。通过大量游戏数据，我们训练了一个深度神经网络（DNN）来预测从游戏关卡中的游戏动作。DNN在Candy Crush的各种关卡中进行游戏，我们构建了一个模型来预测从DNN难度中的人类玩家难度。我们将结果与MCTS进行了比较。我们的结果显示，DNN可以在显著较短的时间内做出与MCTS相当的评估。&lt;/p&gt;
&lt;h1 id=&#34;致谢&#34;&gt;致谢 &lt;a href=&#34;#%e8%87%b4%e8%b0%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;我想感谢计算机科学与通信学院（CSC）的Karl Meinke教授对我的毕业论文的指导。我要感谢来自King公司AI团队的Stefan Freyr，Erik Poromaa和Alex Nodet，没有他们，这篇毕业论文的完成将无法成为可能。我还要对来自King公司AI团队的John Pertoft，Philipp Eisen和Lele Cao一直对我的工作提供反馈表示感谢。我要感谢Olov Engwall教授对我的论文的审阅。&lt;/p&gt;
&lt;h1 id=&#34;第1章&#34;&gt;第1章 &lt;a href=&#34;#%e7%ac%ac1%e7%ab%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;引言&#34;&gt;引言 &lt;a href=&#34;#%e5%bc%95%e8%a8%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;玩游戏可能很有趣，但前提是游戏的难度不能太难也不能太简单。如果游戏太难，玩家会感到沮丧并停止玩游戏。如果游戏太简单，玩家会感到无聊并停止玩游戏。在游戏发布给玩家之前，预测游戏关卡的难度是困难的。如果没有任何技术工具，关卡设计师只能多次手动玩关卡，然后根据对关卡设计师来说的难度，去猜测它对一般玩家的难度。然而，手动玩游戏需要大量时间，这导致在发布前的迭代次数较少。
对于游戏公司和关卡设计师来说，拥有能够快速并准确预测游戏关卡难度的工具将非常有用。这对于像King的Candy Crush这样不断发布新关卡的游戏尤其重要。它可以让关卡设计师在发布前多次调整关卡，以保证其难度适中。&lt;/p&gt;
&lt;h2 id=&#34;11-机器人&#34;&gt;1.1 机器人 &lt;a href=&#34;#11-%e6%9c%ba%e5%99%a8%e4%ba%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;预测游戏关卡难度的一种自动化方式是创建一个程序，一个机器人，按照某种策略来玩这个游戏。机器人可以多次玩一个关卡，并根据&amp;quot;每次成功所需的尝试次数&amp;quot;这样的难度度量标准，估计机器人觉得这个关卡有多难。如果我们让机器人玩很多关卡，然后估计每个关卡的机器人难度，我们可以比较这些难度与人类的难度，试图将机器人的难度与人类的难度关联起来。如果一关对人类来说相对困难，对机器人来说也相对困难；如果对人类来说相对容易，对机器人来说也相对容易，那么我们可能可以创建一个有效的回归模型，从机器人的难度中预测人类的难度。新关卡的难度可以通过让机器人多次玩这个关卡，测量机器人的难度，然后用预测模型从机器人的难度中预测人类的难度来预测。这样有很多种策略可以创建。&lt;/p&gt;
&lt;h3 id=&#34;111-手动启发式&#34;&gt;1.1.1 手动启发式 &lt;a href=&#34;#111-%e6%89%8b%e5%8a%a8%e5%90%af%e5%8f%91%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;机器人可以使用的一种策略是手动启发式，这种策略会对可用的走法进行排名，然后选择最好的一种。这种启发式可以查看当前的游戏状态，以判断每个可用走法的吸引力。这种方法的缺点是它不具有通用性或可维护性。当游戏发生变化，例如引入新的游戏元素时，启发式需要进行更新。每个游戏都必须创建新的启发式。&lt;/p&gt;
&lt;h3 id=&#34;112-蒙特卡洛树搜索&#34;&gt;1.1.2 蒙特卡洛树搜索 &lt;a href=&#34;#112-%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a0%91%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;一种更通用的方法是蒙特卡洛树搜索（MCTS）。MCTS并不是创建一大套规则去决定一步走位的吸引力，而是使用仿真。MCTS会多次执行每一个走法，并试玩到最后，估计它通向成功的频率。这就不需要对游戏有任何知识，可以自动处理游戏改变的情况，或者被用在一个全新的游戏上。MCTS的缺点是它很慢，因为它需要模拟许多次游戏。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;113-深度神经网络&#34;&gt;1.1.3 深度神经网络 &lt;a href=&#34;#113-%e6%b7%b1%e5%ba%a6%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;机器学习也可以用来从游戏状态中对走法进行排序，本质上是从数据中学习启发式。如果一个包含有游戏状态和走法的大型数据集可用，那么就可以在监督学习中使用，来训练一个分类器，预测在任何给定的游戏状态中应选择哪种走法。深度神经网络（DNN）就是一种可用于分类的机器学习算法，并已在图像识别、机器翻译和游戏中取得了重大突破。使用DNN从游戏状态中预测走法将比MCTS快得多，因为它不需要进行模拟，同时也具有通用性，因为只需要新的数据集就能学习一个新的游戏。不解的问题是它是否也具有精确性。这就是本论文中將要探讨的问题。
表1.1显示了这些方法在假设上相互比较的情况。&lt;/p&gt;
&lt;h2 id=&#34;12-问题&#34;&gt;1.2 问题 &lt;a href=&#34;#12-%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们的研究问题是，在Candy Crush游戏中，使用深度神经网络（DNN）机器人是否可以比使用蒙特卡洛树搜索（MCTS）机器人更好地预测游戏关卡的难度。&lt;/p&gt;
&lt;h2 id=&#34;13-界定范围&#34;&gt;1.3 界定范围 &lt;a href=&#34;#13-%e7%95%8c%e5%ae%9a%e8%8c%83%e5%9b%b4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们将研究范围限制在King的游戏Candy Crush，以及使用由MCTS机器人生成的训练数据。&lt;/p&gt;
&lt;h1 id=&#34;第2章&#34;&gt;第2章 &lt;a href=&#34;#%e7%ac%ac2%e7%ab%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;相关理论&#34;&gt;相关理论 &lt;a href=&#34;#%e7%9b%b8%e5%85%b3%e7%90%86%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在本章中，我们提供我们工作基础的理论基础。我们深入研究了神经网络的工作原理和训练方式，因为这是本论文最重要的部分，也是工作的大部分投入时间所在。&lt;/p&gt;
&lt;h2 id=&#34;21-相关工作&#34;&gt;2.1 相关工作 &lt;a href=&#34;#21-%e7%9b%b8%e5%85%b3%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;主要的灵感来源于谷歌DeepMind的AlphaGo论文和Erik Poromaas的硕士论文。其他的灵感来源于图像识别，因为从游戏状态预测着法的问题可以看作是一个图像识别问题。更广泛的灵感来源于与机器学习或游戏人工智能有关的任何内容。
在《利用深度神经网络和树搜索掌握围棋》中，发明了一款使用监督学习、强化学习和蒙特卡罗树搜索的计算机围棋程序。这是第一个能够在全尺寸棋盘上击败专业围棋选手的计算机围棋程序[1]。我们的工作受到AlphaGo的监督学习部分的启发，但我们将其用于预测游戏难度，而不是创建最强大的机器人。
在Candy Crush中，Erik Poromaa使用MCTS预测Candy Crush中的游戏水平难度。他发现这种方法优于先前的最先进的手动测试方法[2]。我们将我们的结果与他创建的MCTS机器人进行了比较。
在《利用深度卷积神经网络进行ImageNet分类》中，一个大型深度卷积神经网络在数百万高分辨率图像上进行训练，显著提高了以前在ImageNet LSVRC-2010比赛中的最新技术水平[3]。尽管这里的目标是确定图像中可见的对象类型，但与我们的问题类似，因为游戏棋盘可以被视为一个具有比RGB更多通道的图像，并且我们试图识别的对象是144个可能移动中的一个，因此卷积神经网络也适合我们的问题。
在《利用深度卷积神经网络在围棋中进行着法评估》中，一个12层的深度卷积神经网络在人类职业围棋选手的数据集上进行训练，用于预测着法。它以55%的准确率预测专业着法，并且可以击败传统的搜索程序而无需进行任何搜索[4]。这篇论文启发了AlphaGo，并与我们所做的非常相似，因为他们创建了一个基于仅监督学习的DNN机器人进行围棋比赛，然而我们进一步采取了一步，使用机器人来预测游戏难度。
在《使用卷积神经网络在国际象棋中预测着法》中，训练了一个深度卷积神经网络来预测国际象棋中的着法。国际象棋的问题在于一步着法由棋子移动的位置定义，因此需要一个分类器来区分64*64或4096种不同的着法。为了减少着法数量，他们采用了一种新颖的方法，创建了两个独立网络，一个用于预测移动哪个棋子，另一个用于预测在哪里移动它，从而将每个网络的类空间减少到64。他们成功以38.3%的准确率预测哪个棋子应该移动[5]。他们的目标是预测着法与我们的目标相同，只是我们不需要在减少类空间方面下一番苦功，因为我们问题中的着法数量是可管理的，而在围棋中有361种着法。
在《使用深度强化学习在Atari中玩游戏》中，创建了一个基于卷积神经网络和强化学习的模型来玩七款Atari 2600游戏。它在六款游戏中优于先前的所有方法，并在其中三款游戏中表现优于人类专家[6]。应用类似的强化方法到我们的问题可能会很有趣，但我们决定选择监督学习，因为我们认为预测游戏难度的最佳方法是创建一个模仿人类玩家的机器人。由于在本论文写作时我们没有人类玩家数据，因此无法实现这一目标，但可以在未来进行尝试。&lt;/p&gt;
&lt;h2 id=&#34;22-蒙特卡洛树搜索&#34;&gt;2.2 蒙特卡洛树搜索 &lt;a href=&#34;#22-%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a0%91%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在创建玩游戏的代理程序时，通常会使用不同的游戏树搜索算法。极小化算法是一种树搜索算法，在棋类游戏如国际象棋、跳棋和奥赛洛中已经达到了最先进的性能，那里有用于评估游戏状态的良好启发式[1]。在围棋等很难提出启发式的游戏中，直到AlphaGo出现之前，MCTS一直是最成功的游戏搜索算法[4]。
MCTS通过使用随机抽样来扩展搜索树，从状态中确定最佳行动。它可应用于任何有限长度和有限移动次数的游戏。每个行动都是搜索树中的一个节点，并记录获胜次数和访问次数，这些数据用于引导搜索树朝着更好的走法发展。它由四个迭代执行的步骤组成：选择、扩展、模拟和回传，如图2.1所示。多次执行这些步骤会收敛到最佳的玩法[7]。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;选择&lt;/strong&gt;
选择从当前状态开始，也就是搜索树的根节点，然后选择子节点，直到达到叶子节点。选择子节点的方式是根据获胜次数和访问次数，但同时也允许探索，以便将树扩展为朝着最有希望的走法。
&lt;strong&gt;扩展&lt;/strong&gt;
当到达叶子节点时，如果游戏尚未结束，则会向搜索树添加一个新的子节点。
&lt;strong&gt;模拟&lt;/strong&gt;
通过随机选择行动对游戏进行模拟直到结束。
&lt;strong&gt;回传&lt;/strong&gt;
游戏结果通过所有访问过的节点回传到根节点，更新获胜次数和访问次数。&lt;/p&gt;
&lt;h2 id=&#34;23-机器学习&#34;&gt;2.3 机器学习 &lt;a href=&#34;#23-%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;机器学习涵盖了从经验中学习的算法。监督学习是机器学习中最常见的形式。监督学习算法从这类映射的训练集示例中学习函数F：R^N → R^M，然后它在未见数据上的预测效果变得更好，这意味着它在泛化。&lt;/p&gt;
&lt;h3 id=&#34;231-分类&#34;&gt;2.3.1 分类 &lt;a href=&#34;#231-%e5%88%86%e7%b1%bb&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;分类意味着将有限类别集C中的类别c分配给输入特征。例如，我们可以有一个分类器，输入一个人的身高和体重，输出c ∈ {男性, 女性}。给定一组标记为女性或男性的人的体重和身高数据集，学习算法可以生成一个预测人们性别的分类器。分类器的目的是在未见数据上使用它，因此在训练期间的目标是训练一个泛化到未见数据的分类器。
&lt;strong&gt;数据表示&lt;/strong&gt;
分类器的输入是一个向量X ∈ R^n，其中n是特征数量。分类器的输出是一个向量Y ∈ R^c，其中c是类别数量，Y_i是第i类的分数。预测的类别是arg max_i Y_i。Y可以被归一化，使得P i Y_i = 1，将其成为给定类别的条件概率分布P(i|X) = Y_i，使用softmax函数表示如2.1方程所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这是我们在本论文中对分类的看法。这是一种从输入向量生成所有可能类别的概率分布的方法。&lt;/p&gt;
&lt;h3 id=&#34;232-人工神经网络&#34;&gt;2.3.2 人工神经网络 &lt;a href=&#34;#232-%e4%ba%ba%e5%b7%a5%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;神经网络是一种监督学习算法。我们将讨论它如何用于分类任务。神经网络由相互连接的神经元层组成，具有权重。我们将讨论前馈神经网络，其中第i层的神经元仅连接到第i + 1层的神经元，如图2.2所示。神经网络中具有后向连接的神经元称为循环神经网络，在对时间敏感的语音识别中非常有用。人工神经元在某种程度上模仿大脑内的生物神经元。然而，我们将把它们视为数学单元，因为与生物学的联系并不会使人们更容易理解它们的工作方式，除非有生物学背景。&lt;/p&gt;
&lt;h4 id=&#34;从输入到输出&#34;&gt;从输入到输出 &lt;a href=&#34;#%e4%bb%8e%e8%be%93%e5%85%a5%e5%88%b0%e8%be%93%e5%87%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;用于分类的神经网络接收一个输入向量X ∈ R^n，并输出一个向量Y ∈ R^c，代表可能类别的概率分布，如第2.3.1节所述。神经网络与其他分类器的不同之处在于它的工作方式。接下来我们将讨论这一点。&lt;/p&gt;
&lt;h4 id=&#34;神经元的工作&#34;&gt;神经元的工作 &lt;a href=&#34;#%e7%a5%9e%e7%bb%8f%e5%85%83%e7%9a%84%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;每个神经元对每个输入特征都有一个权重和一个偏差。它计算其输入的加权和，其中包括来自前一层的激活，如方程2.2所示，并应用激活函数。激活函数背后的思想是，神经元具有二进制输出，即它要么发射，要么不发射。每个神经元会检测来自前几层的输入中的模式，并在检测到模式时发射。它还在网络中引入非线性，这对于能够逼近非线性函数是必要的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/5.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;常见的激活函数是Sigmoid，如方程2.3所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/6.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;另一个常见的激活函数是TanH。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/7.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;反向传播使用损失函数的梯度来更新神经网络的权重，因此如果梯度变得非常小，更新将变小，学习速度变慢。Sigmoid和tanh都存在梯度消失的问题，因为它们将输入映射到一个小范围内。方程2.5中显示的修正线性单元是另一个激活函数，它在处理梯度消失方面问题较少，因为它仅将负值截断为零。它训练速度是几倍快于Sigmoid和TanH，因为它不会饱和，意味着输出没有上限，可以变得任意大。它目前是深度学习中最流行的激活函数。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当输入被截断为零时，修正线性单元存在问题，因为这会使梯度变为零，无法进行学习。方程2.6中显示的指数线性单元(ELU)被引入来解决这个问题，允许负值存在。然而，与ReLU相比，ELU计算成本更高。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;成本函数&#34;&gt;成本函数 &lt;a href=&#34;#%e6%88%90%e6%9c%ac%e5%87%bd%e6%95%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;为了改进神经网络，必须有一个客观的衡量标准来评估网络的表现好坏。这通过成本函数来实现。如果网络的输出接近期望输出，则成本较低，否则成本较高。一个常用的成本函数是均方误差，如方程2.7所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/10.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;另一个常用的成本函数是交叉熵，它具有显著的实际优势，因为在权重随机初始化时可以找到更好的局部最优解[10, 11]。使用交叉熵成本函数而不是均方误差，结合softmax激活函数会导致更准确的结果[12]。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/11.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/12.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;网络通过计算成本函数并更新其权重来学习，以最小化成本函数。因此，学习过程本质上是一个优化问题。成本函数是权重的函数。为了最小化它，使用梯度下降。梯度下降计算成本函数相对于权重的梯度。然后，它沿着相反的方向更新权重，使成本变小，如2.9所示。权重之间的差异大小由学习率决定。在实践中，对大量数据使用梯度下降不可行，因此改用随机梯度下降，仅使用训练数据的一个小子集来计算成本函数的估计值，这样可以加快训练时间 [13]。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/13.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当神经网络进行训练时，它学习到应具有的权重。影响训练的参数，如网络架构，但在训练过程中不会学习的参数被称为超参数。神经网络有很多超参数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;学习率&lt;/li&gt;
&lt;li&gt;隐藏层的数量&lt;/li&gt;
&lt;li&gt;隐藏节点的数量&lt;/li&gt;
&lt;li&gt;激活函数的选择&lt;/li&gt;
&lt;li&gt;错误测量的选择&lt;/li&gt;
&lt;li&gt;学习率衰减&lt;/li&gt;
&lt;li&gt;正则化&lt;/li&gt;
&lt;li&gt;初始权重&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些可以通过手动测试不同组合来决定。选择它们的更严谨的方法是使用网格搜索或随机搜索。在网格搜索中，为每个参数选择一个有限的值集合，然后尝试所有组合。产生最高准确性的组合被选为最佳参数组合。随机搜索是随机选择参数，已经显示比网格搜索更有效 [14]。基因算法通过结合先前成功的组合来培育新的组合，也可以被应用。一种基于强化学习的新颖方法，利用验证集上的验证准确性作为反馈生成架构，已被证明能够生成与CIFAR-10数据集上最佳人工设计的架构媲美的架构 [15]。&lt;/p&gt;
&lt;h3 id=&#34;233-卷积神经网络&#34;&gt;2.3.3 卷积神经网络 &lt;a href=&#34;#233-%e5%8d%b7%e7%a7%af%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;卷积神经网络（CNN）已经显著改善了物体识别，并且是目前此任务的最新技术 [16]。在CNN中，每个神经元连接在重叠的瓦片中，使网络在二维空间中具有局部性。这对可以被视为图像或网格的输入数据效果很好 [16]。
&lt;strong&gt;输入&lt;/strong&gt;
将输入数据视为三维向量，而不是一维向量。一个尺寸为9×9的rgb图像将具有尺寸为9×9×3，因为它有3个颜色通道。
&lt;strong&gt;块大小&lt;/strong&gt;
块大小决定一个神经元覆盖的面积有多大。3×3的块是最常见的大小，意味着第i+1层中的每个神经元都连接到第i层中一个3×3的神经元瓦片。
&lt;strong&gt;步幅&lt;/strong&gt;
步幅确定输入之间每个到滤波器的距离。
&lt;strong&gt;滤波器&lt;/strong&gt;
滤波器的数量决定每一层中可以检测到多少特征，因为滤波器共享权重。
&lt;strong&gt;池化&lt;/strong&gt;
通过总结其输入来减小输入的维度。例如，一个2×2的最大池化将会接收一个2×2的输入，输出一个1×1，输出值为输入中的最高值，并跨数据进行步进。&lt;/p&gt;
&lt;h2 id=&#34;24-candy-crush&#34;&gt;2.4 Candy Crush &lt;a href=&#34;#24-candy-crush&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Candy Crush是一款在2012年发布在Facebook上的流行的三消游戏，后来在多个平台上推出。由于在开发超过2000个关卡过程中不断添加新功能，该游戏变得非常复杂。因此，我们不会提供游戏的完整描述，而是将读者引向在线可用的Candy Crush维基百科。我们将描述对论文有趣的基础知识。&lt;/p&gt;
&lt;h3 id=&#34;241-基本游戏玩法&#34;&gt;2.4.1 基本游戏玩法 &lt;a href=&#34;#241-%e5%9f%ba%e6%9c%ac%e6%b8%b8%e6%88%8f%e7%8e%a9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;基本的游戏玩法包括在一个9x9的游戏板上水平或垂直交换相邻的瓦片，使得三个或三个以上的相同颜色糖果形成水平或垂直排列。这就是为什么它被称为三消游戏。如果忽略方向，有144种独特的交换组合，其中72种垂直和72种水平。&lt;/p&gt;
&lt;p&gt;匹配的糖果将从游戏板上移除，如果匹配了三个以上的糖果，将会生成特殊糖果，如图2.5所示。特殊糖果比普通糖果更强大，因为它们在匹配时不仅会移除自身，还会移除其他糖果。制作特殊糖果因此是游戏策略中的重要部分。还有多种类型的阻碍物，如结霜，可能存在于一个瓦片上，使得在清除结霜之前，无法与下面的糖果匹配。&lt;/p&gt;
&lt;p&gt;解决游戏是NP难题。状态空间在不同关卡之间不同，但是很大，实验显示第13关的状态空间约为10182。&lt;/p&gt;
&lt;h3 id=&#34;242-游戏模式&#34;&gt;2.4.2 游戏模式 &lt;a href=&#34;#242-%e6%b8%b8%e6%88%8f%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;有五种不同类型的关卡，具有不同的目标。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;限时关卡：在时间耗尽之前达到特定分数&lt;/li&gt;
&lt;li&gt;分数关卡：在固定次数的移动内达到特定分数&lt;/li&gt;
&lt;li&gt;订单关卡：在固定次数的移动内清除所有订单，一个订单可能是清除90个红色糖果&lt;/li&gt;
&lt;li&gt;组合关卡：完成其他目标的组合&lt;/li&gt;
&lt;li&gt;配料关卡：在固定次数的移动内清除所有配料&lt;/li&gt;
&lt;li&gt;凝胶关卡：在固定次数的移动内清除所有凝胶
具有不同策略要求的多种游戏模式使得游戏对AI更具挑战性。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/14.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/15.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;第3章&#34;&gt;第3章 &lt;a href=&#34;#%e7%ac%ac3%e7%ab%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;方法&#34;&gt;方法 &lt;a href=&#34;#%e6%96%b9%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在本章中，我们详细描述了我们的方法。它分为两部分，即在简化版本的糖果上进行的实验和在糖果上进行的实验。&lt;/p&gt;
&lt;h2 id=&#34;31-简化版糖果&#34;&gt;3.1 简化版糖果 &lt;a href=&#34;#31-%e7%ae%80%e5%8c%96%e7%89%88%e7%b3%96%e6%9e%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当论文开始时，我们还没有来自糖果的训练数据，并且我们希望在简化问题上探索深度学习，以了解它对我们问题空间的强大性和适用性。因此，我们决定：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;构建一个简化版的糖果&lt;/li&gt;
&lt;li&gt;创建一个确定性贪婪机器人&lt;/li&gt;
&lt;li&gt;从贪婪机器人玩糖果中生成数据集&lt;/li&gt;
&lt;li&gt;训练一个深度神经网络（DNN）&lt;/li&gt;
&lt;li&gt;评估分类性能
由于我们没有任何关于简化版糖果的人类难度数据，因此我们在这个实验中不尝试预测难度。我们只探讨分类任务。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;311-简化版糖果&#34;&gt;3.1.1 简化版糖果 &lt;a href=&#34;#311-%e7%ae%80%e5%8c%96%e7%89%88%e7%b3%96%e6%9e%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;简化版糖果是用C++实现的，可以带有或不带有GUI进行游玩。如图3.1所示。与真实游戏的9×9相比，它有一个略小的8×8游戏板。它有5种不同的糖果颜色而不是6种。它没有特殊糖果或阻碍物。它没有特定目标。游戏在60秒后自动停止，得分与清除的糖果数量成比例增加。新的糖果会从均匀分布中随机生成。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/16.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/17.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;312-确定性贪婪机器人&#34;&gt;3.1.2 确定性贪婪机器人 &lt;a href=&#34;#312-%e7%a1%ae%e5%ae%9a%e6%80%a7%e8%b4%aa%e5%a9%aa%e6%9c%ba%e5%99%a8%e4%ba%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们创建了一个确定性贪婪机器人，它总是选择能清除最多糖果的移动。它总是更喜欢进行五连消而不是四连消，四连消而不是三连消。如果有多个移动能够清除相同数量的糖果，它更倾向于水平交换而不是垂直交换，并且更喜欢西北位置而不是东南位置。这使得机器人是确定性的，可以从任何游戏板上计算出它将选择的移动。这很重要，因为数据变得100%可预测，这意味着机器学习者可以获得100%的验证准确率。当从非确定性策略学习时，这是不可能的，您无法知道理论上的最大验证准确率是多少。&lt;/p&gt;
&lt;h3 id=&#34;313-生成数据集&#34;&gt;3.1.3 生成数据集 &lt;a href=&#34;#313-%e7%94%9f%e6%88%90%e6%95%b0%e6%8d%ae%e9%9b%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们从确定性贪婪机器人玩简化版糖果中生成了一个数据集。数据集仅有两个特征平面，一个用于颜色，一个用于有效移动。每种颜色被编码为 0 ≤ c ≤ 4。有效移动特征平面是二进制的，对游戏板上的每个位置进行编码，表示该位置是否可以成为有效移动的一部分，意味着该单元格中的糖果可以交换并成为三连消的一部分。
由于游戏板有 board_size 行，每行有 board_size - 1 个水平交换（如果忽略交换的方向），所以一共有 board_size * (board_size - 1) 个水平交换。由于水平交换和垂直交换一样多，总交换次数为 2 * board_size * (board_size - 1)。对于这个特定的数据集，board_size = 8，因此有 2 * 8 * 7 = 112 种不同的交换。因此，一个移动被编码为一个数字，范围在 0 ≤ n ≤ 111，如图3.4所示。
数据集以CSV文件的形式存储。每一行对应一个数据点。前 2 * 8 * 8 = 128 个数字是特征，包含每个游戏板位置的两个特征平面，最后一个数字是移动。&lt;/p&gt;
&lt;h3 id=&#34;314-神经网络架构&#34;&gt;3.1.4 神经网络架构 &lt;a href=&#34;#314-%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e6%9e%b6%e6%9e%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;网络架构是通过手动实验决定的。我们本来希望在许多参数组合上执行网格搜索，但我们认为这样做太耗时且计算成本太高，在这项工作中并不切实可行。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/18.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们选择使用卷积神经网络，因为我们的游戏板具有网格结构，并且在其他棋盘游戏（如围棋）上表现出色[1]。由于从MCTS机器人生成数据需要很长时间，所以在调整超参数时我们使用了比最终评估时更小的数据集。我们测试了不同数量的卷积层，发现超过三层不会提高验证准确性，反而会增加过拟合。池化操作通常用于减少输入维度，在图像识别中经常使用，例如图像大小为256x256。我们选择不使用池化操作，因为我们的9x9游戏板已经很小。&lt;/p&gt;
&lt;h3 id=&#34;315-神经网络评估&#34;&gt;3.1.5 神经网络评估 &lt;a href=&#34;#315-%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e8%af%84%e4%bc%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;数据集被分成训练集和验证集。训练集用于在训练过程中更新网络的权重。验证集用于评估。在训练过程中使用的性能衡量标准是验证准确性，如方程3.1所示。我们还计算了验证前2准确性和验证前3准确性，即在前2和前3个移动中正确移动被找到的频率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/19.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;验证准确度并不是游戏策略的完美衡量标准，因为游戏状态中选择的动作是非确定性的，这意味着在某个游戏状态下，同一个玩家可能多次选择不同的动作。如果玩家在一个具有10个合法动作的状态下，以50%的概率选择其中一个动作，那么理论上的最大验证准确性将会是50%；但如果网络学习了正确的概率分布，它将完美地学习了游戏策略。理想情况是使用测量实际和预测概率分布之间距离的方法，而不是像方程3.2中所示的验证准确度，比如Kullback-Leibler散度。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/20.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;然而，由于状态空间非常大，很少有来自特定状态的多个训练样本，使得在特定状态下估计概率分布变得不可能。因此，出于务实原因选择了验证准确性。在没有其他基准的情况下，这被比较为随机选择每个游戏状态中移动的预期准确性，计算如方程3.3所示，其中Si是状态i中可用的移动数。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/21.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;32-糖果&#34;&gt;3.2 糖果 &lt;a href=&#34;#32-%e7%b3%96%e6%9e%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;对糖果进行的实验包括以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从一个MCTS机器人玩糖果中生成数据集。&lt;/li&gt;
&lt;li&gt;训练一个DNN。&lt;/li&gt;
&lt;li&gt;使用DNN和MCTS玩不同的糖果关卡，并评估性能，以累积成功率和平均成功率作为衡量标准。&lt;/li&gt;
&lt;li&gt;评估表现，以累积成功率和平均成功率为指标进行测量。&lt;/li&gt;
&lt;li&gt;创建回归模型，从以尝试次数为单位的机器人难度测量人类难度来预测。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;就像对简化版糖果一样，我们生成训练数据，然后训练神经网络，随后使用神经网络实际进行游戏，并根据成功率衡量机器人的表现，并创建一个模型来预测人类难度，其中机器人难度以每次成功尝试的次数来衡量。&lt;/p&gt;
&lt;h3 id=&#34;321-蒙特卡洛树搜索&#34;&gt;3.2.1 蒙特卡洛树搜索 &lt;a href=&#34;#321-%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a0%91%e6%90%9c%e7%b4%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;使用的MCTS算法由King提供。它是基于C++编写的，建立在糖果源代码的基础之上。这个实现有一些新颖之处。与其只使用胜利或失败作为信号不同，我们使用基于部分目标的连续信号，比如清除的果冻数量和/或得分。我们将其视为一个黑盒子，可以在模拟游戏过程中配置为使用训练过的DNN，因此不需要更详细的描述，但在Erik Poromaas的硕士论文中有更多信息。&lt;/p&gt;
&lt;h3 id=&#34;322-生成数据集&#34;&gt;3.2.2 生成数据集 &lt;a href=&#34;#322-%e7%94%9f%e6%88%90%e6%95%b0%e6%8d%ae%e9%9b%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;由于我们希望使用神经网络来预测玩家的难度，最合理的做法是使用玩家的游戏数据。然而，该数据并不可用，我们无法在论文中获取到。我们有一个可以很好地玩游戏的MCTS机器人。我们让这个MCTS机器人在每次移动时使用1000次模拟游戏来玩一个多样化的关卡集，这些关卡从第1000关到第2000关，并在游戏过程中记录所有的（状态，动作）对，以CSV格式直接用于训练神经网络。我们收集了接近200万个数据点。其中50,000个数据点用于验证，其余用于训练。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据表示&lt;/strong&gt;
特征平面包括：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可用的水平移动次数&lt;/li&gt;
&lt;li&gt;可用的垂直移动次数&lt;/li&gt;
&lt;li&gt;缺失的瓷砖&lt;/li&gt;
&lt;li&gt;糖果颜色 - 随机&lt;/li&gt;
&lt;li&gt;糖果颜色 - 无&lt;/li&gt;
&lt;li&gt;糖果 - 蓝色&lt;/li&gt;
&lt;li&gt;糖果 - 绿色&lt;/li&gt;
&lt;li&gt;糖果 - 橙色&lt;/li&gt;
&lt;li&gt;糖果 - 紫色&lt;/li&gt;
&lt;li&gt;糖果 - 红色&lt;/li&gt;
&lt;li&gt;糖果 - 黄色&lt;/li&gt;
&lt;li&gt;糖果颜色数&lt;/li&gt;
&lt;li&gt;果冻&lt;/li&gt;
&lt;li&gt;障碍物&lt;/li&gt;
&lt;li&gt;锁定物&lt;/li&gt;
&lt;li&gt;普通类型的板块物品&lt;/li&gt;
&lt;li&gt;行类型的板块物品&lt;/li&gt;
&lt;li&gt;列类型的板块物品&lt;/li&gt;
&lt;li&gt;包装类型的板块物品&lt;/li&gt;
&lt;li&gt;热门类型的板块物品&lt;/li&gt;
&lt;li&gt;炸弹类型的板块物品&lt;/li&gt;
&lt;li&gt;瑞典鱼类型的板块物品&lt;/li&gt;
&lt;li&gt;食材类型的板块物品 - 樱桃&lt;/li&gt;
&lt;li&gt;食材类型的板块物品 - 榛果&lt;/li&gt;
&lt;li&gt;时间补充类型的板块物品&lt;/li&gt;
&lt;li&gt;辣椒糖果类型的板块物品&lt;/li&gt;
&lt;li&gt;甘草糖果类型的板块物品&lt;/li&gt;
&lt;li&gt;椰子轮类型的板块物品&lt;/li&gt;
&lt;li&gt;王牌类型的板块物品&lt;/li&gt;
&lt;li&gt;神秘糖果类型的板块物品&lt;/li&gt;
&lt;li&gt;变色糖果类型的板块物品&lt;/li&gt;
&lt;li&gt;青蛙类型的板块物品&lt;/li&gt;
&lt;li&gt;榛子类型的板块物品&lt;/li&gt;
&lt;li&gt;不明飞行物类型的板块物品 - UFO&lt;/li&gt;
&lt;li&gt;板块物品类型数&lt;/li&gt;
&lt;li&gt;剩余移动次数&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/22.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;颜色被编码为单独的二进制特征平面，与简化的数据集不同，在简化的数据集中只有一个颜色特征平面，不同的颜色使用不同的数字。这样做更有意义，因为颜色只有分类意义。有效移动的特征平面被划分为水平移动和垂直移动两部分。这并不会造成任何差异，因为神经网络能够学习两种表示。移动的编码与第一个实验中的相同，只是更大的游戏板面使得0 ≤ n ≤ 143，而不是如图3.5中的0 ≤ n ≤ 111。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺点&lt;/strong&gt;
虽然在简化版的糖果游戏中移动的方向并不重要，但在糖果游戏中却很重要。当匹配两种特殊糖果时，对游戏板的影响会因方向的不同而不同。为了捕捉到这种情况，我们需要区分288种移动，而不是144种。这可能使得学习到需要特定的特殊糖果和方向组合才能过关的高级策略变得不可能。然而，我们注意到我们有50%的概率能够在最佳的方向进行交换，并且两个相邻的条纹糖果并不是一个常见的情况，所以我们决定丢弃方向，因为如果类别增加一倍，会使得训练DNN变得更加困难。
数据集还有其他一些缺点。最大的一个是没有关于关卡目标的特征平面。如果目标是清理果冻，数据中并未包含需要清理的果冻数量，如果目标是清理材料，那么也没有包含剩余需要清理的材料数量的特征平面。这可能会使网络在剩余移动次数较少的情况下，难以学会优先考虑目标，而不是创建花哨的特殊糖果。&lt;/p&gt;
&lt;h3 id=&#34;323-dnn架构&#34;&gt;3.2.3 DNN架构 &lt;a href=&#34;#323-dnn%e6%9e%b6%e6%9e%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们使用与简单糖果游戏相同的DNN。&lt;/p&gt;
&lt;h3 id=&#34;324-使用dnn&#34;&gt;3.2.4 使用DNN &lt;a href=&#34;#324-%e4%bd%bf%e7%94%a8dnn&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;因为我们认为使用不成熟的TensorFlow C++ API将其嵌入到MCTS C++源代码中过于繁琐，所以我们通过用Python编写的HTTP服务器使用DNN。让HTTP服务器在与机器人相同的物理机器上运行，使得网络开销微乎其微。
我们试验让DNN独自玩游戏以及在MCTS播放过程中玩游戏。根据DNN选择最有可能的移动。&lt;/p&gt;
&lt;h3 id=&#34;325-神经网络评估&#34;&gt;3.2.5 神经网络评估 &lt;a href=&#34;#325-%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e8%af%84%e4%bc%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;对于简单的糖果游戏，训练的评估方式相同。我们总共使用了4个机器人进行比较。机器人也与人类玩家进行比较。我们比较了机器人的累积成功率，以衡量他们的表现。我们还拟合了模型，以预测从机器人每个成功的尝试次数中预测人类每个成功的尝试次数，以衡量它们的预测力。MCTS每个级别执行100次尝试，DNN每个级别执行100和1000次尝试，因为它的速度更快。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;随机机器人&lt;/strong&gt;
随机机器人从均匀分布中随机选择动作。这是默认的基线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DNN机器人&lt;/strong&gt;
DNN机器人根据深度神经网络选择最可能的动作。它不进行任何搜索。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/23.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCTS + 随机机器人&lt;/strong&gt;
MCTS + 随机机器人使用随机回放的MCTS。它作为MCTS + DNN机器人的基线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCTS + DNN机器人&lt;/strong&gt;
MCTS + DNN机器人在回放过程中使用MCTS，其中根据DNN选择最可能的动作。&lt;/p&gt;
&lt;h3 id=&#34;326-预测模型&#34;&gt;3.2.6 预测模型 &lt;a href=&#34;#326-%e9%a2%84%e6%b5%8b%e6%a8%a1%e5%9e%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们让机器人玩361个级别，以计算机器人试错次数的难度。我们让每个机器人对每个级别尝试100次，除了DNN，我们允许其尝试1000次，因为它的速度更快。这些级别的玩家数据是可用的，所以我们也可以计算人类每次成功的尝试次数。机器人的难度并不等同于人类的难度，但它们是相关的。我们拟合了一个回归模型来预测机器人尝试成功次数到人类尝试成功次数。我们使用平均绝对误差作为预测精度的度量，这直观地表示预测的平均错误程度。&lt;/p&gt;
&lt;p&gt;我们将级别分为三组，绿色，黄色和红色，根据他们对每个级别的难度，因为我们看到人类每次成功的尝试次数和机器人每次成功的尝试次数的关系，对于更简单的级别和更困难的级别是不同的。我们为每个机器人的每个组拟合一个单独的预测模型。绿色级别的尝试成功率低于或等于预选的割值。黄色级别的成功尝试次数高于割值。红色级别有零成功，所以尝试次数是未定义的。我们使用人类每次成功尝试的平均值作为红色级别的预测值。&lt;/p&gt;
&lt;h2 id=&#34;33-软件&#34;&gt;3.3 软件 &lt;a href=&#34;#33-%e8%bd%af%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们使用深度学习库TensorFlow来实现DNN。Google创造了TensorFlow来替代在Google内部广泛使用的DistBelief [18]。TensorFlow是用C++编写的，API在Python中可用。它不像其他如Torch和Theano[19]等可用的深度学习库那么快，但有很多有用的工具。TensorBoard是一个可视化训练的Web界面。在创建TensorFlow图时，可以添加用于记录如验证精度、交叉熵和学习率等测量值的节点。TensorBoard可以在训练中动态创建的图中显示登记的测量值，如图3.7所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/24.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;34-硬件&#34;&gt;3.4 硬件 &lt;a href=&#34;#34-%e7%a1%ac%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们使用了来自亚马逊网络服务的一个g2.8xlarge GPU服务器用于训练神经网络。它具有：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4个GPU&lt;/li&gt;
&lt;li&gt;32个vCPU&lt;/li&gt;
&lt;li&gt;60 GiB内存&lt;/li&gt;
&lt;li&gt;2x120 SSD存储&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;游戏在具有未知规格的虚拟机上运行。&lt;/p&gt;
&lt;h1 id=&#34;第4章&#34;&gt;第4章 &lt;a href=&#34;#%e7%ac%ac4%e7%ab%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;结果&#34;&gt;结果 &lt;a href=&#34;#%e7%bb%93%e6%9e%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h2 id=&#34;41-训练神经网络&#34;&gt;4.1 训练神经网络 &lt;a href=&#34;#41-%e8%ae%ad%e7%bb%83%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这部分展示了在训练过程中DNN的表现。验证精度显示了DNN在未见过的数据上预期的表现。我们还包括了正确的动作在前2和前3中出现的频率。训练的最终结果和使用的数据集的详细信息显示在表4.1中。训练期间的验证精度的图示显示在图4.1和图4.2中。&lt;/p&gt;
&lt;p&gt;在简化的数据集上的验证精度很高，如表4.1所示，达到了92.2%。如果给出更多的数据，更多的训练时间和更大的模型，它可能会变得更好。可能接近100%。&lt;/p&gt;
&lt;p&gt;在MCTS数据上的验证精度要低得多，只有28.3%。这并不奇怪，因为它是由一个非确定性的算法生成的。28.3%依然比随机猜测的16.3%要高很多。考虑到我们不知道MCTS数据的可预测性如何，很难知道我们的网络在学习它方面的表现如何。可能是30%是理论上的最高验证精度，如果是这样，那么28.3%就是很好的结果，或者可能会更高，如果是这样，那么28.3%可能就不太好了。为了了解DNN在学习像MCTS那样玩游戏的情况如何，我们需要用DNN玩游戏，并比较它和MCTS的表现。我们将在下一节中做这个。&lt;/p&gt;
&lt;p&gt;训练精度在图表中跳动较大。这是因为它是在128个随机选择的数据点上计算的。对于两个数据集，训练精度似乎接近验证精度。这意味着神经网络没有过拟合，说明还有增加模型大小的空间。我们本来会做这个，但是时间不够。在论文工作期间，我们不断地收集更多的数据，直到最后一个数据集足够大，也就没有过拟合。&lt;/p&gt;
&lt;p&gt;看着验证，验证前-2和验证前-3的精度，我们注意到，在MCTS数据上训练的DNN从28.3%提高到44.4%，再提高到57.3%。这意味着即使它没有选择正确的动作，正确的动作往往也在前3之内。考虑到在糖果游戏中有许多情况，多种动作看起来同样好，如果很难在它们之间区分也就不足为奇了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/25.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图4.1：简化糖果游戏的验证精度。验证前2意味着正确的动作在预测的前2个中的频率，验证前3意味着正确的动作在预测的前3个中的频率。训练精度是在128个数据点的小批量上计算的。&lt;/p&gt;
&lt;p&gt;表4.1：简化糖果游戏和糖果游戏的神经网络训练结果。随机精度是从每个游戏状态的可用移动中随机选择时所期望的验证精度。训练精度是在训练数据的一个小型批次上计算的。验证前-2精度和验证前-3精度意味着正确的动作在预测动作的前-2和前-3中的频率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/26.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/27.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图4.2：糖果游戏的验证精度。验证前2意味着正确的动作在预测的前2个中的频率，验证前3意味着正确的动作在预测的前3个中的频率。训练精度是在128个数据点的小批量上计算的。&lt;/p&gt;
&lt;h2 id=&#34;42-机器人性能&#34;&gt;4.2 机器人性能 &lt;a href=&#34;#42-%e6%9c%ba%e5%99%a8%e4%ba%ba%e6%80%a7%e8%83%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们使用图4.3中显示的所有等级的累积成功率来比较机器人的强度，数值越高越好。
在不进行任何搜索的情况下，深度神经网络(DNN)的表现优于随机选择，如图4.3所示，在进行模拟过程中使用DNN可以提高蒙特卡洛树搜索(MCTS)的性能。这证明了DNN已经从数据中学到了游戏的有用知识，但肯定还有很多没有学到。值得注意的是，纯粹的DNN的表现与纯粹的MCTS相比差很多，而其他人已经成功地使DNN在围棋中的表现与MCTS一样强。围棋的结果是使用专家的动作实现的，而我们使用的数据是来自于比专家玩家更弱的MCTS机器人。训练数据的问题之一是它没有包含游戏的目标。出于这个原因，如果不进行任何搜索，表现好就将变得困难。使用搜索与不使用搜索之间的改进要大于使用DNN与不使用DNN之间的改进。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/28.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;43-难度预测&#34;&gt;4.3 难度预测 &lt;a href=&#34;#43-%e9%9a%be%e5%ba%a6%e9%a2%84%e6%b5%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;表4.2显示了每个机器人在361个级别的平均绝对误差。这显示了模型从机器人的难度中预测人类难度的能力有多好。
最令人惊讶的结果是，尽管深度神经网络(DNN)比蒙特卡洛树搜索(MCTS)弱很多，但是当它被允许在每个级别尝试1000次而不是100次时，它在预测人类难度方面却和MCTS差不多，或者更好，可以在表4.2中看到。当DNN在每个级别只做100次尝试时，它是最差的预测器。由于DNN比MCTS快得多，所以它可以在比MCTS做100次尝试的时间更短的时间内做1000次尝试。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-21-Predicting.Game.Level.Difficulty.Using.Deep.Neural.Networks/29.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;第5章-讨论与结论&#34;&gt;第5章 讨论与结论 &lt;a href=&#34;#%e7%ac%ac5%e7%ab%a0-%e8%ae%a8%e8%ae%ba%e4%b8%8e%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;51-实践的有效性&#34;&gt;5.1 实践的有效性 &lt;a href=&#34;#51-%e5%ae%9e%e8%b7%b5%e7%9a%84%e6%9c%89%e6%95%88%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;深度神经网络（DNN）如果被允许进行1000次尝试而不是100次，它能做出与蒙特卡洛树搜索（MCTS）相似的难度预测，这是一个在实践中有实用性的结果。这意味着在几分钟内，而不是几个小时，就可以得到与人类难度相似的估计。这可以改变关卡设计师的工作流程，给他们提供更快的反馈循环，使他们在发布前有可能做出更多的调整。&lt;/p&gt;
&lt;h2 id=&#34;52-方法在candy-crush以外的适用性&#34;&gt;5.2 方法在Candy Crush以外的适用性 &lt;a href=&#34;#52-%e6%96%b9%e6%b3%95%e5%9c%a8candy-crush%e4%bb%a5%e5%a4%96%e7%9a%84%e9%80%82%e7%94%a8%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们用来预测Candy Crush游戏难度的方法也应该适用于其他游戏。游戏需要有一个有限的动作空间，这样就可以将其解释为一个分类问题，而且由于我们只是看当前的游戏状态来选择一个动作，所以动作的选择必须只依赖于当前的游戏状态，而不是前一状态。在King公司，我们在两个其他的游戏中也应用了相同的方法，但是那些游戏与Candy Crush非常相似。这种方法对频繁发布新关卡的游戏最有用。&lt;/p&gt;
&lt;h2 id=&#34;53-深度神经网络和蒙特卡洛树搜索对比&#34;&gt;5.3 深度神经网络和蒙特卡洛树搜索对比 &lt;a href=&#34;#53-%e6%b7%b1%e5%ba%a6%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e5%92%8c%e8%92%99%e7%89%b9%e5%8d%a1%e6%b4%9b%e6%a0%91%e6%90%9c%e7%b4%a2%e5%af%b9%e6%af%94&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;DNN方法的主要优势是速度，可以在极短的时间内做出相似的难度预测。DNN的另一个好处是，它可以在人类的游戏数据上进行训练，使其能像人类一样游戏，可能导致更精确的预测。DNN的主要劣势是，它需要游戏数据和重新训练。对于每一个新的游戏，都必须创建一个游戏状态表示并收集数据。每当游戏添加新的游戏元素时，DNN就必须进行重新训练，并收集新的数据以保持精度。MCTS不需要任何关于游戏版面的知识，因此相同的算法可以应用于新的游戏，无需修改。&lt;/p&gt;
&lt;h2 id=&#34;54-人工智能的伦理学&#34;&gt;5.4 人工智能的伦理学 &lt;a href=&#34;#54-%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bd%e7%9a%84%e4%bc%a6%e7%90%86%e5%ad%a6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;人工智能（AI）存在两个主要关注点。一是超级智能的威胁，二是自动化的经济影响。
&lt;strong&gt;超级智能&lt;/strong&gt;
人工智能可根据其强大的程度分为三种类别。目前所有的AI都处于人工狭义智能（ANI）的类别，也就是说它是特定任务。深蓝（DeepBlue)比任何人都擅长下棋，但下棋是它能做的全部。第二个类别是人工普遍智能（AGI），包括大约与人类一样能力的AI，也就是说它能做人类可以做的普通事情。第三类是人工超智能（ASI），包括超过人类的AI。一旦AGI被发明出来，它可能能够递归地改进其软件以使其更有能力，最终达到ASI [20]。如果ASI变得恶性，它可能会将人类消灭。在这篇论文中，我们探讨了ANI的另一种应用，它在当前状态下并不对人类的生存构成威胁。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;经济影响&lt;/strong&gt;
能以更低的价格取代人类劳动的AI会导致失业，至少在冗余的工人找到替代工作的时候是暂时的 [21]。一些工人可能会发现很难转换到新的职业，因为他们可能没有或者不能获得需要的技能。这篇论文可能会使游戏的人工测试者变得多余和失业。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;环境影响&lt;/strong&gt;
所述方法需要在云服务器上使用计算能力和存储，但让一个计算机程序在几秒钟内玩一个级别应该比让一个人在几分钟内玩它有更小的环境影响，因此我们认为，用自动化解决方案成功地替换人工玩家对环境是有好处的。&lt;/p&gt;
&lt;h2 id=&#34;55-未来的工作&#34;&gt;5.5 未来的工作 &lt;a href=&#34;#55-%e6%9c%aa%e6%9d%a5%e7%9a%84%e5%b7%a5%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;改进架构&lt;/strong&gt;
由于我们受到时间的严重限制，我们并没有对可能的神经网络的空间进行过多的探索。有几乎无尽的事物可以试验。如果有时间的话，用更多的数据训练更深层的DNN可能会显示出更好的结果。我们并没有在我们的架构中出现过拟合，所以训练一个更深层次的DNN将是下一步要尝试的事情。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;改进数据&lt;/strong&gt;
我们使用的数据排除了重要信息，如关卡的目标。它也没有包含移动的方向。使用更优质的数据可能会显示出更好的结果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;真实用户数据&lt;/strong&gt;
我们最初打算在这篇论文中使用真实用户的数据。我们花了很多时间收集《糖果粉碎苏打传奇》的数据，这需要向代码库添加代码并发布。然而，由于回放游戏的问题超出了我们的控制范围，这一任务不得不中止。继续进行这个实验，对专家玩家进行训练，并观察这对性能有何影响，将是一个有趣的话题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;强化学习&lt;/strong&gt;
在这篇论文中，我们只尝试让神经网络学习别人如何玩，本例中是一个MCTS Bot。被最小化的性能指标是神经网络能多好地预测别人如何玩。将目标改为尽量打好可能是个有趣的尝试。使用强化学习，可以在对数据集进行训练后修改DNN的权重，以便最大化其性能。玩一关，看看它的表现如何，更新权重，让它下次玩得更好。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;学习的定性探索&lt;/strong&gt;
我们只对性能进行了定量度量。神经网络学习了什么样的动作和策略？我们并不清楚，我们只知道它达到了一定的验证精度，而且它在游戏中有一定的成功率。探究它学习了哪些动作，没有学习哪些动作，可能会给出一些有趣的见解。&lt;/p&gt;
&lt;h2 id=&#34;56-结论&#34;&gt;5.6 结论 &lt;a href=&#34;#56-%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们研究了使用基于深度神经网络(DNN)的机器人玩《糖果粉碎传奇》游戏以预测游戏水平难度，并将其与基于蒙特卡洛树搜索(MCTS)的机器人进行了对比。我们在MCTS机器人生成的数据上训练了DNN。DNN机器人比MCTS机器人弱得多，但它可以用来在更短的时间内做出与MCTS机器人相当的人类难度预测。DNN也可以通过在决策过程中使用，而不是随机决策，来使MCTS机器人更强大，但由此做出的人类难度预测并没有更准确。最重要的三个结论是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MCTS比DNN强大得多&lt;/li&gt;
&lt;li&gt;如果在游戏过程中使用DNN，可以使MCTS更强大&lt;/li&gt;
&lt;li&gt;DNN可以在大大缩短的时间内做出与人类难度相当的预测&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;参考文献&#34;&gt;参考文献 &lt;a href=&#34;#%e5%8f%82%e8%80%83%e6%96%87%e7%8c%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;[1] David Silver, Aja Huang, Christopher J. Maddison, Arthur Guez, Laurent Sifre, George van den Driessche, Julian Schrittwieser, Ioannis Antonoglou, Veda Panneershelvam, Marc Lanctot, Sander Dieleman, Dominik Grewe, John Nham, Nal Kalchbrenner, Ilya Sutskever, Timothy Lillicrap, Madeleine Leach, Koray Kavukcuoglu, Thore Graepel 和 Demis Hassabis. 利用深度神经网络和树搜索掌握围棋。《自然》杂志, 529:484–503, 2016。网址http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html。
[2] Erik Poromaa. 《粉碎糖果传奇》的胜利。硕士论文, 皇家工学院, 2016。
[3] Alex Krizhevsky, Ilya Sutskever, 和 Geoffrey E Hinton. 利用深度卷积神经网络进行Imagenet分类。在神经信息处理系统进展中, 页码1097–1105, 2012。
[4] Chris J. Maddison, Aja Huang, Ilya Sutskever, 和 David Silver. 利用深度卷积神经网络在围棋中进行着法评估。CoRR, abs/1412.6564, 2014。网址http://arxiv.org/abs/1412.6564。
[5] Barak Oshri 和 Nishith Khandwala. 使用卷积神经网络预测国际象棋中的着法。
[6] Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, 和 Martin Riedmiller. 使用深度强化学习玩Atari游戏。arXiv预印本arXiv:1312.5602, 2013。
[7] Levente Kocsis 和 Csaba Szepesvári. 基于赌徒蒙特卡罗规划的带头臂策略。在机器学习欧洲会议上, 页码282–293。Springer, 2006。
[8] Yann LeCun, Yoshua Bengio, 和 Geoffrey Hinton. 深度学习。《自然》, 521(7553):436–444, 2015。
[9] Djork-Arné Clevert, Thomas Unterthiner, 和 Sepp Hochreiter. 通过指数线性单元（ELUs）快速准确地学习深度网络。CoRR, abs/1511.07289, 2015。网址http://arxiv.org/abs/1511.07289。
[10] Pavel Golik, Patrick Doetsch, 和 Hermann Ney. 交叉熵与平方误差训练：理论和实验比较。在Interspeech中, 页码1756–1760, 2013。
[11] Douglas M Kline 和 Victor L Berardi. 重新审视用于训练神经网络分类器的平方误差和交叉熵函数。神经计算与应用, 14(4):310–318, 2005。
[12] Rob A Dunne 和Norm A Campbell. 关于softmax激活和交叉熵惩罚函数配对以及softmax激活函数的推导。在第8届澳大利亚神经网络会议论文集中, 墨尔本, 181, 卷185, 1997。
[13] Michael A. Nielsen.《神经网络与深度学习》。Determination Press, 2015。
[14] James Bergstra 和Yoshua Bengio. 超参数优化的随机搜索。《机器学习研究杂志》, 13(Feb):281–305, 2012。
[15] Barret Zoph 和Quoc V. Le. 利用强化学习进行神经网络架构搜索。CoRR, abs/1611.01578, 2016。网址http://arxiv.org/abs/1611.01578。
[16] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, 和 Andrew Rabinovich. 使用卷积进一步深入。在IEEE计算机视觉与模式识别大会论文集中, 页码1–9, 2015。
[17] Toby Walsh. 糖果传奇是NP难题。CoRR, abs/1403.1911, 2014。网址http://arxiv.org/abs/1403.1911。
[18] Martín Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Jeffrey Dean, Matthieu Devin, Sanjay Ghemawat, Geoffrey Irving, Michael Isard, 等. TensorFlow: 一个大规模机器学习系统。在第12届USENIX操作系统设计与实现研讨会（OSDI）论文集中。美国乔治亚州萨凡纳, 2016。
[19] Soheil Bahrampour, Naveen Ramakrishnan, Lukas Schott, 和Mohak Shah. 深度学习软件框架的比较研究。arXiv预印本arXiv:1511.06435, 2015。
[20] Nick Bostrom. 超级智能出现前需要多长时间？1998。
[21] Nils J Nilsson. 人工智能、就业和收入。《人工智能杂志》，5(2):5, 1984。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity&#39;s Package Manager(三)(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/19/2023-07-19-unity-Documents-4/</link>
      <pubDate>Wed, 19 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/19/2023-07-19-unity-Documents-4/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unitys-package-manager三&#34;&gt;Unity’s Package Manager(三) &lt;a href=&#34;#unitys-package-manager%e4%b8%89&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;package-manager-window包管理器窗口&#34;&gt;Package Manager window(包管理器窗口) &lt;a href=&#34;#package-manager-window%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;从Unity编辑器的&lt;strong&gt;窗口&lt;/strong&gt;菜单访问包管理器窗口。&lt;/p&gt;
&lt;p&gt;你可以使用包管理器窗口来查看哪些包和功能集可以安装或已在你的项目中安装。你也可以使用此窗口来检查哪些包版本可以使用，以及为每个项目安装、删除、禁用或更新包和功能集。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;包管理器窗口显示：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 实验性包指示器，如果你的项目有实验性的包，会向你发出警告。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; &lt;strong&gt;安装&lt;/strong&gt;按钮，您可以通过输入git的URL、本地路径或包的名称点击它直接在项目中安装包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; 导航面板，你可以使用它来选择上下文，以改变在列表面板**(H)**中显示的内容。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; 排序菜单，你可以使用它按照名称或日期对包和功能集列表进行排序。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; 过滤菜单，你可以使用它来缩小在列表面板**(H)&lt;strong&gt;中显示的包的范围。 **过滤**菜单和&lt;/strong&gt;清除过滤&lt;strong&gt;按钮对&lt;/strong&gt;内置&lt;strong&gt;列表不可用。它们也对&lt;/strong&gt;项目中&lt;strong&gt;的上下文不可用 (除非你有基于订阅的包)，因为导航面板中的那个上下文有一个&lt;/strong&gt;更新**的嵌套项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-asset-filters.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(F)&lt;/strong&gt; 搜索框，您可以通过名称查找包和功能集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(G)&lt;/strong&gt; &lt;strong&gt;高级&lt;/strong&gt;菜单，您可以使用它来访问Package Manager的&lt;strong&gt;项目设置&lt;/strong&gt;以及更多。详情请参考高级设置部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(H)&lt;/strong&gt; 列表面板，展示你在导航面板中选定的类型的包，受你设定的任何过滤器和搜索参数的限制。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(I)&lt;/strong&gt; 详情面板，显示在列表面板中选定的包或功能集特定的信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(J)&lt;/strong&gt; 包详细信息标签，显示关于选定包或功能集的更多信息。这些标签是基于选定项变化的。关于这些标签的信息，请参考详情面板。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(K)&lt;/strong&gt; 在项目级别执行以下任何操作的按钮：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装或移除功能集&lt;/li&gt;
&lt;li&gt;安装，更新或者移除包&lt;/li&gt;
&lt;li&gt;下载并导入，更新或者移除&lt;strong&gt;Asset Store&lt;/strong&gt;包&lt;/li&gt;
&lt;li&gt;禁用或启用内置包&lt;/li&gt;
&lt;li&gt;安装或移除服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;(L)&lt;/strong&gt; 状态栏，当Package Manager加载包和功能集时显示信息。这些信息包括错误和警告信息，可用的Asset Store包的数量，以及加载更多Asset Store包的链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(M)&lt;/strong&gt; &lt;strong&gt;刷新列表&lt;/strong&gt;按钮让您可以刷新显示的包列表。在&lt;strong&gt;我的资源&lt;/strong&gt;上下文中，&lt;strong&gt;刷新列表&lt;/strong&gt;是一个菜单，其中有一个&lt;strong&gt;检查更新&lt;/strong&gt;选项。您可以使用&lt;strong&gt;检查更新&lt;/strong&gt;来检查您电脑上所有包的更新，而不仅仅是在&lt;strong&gt;我的资源&lt;/strong&gt;上下文中可见的那些包的更新。&lt;/p&gt;
&lt;h2 id=&#34;advanced-settings高级设置&#34;&gt;Advanced settings(高级设置) &lt;a href=&#34;#advanced-settings%e9%ab%98%e7%ba%a7%e8%ae%be%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;高级设置菜单允许你执行以下操作：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Menu item&lt;/strong&gt;(菜单项)&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Action results&lt;/strong&gt;(操作结果)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Project Settings&lt;/strong&gt;(&lt;strong&gt;项目设置&lt;/strong&gt;)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此项可以打开Package Manager的项目设置，在这里你可以: - 浏览Unity Registry时列出预发布版的包。- 在你的项目中添加，编辑和移除作用域注册。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preferences(首选项)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此项来查看和设置Unity编辑器及相关窗口和工具的首选项。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Manual resolve(手动解决)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择此项可以强制Package Manager解决项目的包问题。如果需要，它会重新安装修改过的或缺失的包，并移除多余的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;status-bar状态栏&#34;&gt;Status bar(状态栏) &lt;a href=&#34;#status-bar%e7%8a%b6%e6%80%81%e6%a0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Package Manager在其窗口底部的状态栏中显示消息。&lt;/p&gt;
&lt;p&gt;典型的，Package Manager可能会显示四种状态消息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在新项目中首次打开Package Manager窗口时，会短暂出现&lt;strong&gt;刷新列表&lt;/strong&gt;的消息：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-loading.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当你点击&lt;strong&gt;刷新列表&lt;/strong&gt;时，也会出现这条消息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当你在导航面板中选择&lt;strong&gt;我的资产&lt;/strong&gt;上下文时，加载条会出现在日期上方。它会显示Asset Store包的数量和一个&lt;strong&gt;加载&lt;/strong&gt;链接。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-assets-loadbar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;大部分时间，状态栏都会显示Package Manager窗口最近一次刷新其信息的日期和时间。但是，如果Package Manager检测到一个问题，例如网络问题，它会提示你登陆：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-errors.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你的网络连接正常，但你没有登录到你的Unity账户，Package Manager不会显示任何Asset Store的包。当你在导航面板中选择&lt;strong&gt;我的资产&lt;/strong&gt;时，Package Manager会提示你登录：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-unityid.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在列表面板中，点击&lt;strong&gt;登陆&lt;/strong&gt;通过Unity Hub登陆到你的Unity账户。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如需获取如何解决这些错误以及更多问题的信息，参考Package Manager的故障排除。&lt;/p&gt;
&lt;h1 id=&#34;access-the-package-manager-window打开package-manager窗口&#34;&gt;Access the Package Manager window(打开Package Manager窗口) &lt;a href=&#34;#access-the-package-manager-window%e6%89%93%e5%bc%80package-manager%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;打开Package Manager窗口，导航至Unity的主菜单，然后前往&lt;strong&gt;窗口&lt;/strong&gt; &amp;gt; &lt;strong&gt;Package Manager&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-access.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;navigation-panel导航面板&#34;&gt;Navigation panel(导航面板) &lt;a href=&#34;#navigation-panel%e5%af%bc%e8%88%aa%e9%9d%a2%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用Package Manager的导航面板选择你想要查看的程序包子集。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-nav.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;导航面板**（A）&lt;strong&gt;，列表面板&lt;/strong&gt;（B）&lt;strong&gt;和详细信息面板&lt;/strong&gt;（C）**&lt;/p&gt;
&lt;p&gt;导航面板**（A）&lt;strong&gt;选择一个上下文，以在列表面板&lt;/strong&gt;（B）**中列出这类包。&lt;/p&gt;
&lt;p&gt;当你从列表面板选择一个包时，其详情会在详细信息视图**（C）**中显示。&lt;/p&gt;
&lt;p&gt;有关导航面板中的上下文信息，请参照包列表上下文。&lt;/p&gt;
&lt;h1 id=&#34;list-panel列表面板&#34;&gt;List panel(列表面板) &lt;a href=&#34;#list-panel%e5%88%97%e8%a1%a8%e9%9d%a2%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Package Manager窗口展示了满足你设定条件的功能集，包，或者&lt;strong&gt;Asset Store&lt;/strong&gt;包。&lt;/p&gt;
&lt;p&gt;你通过在导航面板中选择一个上下文以及可选地设置额外的筛选和搜索条件来设定这些条件。&lt;/p&gt;
&lt;p&gt;有关搜索工作方式的重要信息，请参考搜索框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-list.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 当你选择&lt;strong&gt;Unity Registry&lt;/strong&gt;或&lt;strong&gt;In Project&lt;/strong&gt;上下文时，功能集会出现在列表面板的顶部。功能集用功能集图标表示。切换展开图标以展开或收缩功能集列表。当你从列表中选择一个功能集时，其详细信息会显示在右侧。这些详细信息包括简短的描述，所包含包的列表，以及该功能集的&lt;strong&gt;QuickStart&lt;/strong&gt;指南的链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; Asset Store包会出现在你从&lt;strong&gt;My Assets&lt;/strong&gt;列表导入到项目中的所有包的&lt;strong&gt;In Project&lt;/strong&gt;列表中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; 注册表组织了已安装到你的项目中或可供安装的包的列表。该列表为来自Unity的注册表和你在项目中安装的其他范围注册表的包分别设立了不同的组。选择左边的展开器以展开或折叠每个注册表的包列表。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; 当包被锁定，作为依赖性安装，弃用等情况时，图标会在这一列显示。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; 包版本显示已安装的包的版本。如果包尚未安装或导入，显示的版本即为推荐版本。版本号旁边经常出现特殊图标，表示其状态：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconRel.png&#34; alt=&#34;&#34;&gt; Released 已发布&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://docs.unity3d.com/2023.2/Documentation/uploads/Main/iconRC.png&#34; alt=&#34;&#34;&gt; Release Candidate 发布候选&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconPre.png&#34; alt=&#34;&#34;&gt; Pre-release 预发布&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconExp.png&#34; alt=&#34;&#34;&gt; Experimental 实验性&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconCustom.png&#34; alt=&#34;&#34;&gt; Custom (embedded) 定制（内嵌)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于Asset Store包，显示的版本是你已经下载的版本，或者是在Asset Store中可供下载的版本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(F)&lt;/strong&gt; 这些图标显示了包或Asset Store包的状态：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Icon:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconCheck.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;勾选标记表示包或功能集已经被安装，启用或导入。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconUpdate.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;更新图标表示包有可用的更新。要更新你的包，请根据包的类型遵循适当的说明： - 对于Unity包，参考切换到另一个包版本。- 对于Asset Store包，参考更新你的Asset Store包。- 你不能更新功能集版本，因为它们固定于编辑器版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconImport.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;导入图标表示有一个Asset Store包可供导入。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconDownload.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;下载图标表示有一个Asset Store包可供下载。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconWarning.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;警告图标表示包存在问题，例如弃用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/iconError.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;错误图标表示在安装或加载过程中出了些问题。有关解决错误的信息，参考故障排查。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;(G)&lt;/strong&gt; &amp;ldquo;&lt;strong&gt;我的资源&lt;/strong&gt;&amp;ldquo;上下文显示一个计数器，显示可用但未在列表中显示的Asset Store包的数量。要加载更多Asset Store包，点击&lt;strong&gt;加载&lt;/strong&gt;链接。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你选择了“我的资源”上下文，但是包管理器窗口没有列出任何包，请参考包管理器窗口中的错误消息以获取解释和解决方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(H)&lt;/strong&gt; 状态栏显示关于包加载状态和网络警告的消息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(I)&lt;/strong&gt; 点击&lt;strong&gt;重新加载&lt;/strong&gt;按钮，强制包管理器重新加载你的包和功能集。&lt;/p&gt;
&lt;p&gt;默认情况下，包管理器窗口显示选定上下文中所有可用的包和功能集的列表，但你可以过滤列表，以显示满足你标准的包和功能集。&lt;/p&gt;
&lt;p&gt;你也可以在列表中包含预发布的包，并通过名称（ID）或显示名称搜索特定的包或功能集。&lt;/p&gt;
&lt;h1 id=&#34;details-panel详情面板&#34;&gt;Details panel(详情面板) &lt;a href=&#34;#details-panel%e8%af%a6%e6%83%85%e9%9d%a2%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器窗口的右侧面板显示了所选包的详细信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-details.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这些详情包括以下信息：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 显示名称。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; 包版本，包发布到仓库或Asset Store的日期，以及任何资源或资产标签。如果适用，可能会显示其他信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;版本之前可能还会出现一个信息提示。你可以点击提示获取更多关于包的信息。例如，如果你请求的包版本与已安装的版本不匹配，这个提示就可能出现。&lt;/li&gt;
&lt;li&gt;对于Unity包，当已安装的&lt;strong&gt;功能集&lt;/strong&gt;需要所选的包时，版本号之前会出现一个锁定图标。锁定包可以防止你无意中更改包版本，以使功能集继续有效地工作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; 主机包的仓库和包作者（仅限Unity包），或者包发布商（Asset Store）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; 包名称（仅限Unity包）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; 链接到附加资源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于Unity包：链接打开包文档页，包更新日志（如果有）和许可信息。&lt;/li&gt;
&lt;li&gt;对于Asset Store包：链接打开Asset Store上Asset Store包的官方页面，以及链接到发布商的支持页面和他们的网站（如果有）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;(F)&lt;/strong&gt; 包详细信息选项卡，根据包类型不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于Unity包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;描述&lt;/strong&gt;：包的简短描述。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;版本历史&lt;/strong&gt;：包管理器始终列出已安装或推荐的包版本，并提供安装、更新或删除的操作按钮。如果有其他支持的版本可用，并且与你的Unity编辑器版本兼容，包管理器也会列出这些版本。展开每个条目以检查发布日期，该版本的更新日志，以及指向完整更新日志的链接。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;依赖性: 包的依赖信息。此部分两个方向列出依赖项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;正在使用&lt;/strong&gt;：此包是否依赖于另一个包，如果是，哪个版本。已安装的包在版本号后显示依赖项的状态。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;被使用&lt;/strong&gt;：是否有另一个包依赖于此包，如果是，哪个版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;样本&lt;/strong&gt;：只有当包作者提供了样本时，此选项卡才会显示。选项卡旁边显示一个描述和&lt;strong&gt;导入&lt;/strong&gt;按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于Asset Store包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;概览 : 关于包的信息&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你分配给此Asset Store包的任何自定义标签。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持的Unity版本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所需的磁盘空间。&lt;/li&gt;
&lt;li&gt;你获取Asset Store包的日期。&lt;/li&gt;
&lt;li&gt;包的简短描述。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;发布&lt;/strong&gt;：发布信息，包括原始包的发布日期和当前包的发布日期。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;导入的资源&lt;/strong&gt;：列出了你从Asset Store包导入到你的项目中的项。只有下载了包并将其导入到你的项目后，此选项卡才会出现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;图片&lt;/strong&gt;：市场推广图片、音频和视频在Asset Store上的缩略图。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;(G)&lt;/strong&gt; 解锁、安装、更新、删除或禁用Unity包的按钮。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(H)&lt;/strong&gt; 下载、导入或删除Asset Store包的控件，以及下载和导入包更新的控件。有时是按钮，有时是菜单，最常见的操作显示在最前面。当你的项目和缓存与Asset Store包的最新版本保持同步时，&lt;strong&gt;包管理器&lt;/strong&gt;窗口会显示&lt;strong&gt;在项目中&lt;/strong&gt;（和一个勾选标记）。具体来说，这意味着该包的至少一个项目是最新的。然而，即使显示&lt;strong&gt;在项目中&lt;/strong&gt;，你仍然可以从菜单中选择其他操作。&lt;/p&gt;
&lt;h2 id=&#34;labels标签&#34;&gt;Labels标签 &lt;a href=&#34;#labels%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一些包和 Asset Store 包在包名称或版本号旁边显示标签。这些标签提供关于包的源或状态的信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;源标签类型表示包的来源（例如，它是来自本地文件夹，还是你从包注册表下载的）。&lt;/li&gt;
&lt;li&gt;状态标签类型表示包的开发周期阶段。例如，它是一个实验包，还是在特定Unity版本的发布轨道上。&lt;/li&gt;
&lt;li&gt;Asset Store 标签表明该包起源于Asset Store。这些标签也可能表示一种特殊状态（例如，已弃用）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一些源标签暗示状态标签，反之亦然。例如，如果你将一个包嵌入到你的项目中，则Unity自动假定它是一个正在开发的自定义包，所以在详情面板中只显示&lt;strong&gt;自定义&lt;/strong&gt;标签。&lt;/p&gt;
&lt;p&gt;包管理器窗口显示以下值：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Label&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Meaning&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Released(发布)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity官方已经发布并全面支持这个包。质量保证团队已经测试过这个版本的包，并保证它与特定版本的编辑器以及为该编辑器版本发布的所有其他包兼容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Release Candidate(发布候选)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个版本的包将在下一个Tech Stream的当前发布周期内完全发布。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Pre-Release(预发布)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个版本的包处于开发的早期阶段，但Unity保证在长期支持（LTS）发布周期结束时将其发布。它可能还没有完整的文档，或者没有完全通过开发团队或Unity的质量保证团队的验证。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Experimental()实验版&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这些包是新包，或者包含实验性的修改。Unity不支持Experimental包，因为它们处于开发的早期阶段。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Deprecated(已弃用)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这些包在该Unity编辑器版本中不再开发，或者一个特定版本的包有严重问题。Unity不支持已弃用的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Custom(自定义)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;state, source&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个包嵌入在你的项目中。大多数自定义包开发者开始时会在他们的项目中嵌入一个新包，这就是为什么显示&lt;strong&gt;自定义&lt;/strong&gt;标签。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;local(本地)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;source&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包管理器从你本地磁盘上的一个文件夹或tarball文件，而非你的Unity项目文件夹，安装了这个包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;git&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;source&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包管理器直接从Git仓库在你的项目中安装了这个包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;asset store&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;asset&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是一个你从Asset Store购买或下载的Asset Store包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;deprecated(已弃用)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;asset&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;除非你之前已经下载或购买过这个包，否则这个包在Asset Store上不再可用。换句话说，新的客户无法再发现它。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;features-details-panel特性详情面板&#34;&gt;Features (details panel)(特性（详情面板）) &lt;a href=&#34;#features-details-panel%e7%89%b9%e6%80%a7%e8%af%a6%e6%83%85%e9%9d%a2%e6%9d%bf&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;在包管理器窗口中，当你从列表面板中选择一个特性集后，右侧的详情面板会显示选中的特性集的详细信息。详情面板会以一种微型包管理器窗口的形式展现特性集的内容：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/fs-details.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(A)&lt;/strong&gt; 当你从列表面板选择一个特性集时，其信息将在详情面板中显示。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B)&lt;/strong&gt; 特性集的显示名称。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(C)&lt;/strong&gt; 特性集的名称。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(D)&lt;/strong&gt; 一个&lt;strong&gt;安装&lt;/strong&gt;或&lt;strong&gt;移除&lt;/strong&gt;特性集的按钮。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(E)&lt;/strong&gt; 链接到这个特性集的&lt;strong&gt;快速入门&lt;/strong&gt;指南，包含了如何一起使用这个包集的详细信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(F)&lt;/strong&gt; 特性集详情选项卡：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;描述&lt;/strong&gt;：对特性集的简介。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;包含的包 这个选项卡显示以下信息：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;包含的包的列表。&lt;/li&gt;
&lt;li&gt;选中的包的详细信息。显示的信息包括包的显示名称，特性集推荐或已安装的版本，以及其描述。&lt;/li&gt;
&lt;li&gt;一个将选中的包加载到包管理器窗口的快捷方式。选择这个快捷方式会替换列表面板和详情面板中的特性集。当你直接从包中访问详情时，包管理器窗口提供的信息比你从特性集内部访问时更多。例如，包详情视图显示依赖信息和包含的任何示例。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-version-overrides包版本覆盖&#34;&gt;Package version overrides(包版本覆盖) &lt;a href=&#34;#package-version-overrides%e5%8c%85%e7%89%88%e6%9c%ac%e8%a6%86%e7%9b%96&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;特性集是一组针对特定版本的Unity良好协同工作的包的集合，这意味着包管理器会安装你的特性集所需的特定包版本。然而，包管理器实际上可能会安装一个不同的版本（覆盖请求的版本）的原因有几个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;另一个包或特性集需要相同包的不同版本，包管理器通过覆盖来解决包版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你请求了一个不同的包版本，它与特性集所需的版本没有冲突。在这种情况下，一个重置按钮会显示，你可以点击它，返回到特性集所需（推荐）的版本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：当包版本中的主要或次要数字改变时，&lt;strong&gt;重置&lt;/strong&gt;按钮才会显示。当包版本中的补丁号改变时，&lt;strong&gt;重置&lt;/strong&gt;按钮不会显示。关于语义版本方案的更多信息，请参考版本控制。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果包管理器安装的版本并非你请求的版本，信息提示会解释更改的原因。&lt;/p&gt;
&lt;h1 id=&#34;finding-packages-and-feature-sets查找包和特性集&#34;&gt;Finding packages and feature sets(查找包和特性集) &lt;a href=&#34;#finding-packages-and-feature-sets%e6%9f%a5%e6%89%be%e5%8c%85%e5%92%8c%e7%89%b9%e6%80%a7%e9%9b%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器窗口提供了几种方法帮助你找到特定的包或&lt;strong&gt;特性集&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-find.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;(A)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Packages list context(包列表上下文)&lt;/td&gt;
&lt;td&gt;从导航面板选择一个“上下文”，以确定显示哪个包列表。上下文可能是包的来源，如注册服务器，资源商店，或Unity编辑器本身（内置包）。然而，&lt;strong&gt;项目中&lt;/strong&gt; 上下文只显示那些已经安装在当前项目中的包和特性集，无论它们的来源是什么。例如，你可以选择 &lt;strong&gt;我的资源&lt;/strong&gt; 上下文，只在列表中显示你可用的资源商店包，或者选择 &lt;strong&gt;项目中&lt;/strong&gt; 上下文，显示资源商店包，Unity包，以及已经安装在你的项目中的特性集。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;(B)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Sort(排序)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;以名称，发布日期（&lt;strong&gt;Unity注册表&lt;/strong&gt;，&lt;strong&gt;我的注册表&lt;/strong&gt;，&lt;strong&gt;项目中&lt;/strong&gt;），购买日期（仅限资源商店包），或最近更新日期（仅限&lt;strong&gt;我的资产&lt;/strong&gt;）的升序或降序排列列表。例如，如果你想找到一个最近更新的资源商店包，但你记不住它的名称，可以选择 &lt;strong&gt;我的资产&lt;/strong&gt;，然后按 &lt;strong&gt;最近更新&lt;/strong&gt; 排序，浏览列表找到它。排序影响每个可折叠区域下的项，但保持区域的位置不变。如果你从Z到A排序，包管理器将在 &lt;strong&gt;特性&lt;/strong&gt; 部分内将所有的特性集重新排序为Z到A，以及每个区域下的所有包，但不会在列表中混淆内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;(C)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Filters(过滤)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;选择选项来缩小列出的包。在 &lt;strong&gt;我的资产&lt;/strong&gt; 中列出的包有增强的过滤选项：&lt;strong&gt;状态&lt;/strong&gt; （已下载，已导入，有可用更新，未标记，隐藏，已弃用）;&lt;strong&gt;类别&lt;/strong&gt; （3D，附加组件，2D，音频等）;&lt;strong&gt;标签&lt;/strong&gt; （你在资源商店中定义的自定义标签）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;(D)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Search(搜索)&lt;/td&gt;
&lt;td&gt;使用搜索框按名称查找Unity包或 &lt;strong&gt;资源商店&lt;/strong&gt; 包。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;使用这些控制可以缩小在列表面板中显示的包和特性集，以及它们的显示顺序。这使得更容易找到你正在查找的内容，或者在你不确切知道你想要什么的时候帮助你浏览。&lt;/p&gt;
&lt;p&gt;当你一起使用多个这些控制时，你可以缩小在列表中出现的匹配集。&lt;/p&gt;
&lt;p&gt;当你从注册表（非资产商店）找到一个包后，你可以选择它，然后可能在详情面板中找到一个特定的版本。对于特性集，总是只有一个版本可用，所以你可以安装它或移除它。&lt;/p&gt;
&lt;h2 id=&#34;finding-a-specific-version寻找特定版本&#34;&gt;Finding a specific version(寻找特定版本) &lt;a href=&#34;#finding-a-specific-version%e5%af%bb%e6%89%be%e7%89%b9%e5%ae%9a%e7%89%88%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要找到特定的包版本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在Unity中，通过打开&lt;strong&gt;窗口&lt;/strong&gt;菜单并选择&lt;strong&gt;包管理器&lt;/strong&gt;来打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你正在寻找一个预发布的包，按照以下步骤进行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在高级菜单下选择&lt;strong&gt;项目设置&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-settings.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;strong&gt;高级设置&lt;/strong&gt;组中，选择&lt;strong&gt;启用预发布包&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;关闭项目设置窗口。任何预发布包现在都会带有指示器显示在列表中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你可以浏览包列表，或者用以下方法之一找到特定的包：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过名称或关键字搜索包。&lt;strong&gt;注意：&lt;strong&gt;你在导航面板中选择的上下文限制了搜索范围。例如，如果你正在搜索一个资源商店的包，确保在开始搜索之前选择了&lt;/strong&gt;我的资源&lt;/strong&gt;上下文。当你切换上下文时，包管理器窗口会清空搜索框。但如果你返回到之前的上下文，包管理器窗口会恢复你的搜索词。&lt;/li&gt;
&lt;li&gt;对列表进行排序（例如，按&lt;strong&gt;最近更新&lt;/strong&gt;，以找到最近更新的包）。&lt;/li&gt;
&lt;li&gt;对列表应用过滤器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择一个包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于来自Unity注册表的包，在详细信息面板中选择&lt;strong&gt;版本历史&lt;/strong&gt;选项卡。如果有多个版本可用，展开条目以显示每个版本的特定信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-update.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当&lt;strong&gt;版本历史&lt;/strong&gt;选项卡显示时，你可以在展开特定版本时执行各种操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你可以查看该版本的更新日志，并点击&lt;strong&gt;更新日志&lt;/strong&gt;以查看跨版本的所有更改列表。&lt;/li&gt;
&lt;li&gt;如果你还没有在你的项目中安装这个包，你可以安装这个版本。&lt;/li&gt;
&lt;li&gt;如果你的项目中已经安装了这个包的另一个版本，你可以将包更新到这个版本。&lt;/li&gt;
&lt;li&gt;如果你在项目中安装了这个包，但不再需要它，你可以从项目中移除这个包。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;packages-list-context包列表上下文&#34;&gt;Packages list context(包列表上下文) &lt;a href=&#34;#packages-list-context%e5%8c%85%e5%88%97%e8%a1%a8%e4%b8%8a%e4%b8%8b%e6%96%87&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要改变在包管理器窗口的列表面板中显示哪些包，从导航面板中选择你想要的上下文。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-unityregistry.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;你可以从以下选项中选择：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;In Project(项目中)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示安装在项目中的所有特性集和包，包括本地、git和嵌入的包，以及从任何注册表安装的包。列表还包括你从&lt;strong&gt;我的资源&lt;/strong&gt;上下文导入的任何资源商店的包。&lt;strong&gt;项目中&lt;/strong&gt;有一个嵌套条目，&lt;strong&gt;更新&lt;/strong&gt;，列出了你的项目中可以更新的所有包，包括资源商店的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity Registry(Unity注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示Unity包注册表上的所有&lt;strong&gt;特性集&lt;/strong&gt;和包，无论它们是否已经在你的项目中安装。这不包括从任何其他位置或从任何作用域注册表安装的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Assets(我的资源)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示你用当前登录的Unity ID购买的所有资源商店的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Built-in(内置)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;只显示内置的Unity包，这些包代表Unity的核心功能。你可以用这些包来开启和关闭Unity模块。 &lt;strong&gt;提示&lt;/strong&gt;：你可以在Unity脚本API中了解更多关于每个内置包（模块）实现的内容。每个模块程序集页面都列出了内置包实现的哪些API。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Services(服务)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示集成服务，帮助你吸引、保留和变现用户。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Registries(我的注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示这个项目中安装的任何作用域注册表中可用的包。这个上下文只有在你在这个项目中安装了一个作用域注册表时才会出现。如果你安装了一个作用域注册表但它没有在&lt;strong&gt;我的注册表&lt;/strong&gt;上下文中列出，或者&lt;strong&gt;我的注册表&lt;/strong&gt;上下文根本无法使用，那可能是因为你添加的包注册表服务器没有实现&lt;code&gt;/-/v1/search&lt;/code&gt;或&lt;code&gt;/-/all&lt;/code&gt;端点，这意味着它不兼容Unity的包管理器。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;当你在导航面板中选择一个上下文时，列表面板会显示符合你选择的特性集和包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你在搜索框中输入了任何文本或设定了任何过滤器，列表面板只会显示符合上下文、搜索条件和活动过滤器的特性集和包。&lt;/p&gt;
&lt;h1 id=&#34;sorting-the-list排序列表&#34;&gt;Sorting the list(排序列表) &lt;a href=&#34;#sorting-the-list%e6%8e%92%e5%ba%8f%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以根据&lt;strong&gt;特性集&lt;/strong&gt;或包的名字进行升序或降序排序。根据列表上下文，你也可能有一个或多个日期可以排序。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Menu options&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;In Project(项目中)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-inproj.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称 - 创建者将这个特性集或包发布到Unity注册表、资源商店或作用域注册表的日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity Registry(Unity注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-unity.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称 - 创建者将这个特性集或包发布到Unity注册表的日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Assets(我的资源)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-assets.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称 - 你从资源商店获得这个包的日期 - 这个资源商店包的最后更新日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Built-in(内置)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-core.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称是唯一的排序选项&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Services(服务)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-services.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称 - 最后一次发布此服务包的日期&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Registries(我的注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-sort-myreg.png&#34; alt=&#34;&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;- 名称 - 创建者将此包发布到作用域注册表的日期&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;filtering-the-list过滤列表&#34;&gt;Filtering the list(过滤列表) &lt;a href=&#34;#filtering-the-list%e8%bf%87%e6%bb%a4%e5%88%97%e8%a1%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;要缩小在列表面板中出现的包的范围，从&lt;strong&gt;包管理器&lt;/strong&gt;窗口选择&lt;strong&gt;过滤器&lt;/strong&gt;菜单。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-filter2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;strong&gt;当你在导航面板中选择&lt;/strong&gt;项目中&lt;/strong&gt;时，过滤控制被禁用，因为&lt;strong&gt;项目中&lt;/strong&gt;有一个嵌套视图来列出有更新的包。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-filter2b.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;以&lt;strong&gt;我的资源&lt;/strong&gt;列表为例，你可以使用以下类型的过滤选项来缩小显示的&lt;strong&gt;资产商店&lt;/strong&gt;包列表：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;状态&lt;/strong&gt;组让你选择一个&lt;strong&gt;状态&lt;/strong&gt;，列出具有该状态的包。例如，如果你选择&lt;strong&gt;未标记&lt;/strong&gt;，那么只有那些你从未分配标签的资产商店包将出现在列表中。&lt;/li&gt;
&lt;li&gt;选择一个或多个&lt;strong&gt;类别&lt;/strong&gt;，列出与你的选择匹配的资产商店包。&lt;/li&gt;
&lt;li&gt;选择一个或多个你在资产商店为你的包创建的自定义&lt;strong&gt;标签&lt;/strong&gt;。如果你选择了多于一个的标签，那么只有那些匹配任何一个标签的包会保留在列表中。关于如何创建和管理标签，请参考使用标签组织我的资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你需要重新开始，点击&lt;strong&gt;过滤器&lt;/strong&gt;菜单旁的&lt;strong&gt;清除过滤器&lt;/strong&gt;，将所有过滤选项重置为默认值。&lt;/p&gt;
&lt;h1 id=&#34;search-box搜索框&#34;&gt;Search box(搜索框) &lt;a href=&#34;#search-box%e6%90%9c%e7%b4%a2%e6%a1%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以在包管理器窗口的列表面板顶部的搜索框，用来查找任何与你输入的文本匹配的包或&lt;strong&gt;功能集&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;随着你输入搜索文字，包管理器窗口更新列表，显示你在导航面板中选中的上下文每个匹配的包或功能集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你可以搜索Unity包和功能集或者&lt;strong&gt;资产商店&lt;/strong&gt;包。你选择的列表上下文定义了包管理器搜索的位置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;List context&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Where the Package Manager searches&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;In Project(项目中)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包缓存和你当前项目下的&lt;code&gt;Packages&lt;/code&gt;文件夹。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Unity Registry(Unity注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity注册表上的包和功能集列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Assets(我的资源)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;和你的Unity帐户可用的资产商店包列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Built-in(内置)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity注册表上的内置包列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Services(服务)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;你可以安装的集成服务列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;My Registries(我的注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为你的项目定义的任何有限定范围的注册表。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：包管理器窗口会根据每个上下文记住你的搜索词。例如，如果你在&lt;strong&gt;项目中&lt;/strong&gt;设置了一个搜索词，包管理器窗口会过滤该列表。如果你选择了任何其他上下文，包管理器窗口会重置搜索并列出该上下文的所有包。但是，如果你返回到&lt;strong&gt;项目中&lt;/strong&gt;，包管理器窗口会恢复你的搜索词并再次过滤&lt;strong&gt;项目中&lt;/strong&gt;的列表。&lt;/p&gt;
&lt;p&gt;为了进一步说明这种每个上下文的搜索范围，如果你在不同的上下文中输入相同的搜索词，你将得到不同的结果。例如，如果你选择&lt;strong&gt;Unity注册表&lt;/strong&gt;上下文，然后在搜索框中输入&lt;code&gt;web&lt;/code&gt;，结果会与你选择&lt;strong&gt;内置&lt;/strong&gt;上下文并搜索同一词语时不同：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-search.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;你可以通过以下方式搜索包或功能集：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;其显示名称（如详细信息面板顶部所示）。&lt;/li&gt;
&lt;li&gt;其名称（ID）（仅限Unity包和功能集），这是以&lt;strong&gt;com.unity&lt;/strong&gt; 开头的注册包名。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你的搜索文本可以匹配名称的开头、中间或结尾。包管理器窗口会动态更新列表。&lt;/p&gt;
&lt;h1 id=&#34;install-a-feature-set-from-the-unity-registry从unity注册表安装功能集&#34;&gt;Install a feature set from the Unity registry(从Unity注册表安装功能集) &lt;a href=&#34;#install-a-feature-set-from-the-unity-registry%e4%bb%8eunity%e6%b3%a8%e5%86%8c%e8%a1%a8%e5%ae%89%e8%a3%85%e5%8a%9f%e8%83%bd%e9%9b%86&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;安装&lt;strong&gt;功能集&lt;/strong&gt; 与从Unity注册表安装包相似，只不过你在&lt;strong&gt;功能&lt;/strong&gt;扩展器下面而不是&lt;strong&gt;包&lt;/strong&gt;扩展器下面查找功能集。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口，从导航面板中选择&lt;strong&gt;Unity注册表&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-unityregistry-1713439592232-69.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想要安装的功能集。功能集信息会在详情面板中显示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：在详情面板中点击&lt;strong&gt;快速启动&lt;/strong&gt;链接，了解更多关于这个功能集以及你如何共同使用其包的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在详情面板中，选择&lt;strong&gt;安装&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/fs-install.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注释:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你需要移除功能集，点击详情面板中的&lt;strong&gt;删除&lt;/strong&gt;按钮。&lt;/li&gt;
&lt;li&gt;你可以使用多选功能一键安装多个功能集。欲了解更多信息，请参考在多个包或功能集上执行操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;install-a-package-from-a-registry从注册表安装包&#34;&gt;Install a package from a registry(从注册表安装包) &lt;a href=&#34;#install-a-package-from-a-registry%e4%bb%8e%e6%b3%a8%e5%86%8c%e8%a1%a8%e5%ae%89%e8%a3%85%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：当你使用包管理器安装包时，包管理器会评估其他包及其依赖关系，以确定你选择的版本是否与其他版本有冲突。如果检测到任何冲突或限制，它将安装解决这些问题的版本。欲了解更多信息，请参考依赖关系与解析。&lt;/p&gt;
&lt;p&gt;从Unity注册表或你的项目中定义的任何作用域注册表安装包的过程是相同的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口，从导航面板中选择&lt;strong&gt;Unity注册表&lt;/strong&gt;。如果你设置了作用域注册表，并且想从作用域注册表安装包，请选择&lt;strong&gt;我的注册表&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你没有为这个项目定义任何作用域注册表，那么导航面板中将不会显示&lt;strong&gt;我的注册表&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-unityregistry-1713439596313-74.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想要安装的包。包信息将在详情面板中显示。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果包管理器没有在包列表中列出你想要安装的包，那可能是一个不可被发现的包，例如实验性质的或预发布的包。包管理器不会显示实验性质的包，除非它们已经被安装，但是在你启用预发布包项目设置后，预发布的包会在包管理器中显示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择要安装的版本。如果你想要了解更多关于可用版本的信息，可以参考查找特定版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;strong&gt;安装&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-install.png&#34; alt=&#34;Install button in the corner of the details panel&#34;&gt;&lt;/p&gt;
&lt;p&gt;当进度条完成时，新的包就已经准备好可以使用了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你可以使用多选功能一键安装多个包。欲了解更多信息，请参考在多个包或功能集上执行操作。&lt;/p&gt;
&lt;h1 id=&#34;install-a-package-from-a-local-folder从本地文件夹安装包&#34;&gt;Install a package from a local folder(从本地文件夹安装包) &lt;a href=&#34;#install-a-package-from-a-local-folder%e4%bb%8e%e6%9c%ac%e5%9c%b0%e6%96%87%e4%bb%b6%e5%a4%b9%e5%ae%89%e8%a3%85%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器可以从你电脑的任何位置加载包，即使你把它保存在你的Unity项目文件夹外面（例如，如果你有一个名为&lt;strong&gt;com.unity.my-local-package&lt;/strong&gt;的包，并且你把它保存在&lt;code&gt;桌面&lt;/code&gt;上，但你的Unity项目存放在&lt;code&gt;文档&lt;/code&gt;文件夹中）。&lt;/p&gt;
&lt;p&gt;你也可以使用你项目文件夹内的一个文件夹，只要它不是预留的项目子文件夹之一。&lt;/p&gt;
&lt;p&gt;要从本地磁盘安装包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开包管理器窗口，如果它还未打开的话。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击工具栏中的&lt;strong&gt;安装&lt;/strong&gt;按钮。安装包的选项将会出现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-local.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从安装菜单中选择&lt;strong&gt;从磁盘安装包&lt;/strong&gt;，将会弹出一个文件浏览器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;导航到你的&lt;strong&gt;本地包&lt;/strong&gt;的文件夹根目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在文件浏览器中双击 &lt;code&gt;package.json&lt;/code&gt; 文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;文件浏览器关闭，且该包现在会在包列表中出现，并带有标签。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-local-ver.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;请记住，如果你已经更新至注册表版本，但你在本地项目上做过更改，那么注册表版本将会覆盖你的本地更改。&lt;/p&gt;
&lt;h2 id=&#34;local-packages-inside-your-project项目内的本地包&#34;&gt;Local packages inside your project(项目内的本地包) &lt;a href=&#34;#local-packages-inside-your-project%e9%a1%b9%e7%9b%ae%e5%86%85%e7%9a%84%e6%9c%ac%e5%9c%b0%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你可以将本地包放置在项目内的任何地方，除了以下文件夹：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Project folder:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reason:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Assets&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果你在这个文件夹内放置一个包，Asset Database会将这个文件夹下的任何资源导入两次：一次作为资源，一次作为包内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Library&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不要修改这个文件夹的内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;ProjectSettings&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个文件夹只用于存放设置资产。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;Packages&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果你在这个文件夹下放置一个包，不论&lt;strong&gt;项目清单&lt;/strong&gt;中的引用如何，包管理器会自动把它解释为&lt;strong&gt;嵌入包&lt;/strong&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;install-a-package-from-a-local-tarball-file从本地tarball文件安装包&#34;&gt;Install a package from a local tarball file(从本地tarball文件安装包) &lt;a href=&#34;#install-a-package-from-a-local-tarball-file%e4%bb%8e%e6%9c%ac%e5%9c%b0tarball%e6%96%87%e4%bb%b6%e5%ae%89%e8%a3%85%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器可以从本地存储的tarball文件加载包。这适用于高级场景，其中你可以将包发布工作流分解成多部分，你的用户可以使用其中部分的中间产品。&lt;/p&gt;
&lt;p&gt;例如，如果你在你的自定义包仓库上设置了持续集成（CI），那么你可以从包文件夹创建一个Gzip tarball文件。你可以通过使用npm pack CLI或者Unity包管理器的Pack API来创建一个&lt;code&gt;Gzip&lt;/code&gt; tarball文件。如果你创建了一个&lt;code&gt;Gzip&lt;/code&gt; tarball文件，在你将其发布到自定义注册表之前进行测试。&lt;/p&gt;
&lt;p&gt;从本地tarball文件安装包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开包管理器窗口，如果它还未开启的话。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击工具栏中的&lt;strong&gt;安装&lt;/strong&gt;按钮。安装包的选项就会出现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-tarball.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在安装菜单中选择 &lt;strong&gt;从tarball安装包&lt;/strong&gt; 以打开文件浏览器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;跳转到你保存tarball的文件夹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：只有具有&lt;code&gt;.tgz&lt;/code&gt;扩展名的tarballs，包管理器的文件选择对话框才能识别。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在文件选择对话框中双击tarball文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;文件选择对话框将会关闭，现在包会带有标签出现在列表面板中。&lt;/p&gt;
&lt;h1 id=&#34;install-a-package-from-a-git-url从git-url安装包&#34;&gt;Install a package from a Git URL(从Git URL安装包) &lt;a href=&#34;#install-a-package-from-a-git-url%e4%bb%8egit-url%e5%ae%89%e8%a3%85%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器可以从远程服务器上的Git仓库加载包。&lt;/p&gt;
&lt;h2 id=&#34;prerequisites先决条件&#34;&gt;Prerequisites(先决条件) &lt;a href=&#34;#prerequisites%e5%85%88%e5%86%b3%e6%9d%a1%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;在你的电脑上安装Git客户端（最低版本为2.14.0）。&lt;/li&gt;
&lt;li&gt;在Windows上，将Git可执行路径添加到&lt;code&gt;PATH&lt;/code&gt;系统环境变量。&lt;/li&gt;
&lt;li&gt;如果目标仓库使用Git LFS跟踪文件，需要在你的电脑上安装Git LFS客户端。&lt;/li&gt;
&lt;li&gt;阅读关于在项目中使用Git依赖项的信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure流程&#34;&gt;Procedure(流程) &lt;a href=&#34;#procedure%e6%b5%81%e7%a8%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如需从Git URL安装包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开包管理器窗口，如果它还未开启的话。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在包管理器的工具栏中打开&lt;strong&gt;安装&lt;/strong&gt;菜单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装包的选项就会出现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-giturl.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在安装菜单中选择 &lt;strong&gt;从git URL安装包&lt;/strong&gt;。文本框和&lt;strong&gt;安装&lt;/strong&gt;按钮将会出现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在文本框中输入一个有效的Git URL。关于如何构造有效的Git URL的信息，请参考以下内容：&lt;/p&gt;
&lt;p&gt;Git URLs和扩展语法&lt;/p&gt;
&lt;p&gt;. 有效的Git URL示例包括:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://github.example.com/myuser/myrepo.git&lt;/code&gt; （如果你的包在仓库的根目录中）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://github.example.com/myuser/myrepo.git?path=/subfolder&lt;/code&gt; （如果你的包在仓库内的子文件夹中）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;安装&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果Unity能够成功安装包，该包现在将会带有标签出现在包列表中。如果Unity无法安装包，Unity控制台将显示错误消息，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;没有找到‘Git’可执行程序&lt;/li&gt;
&lt;li&gt;Git-lfs：未找到命令&lt;/li&gt;
&lt;li&gt;未找到仓库&lt;/li&gt;
&lt;li&gt;无法读取用户名：终端提示被禁用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;点击错误消息链接在解决问题页面获取一些帮助。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：如果你想检查更新并从仓库更新你的Git依赖项到最新版本，点击&lt;strong&gt;更新&lt;/strong&gt;。你也可以使用从git URL安装包菜单项来更新你的Git依赖项。关于Git依赖项的信息，请参阅已锁定的Git依赖项。&lt;/p&gt;
&lt;h1 id=&#34;install-a-package-from-a-registry-by-name通过名字从注册表中安装包&#34;&gt;Install a package from a registry by name(通过名字从注册表中安装包) &lt;a href=&#34;#install-a-package-from-a-registry-by-name%e9%80%9a%e8%bf%87%e5%90%8d%e5%ad%97%e4%bb%8e%e6%b3%a8%e5%86%8c%e8%a1%a8%e4%b8%ad%e5%ae%89%e8%a3%85%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果你知道你想安装的包的确切名称，你可以使用 &lt;strong&gt;按名称安装包&lt;/strong&gt; 选项进行安装。这是从注册表中安装包的一种快速方式。&lt;/p&gt;
&lt;p&gt;指定版本是可选的。如果你不知道要安装哪个版本，或者想安装最新的兼容版本，只需输入包的名称。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：最新的兼容版本可能不是最新发布的包。如果有一个已发布的包版本和一个更新的预发行或实验版本，包管理器会选择已发布的包版本，除非你在可选的 &lt;strong&gt;版本&lt;/strong&gt; 字段中明确输入一个值。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;确保你知道包的名称。包的名字是一个唯一的标识符，而不是用户界面和文档上使用的显示名称。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-name-v-dname.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;对于Unity注册表中的包，名称的唯一标识符使用反向域名表示法，格式为 &lt;code&gt;com.unity.example&lt;/code&gt;。对于在范围内注册表中的包，名称可能不会遵循同样的模式。&lt;/p&gt;
&lt;p&gt;对于Unity注册表和你已添加的任何范围内注册表，如果你在包管理器中可以看到包，选择它并在&lt;strong&gt;检查器&lt;/strong&gt;窗口中查看其详细信息。&lt;strong&gt;名字&lt;/strong&gt;值就是包的名称。&lt;/p&gt;
&lt;p&gt;确定包名的其他方法因托管它的注册表的不同而不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于Unity注册表中的包:
&lt;ul&gt;
&lt;li&gt;使用已发布包和预发布包中的列表，通过其显示名称（如 &lt;code&gt;2D Animation&lt;/code&gt;）识别包。超链接值就是那个包的名称；在这个例子中，是&lt;code&gt;com.unity.2d.animation&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;包的文档可能有明确提供&lt;code&gt;名字&lt;/code&gt;值的安装说明。&lt;/li&gt;
&lt;li&gt;常常会在包文档URL的地址中嵌套包名。以&lt;strong&gt;AR&lt;/strong&gt;基础包为例，其包文档的URL是&lt;code&gt;https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@5.0/manual/index.html&lt;/code&gt;；&lt;code&gt;com.unity.xr.arfoundation&lt;/code&gt;这一部分就是该包的名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;对于范围注册表中的包，如果你无法使用包管理器和检查器窗口确定其名称，联系包的创建者，请求包名。包的创建者在包的清单文件（&lt;code&gt;package.json&lt;/code&gt;）中将此值记录为必填属性。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure流程-1&#34;&gt;Procedure(流程) &lt;a href=&#34;#procedure%e6%b5%81%e7%a8%8b-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按名称安装注册表包，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开包管理器窗口，如果它还未打开的话。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击工具栏中的 &lt;strong&gt;安装&lt;/strong&gt; 按钮。安装包的选项会出现。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-quick.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在安装菜单中选择 &lt;strong&gt;按名称安装包&lt;/strong&gt;。两个文本框和一个 &lt;strong&gt;安装&lt;/strong&gt; 按钮就会出现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&amp;quot;开始前&amp;quot;部分确定的基础上，输入包的 &lt;strong&gt;名称&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-quick-add.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果你输入了一个无效的包名或版本，包管理器会警告你找不到那个名称或版本。确认包的名称和版本是否正确，然后再试一次。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;（可选）如果你知道要安装的版本，可以在 &lt;strong&gt;版本（可选）&lt;/strong&gt; 框中输入完整的包版本，例如 &lt;code&gt;1.3.0-pre.2&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;安装&lt;/strong&gt;。如果Unity能够成功安装包，该包现在就像任何其他从注册表安装的包一样出现在包列表中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：此方法适用于当前托管在Unity包注册表或任何你已为当前项目设置的范围包注册表上的任何包和版本。&lt;/p&gt;
&lt;h1 id=&#34;removing-an-installed-package-from-a-project从项目中移除已安装的包&#34;&gt;Removing an installed package from a project(从项目中移除已安装的包) &lt;a href=&#34;#removing-an-installed-package-from-a-project%e4%bb%8e%e9%a1%b9%e7%9b%ae%e4%b8%ad%e7%a7%bb%e9%99%a4%e5%b7%b2%e5%ae%89%e8%a3%85%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你从项目中&amp;quot;移除&amp;quot;一个Unity注册表包或范围注册表包时，包管理器实际上是在移除你的project manifest中的项目&lt;strong&gt;直接依赖项&lt;/strong&gt;。移除直接依赖项的结果根据你要移除的包的依赖项而变化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果没有其他的包或&lt;strong&gt;功能集&lt;/strong&gt;对此包有依赖，它实现的任何编辑器或运行时功能在你的项目中将不再可用。关于直接和&lt;strong&gt;间接依赖项&lt;/strong&gt;的更多信息，请参考依赖和解析。&lt;/li&gt;
&lt;li&gt;如果另一个已安装的包或一个已安装的功能集依赖于你试图移除的包，此操作只移除你的项目清单中的依赖项。包本身及其所有功能仍然在你的项目中安装，并在列表面板中显示依赖项图标。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-you-begin开始之前-1&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在你开始之前，确保你了解这些重要的注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只在你&lt;em&gt;安装&lt;/em&gt; 包到当前项目中时使用此程序来移除包，比如（但不限于）安装功能集，从注册表安装，和安装自定义包。不要试图使用此程序来：
&lt;ul&gt;
&lt;li&gt;移除你&lt;em&gt;下载&lt;/em&gt; &lt;em&gt;和&lt;/em&gt; &lt;em&gt;导入&lt;/em&gt; 到你的项目中的 &lt;strong&gt;Asset Store&lt;/strong&gt;包。关于移除你下载和导入的Asset Store包的信息，请参阅从项目中移除导入的资源。&lt;/li&gt;
&lt;li&gt;移除你&lt;em&gt;导入&lt;/em&gt; 到你的项目的本地 &lt;strong&gt;资源包&lt;/strong&gt;。关于移除你导入的本地资源包的信息，请参考移除本地资源包。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果你使用此程序来移除你从注册表中安装的包，操作会从当前项目中移除包。它不会移除可能存在于其他项目中的同一包。它也不会从全局缓存中移除包；关于包管理器，不支持这个操作，手动操控全局缓存是不被鼓励的。&lt;/li&gt;
&lt;li&gt;如果你用这个程序来移除一个嵌入到你的项目中的包，包管理器会从你的电脑中删除整个包文件夹。然而，从任何其他来源（包括本地包）安装的包只移除清单中对包的引用，但是保持包本身及其内容完整。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure流程-2&#34;&gt;Procedure(流程) &lt;a href=&#34;#procedure%e6%b5%81%e7%a8%8b-2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要移除已安装的包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口，并从导航面板中选择 &lt;strong&gt;在项目中&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-inproject.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想要移除的包。详细信息面板现在显示该包的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;移除&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果没有显示此按钮，你可能查看的是 &lt;strong&gt;我的资产&lt;/strong&gt; 列表。请参阅开始前。&lt;/p&gt;
&lt;p&gt;如果此按钮已禁用，你不能移除该包。更多信息，请参考锁定和不可移除的包。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-remove.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你想恢复已移除的包，按照安装包的说明进行操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你可以使用多选功能一次性移除多个包。更多信息，请参考在多个包或功能集上执行操作。&lt;/p&gt;
&lt;h2 id=&#34;locked-and-non-removable-packages锁定和无法移除的包&#34;&gt;Locked and non-removable packages(锁定和无法移除的包) &lt;a href=&#34;#locked-and-non-removable-packages%e9%94%81%e5%ae%9a%e5%92%8c%e6%97%a0%e6%b3%95%e7%a7%bb%e9%99%a4%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你只能移除那些未被其他的包或功能集要求的包。包管理器通过禁用所有被要求包的&lt;strong&gt;移除&lt;/strong&gt;按钮来强制执行此规定。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Required by&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;A feature set(功能集)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果功能集需要此包，那么在列表面板和详细信息面板中都会显示一个锁定图标。详细信息面板还会在该面板的锁定图标下方显示需要此包的功能集的名称。然而，即使你点击了&lt;strong&gt;解锁&lt;/strong&gt;按钮，只有在你移除所有需要它的功能集之后，你才能从项目中移除这个包。解锁包使你可以为你的项目请求一个不同的版本，但它仍然不允许你移除它。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Another package(另一个包)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果一个或多个包需要选中的包，&lt;strong&gt;移除&lt;/strong&gt;按钮就会被禁用。你可以从详细信息面板中的&lt;strong&gt;依赖项&lt;/strong&gt;选项卡中找到有依赖关系的包的名称。如果你不需要其他包，你可以移除它们，包管理器会自动同时移除这个包。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你可以使用多选功能一次性解锁多个包。更多信息，请参阅在多个包或功能集上执行操作。&lt;/p&gt;
&lt;h1 id=&#34;disabling-a-built-in-package禁用内置包&#34;&gt;Disabling a built-in package(禁用内置包) &lt;a href=&#34;#disabling-a-built-in-package%e7%a6%81%e7%94%a8%e5%86%85%e7%bd%ae%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果你不需要某些模块，想节省资源，你可以禁用&lt;strong&gt;内建包&lt;/strong&gt;。然而，当你禁用内建包时，相应的Unity功能将不再可用。&lt;/p&gt;
&lt;p&gt;禁用内建包将导致以下结果：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你使用了一个被禁用的包实现的脚本API，你会得到编译错误。&lt;/li&gt;
&lt;li&gt;被禁用的内建包实现的组件也会被禁用，这意味着你不能把它们添加到任何游戏对象上。如果你有一个&lt;strong&gt;游戏对象&lt;/strong&gt;已经有了这些组件中的一个，Unity会在播放模式中忽略它们。你可以在&lt;strong&gt;检查器&lt;/strong&gt;窗口中查看它们，但它们会显示为灰色，表示它们不可用。&lt;/li&gt;
&lt;li&gt;在构建游戏时，Unity会剔除所有禁用的组件。对于支持引擎代码剔除的构建目标（像Web，iOS，和Android），Unity不会添加任何来自被禁用的内建包的代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要禁用内置包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口，从导航面板中选择 &lt;strong&gt;内置包&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-builtin.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择你想要禁用的内置包。它的信息会显示在详细信息面板中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;禁用&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-disable.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你想要重新启用一个被禁用的内置包，点击 &lt;strong&gt;启用&lt;/strong&gt; 按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你可以使用多选功能一次点击禁用多个内置包。更多信息，请参阅在多个包或功能集上执行操作。&lt;/p&gt;
&lt;h1 id=&#34;switching-to-another-package-version切换至另一个包版本&#34;&gt;Switching to another package version(切换至另一个包版本) &lt;a href=&#34;#switching-to-another-package-version%e5%88%87%e6%8d%a2%e8%87%b3%e5%8f%a6%e4%b8%80%e4%b8%aa%e5%8c%85%e7%89%88%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用此页面的信息来更新你从Unity注册表、范围注册表或本地源安装的包。&lt;/p&gt;
&lt;p&gt;如果你想要安装包的特定版本，参考按名称安装包，并按照其可选步骤指定版本。&lt;/p&gt;
&lt;p&gt;如果你想要更新从Git URL安装的包，你可以使用以下任意一种方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口中定位到包，选择它，然后点击 &lt;strong&gt;更新&lt;/strong&gt; 按钮。&lt;/li&gt;
&lt;li&gt;使用新的修订版将包重新安装为Git依赖项。关于如何用 &lt;strong&gt;Git依赖项&lt;/strong&gt; 指定修订版的更多信息，参照定向至特定修订版。&lt;/li&gt;
&lt;li&gt;从Unity注册表重新安装包。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要更新包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口，并从导航面板选择 &lt;strong&gt;在项目中&lt;/strong&gt;， &lt;strong&gt;Unity注册表&lt;/strong&gt;，或 &lt;strong&gt;我的注册表&lt;/strong&gt;。你也可以选择 &lt;strong&gt;更新&lt;/strong&gt; 条目，它列出了你的项目中所有有可用更新的包。箭头图标出现在有可用更新的包旁边。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想要更新的已安装的包。包信息显示在详细信息面板中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;锁定图标表示这个包和版本被锁定到已安装的 &lt;strong&gt;功能集&lt;/strong&gt;。要解锁包并选择另一个版本，点击 &lt;strong&gt;解锁&lt;/strong&gt; 按钮。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包暂时被解开。如果你在导航面板中选择了不同的上下文，或者关闭了 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口或Unity编辑器，包会恢复为锁定状态。然而，如果在包解锁时你更改了版本（例如，通过按名称从注册表安装包的方法），包保持解锁状态。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在包列表中选择一个包。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-update-list.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在详细信息面板中，选择 &lt;strong&gt;版本历史&lt;/strong&gt; 标签。如果有多个版本可用，展开条目查看特定于每个版本的信息。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-update-1713439625941-103.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;更新至#.#&lt;/strong&gt; 按钮，或者点击在 &lt;strong&gt;版本历史&lt;/strong&gt; 标签中列出的版本旁边的 &lt;strong&gt;更新&lt;/strong&gt; 按钮。&lt;/p&gt;
&lt;p&gt;进度条完成时，任何新功能立即可用。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你切换到包的旧版本，可能需要在包内容上运行API更新器。&lt;/li&gt;
&lt;li&gt;你可以使用多选功能一次点击切换多个包的版本。更多信息，请参考在多个包或功能集上执行操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;importing-an-asset-store-package导入资源商店包&#34;&gt;Importing an Asset Store package(导入资源商店包) &lt;a href=&#34;#importing-an-asset-store-package%e5%af%bc%e5%85%a5%e8%b5%84%e6%ba%90%e5%95%86%e5%ba%97%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以使用 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口将 &lt;strong&gt;资源商店&lt;/strong&gt; 包导入到你的项目中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 遵循此任务导入尚未在你的项目中的资源商店包。关于更新已经在你的项目中的资源商店包的信息，参阅更新资源商店包。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;strong&gt;包管理器&lt;/strong&gt; 窗口，从导航面板中选择 &lt;strong&gt;我的资源&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-myassets.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;列表面板显示你使用当前登录的Unity ID从资源商店获取的任何包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果 &lt;strong&gt;我的资源&lt;/strong&gt; 列表中出现了很多资源商店的包，你可以通过名称搜索特定的资源商店包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想要导入的资源商店包。资源商店包的信息会显示在详细信息面板中。&lt;/p&gt;
&lt;p&gt;如果你之前没有在这台电脑或设备上下载过资源商店包， &lt;strong&gt;下载&lt;/strong&gt; 按钮会出现。否则，&lt;strong&gt;导入#.#到项目&lt;/strong&gt; 按钮会出现，你可以跳到步骤5立即导入资源商店包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果在详细信息面板中出现 &lt;strong&gt;下载&lt;/strong&gt; 按钮，点击它以下载资源商店包。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-import.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果下载按钮显示为 &lt;strong&gt;下载更新&lt;/strong&gt;，星号 (*) 表示在你的包缓存中有一个同版本号的旧版包。发布者随后发布了不改变版本号的包的更新版本。点击那个下载按钮获取包的最新版本。&lt;/p&gt;
&lt;p&gt;当资源商店包下载到你的电脑时，会出现一个进度条，&lt;strong&gt;暂停&lt;/strong&gt; 和 &lt;strong&gt;取消&lt;/strong&gt; 按钮会替换你点击的 &lt;strong&gt;下载&lt;/strong&gt; 按钮。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-download.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;这些按钮让你可以控制下载进度：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击 &lt;strong&gt;暂停&lt;/strong&gt; 按钮以暂停下载。你可以点击 &lt;strong&gt;播放&lt;/strong&gt; 按钮以继续。&lt;/li&gt;
&lt;li&gt;点击 &lt;strong&gt;取消&lt;/strong&gt; 按钮以完全停止下载。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载完成后，包管理器将 &lt;strong&gt;下载&lt;/strong&gt; 替换为一个包含 &lt;strong&gt;导入到项目&lt;/strong&gt; 和 &lt;strong&gt;重新下载&lt;/strong&gt; 操作的菜单。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;strong&gt;导入到项目&lt;/strong&gt; 以导入所选资源商店包。&lt;/p&gt;
&lt;p&gt;如果资源商店包是一个完整的项目，会出现一个确认对话框。参考从资源商店导入完整项目。&lt;/p&gt;
&lt;p&gt;对于所有其他资源商店包，&lt;strong&gt;导入Unity包&lt;/strong&gt; 窗口会显示出来，所有项目都已选中且准备好导入。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-import-assets.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;清除你不想导入的任何项目，然后点击 &lt;strong&gt;导入&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;包管理器会把导入的资源商店包的内容放入 &lt;code&gt;Assets&lt;/code&gt; 文件夹，以便你可以从 &lt;strong&gt;项目&lt;/strong&gt; 窗口中访问它们。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当导入操作完成后，导入的包仍然在 &lt;strong&gt;我的资源&lt;/strong&gt; 列表中，但你也可以在 &lt;strong&gt;项目中&lt;/strong&gt; 列表中查看它。每当包有更新可用时，你可以在同样的列表中查看它，以及 &lt;strong&gt;更新&lt;/strong&gt; 列表中，它就在 &lt;strong&gt;项目中&lt;/strong&gt; 下面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：你可以通过使用多选功能一键下载多个包。有关更多信息，请参考执行多个包的操作。&lt;/p&gt;
&lt;h2 id=&#34;viewing-imported-assets查看导入的资源&#34;&gt;Viewing imported assets(查看导入的资源) &lt;a href=&#34;#viewing-imported-assets%e6%9f%a5%e7%9c%8b%e5%af%bc%e5%85%a5%e7%9a%84%e8%b5%84%e6%ba%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你导入资源商店包，或从资源商店包中的一部分资源后，你可以查看已导入资源的列表。&lt;/p&gt;
&lt;p&gt;查看已导入的资源有以下步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在导航面板中选择 &lt;strong&gt;我的资源&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在列表面板中选择包。&lt;/li&gt;
&lt;li&gt;在详细信息面板中选择 &lt;strong&gt;已导入资源&lt;/strong&gt; 标签。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;importing-a-complete-project-from-the-asset-store从资源商店导入完整的项目&#34;&gt;Importing a complete project from the Asset Store(从资源商店导入完整的项目) &lt;a href=&#34;#importing-a-complete-project-from-the-asset-store%e4%bb%8e%e8%b5%84%e6%ba%90%e5%95%86%e5%ba%97%e5%af%bc%e5%85%a5%e5%ae%8c%e6%95%b4%e7%9a%84%e9%a1%b9%e7%9b%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;完整的项目具有资源和&lt;strong&gt;项目设置&lt;/strong&gt;。导入完整项目的过程与其他资源商店包相似，除了多了关于项目设置的步骤。&lt;/p&gt;
&lt;p&gt;完整项目中的项目设置可能与你的项目设置冲突，所以当你从资源商店导入一个完整的项目时，包管理器会打开一个对话框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-import-project.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果你确定要将包的资源添加到你的项目中，选择&lt;strong&gt;导入&lt;/strong&gt;。一个&lt;strong&gt;导入Unity包&lt;/strong&gt;窗口会出现，像下面的图片显示的那样。清除你不想导入的任何资产内容，然后点击&lt;strong&gt;下一步&lt;/strong&gt;。窗口的第二步列出了包的项目设置。如果你的项目中有任何这些项目设置，包管理器会用&lt;strong&gt;覆盖&lt;/strong&gt;标志来标识它们。除非你清除选择，否则这些设置将被包中的项目设置覆盖。清除你不想导入的任何项目设置，然后点击&lt;strong&gt;导入&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果你想在一个安全的环境中探索包的资源和项目设置，选择&lt;strong&gt;切换项目&lt;/strong&gt;。选择&lt;strong&gt;切换项目&lt;/strong&gt;将创建一个新的、临时的项目，只有该包的资源和项目设置。探索临时项目后，你可以不保存它然后关闭。如果你想在主项目中继续使用该包，则返回到主项目并再次导入包。在出现的警告对话框上选择&lt;strong&gt;导入&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-import-assets2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;updating-an-asset-store-package更新资源商店的包&#34;&gt;Updating an Asset Store package(更新资源商店的包) &lt;a href=&#34;#updating-an-asset-store-package%e6%9b%b4%e6%96%b0%e8%b5%84%e6%ba%90%e5%95%86%e5%ba%97%e7%9a%84%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以通过使用&lt;strong&gt;包管理器&lt;/strong&gt;窗口来更新&lt;strong&gt;资源商店&lt;/strong&gt;的包。&lt;/p&gt;
&lt;p&gt;**注意：**按照此任务来更新已经在你的项目中的资源商店包。如果你想了解关于导入还没有在你的项目中的资源商店包的信息，请参考导入资源商店包。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口，并从导航面板选择&lt;strong&gt;我的资源&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-myassets-1713439638777-118.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;任何有可用更新的资源商店包旁边都会出现一个向上指的箭头指示器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：要以最近更新的资源商店包为主的列表，按照&lt;strong&gt;最近更新&lt;/strong&gt;排列。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-update2-sort.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从包列表中选择你想更新的资源商店包。资源商店包的信息会在详细面板中显示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可选：选择&lt;strong&gt;发布&lt;/strong&gt;标签以查看包最新版本的变化。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-update-rel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;strong&gt;下载更新&lt;/strong&gt;按钮。&lt;strong&gt;注意&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果下载按钮显示为&lt;strong&gt;下载更新&lt;/strong&gt;，星号(*)意味着你的包缓存中有一个相同版本号的旧版本包。发布者随后发布了新版本的包，但没有改变其版本号。点击下载按钮可以获取包的最新版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你下载的包的版本与你的Unity编辑器版本不兼容，详细面板中会出现一条消息，附带有一个&lt;strong&gt;更新&lt;/strong&gt;按钮，让你下载包的兼容版本。&lt;/p&gt;
&lt;p&gt;不兼容版本的&lt;strong&gt;更新&lt;/strong&gt;按钮&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要使用前一步中下载的包来更新你的项目，选择&lt;strong&gt;导入更新至项目&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;remove-imported-assets-from-a-project从项目中移除已导入的资产&#34;&gt;Remove imported assets from a project(从项目中移除已导入的资产) &lt;a href=&#34;#remove-imported-assets-from-a-project%e4%bb%8e%e9%a1%b9%e7%9b%ae%e4%b8%ad%e7%a7%bb%e9%99%a4%e5%b7%b2%e5%af%bc%e5%85%a5%e7%9a%84%e8%b5%84%e4%ba%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你导入&lt;strong&gt;资产商店&lt;/strong&gt;中的资产时，Unity包管理器会将它们放在你的项目的&lt;code&gt;Assets&lt;/code&gt;目录中。&lt;/p&gt;
&lt;p&gt;如果你知道某些资产没有被使用，你可以从项目中移除这些资产。你可能会考虑这样做是为了减少项目目录的混乱或释放你的本地硬盘空间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;警告&lt;/strong&gt;：确保你的项目不再使用任何你要移除的资产。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前-2&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d-2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在开始之前，请确保你明白以下重要注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;只有当你按照“导入资产商店包”的步骤导入了这些资产到当前项目时，才按照此流程去移除资产。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要试图使用此流程来移除你从注册表中&lt;em&gt;安装&lt;/em&gt;的包。关于从项目中移除你从注册表中安装的包的信息，请参考“从项目中移除已安装的包”。&lt;/li&gt;
&lt;li&gt;不要试图使用此流程来移除你从本地资产包中&lt;em&gt;导入&lt;/em&gt;后的资产。关于删除你从本地资产包中导入的资产的信息，请参考“删除本地资产包”。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;此流程将资产从当前项目中移除。它不会移除可能存在于其他项目中的同样的资产。它也不会从资产商店缓存中移除包。为了完全从你的电脑中移除资产商店包和其资产，你必须从多个位置移除它们：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用下列流程将每个使用这些资产的项目中的资产移除。&lt;/li&gt;
&lt;li&gt;从你的资产商店缓存中删除此包。请参考“从资产商店缓存中删除一个包”。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;procedure流程-3&#34;&gt;Procedure(流程) &lt;a href=&#34;#procedure%e6%b5%81%e7%a8%8b-3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要从你的项目中移除已导入的资产：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开你的项目。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口，并从导航面板中选择&lt;strong&gt;我的资源&lt;/strong&gt;或&lt;strong&gt;项目中的资源&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择你想要从你的项目中移除的资源商店包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开详细面板右上角的菜单。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-details-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;从项目中移除资产&lt;/strong&gt;来打开&lt;strong&gt;移除&lt;/strong&gt;对话框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-remove-assets.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择要移除的资产。你可以用&lt;strong&gt;全部&lt;/strong&gt;来移除所有资产，或者你可以使用复选框来选择一部分资产。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;移除&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;依赖于已删除资产的&lt;strong&gt;场景&lt;/strong&gt;在&lt;strong&gt;控制台&lt;/strong&gt;窗口中不会报告为错误。如果你怀疑移除操作造成问题，请重新导入包。参考导入资源商店包。&lt;/li&gt;
&lt;li&gt;从你的项目中移除的资产仍会保留在我的资产列表中。要从&lt;strong&gt;我的资产&lt;/strong&gt;中移除这些资产，请参考从资源商店缓存中删除包。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你删除了一部分资产，你可以通过在详细面板中选择&lt;strong&gt;已导入的资产&lt;/strong&gt;标签来查看剩余资产的列表。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-ui-imported-assets.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h1 id=&#34;delete-a-package-from-the-asset-store-cache从资产商店缓存中删除包&#34;&gt;Delete a package from the Asset Store cache(从资产商店缓存中删除包) &lt;a href=&#34;#delete-a-package-from-the-asset-store-cache%e4%bb%8e%e8%b5%84%e4%ba%a7%e5%95%86%e5%ba%97%e7%bc%93%e5%ad%98%e4%b8%ad%e5%88%a0%e9%99%a4%e5%8c%85&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你下载一个&lt;code&gt;.unitypackage&lt;/code&gt;文件时，Unity包管理器会将其存储在&lt;strong&gt;资产商店&lt;/strong&gt;缓存中。每次你导入一个下载的包或自定义包时，Unity包管理器都会将其存储在你项目的&lt;code&gt;Assets&lt;/code&gt;目录中。&lt;/p&gt;
&lt;p&gt;你可能想要从资产商店缓存中删除包以释放你本地硬盘的空间。如果硬盘空间是你从资产商店缓存中删除包的主要原因，可以考虑改变资产商店缓存的位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;：从资产商店缓存中删除包并不会从使用该包的任何项目中移除同一包。如果你也想从一个项目中移除同一的包，参考从项目中移除已导入的资产。&lt;/p&gt;
&lt;p&gt;要从资产商店缓存中删除包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开&lt;strong&gt;包管理器&lt;/strong&gt;窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在导航面板中选择&lt;strong&gt;我的资产&lt;/strong&gt;上下文。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在列表面板中选择你想要删除的包。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意两个重要的值，你在后续步骤中需要它们：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;发行商的名字，位于&lt;strong&gt;包管理器&lt;/strong&gt;窗口详细面板下的显示名字下方。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;显示名字&lt;/strong&gt;值，位于&lt;em&gt;&lt;strong&gt;检视器&lt;/strong&gt;&lt;/em&gt;中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-details-and-inspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;转到资产商店缓存目录的根目录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于Unity编辑器2022.1或更高版本：&lt;/p&gt;
&lt;p&gt;a) 打开Unity编辑器的首选项窗口。&lt;/p&gt;
&lt;p&gt;b) 选择&lt;strong&gt;包管理器&lt;/strong&gt;类别。&lt;/p&gt;
&lt;p&gt;c)  点击&lt;strong&gt;My Assets&lt;/strong&gt; &amp;gt; &lt;strong&gt;Cache Location&lt;/strong&gt;图标.&lt;/p&gt;
&lt;p&gt;d) 选择&lt;strong&gt;在Explorer中显示&lt;/strong&gt;（Windows）或&lt;strong&gt;在Finder中显示&lt;/strong&gt;（macOS）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于Unity编辑器2021.3或更早版本：&lt;/p&gt;
&lt;p&gt;a) 参考下载的资产文件的位置，确定你的操作系统的缓存位置。&lt;/p&gt;
&lt;p&gt;b) 使用你的操作系统的文件管理器应用程序转到该目录。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择与发行商名称相对应的子目录，这是你在前面的步骤中记录的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-as-cache.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;发行商的目录有一个或多个子目录。发行商决定这些子目录的名称：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果有一个子目录，进入它。&lt;/li&gt;
&lt;li&gt;如果有多个子目录，浏览子目录，直到你找到包含要删除的包的子目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;code&gt;&amp;lt;name&amp;gt;.unitypackage&lt;/code&gt;文件，其中&lt;code&gt;&amp;lt;name&amp;gt;&lt;/code&gt;对应于你在前面的步骤中确定的&lt;strong&gt;检视器&lt;/strong&gt;窗口的&lt;strong&gt;显示名字&lt;/strong&gt;值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;删除文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个包现在已经从资产商店缓存中移除，但任何已导入的资产仍在使用它们的项目中保留。&lt;/p&gt;
&lt;h2 id=&#34;adding-the-deleted-package-back-to-your-asset-store-cache将删除的包重新添加到你的资产商店缓存中&#34;&gt;Adding the deleted package back to your Asset Store cache(将删除的包重新添加到你的资产商店缓存中) &lt;a href=&#34;#adding-the-deleted-package-back-to-your-asset-store-cache%e5%b0%86%e5%88%a0%e9%99%a4%e7%9a%84%e5%8c%85%e9%87%8d%e6%96%b0%e6%b7%bb%e5%8a%a0%e5%88%b0%e4%bd%a0%e7%9a%84%e8%b5%84%e4%ba%a7%e5%95%86%e5%ba%97%e7%bc%93%e5%ad%98%e4%b8%ad&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你删除的包是一个资产商店的包，并且你想要将此包重新添加到资产商店的缓存中，参见导入资产商店包。&lt;/p&gt;
&lt;h1 id=&#34;perform-an-action-on-multiple-packages对多个包执行操作&#34;&gt;Perform an action on multiple packages(对多个包执行操作) &lt;a href=&#34;#perform-an-action-on-multiple-packages%e5%af%b9%e5%a4%9a%e4%b8%aa%e5%8c%85%e6%89%a7%e8%a1%8c%e6%93%8d%e4%bd%9c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;你可以在包管理器的列表面板中选择多个包或&lt;strong&gt;特性集&lt;/strong&gt;，并一次性对所有选定的项目执行操作。&lt;/p&gt;
&lt;p&gt;例如，你可以使用此功能一次性更新多个包至其最新版本。&lt;/p&gt;
&lt;p&gt;以下表格列出了你可以用来选择多个项目的快捷方式。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Selection type&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Keyboard shortcut&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择列表中的所有项目&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Command + a (macOS) 或 Ctrl + a (Windows和Linux).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用键盘和鼠标选择一个范围&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择范围内的第一项，按住Shift键，然后选择范围内的最后一项.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用箭头键选择一个范围&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择范围内的第一项，按住Shift键，然后使用向上箭头键或向下箭头键扩大范围.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择不是一起分组的多个项目&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择一项，按住Command(macOS)或Ctrl（Windows或Linux），然后选择其他项目.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如需对多个包或特性集执行操作，请按照以下步骤操作：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开Package Manager窗口，从导航面板中选择一个上下文.&lt;/li&gt;
&lt;li&gt;可选：使用过滤控件来缩小列表.&lt;/li&gt;
&lt;li&gt;可选：使用排序控件对列表进行排序.&lt;/li&gt;
&lt;li&gt;使用上面表格中的其中一种快捷方式从列表中选择多个包或特性集.&lt;/li&gt;
&lt;li&gt;可选：在详细信息面板中打开展开器，查看有关所选项的更多信息，例如包的版本号.&lt;/li&gt;
&lt;li&gt;点击详细信息面板中的操作按钮，在所选项目上执行该操作.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/package-manager-multi-select.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注&lt;/strong&gt;：如果你在 &lt;strong&gt;我的资产&lt;/strong&gt; 列表中选择了多个包，以下操作将无法执行：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;导入到项目&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将更新导入到项目&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;重新下载&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;下载更新&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;finding-package-documentation寻找包文档&#34;&gt;Finding package documentation(寻找包文档) &lt;a href=&#34;#finding-package-documentation%e5%af%bb%e6%89%be%e5%8c%85%e6%96%87%e6%a1%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity手册为特定版本的Unity提供文档。对于包文档，每个包都有自己的版本，因此每个包都为该包的特定版本提供文档。因此，包文档不是主要的Unity手册文档的一部分。相反，每个包的文档都在Unity的文档服务器上的自己的网站上。&lt;/p&gt;
&lt;p&gt;要访问特定包的文档，你有两个选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;获取最新版本的文档。&lt;/li&gt;
&lt;li&gt;获取特定包版本的文档（从包管理器窗口）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当包页面打开时，页面顶部有四个链接**(A)&lt;strong&gt;，以及一个下拉菜单&lt;/strong&gt;(B)**，你可以在其中选择不同的版本：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-docs.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;使用页面顶部的链接查看包的核心使用（&lt;strong&gt;手册&lt;/strong&gt;），包的&lt;strong&gt;脚本API&lt;/strong&gt;文档，包的&lt;strong&gt;变更日志&lt;/strong&gt;，以及包的&lt;strong&gt;许可&lt;/strong&gt;信息。&lt;/p&gt;
&lt;h2 id=&#34;getting-documentation-for-the-latest-version获取最新版本的文档&#34;&gt;Getting documentation for the latest version(获取最新版本的文档) &lt;a href=&#34;#getting-documentation-for-the-latest-version%e8%8e%b7%e5%8f%96%e6%9c%80%e6%96%b0%e7%89%88%e6%9c%ac%e7%9a%84%e6%96%87%e6%a1%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每个版本的Unity手册文档都提供了已发布和预发布包的列表，内置包的列表，以及按关键字列出的包的列表。每个列表都有链接到与该版本的Unity匹配的包文档。&lt;strong&gt;注意&lt;/strong&gt;：只有与文档匹配的Unity版本兼容的包才会出现在这些列表中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-4/upm-docs-list.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;你可以展开侧边栏导航**(A)&lt;strong&gt;中的条目以获取每个包的特定信息。包括兼容版本列表，包的简短说明，和任何相关的关键字。或者，你可以点击列表页&lt;/strong&gt;(B)**上的链接，直接打开与文档版本匹配的最兼容的包文档版本。&lt;/p&gt;
&lt;p&gt;如果你在此列表中找不到你想要的包，可能有几个原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它与这个版本的Unity不兼容。&lt;/li&gt;
&lt;li&gt;它是一个实验性的或私有的包。有些包由Unity以外的人开发，或者它们在特殊许可证下，不能对所有人开放。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于在另一个Unity版本中发布的包，你可能可以通过包管理器窗口访问文档。对于私有包，请尝试直接联系开发者请求访问。&lt;/p&gt;
&lt;h2 id=&#34;getting-documentation-for-a-specific-package-version获取特定包版本的文档&#34;&gt;Getting documentation for a specific package version(获取特定包版本的文档) &lt;a href=&#34;#getting-documentation-for-a-specific-package-version%e8%8e%b7%e5%8f%96%e7%89%b9%e5%ae%9a%e5%8c%85%e7%89%88%e6%9c%ac%e7%9a%84%e6%96%87%e6%a1%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你可以通过查看其文档，变更日志或许可信息，了解更多来自注册表（非资产商店）的包的信息。&lt;/p&gt;
&lt;p&gt;要访问任何这些页面，你可以点击包管理器窗口内的&lt;strong&gt;文档&lt;/strong&gt;，&lt;strong&gt;变更日志&lt;/strong&gt;，或&lt;strong&gt;许可&lt;/strong&gt;链接。&lt;/p&gt;
&lt;p&gt;要访问特定包版本的文档：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在Unity中打开包管理器窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;遵循在寻找包中的指南，定位你想要的特定包和版本号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击&lt;strong&gt;文档&lt;/strong&gt;链接，打开所选版本包的文档。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：如果已安装包，你可以右键点击&lt;strong&gt;文档&lt;/strong&gt;，&lt;strong&gt;变更日志&lt;/strong&gt;或&lt;strong&gt;许可&lt;/strong&gt;链接，并选择&lt;strong&gt;本地打开&lt;/strong&gt;。包管理器会在适当的文件夹打开你的文件浏览器。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你可以按照这个流程查找来自注册表（非资产商店）的任何版本的包。请注意，对于每个包版本的发布，文档并不一定是不同的，因为有些版本更新（补丁）只涉及到错误修复或微小的更改。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity&#39;s Package Manager(二)(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/19/2023-07-19-unity-Documents-3/</link>
      <pubDate>Wed, 19 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/19/2023-07-19-unity-Documents-3/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unitys-package-manager二&#34;&gt;Unity’s Package Manager(二) &lt;a href=&#34;#unitys-package-manager%e4%ba%8c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h1 id=&#34;configuration配置&#34;&gt;Configuration(配置) &lt;a href=&#34;#configuration%e9%85%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;本节将向您展示如何针对PackageManager进行以下配置:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网络配置：绕过防火墙并设置代理服务器&lt;/li&gt;
&lt;li&gt;有范围的注册表身份验证：为需要此项的任何范围内的程序包注册表服务器创建并提供身份验证令牌&lt;/li&gt;
&lt;li&gt;定制全局缓存：更改全局缓存文件夹的位置以及注册表数据缓存的最大大小&lt;/li&gt;
&lt;li&gt;定制资产商店缓存位置：更改&lt;strong&gt;Asset Store&lt;/strong&gt;程序包缓存文件夹的位置&lt;/li&gt;
&lt;li&gt;使用HTTPS Git URLs的私有仓库：使用Git凭证助手访问通过HTTPS进行的私有仓库&lt;/li&gt;
&lt;li&gt;使用SSH Git URLs的有密码保护的SSH密钥：使用认证代理访问通过SSH进行的私有仓库&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此外，您可以在配置文件下找到PackageManager配置文件的位置。&lt;/p&gt;
&lt;h2 id=&#34;configuration-files配置文件&#34;&gt;Configuration files(配置文件) &lt;a href=&#34;#configuration-files%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;PackageManager支持两种配置文件：全局配置文件和用户配置文件。这两种文件都使用TOML格式，并且它们出现在不同的位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全局&lt;/strong&gt;配置文件适用于机器上的所有用户。例如，当为整个机器设置代理服务器时，您可以定义额外的SSL证书机构。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用户&lt;/strong&gt;配置文件适用于单个用户。例如，您可以设置用于使用有范围的注册表访问的自定义包注册服务器的认证令牌。这些令牌验证了特定的用户账户。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;global-configuration-file-location全局配置文件位置&#34;&gt;Global configuration file location(全局配置文件位置) &lt;a href=&#34;#global-configuration-file-location%e5%85%a8%e5%b1%80%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PackageManager使用名为&lt;code&gt;upmconfig.toml&lt;/code&gt;的全局配置文件。安装Unity Hub或Editor时，此文件不会被创建，但如果你需要自定义你的配置，你可以在以下位置创建它：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Environment:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Location:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;%ALLUSERSPROFILE%\Unity\config\upmconfig.toml&lt;/code&gt; (for example, &lt;code&gt;C:\ProgramData\Unity\config\upmconfig.toml&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;macOS and Linux&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;/etc/upmconfig.toml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;你可以定义一个自定义位置来覆盖你的配置文件的默认位置。要做到这一点，创建一个&lt;code&gt;UPM_GLOBAL_CONFIG_FILE&lt;/code&gt;环境变量，并将其值设置为你的配置文件的绝对路径，包括文件名。&lt;/p&gt;
&lt;h3 id=&#34;user-configuration-file-location用户配置文件位置&#34;&gt;User configuration file location(用户配置文件位置) &lt;a href=&#34;#user-configuration-file-location%e7%94%a8%e6%88%b7%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;PackageManager使用名为&lt;code&gt;.upmconfig.toml&lt;/code&gt;的用户配置文件。当你安装Unity Hub或Editor时，该文件并不被创建，但如果你需要自定义你的配置，你可以在下列位置创建它：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Environment:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Location:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows (user account)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;%USERPROFILE%\.upmconfig.toml&lt;/code&gt; (for example, &lt;code&gt;C:\Users\myusername\.upmconfig.toml&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows (system user account)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;%ALLUSERSPROFILE%\Unity\config\ServiceAccounts\.upmconfig.toml&lt;/code&gt; (for example, &lt;code&gt;C:\Users\Public\Unity\config\ServiceAccounts\.upmconfig.toml&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;macOS and Linux&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;~/.upmconfig.toml&lt;/code&gt; (for example, &lt;code&gt;/Users/myusername/.upmconfig.toml&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;你可以定义一个自定义位置来覆盖你的配置文件的默认位置。要做到这一点，创建一个&lt;code&gt;UPM_USER_CONFIG_FILE&lt;/code&gt;环境变量，并将其值设置为你的配置文件的绝对路径，包括文件名。&lt;/p&gt;
&lt;h1 id=&#34;solving-network-issues解决网络问题&#34;&gt;Solving network issues(解决网络问题) &lt;a href=&#34;#solving-network-issues%e8%a7%a3%e5%86%b3%e7%bd%91%e7%bb%9c%e9%97%ae%e9%a2%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;使用以下步骤来：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配置你的防火墙设置，使Unity可以访问PackageManager注册服务器。&lt;/li&gt;
&lt;li&gt;配置代理服务器，可以通过设置环境变量或添加自定义证书颁发机构(CA)证书来实现。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;configuring-your-firewall配置你的防火墙&#34;&gt;Configuring your firewall(配置你的防火墙) &lt;a href=&#34;#configuring-your-firewall%e9%85%8d%e7%bd%ae%e4%bd%a0%e7%9a%84%e9%98%b2%e7%81%ab%e5%a2%99&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;为确保Unity的PackageManager可以访问其使用的域名，你必须将这些域名添加到防火墙的安全列表。&lt;/p&gt;
&lt;p&gt;关于这些域名的完整列表，以及Unity编辑器所需的所有域名，请参考Unity应用程序可以访问的终端点。你可以使用列表添加整个域名，或使用表格选择性地添加子域名。&lt;/p&gt;
&lt;p&gt;请参考你的操作系统的帮助，了解如何将域名添加到防火墙的安全列表。&lt;/p&gt;
&lt;h2 id=&#34;configuring-your-proxy-server配置你的代理服务器&#34;&gt;Configuring your proxy server(配置你的代理服务器) &lt;a href=&#34;#configuring-your-proxy-server%e9%85%8d%e7%bd%ae%e4%bd%a0%e7%9a%84%e4%bb%a3%e7%90%86%e6%9c%8d%e5%8a%a1%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当使用代理服务器时，配置&lt;code&gt;HTTP_PROXY&lt;/code&gt;和&lt;code&gt;HTTPS_PROXY&lt;/code&gt;环境变量，供Unity的PackageManager在对Unity包注册表执行请求时使用。更多信息，请参考使用环境变量来识别你的代理服务器。&lt;/p&gt;
&lt;p&gt;你可以根据你的操作系统，全局设置这些变量（系统变量或用户变量）。或者，你也可以创建一个命令文件来设置这些环境变量并启动Hub。&lt;/p&gt;
&lt;p&gt;对于你在一个使用PackageManager不识别的证书的代理服务器后面的环境，你可以配置一个自定义证书颁发机构。&lt;/p&gt;
&lt;h3 id=&#34;custom-certificate-authority自定义证书颁发机构&#34;&gt;Custom certificate authority(自定义证书颁发机构) &lt;a href=&#34;#custom-certificate-authority%e8%87%aa%e5%ae%9a%e4%b9%89%e8%af%81%e4%b9%a6%e9%a2%81%e5%8f%91%e6%9c%ba%e6%9e%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在一些组织中，用户只能通过代理服务器访问互联网。一些代理会解开HTTPS内容，然后用他们自己的SSL证书重新打包。Unity包管理器的底层HTTPS层有时会拒绝这些证书，因为它不认可发出这些证书的证书颁发机构。当这种情况发生时，PackageManager会将连接视为可能的中间人攻击(MITM)。这意味着，除非你配置额外的SSL证书颁发机构来允许这些证书，否则你无法使用Unity中的许多功能，包括PackageManager。&lt;/p&gt;
&lt;p&gt;要配置额外的SSL证书颁发机构：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;定位&lt;code&gt;upmconfig.toml&lt;/code&gt;全局配置文件。如果文件不存在，创建一个空的文本文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建一个包含一个或多个自定义证书颁发机构的证书的文本文件。文件必须由一个或多个受信任的证书组成，证书格式为Privacy-Enhanced Mail (PEM)。例如：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-pem&#34; data-lang=&#34;pem&#34;&gt;-----BEGIN CERTIFICATE-----
MIIC+zCCAeOgAwIBAgIJAO0U6hVJnbvjMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0xOTAzMTIwMTIxMzRaFw0yOTAzMDkwMTIxMzRaMBQx
(additional lines omitted for conciseness)
LFwHSUdqk0lJK4b0mCwyTHNvYO1IDziE5EKwfuaKVgOa62iCHVahgIVa+een4EfS
hCCr3M3cq11Mi+mnRi1scxxrOno4OEEChWg2szZLlxBrkVJllrrq620XJ6RLB/8=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
(additional lines omitted for conciseness)
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
-----END CERTIFICATE-----
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果可能的话，将此文件保存到与全局配置文件相同的文件夹中，虽然Unity支持在文件系统的任何位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在全局配置文件中，添加&lt;strong&gt;caFile&lt;/strong&gt;键，并将其值设置为你的PEM文件的绝对文件路径。&lt;strong&gt;重要提示&lt;/strong&gt;：在TOML文件中设置Windows路径时，使用正斜杠(&lt;code&gt;/&lt;/code&gt;)或双反斜杠(&lt;code&gt;\\&lt;/code&gt;)。不要使用单反斜杠(&lt;code&gt;\&lt;/code&gt;)，因为它们是标记转义序列的特殊字符，可能会导致TOML解析错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;caFile&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\\ProgramData\\Unity\\config\\cert.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;macOS and Linux example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;caFile&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/etc/cert.pem&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;scoped-registry-authentication限定范围的注册表身份验证&#34;&gt;Scoped registry authentication(限定范围的注册表身份验证) &lt;a href=&#34;#scoped-registry-authentication%e9%99%90%e5%ae%9a%e8%8c%83%e5%9b%b4%e7%9a%84%e6%b3%a8%e5%86%8c%e8%a1%a8%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;一些组织在需要身份验证才能访问的私有包注册表上托管他们自己的包。如果你是这些组织的员工或客户，你必须配置一个带有npm身份验证的限定范围的注册表。为了建立这个，获取一个npm身份验证令牌，然后将该令牌添加到你的用户配置文件中。&lt;/p&gt;
&lt;h2 id=&#34;1-fetch-the-npm-authentication-token获取npm身份验证令牌&#34;&gt;1) Fetch the npm authentication token(获取npm身份验证令牌) &lt;a href=&#34;#1-fetch-the-npm-authentication-token%e8%8e%b7%e5%8f%96npm%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e4%bb%a4%e7%89%8c&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;创建和访问npm身份验证令牌的过程因每个注册表提供商而异。例如，JFrog的Artifactory仓库管理器生成身份验证令牌的程序与npm不同。这是一个典型程序的例子，但你需要遵循特定包注册表供应商为你的限定范围的注册表推荐的过程。&lt;/p&gt;
&lt;p&gt;要从npm获取身份验证令牌：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在你的计算机上本地安装npm。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从终端，输入以下命令来登录注册表：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ npm login --registry &amp;lt;registry url&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;定位并打开生成的.npmrc文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;定位&lt;code&gt;_authToken&lt;/code&gt;或&lt;code&gt;_auth&lt;/code&gt;条目，并复制其值（参阅下面的例子）。&lt;/p&gt;
&lt;p&gt;根据注册表，令牌字符串可以是全局唯一标识符（GUID）、令牌，或者是专有格式的字符串。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;examples-of-npmrc-filesnpmrc文件的示例&#34;&gt;Examples of .npmrc files(.npmrc文件的示例) &lt;a href=&#34;#examples-of-npmrc-filesnpmrc%e6%96%87%e4%bb%b6%e7%9a%84%e7%a4%ba%e4%be%8b&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这是一个包含&lt;code&gt;_authToken&lt;/code&gt;属性的&lt;code&gt;.npmrc&lt;/code&gt;文件的例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;registry&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;://&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1234&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mylocation&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;//&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1234&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mylocation&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/:&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_authToken&lt;/span&gt;=&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;AUTH&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TOKEN&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这是一个包含&lt;code&gt;_auth&lt;/code&gt;属性的&lt;code&gt;.npmrc&lt;/code&gt;文件的示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;registry&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;://&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1234&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mylocation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_auth&lt;/span&gt;=&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;AUTH&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TOKEN&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;=&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;EMAIL&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;always-auth&lt;/span&gt;=&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;2-configure-authentication-information配置身份验证信息&#34;&gt;2) Configure authentication information(配置身份验证信息) &lt;a href=&#34;#2-configure-authentication-information%e9%85%8d%e7%bd%ae%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用&lt;code&gt;npmAuth&lt;/code&gt;配置模式在&lt;code&gt;.upmconfig.toml&lt;/code&gt;用户配置文件中存储每个需要身份验证的限定范围的注册表的令牌信息。当你把这个信息保存到配置文件后，包管理器会在向文件中的每个注册表发起的每个请求上提供你的身份验证信息。&lt;/p&gt;
&lt;p&gt;遵循这些指示将你的身份验证信息添加到用户配置文件中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;定位&lt;code&gt;.upmconfig.toml&lt;/code&gt;用户配置文件。如果文件不存在，创建一个空的文本文件。&lt;/li&gt;
&lt;li&gt;根据你是否使用Bearer（基于令牌）或Basic（Base64加密）的身份验证机制，使用模式格式化你的身份验证信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;npmAuth&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;REGISTRY URL&amp;gt;&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;TOKEN-PROPERTY&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;TOKEN-VALUE&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;EMAIL&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;alwaysAuth&lt;/span&gt; = &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;BOOLEAN&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;下表中的信息解释了如何指定配置文件的值：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Entry&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;[npmAuth.&amp;quot;&amp;lt;REGISTRY-URL&amp;gt;&amp;quot;]&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;需要。注册表的URL。例如，&lt;code&gt;[npmAuth.&amp;quot;https://example.com:8081/mylocation&amp;quot;]&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;&amp;lt;TOKEN-PROPERTY&amp;gt; = &amp;quot;&amp;lt;TOKEN-VALUE&amp;gt;&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;需要。从npm注册表生成的身份验证令牌。这可以是GUID、令牌，或者是专有格式的字符串。例如，可以是&lt;code&gt;token = &amp;quot;&amp;lt;AUTH TOKEN&amp;gt;&amp;quot;&lt;/code&gt;（Bearer）或&lt;code&gt;_auth = &amp;quot;&amp;lt;BASE64 TOKEN&amp;gt;&amp;quot;&lt;/code&gt;（Basic）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;email&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可选。与注册表上用户邮箱地址匹配的用户邮箱地址。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;alwaysAuth&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可选。如果包元数据和压缩包不在同一服务器上，设置为&lt;code&gt;true&lt;/code&gt;。通常，你可以从你生成的.npmrc文件中复制这个值。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;example-using-bearer-authentication使用bearer身份验证的例子&#34;&gt;Example using bearer authentication(使用Bearer身份验证的例子) &lt;a href=&#34;#example-using-bearer-authentication%e4%bd%bf%e7%94%a8bearer%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e7%9a%84%e4%be%8b%e5%ad%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;npmAuth&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://localhost:8081/myrepository/mylocation&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NpmToken.2348c7ea-6f86-3dbe-86b6-f257e86569a8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;alwaysAuth&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;npmAuth&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://localhost:4873&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;eaJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyZWFsX2dyb3VwcyI6WyJwYXNjYWxsIl0sIm5hbWUiOiJwYXNjYWxsIiwiZ3JvdXBzIjpbIn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;npmAuth&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api.bintray.example/npm/mycompany/myregistry&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;aGFzY2FsbDo4ZWIwNTM5NzBjNTI3OTIwYjQ4MDVkYzY2YWEzNmQxOTkyNDYzZjky&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;alwaysAuth&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configure-basic-authentication-information配置基本身份验证信息&#34;&gt;Configure basic authentication information(配置基本身份验证信息) &lt;a href=&#34;#configure-basic-authentication-information%e9%85%8d%e7%bd%ae%e5%9f%ba%e6%9c%ac%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;这些步骤以Azure DevOps为例，但是对于任何使用个人访问令牌（PAT）的平台，流程都是类似的。&lt;/p&gt;
&lt;p&gt;开始前，如果还未安装Node.js，请进行安装。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;获取你的Azure DevOps个人访问令牌（PAT），准备在后续步骤中使用。如果你需要重新生成PAT，请登录Azure DevOps &lt;a href=&#34;https://dev.azure.com/&#34;&gt;https://dev.azure.com&lt;/a&gt; 并前往 &lt;strong&gt;用户设置&lt;/strong&gt; &amp;gt; &lt;strong&gt;个人访问令牌&lt;/strong&gt;。关于如何使用PAT的信息，可以参考Microsoft的文章，使用个人访问令牌。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从命令行，运行以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;node -e &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;require(&amp;#39;readline&amp;#39;).createInterface({input:process.stdin,output:process.stdout,historySize:0}).question(&amp;#39;Enter PAT&amp;gt; &amp;#39;,p =&amp;gt; {b64=Buffer.from(p.trim()).toString(&amp;#39;base64&amp;#39;);console.log(b64);process.exit();})&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;code&gt;Enter PAT&lt;/code&gt;提示时，输入&lt;code&gt;email:PAT&lt;/code&gt;，将其替换为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;将&lt;code&gt;email&lt;/code&gt;替换为与你的Azure DevOps帐户关联的电子邮件和&lt;code&gt;.upmconfig.toml&lt;/code&gt;文件中指定的电子邮件&lt;/li&gt;
&lt;li&gt;将&lt;code&gt;PAT&lt;/code&gt;替换为你在早期步骤中获得的PAT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;命令将返回一个Base64加密的字符串。复制该字符串并将其赋值为&lt;code&gt;.upmconfig.toml&lt;/code&gt;文件中的&lt;code&gt;_auth&lt;/code&gt;键的值。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;example-using-basic-authentication&#34;&gt;Example using basic authentication &lt;a href=&#34;#example-using-basic-authentication&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;npmAuth&lt;/span&gt;.&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://localhost:8081/myrepository/mylocation&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_auth&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c19kaW5pcm9AaG90bWFpbC4jb206d3FzdzVhemU9Q==&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;username@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;alwaysAuth&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;customize-the-global-cache自定义全局缓存&#34;&gt;Customize the global cache(自定义全局缓存) &lt;a href=&#34;#customize-the-global-cache%e8%87%aa%e5%ae%9a%e4%b9%89%e5%85%a8%e5%b1%80%e7%bc%93%e5%ad%98&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器维护一个用于注册表数据和未压缩包的全局缓存。&lt;/p&gt;
&lt;p&gt;全局缓存与包管理器为 &lt;strong&gt;资源商店&lt;/strong&gt; 包维护的缓存是分开的。关于资源商店缓存的信息，请参考自定义资源商店缓存位置。&lt;/p&gt;
&lt;p&gt;默认情况下，包管理器的全局缓存根目录有以下子目录，每个子缓存有不同的用途：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;db&lt;/code&gt;子目录存储注册表数据（包元数据和tarballs）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packages&lt;/code&gt;子目录存储未压缩的包tarballs的内容。&lt;/li&gt;
&lt;li&gt;如果你已启用Git LFS，&lt;code&gt;git-lfs&lt;/code&gt;子目录会存储下载的Git大文件存储（LFS）文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;包管理器将全局缓存存储在默认位置，你可以覆盖它。关于全局缓存根目录的默认位置的信息，请参考全局缓存。&lt;/p&gt;
&lt;p&gt;你可能出于以下几个原因想要覆盖全局缓存位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你想在你的内部驱动器上节省空间。&lt;/li&gt;
&lt;li&gt;你想在共享驱动器上存储缓存，以便其他人可以访问它。&lt;/li&gt;
&lt;li&gt;你想在非系统目录的文件夹中存储缓存。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从2023.2.0f1开始，&lt;code&gt;db&lt;/code&gt;子目录的最大大小默认为10千兆字节（GB），你可以覆盖它。你可能出于以下几个原因想要覆盖&lt;code&gt;db&lt;/code&gt;子目录的最大大小：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你的可用磁盘空间很小，你可以降低限制以节省空间。&lt;/li&gt;
&lt;li&gt;如果你有大量可用的磁盘空间，你可以增加限制。这允许包管理器在缓存中存储更多数据，这样它可以从缓存中获取包，而不是再次下载它们。缓存的包安装更快，减少了网络使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下表格列出了你可以用来覆盖默认属性的不同方法：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;&lt;strong&gt;Global cache location&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;&lt;strong&gt;&lt;code&gt;db&lt;/code&gt; subdirectory max size&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Additional notes(额外说明)&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Preferences window(偏好设置窗口)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;No&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这种方法因其易用性和持久性被推荐。当你使用这种方法更改包缓存位置时，Unity会为当前和未来的Unity编辑器会话存储偏好设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;User configuration file(用户配置文件)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用户配置文件中的包缓存属性覆盖会持续到当前Unity编辑器会话之后。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Environment variables(环境变量)&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;Yes&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;默认情况下，此方法为当前的命令提示符（或终端）会话设置配置，但你可以在你的操作系统设置中使其永久化。高级用户可能在特定用例下更喜欢基于会话的变量。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：使用&lt;strong&gt;偏好设置&lt;/strong&gt;窗口设置全局缓存位置也会在用户配置文件中设置&lt;code&gt;cacheRoot&lt;/code&gt;属性。如果你想手动设置用户配置文件，请参考使用用户配置文件。&lt;/p&gt;
&lt;h2 id=&#34;important-notes-before-you-begin开始前的重要声明&#34;&gt;Important notes before you begin(开始前的重要声明) &lt;a href=&#34;#important-notes-before-you-begin%e5%bc%80%e5%a7%8b%e5%89%8d%e7%9a%84%e9%87%8d%e8%a6%81%e5%a3%b0%e6%98%8e&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;无论你选择哪种方法，更改缓存位置都会告诉包管理器从此时开始使用该位置。包管理器在原始位置存储的现有包会保留在那个文件夹结构中。&lt;/li&gt;
&lt;li&gt;如果你设置了&lt;code&gt;db&lt;/code&gt;子目录的最大大小，且新大小小于该子目录的当前大小，包管理器会从缓存中逐出内容，直到达到新的限制。包管理器会按照最近最少使用的内容进行驱逐（基于安装到项目中的日期）。&lt;/li&gt;
&lt;li&gt;当你使用用户配置文件时，你的更改应用于当前的用户帐户。尽管存在全局配置文件，但你不能在全局配置文件中设置缓存覆盖。&lt;/li&gt;
&lt;li&gt;有一些因素会影响如何设置多个值与使用不同方法一起工作：
&lt;ul&gt;
&lt;li&gt;如果你使用了环境变量方法来更改缓存位置，那么你不能使用&lt;strong&gt;偏好设置&lt;/strong&gt;窗口来更改位置。&lt;/li&gt;
&lt;li&gt;设置环境变量优先于在用户配置文件或&lt;strong&gt;偏好设置&lt;/strong&gt;窗口中应用相同的设置。&lt;/li&gt;
&lt;li&gt;如果你为注册表数据缓存(&lt;code&gt;UPM_NPM_CACHE_PATH&lt;/code&gt;)、未压缩的包缓存(&lt;code&gt;UPM_CACHE_PATH&lt;/code&gt;)或Git LFS缓存(&lt;code&gt;UPM_GIT_LFS_CACHE_PATH&lt;/code&gt;)设置了环境变量，包管理器将使用环境变量设置的位置，而不管全局缓存根位置在哪里。&lt;/li&gt;
&lt;li&gt;如果你启用了Git LFS缓存(&lt;code&gt;UPM_ENABLE_GIT_LFS_CACHE&lt;/code&gt;)但没有明确设置其路径(&lt;code&gt;UPM_GIT_LFS_CACHE_PATH&lt;/code&gt;)，包管理器会使用全局缓存根下的&lt;code&gt;git-lfs&lt;/code&gt;目录作为其位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;using-the-preferences-window偏好设置窗口&#34;&gt;Using the Preferences window(偏好设置窗口) &lt;a href=&#34;#using-the-preferences-window%e5%81%8f%e5%a5%bd%e8%ae%be%e7%bd%ae%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;若要使用&lt;strong&gt;偏好设置&lt;/strong&gt;窗口来覆盖全局缓存的默认位置，请按照以下步骤操作。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用以下方法之一打开&lt;strong&gt;偏好设置&lt;/strong&gt;窗口：
&lt;ul&gt;
&lt;li&gt;使用Unity编辑器的菜单，如偏好设置中所述。&lt;/li&gt;
&lt;li&gt;打开包管理器窗口，打开&lt;strong&gt;高级&lt;/strong&gt; &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/iconSettings.png&#34; alt=&#34;img&#34;&gt; 菜单，并选择&lt;strong&gt;偏好设置&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;包管理器&lt;/strong&gt;分类。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;包&lt;/strong&gt;下，打开&lt;strong&gt;缓存位置&lt;/strong&gt;旁边的菜单 &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/package-manager-folder.png&#34; alt=&#34;img&#34;&gt;.&lt;/li&gt;
&lt;li&gt;选择&lt;strong&gt;更改位置&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;为全局缓存选择一个新位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/preferences-package-manager.png&#34; alt=&#34;The Preferences window with the Package Manager category selected&#34;&gt;&lt;/p&gt;
&lt;p&gt;选择了包管理器类别的偏好设定窗口&lt;/p&gt;
&lt;h2 id=&#34;using-the-user-configuration-file使用用户配置文件&#34;&gt;Using the user configuration file(使用用户配置文件) &lt;a href=&#34;#using-the-user-configuration-file%e4%bd%bf%e7%94%a8%e7%94%a8%e6%88%b7%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;你可以手动编辑用户配置文件，以覆盖全局缓存根的位置，或&lt;code&gt;db&lt;/code&gt;子目录的最大大小，或两者都覆盖。&lt;/p&gt;
&lt;p&gt;按照以下步骤编辑用户配置文件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;定位&lt;code&gt;.upmconfig.toml&lt;/code&gt;用户配置文件。要找到文件位置，请参阅配置文件。如果文件不存在，则创建一个空文本文件。&lt;/li&gt;
&lt;li&gt;要覆盖全局缓存根的位置，添加&lt;code&gt;cacheRoot&lt;/code&gt;键，并将其值设置为自定义位置的绝对路径。&lt;strong&gt;重要提示&lt;/strong&gt;：在TOML文件中设置Windows路径时，使用正斜杠(&lt;code&gt;/&lt;/code&gt;)或双反斜杠(&lt;code&gt;\\&lt;/code&gt;)。不要使用单个反斜杠(&lt;code&gt;\&lt;/code&gt;)，因为它们是标记转义序列的特殊字符，可能导致TOML解析错误。&lt;/li&gt;
&lt;li&gt;要覆盖&lt;code&gt;db&lt;/code&gt;子目录的最大大小，添加&lt;code&gt;maxCacheSize&lt;/code&gt;键，并将其值设置为表示字节数的正整数。例如，要将大小设置为5GB，请赋值&lt;code&gt;5000000000&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在设置任一属性后，你无需重新启动Unity编辑器或Hub，更改即可生效。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cacheRoot&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;E:\\Unity\\cache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxCacheSize&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;5000000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;macOS and Linux example&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cacheRoot&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/dev/external/shared/Unity/cache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxCacheSize&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;5000000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;using-environment-variables使用环境变量&#34;&gt;Using environment variables(使用环境变量) &lt;a href=&#34;#using-environment-variables%e4%bd%bf%e7%94%a8%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在涉及自动化或持续集成的场景中，在用户配置文件或&lt;strong&gt;偏好设置&lt;/strong&gt;窗口中配置设置可能不太实际，而且更容易出错。在这种情况下，你可能会考虑使用环境变量来配置全局缓存及其附属缓存的设置。下列环境变量可供使用：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Environment variable&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_CACHE_ROOT&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定全局缓存的位置（包含注册表数据和未压缩包缓存的根文件夹）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_NPM_CACHE_PATH&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定您希望包管理器用作其注册表数据缓存的位置的绝对路径。默认情况下，这是全局缓存根目录下的&lt;code&gt;db&lt;/code&gt;子目录。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_CACHE_PATH&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定您希望包管理器存储包 tarball 的未压缩内容的位置的绝对路径。默认情况下，这是全局缓存根目录下的&lt;code&gt;packages&lt;/code&gt;子目录。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_ENABLE_GIT_LFS_CACHE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定任何非空（&amp;quot;&amp;quot;）的值以启用 Git LFS 缓存。默认情况下，包管理器使用全局缓存根目录下的&lt;code&gt;git-lfs&lt;/code&gt;子目录，除非您使用&lt;code&gt;UPM_GIT_LFS_CACHE_PATH&lt;/code&gt;环境变量指定了不同的路径。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_GIT_LFS_CACHE_PATH&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指定您希望包管理器存储 Git LFS 缓存的位置的绝对路径。通过设置此路径，您自动启用 Git LFS 缓存。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;UPM_MAX_CACHE_SIZE&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以字节为单位，以正整数指定注册表数据缓存（&lt;code&gt;db&lt;/code&gt;子目录）的最大大小。例如，要将大小设置为5GB，分配一个值为&lt;code&gt;5000000000&lt;/code&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;重要提示&lt;/strong&gt;：当你使用此方法时，请遵循以下指导原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在设置环境变量之前，如果Unity编辑器和Unity Hub已经在运行，请关闭它们。&lt;/li&gt;
&lt;li&gt;在设置环境变量的同一个命令提示符或终端会话中启动Unity编辑器或Unity Hub。&lt;/li&gt;
&lt;li&gt;如果你在前述表格中设置了任何环境变量，每次启动Unity时都必须设置它们。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关设置环境变量的信息，请参阅你的操作系统的文档。要了解环境变量的介绍，请参考 &lt;a href=&#34;https://en.wikipedia.org/wiki/Environment_variable&#34;&gt;https://en.wikipedia.org/wiki/Environment_variable&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;customize-the-asset-store-cache-location自定义资源商店缓存位置&#34;&gt;Customize the Asset Store cache location(自定义资源商店缓存位置) &lt;a href=&#34;#customize-the-asset-store-cache-location%e8%87%aa%e5%ae%9a%e4%b9%89%e8%b5%84%e6%ba%90%e5%95%86%e5%ba%97%e7%bc%93%e5%ad%98%e4%bd%8d%e7%bd%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包管理器为你从&lt;strong&gt;资源商店&lt;/strong&gt;获取的包维护一个缓存。包管理器将此缓存存储在一个默认位置，你可以覆盖这个位置。&lt;/p&gt;
&lt;p&gt;你可能有多种原因想要覆盖资源商店缓存的位置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你想节省内部驱动器的空间。&lt;/li&gt;
&lt;li&gt;你想将缓存存储在一个共享驱动器上，其他人可以访问。&lt;/li&gt;
&lt;li&gt;你想将缓存存储在不在系统目录中的文件夹。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;默认情况下，包管理器对其资源商店包缓存使用以下文件夹结构：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;asset-store-cache-root&amp;gt;
  └── Asset Store-5.x
      └── &amp;lt;subfolders for Asset Store vendors&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;关于资源商店包缓存根的默认位置的信息，请参考已下载资产文件的位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包管理器为注册表包和资源商店包维护独立的缓存。关于覆盖全局缓存的默认位置的信息，请参考自定义全局缓存。&lt;/p&gt;
&lt;p&gt;要覆盖包管理器对资源商店包的缓存的默认位置，你可以使用以下方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;推荐使用首选项窗口方法，因为它既简单又持久。当你使用该方法更改包缓存位置时，Unity会为当前会话和未来的会话存储偏好设置。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ASSETSTORE_CACHE_PATH&lt;/code&gt;环境变量方法不是永久性的，但高级用户在特定的使用情况下可能会发现它更可取。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;important-notes-before-you-begin开始前的重要提示&#34;&gt;Important notes before you begin(开始前的重要提示) &lt;a href=&#34;#important-notes-before-you-begin%e5%bc%80%e5%a7%8b%e5%89%8d%e7%9a%84%e9%87%8d%e8%a6%81%e6%8f%90%e7%a4%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;无论你选择哪种方法，改变缓存位置都会告诉包管理器往后使用那个位置。包管理器在原始位置存储的现有包仍会保留在那个文件夹结构中。&lt;/li&gt;
&lt;li&gt;如果你使用环境变量方法更改了缓存位置，那么你就不能使用首选项窗口来更改位置。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;using-the-preferences-window使用首选项窗口&#34;&gt;Using the Preferences window(使用首选项窗口) &lt;a href=&#34;#using-the-preferences-window%e4%bd%bf%e7%94%a8%e9%a6%96%e9%80%89%e9%a1%b9%e7%aa%97%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要使用首选项窗口覆盖资源商店包缓存的默认位置，请按照以下步骤操作。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用以下方法之一打开首选项窗口：
&lt;ul&gt;
&lt;li&gt;使用Unity编辑器的菜单，如首选项中所述。&lt;/li&gt;
&lt;li&gt;打开包管理器窗口，点击设置图标 &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/iconSettings-1712903391407-7.png&#34; alt=&#34;img&#34;&gt;，然后选择 &lt;strong&gt;首选项&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;包管理器&lt;/strong&gt; 类别。&lt;/li&gt;
&lt;li&gt;在 &lt;strong&gt;我的资源&lt;/strong&gt; 下，打开 &lt;strong&gt;缓存位置&lt;/strong&gt; 旁边的菜单 &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/package-manager-folder-1712903396270-10.png&#34; alt=&#34;img&#34;&gt;.&lt;/li&gt;
&lt;li&gt;选择 &lt;strong&gt;更改位置&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;为资源商店包缓存选择一个新的位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/preferences-package-manager-1712903398996-13.png&#34; alt=&#34;The Preferences window with the Package Manager category selected&#34;&gt;&lt;/p&gt;
&lt;p&gt;选择首选项窗口的包管理器类别&lt;/p&gt;
&lt;h2 id=&#34;using-the-environment-variable使用环境变量&#34;&gt;Using the environment variable(使用环境变量) &lt;a href=&#34;#using-the-environment-variable%e4%bd%bf%e7%94%a8%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在涉及自动化或持续集成的场景中，通过配置文件或首选项窗口配置设置的方式显得不够实用，而且更容易出错。在这样的场景下，你可能会考虑设置&lt;code&gt;ASSETSTORE_CACHE_PATH&lt;/code&gt;环境变量，以覆盖资源商店包缓存的默认位置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：在使用此方法时，请遵循以下指南：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在设置环境变量之前，如果Unity编辑器和Unity Hub已经在运行，则关闭它们。&lt;/li&gt;
&lt;li&gt;从设置环境变量的同一命令提示符或终端会话中启动Unity编辑器或Unity Hub。&lt;/li&gt;
&lt;li&gt;每次启动Unity时，你都必须设置&lt;code&gt;ASSETSTORE_CACHE_PATH&lt;/code&gt;环境变量。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于设置环境变量的信息，请参照你的操作系统的文档。关于环境变量的入门介绍，请参考https://en.wikipedia.org/wiki/Environment_variable&lt;/p&gt;
&lt;h1 id=&#34;using-private-repositories-with-https-git-urls使用https-git-url访问私有仓库&#34;&gt;Using private repositories with HTTPS Git URLs(使用HTTPS Git URL访问私有仓库) &lt;a href=&#34;#using-private-repositories-with-https-git-urls%e4%bd%bf%e7%94%a8https-git-url%e8%ae%bf%e9%97%ae%e7%a7%81%e6%9c%89%e4%bb%93%e5%ba%93&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你在终端中使用Git通过HTTPS访问私有仓库时，Git会提示你输入用户名和密码。然后，Git将这些凭证提交给服务器，如果服务器接受这些凭证并允许访问仓库，Git就会继续执行命令。&lt;/p&gt;
&lt;p&gt;当Unity包管理器使用Git URL获取包时，没有终端供用户输入凭证。因此，当服务器向Git请求凭证时，Git不会发出提示，而是向Unity包管理器报告错误。为了解决这个问题，你必须为Git配置一个Git凭证助手，而且该助手必须已经为该仓库加载了所需的凭证。如果凭证有效，Git可以成功执行Unity包管理器发出的命令。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：使用SSH协议的Git URL，包括SCP样式的语法时，Git凭证助手无效。&lt;/p&gt;
&lt;h2 id=&#34;git-credential-managergit凭证管理器&#34;&gt;Git Credential ManagerGit(凭证管理器) &lt;a href=&#34;#git-credential-managergit%e5%87%ad%e8%af%81%e7%ae%a1%e7%90%86%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;尽管Git支持多个凭证助手来存储凭证，但Git凭证管理器（GCM）仍是推荐的凭证助手。GCM灵活，易于安装，并得到了积极的支持。它基于.NET构建，这意味着它可以在支持.NET的Windows、macOS和Linux发行版上运行。&lt;/p&gt;
&lt;p&gt;默认情况下，GCM使用Windows凭证管理器（在Windows上）和macOS钥匙串（在macOS上）作为配置的凭证存储。GCM没有为Linux配置默认的存储库。关于GCM支持的不同凭证存储配置的更多信息，请参考GCM凭证存储文档。&lt;/p&gt;
&lt;h2 id=&#34;prerequisites先决条件&#34;&gt;Prerequisites(先决条件) &lt;a href=&#34;#prerequisites%e5%85%88%e5%86%b3%e6%9d%a1%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在你可以使用HTTPS URL从私有Git仓库获取包之前，确保你已经安装了GCM。&lt;/p&gt;
&lt;p&gt;Git for Windows安装程序包含一个步骤，可以自动安装和配置GCM。如果你在以下情况下，你也可以单独安装GCM：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在Windows上用其他方法安装Git。&lt;/li&gt;
&lt;li&gt;使用macOS或Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于安装GCM的更多信息，请参考GCM安装指南。&lt;/p&gt;
&lt;h2 id=&#34;procedure操作步骤&#34;&gt;Procedure(操作步骤) &lt;a href=&#34;#procedure%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;遵循以下步骤来访问使用HTTPS Git URL的私有仓库中的包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在终端中运行以下命令，配置Git使用GCM：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global credential.helper manager
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过终端一次性访问仓库。例如，运行以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git ls-remote --heads https://&amp;lt;url-to-repository&amp;gt; HEAD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当Git提示你时，输入你的凭证。如果你的用户账户可以访问远程Git服务器，且服务器接受你的凭证，那么Git凭证助手将会安全地存储你的凭证。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用Unity包管理器。当需要时，它将使用你存储的凭证，从你有权限访问的基于HTTPS的仓库获取包。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;using-passphrase-protected-ssh-keys-with-ssh-git-urls使用口令保护的ssh密钥与ssh-git-url配合使用&#34;&gt;Using passphrase-protected SSH keys with SSH Git URLs(使用口令保护的SSH密钥与SSH Git URL配合使用) &lt;a href=&#34;#using-passphrase-protected-ssh-keys-with-ssh-git-urls%e4%bd%bf%e7%94%a8%e5%8f%a3%e4%bb%a4%e4%bf%9d%e6%8a%a4%e7%9a%84ssh%e5%af%86%e9%92%a5%e4%b8%8essh-git-url%e9%85%8d%e5%90%88%e4%bd%bf%e7%94%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你使用Git通过SSH访问私有仓库时，Git用SSH客户端和服务器建立了一个安全连接。在建立连接时，Git在SSH握手阶段使用了你配置的SSH密钥。在此阶段，SSH客户端需要能够读取你的密钥。然而，如果你用口令对你的密钥进行了加密，SSH客户端就无法直接使用这个密钥。在这种情况下，终端会提示你输入口令。在你输入正确的口令后，SSH连接就完成了，Git命令会使用这个连接进行运行。&lt;/p&gt;
&lt;p&gt;当Unity包管理器使用Git URL获取包时，没有界面供你输入SSH客户端请求的凭证。因此，如果你用口令保护了你的SSH密钥文件，SSH客户端就无法建立连接，Git就会报告错误。为了解决这个问题，必须有一个SSH认证代理正在运行，并已加载SSH密钥，这样SSH客户端就可以在不需要口令的情况下使用它。&lt;/p&gt;
&lt;p&gt;具体方法根据你的操作系统和你使用的SSH客户端而异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果你使用Windows 10或更高版本及其内置的OpenSSH客户端，请参考在Windows（OpenSSH）上自动加载SSH密钥。&lt;/li&gt;
&lt;li&gt;如果你使用Windows和PuTTY及其认证代理（Pageant），请参考在Windows（PuTTY）上自动加载SSH密钥。&lt;/li&gt;
&lt;li&gt;如果你使用macOS，请参考在macOS上自动加载SSH密钥。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;loading-ssh-keys-automatically-on-windows-openssh在windows上自动加载ssh密钥openssh&#34;&gt;Loading SSH keys automatically on Windows (OpenSSH)在Windows上自动加载SSH密钥（OpenSSH) &lt;a href=&#34;#loading-ssh-keys-automatically-on-windows-openssh%e5%9c%a8windows%e4%b8%8a%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdssh%e5%af%86%e9%92%a5openssh&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果你使用Windows及其内置的OpenSSH客户端，按照以下的步骤配置OpenSSH客户端，这样你就可以在不提示口令的情况下使用你的SSH密钥。&lt;/p&gt;
&lt;h2 id=&#34;prerequisites前提条件&#34;&gt;Prerequisites(前提条件) &lt;a href=&#34;#prerequisites%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Windows 10或更晚的版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-you-begin在你开始之前&#34;&gt;Before you begin(在你开始之前) &lt;a href=&#34;#before-you-begin%e5%9c%a8%e4%bd%a0%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检查是否有任何已存在的SSH密钥。请参考GitHub Docs文章，检查现有的SSH密钥。&lt;/p&gt;
&lt;p&gt;如果你还没有SSH密钥：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按照GitHub Docs文章，生成新的SSH密钥来创建一个。&lt;/li&gt;
&lt;li&gt;按照GitHub Docs文章，将新的SSH密钥添加到你的GitHub账户，添加新的SSH密钥到你的GitHub账户。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;procedure步骤&#34;&gt;Procedure(步骤) &lt;a href=&#34;#procedure%e6%ad%a5%e9%aa%a4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;检查&lt;code&gt;C:\Users\&amp;lt;YourUserName&amp;gt;\.ssh\config&lt;/code&gt;是否存在。&lt;strong&gt;注意&lt;/strong&gt;：在一些应用程序中，如Git Bash，&lt;code&gt;.ssh&lt;/code&gt;是一个隐藏的子目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果&lt;code&gt;C:\Users\&amp;lt;YourUserName&amp;gt;\.ssh\config&lt;/code&gt;不存在，则创建它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;向&lt;code&gt;C:\Users\&amp;lt;YourUserName&amp;gt;\.ssh\config&lt;/code&gt;中添加以下内容，来在认证代理中设置要加载的密钥，并指定目标服务器的使用。确保你在标记为&lt;code&gt;Host *&lt;/code&gt;的任何全局设置之前添加这个条目。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SERVER_NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentitiesOnly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentityFile&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FILE_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SERVER_NAME&lt;/code&gt;是使用&lt;code&gt;IdentityFile&lt;/code&gt;指定文件的服务器。一个示例值是&lt;code&gt;github.com&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE_PATH&lt;/code&gt;是你创建的SSH文件的完全限定路径。一个示例值是&lt;code&gt;C:\Users\&amp;lt;YourUserName&amp;gt;\.ssh\&amp;lt;FILE&amp;gt;&lt;/code&gt;，其中&lt;code&gt;&amp;lt;FILE&amp;gt;&lt;/code&gt;可能是&lt;code&gt;id_rsa&lt;/code&gt;，&lt;code&gt;id_ecdsa&lt;/code&gt;，&lt;code&gt;id_ed25519&lt;/code&gt;，或一个自定义名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentitiesOnly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentityFile&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Users&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;user1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ssh&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;id_ed25519&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开Windows PowerShell，确保你选择&lt;strong&gt;以管理员身份运行&lt;/strong&gt;来打开它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过运行以下命令，配置SSH认证代理服务，以便它每次你重启电脑时启动：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-Service ssh-agent | Set-Service -StartupType Automatic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令以启动服务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Start-Service ssh-agent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行以下命令以检查服务是否运行，并确认&lt;code&gt;Status&lt;/code&gt;的值为&lt;code&gt;Running&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Get-Service ssh-agent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将你的密钥文件加载到&lt;code&gt;ssh-agent&lt;/code&gt;中，将&lt;code&gt;&amp;lt;FILE&amp;gt;&lt;/code&gt;替换为你的密钥实际的文件名，然后在提示时输入你的密码。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add $env:USERPROFILE\.ssh\&amp;lt;FILE&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add $env:USERPROFILE\.ssh\id_ed25519
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;确保Git使用Windows OpenSSH客户端，而不是Git附带的SSH客户端，可以使用以下任一方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;对于系统范围的配置，创建一个名为&lt;code&gt;GIT_SSH_COMMAND&lt;/code&gt;的环境变量，其值为&lt;code&gt;C:/Windows/System32/OpenSSH/ssh.exe&lt;/code&gt;。&lt;strong&gt;重要提示&lt;/strong&gt;：确保你在路径中使用正斜杠。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;要设置特定范围的配置，可以在终端中运行以下&lt;code&gt;git config&lt;/code&gt;命令。可以参考git config文档了解详细信息。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;重要&lt;/strong&gt;: 确保你在路径中使用正斜杠。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在，你可以使用Unity包管理器通过使用带有密码保护的SSH密钥从该Git仓库中获取包了。&lt;/p&gt;
&lt;h1 id=&#34;loading-ssh-keys-automatically-on-windows-putty在windows上自动加载ssh密钥putty&#34;&gt;Loading SSH keys automatically on Windows (PuTTY)在Windows上自动加载SSH密钥（PuTTY） &lt;a href=&#34;#loading-ssh-keys-automatically-on-windows-putty%e5%9c%a8windows%e4%b8%8a%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdssh%e5%af%86%e9%92%a5putty&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果你使用PuTTY及其身份验证代理（Pageant）而非Windows内置的OpenSSH客户端，请按照以下步骤操作。例如，如果你使用SourceTree作为你的Git客户端，它会自带PuTTY（和Pageant）供你使用。&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin开始之前&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;确保你已安装了包含Pageant的PuTTY套件。如果没有安装，可以在https://www.putty.org/ 下载。&lt;/p&gt;
&lt;p&gt;检查你是否有任何现有的SSH密钥。参考GitHub文档文章，检查现有的SSH密钥。&lt;/p&gt;
&lt;p&gt;如果你没有SSH密钥：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用&lt;strong&gt;PuTTYgen&lt;/strong&gt;应用生成一个私钥/公钥对，将其保存为私钥。参考PuTTY用户手册中的使用PuTTYgen，PuTTY密钥生成器。&lt;/li&gt;
&lt;li&gt;按照GitHub文档文章，将新的SSH密钥添加到你的GitHub账户。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;procedure操作步骤-1&#34;&gt;Procedure(操作步骤) &lt;a href=&#34;#procedure%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;按照以下步骤在Windows上自动加载密钥和口令：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从PuTTY文件夹启动Pageant：&lt;strong&gt;开始菜单&lt;/strong&gt; &amp;gt; &lt;strong&gt;所有程序&lt;/strong&gt; &amp;gt; &lt;strong&gt;PuTTY&lt;/strong&gt; &amp;gt; &lt;strong&gt;Pageant&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;在系统托盘中找到Pageant图标. &lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-19-unity-document-3/upm-pageant.png&#34; alt=&#34;img&#34;&gt;&lt;/li&gt;
&lt;li&gt;在系统托盘中右键点击Pageant图标并选择&lt;strong&gt;查看密钥&lt;/strong&gt;。&lt;strong&gt;Pageant密钥列表&lt;/strong&gt;窗口会打开。&lt;/li&gt;
&lt;li&gt;点击&lt;strong&gt;添加密钥&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;使用&lt;strong&gt;文件资源管理器&lt;/strong&gt;窗口来选择你要加载的SSH密钥文件。确保选择的文件是&lt;code&gt;.ppk&lt;/code&gt;扩展名，然后点击&lt;strong&gt;打开&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;如果该密钥受到口令保护，输入你的口令。&lt;/li&gt;
&lt;li&gt;确保你选择的密钥现在已经在&lt;strong&gt;Pageant密钥列表&lt;/strong&gt;窗口中列出。现在可在任何你的PuTTY会话中连接到任何服务器。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;你可能已将Git配置为使用PuTTY的&lt;code&gt;plink.exe&lt;/code&gt;程序。检查当使用SSH密钥时Git是否使用Pageant：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查是否存在&lt;code&gt;GIT_SSH_COMMAND&lt;/code&gt;环境变量。如果没有，创建它。&lt;/li&gt;
&lt;li&gt;将其值设置为PuTTY的&lt;code&gt;plink.exe&lt;/code&gt;文件的完全限定路径。默认位置为&lt;code&gt;&amp;quot;C:\Program Files\PuTTY\plink.exe&amp;quot;&lt;/code&gt;。&lt;strong&gt;重要&lt;/strong&gt;: 如果路径包含空格，确保你使用引号将值括起来。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;要在启动时自动加载私钥：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开开始菜单并右键点击&lt;strong&gt;Pageant&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;更多&lt;/strong&gt; &amp;gt; &lt;strong&gt;打开文件位置&lt;/strong&gt;。&lt;strong&gt;文件资源管理器&lt;/strong&gt;窗口会打开。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;右键点击&lt;strong&gt;Pageant&lt;/strong&gt;并选择&lt;strong&gt;属性&lt;/strong&gt;。&lt;strong&gt;Pageant属性&lt;/strong&gt;窗口会打开。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更新&lt;strong&gt;目标&lt;/strong&gt;字段，通过添加你想在启动时加载的私钥的完全路径。每个密钥之间用空格分隔。例子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\PuTTY\pageant.exe&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Users\user1\myKeys\privatekey.ppk&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择&lt;strong&gt;应用&lt;/strong&gt;然后选择&lt;strong&gt;确定&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过打开命令行并在你的仓库中运行&lt;code&gt;git&lt;/code&gt;命令来测试你的配置，以确保无需输入口令就可以完成操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;当Pageant运行且你输入了口令后，你可以使用Unity包管理器通过使用口令保护的SSH密钥从那个Git仓库中获取包。&lt;/p&gt;
&lt;p&gt;下次当Pageant启动时，如果它受到口令保护，它会提示你输入口令。&lt;/p&gt;
&lt;p&gt;要在Windows启动时自动加载Pageant，参考微软支持文章，将应用添加到Windows 10启动时自动运行。&lt;/p&gt;
&lt;h1 id=&#34;loading-ssh-keys-automatically-on-macos在macos上自动加载ssh密钥&#34;&gt;Loading SSH keys automatically on macOS(在macOS上自动加载SSH密钥) &lt;a href=&#34;#loading-ssh-keys-automatically-on-macos%e5%9c%a8macos%e4%b8%8a%e8%87%aa%e5%8a%a8%e5%8a%a0%e8%bd%bdssh%e5%af%86%e9%92%a5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;如果你使用macOS，按照以下步骤配置OpenSSH客户端，这样你就可以在不出现提示的情况下使用受口令保护的SSH密钥。&lt;/p&gt;
&lt;h2 id=&#34;prerequisites前提条件-1&#34;&gt;Prerequisites(前提条件) &lt;a href=&#34;#prerequisites%e5%89%8d%e6%8f%90%e6%9d%a1%e4%bb%b6-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;macOS 10.13或更高版本。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-you-begin开始之前-1&#34;&gt;Before you begin(开始之前) &lt;a href=&#34;#before-you-begin%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;检查是否有任何现有的SSH密钥。参考GitHub文档文章，检查现有的SSH密钥。&lt;/p&gt;
&lt;p&gt;如果你没有SSH密钥：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按照GitHub文档文章，生成一个新的SSH密钥来创建一个。&lt;/li&gt;
&lt;li&gt;按照GitHub文档文章，将新的SSH密钥添加到你的GitHub账户中。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;procedure操作步骤-2&#34;&gt;Procedure(操作步骤) &lt;a href=&#34;#procedure%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4-2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;检查你的家目录&lt;code&gt;.ssh&lt;/code&gt;子目录是否包含一个&lt;code&gt;config&lt;/code&gt;文件。&lt;strong&gt;注意&lt;/strong&gt;：&lt;code&gt;.ssh&lt;/code&gt;是一个隐藏子目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果&lt;code&gt;~/.ssh/config&lt;/code&gt;文件不存在，创建它。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将以下内容添加到&lt;code&gt;~/.ssh/config&lt;/code&gt;，以指定在认证代理中加载的密钥，并指明目标服务器的使用。确保你在标记为&lt;code&gt;Host *&lt;/code&gt;的全局设置之前添加此条目。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SERVER_NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;UseKeychain&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentitiesOnly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentityFile&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FILE_PATH&lt;/span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SERVER_NAME&lt;/code&gt;是使用&lt;code&gt;IdentityFile&lt;/code&gt;指定文件的服务器。一个示例值是&lt;code&gt;github.com&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FILE_PATH&lt;/code&gt;是你创建的SSH文件的路径。一个示例值是&lt;code&gt;~/.ssh/&amp;lt;FILE&amp;gt;&lt;/code&gt;，其中&lt;code&gt;&amp;lt;FILE&amp;gt;&lt;/code&gt;可能是&lt;code&gt;id_rsa&lt;/code&gt;、&lt;code&gt;id_ecdsa&lt;/code&gt;、&lt;code&gt;id_ed25519&lt;/code&gt;或自定义名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;UseKeychain&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentitiesOnly&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentityFile&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;~/&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ssh&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;id_ed25519&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开终端应用程序。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将你的密钥文件加载到&lt;code&gt;ssh-agent&lt;/code&gt;中，将&lt;code&gt;&amp;lt;FILE&amp;gt;&lt;/code&gt;替换为你的密钥的实际文件名，然后在提示时输入你的口令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add ~/.ssh/&amp;lt;FILE&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;示例:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-add ~/.ssh/id_ed25519
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;配置完成。macOS默认启动&lt;code&gt;ssh-agent&lt;/code&gt;，所以你现在可以使用Unity包管理器通过你的受口令保护的SSH密钥从那个Git仓库获取包。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity&#39;s Package Manager(一)(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/17/2023-07-17-unity-Documents-2/</link>
      <pubDate>Mon, 17 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/17/2023-07-17-unity-Documents-2/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;unitys-package-manager一&#34;&gt;Unity’s Package Manager(一) &lt;a href=&#34;#unitys-package-manager%e4%b8%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;包是一个容器，存储各种类型的特征或资产，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;编辑器工具和库，如文本编辑器，动画查看器或测试框架。&lt;/li&gt;
&lt;li&gt;运行时工具和库，如Physics API或图形管道。&lt;/li&gt;
&lt;li&gt;资产集合，如纹理或动画。&lt;/li&gt;
&lt;li&gt;项目模板，以与他人共享常见的项目类型。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过Package Manager，packages为Unity提供了广泛的增强功能。为了帮助查找和使用这些包，Package Manager的窗口提供了可以一起使用的包集合，称为&lt;em&gt;特性集&lt;/em&gt;。&lt;/p&gt;
&lt;p&gt;在Editor中，你可以通过此菜单访问Package Manager窗口：&lt;strong&gt;Window&lt;/strong&gt; &amp;gt; &lt;strong&gt;Package Manager&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Package Manager还支持管理你从Unity &lt;strong&gt;Asset Store&lt;/strong&gt; 下载或导入的包。&lt;/p&gt;
&lt;p&gt;Unity提供了三个Package Manager接口：Package Manager窗口，Scripting API，和manifest文件。下表包含了对每个接口的介绍，以及更多信息。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Topic&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;How Unity works with packages(Unity如何与包进行协作)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解一下Unity的Package Manager的概览。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Concepts(概念)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;学习Package Manager的原理和特性，包括版本，manifests，注册表，状态，源，包生命周期，依赖和解析等概念。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Package Manager window(包管理器窗口)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在你的项目中查找和管理包，并解决包依赖性的冲突。Package Manager提供了一个用户界面，可以直接修改项目的manifest。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scripting API for packages(包的脚本编程接口)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用脚本API与Package Manager进行交互，使用C# &lt;strong&gt;脚本&lt;/strong&gt;。查看样本，了解如何查询包注册表，安装，嵌入和移除包，以及使用各种标准列出包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Project manifest(项目清单)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;了解Unity Package Manager所读取的文件，以便它能够计算要检索和加载的包的列表。参见Package manifest。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Inspecting packages(查看包内容)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用专用的&lt;strong&gt;Inspector&lt;/strong&gt;窗口查看任何包manifest。使用此窗口直接编辑嵌入或本地包的包manifest。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scoped Registries(作用域注册表)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;学习如何设置或访问自定义的注册服务器。使用此注册服务器来托管和分发（或使用）自定义包，除了Unity提供的注册表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Configuration(配置)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;学习如何配置范围注册认证，解决网络问题，自定义缓存位置等等。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Resolution and conflict(解析和冲突)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;学习包管理器如何确定项目的直接和&lt;strong&gt;间接依赖性&lt;/strong&gt;，并在从注册表获取最佳版本之前评估所有请求的包版本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Troubleshooting(故障排查)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果你的项目的任何包，包括包管理器窗口本身，都无法加载，匹配一个可能的解决方案来解决问题。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;how-unity-works-with-packages&#34;&gt;How Unity works with packages &lt;a href=&#34;#how-unity-works-with-packages&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当Unity打开一个项目时，Unity包管理器会读取项目清单&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;来确定在项目中需要加载哪些包。然后它发送请求&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;到包注册服务器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于在清单中出现作为依赖项的每个包。然后，包注册器将请求的信息和数据发送回包管理器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进而在项目中安装这些包&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;每个项目都有自己的清单，列出了需要作为项目“依赖项”来加载的包。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-15-unity-document-2/upm-overview.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Unity包管理器如何安装包&lt;/p&gt;
&lt;p&gt;向项目添加一个包需要更新项目清单，确保包管理器在依赖项列表中包含该包。尽管你可以直接修改项目清单，但使用包管理器窗口，它可以为你管理项目清单的修改，这会更安全，也更容易。&lt;/p&gt;
&lt;h1 id=&#34;concepts&#34;&gt;Concepts &lt;a href=&#34;#concepts&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;这一部分解释了许多有关Unity包管理器功能的概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Versions(版本)&lt;/li&gt;
&lt;li&gt;Manifests(清单)&lt;/li&gt;
&lt;li&gt;Registry(注册表)&lt;/li&gt;
&lt;li&gt;Package Management(包管理)&lt;/li&gt;
&lt;li&gt;Package sources(包资源)&lt;/li&gt;
&lt;li&gt;Package states and lifecycle(包状态和生命周期)&lt;/li&gt;
&lt;li&gt;Dependency and resolution(依赖和解析)&lt;/li&gt;
&lt;li&gt;Global cache(全局缓存)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;versions&#34;&gt;Versions &lt;a href=&#34;#versions&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;每个包都有多个版本供选择，标记着该包在其生命周期中的变化。每次开发者更新包，他们都会给它一个新的版本号。包版本的变化告诉你它是否包含一种破坏性改变(主版本)，新的向后兼容功能(次版本)，或者仅有的修复错误(补丁版)，遵循语义版本控制。&lt;/p&gt;
&lt;p&gt;要查看特定包的可用版本列表，请查看查找特定版本。&lt;/p&gt;
&lt;h2 id=&#34;manifests&#34;&gt;Manifests &lt;a href=&#34;#manifests&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;有两种类型的清单文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Project manifests(项目清单)
(&lt;code&gt;manifest.json&lt;/code&gt;)储存包管理器需要找到并加载正确包的信息，包括声明为依赖项的包和版本列表。&lt;/li&gt;
&lt;li&gt;Package manifests(包清单)
(&lt;code&gt;package.json&lt;/code&gt;)储存关于特定包的信息，以及包所需的包和版本的列表。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两种文件都使用JSON（JavaScript 对象表示法）语法。&lt;/p&gt;
&lt;h2 id=&#34;registry&#34;&gt;Registry &lt;a href=&#34;#registry&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;在Unity的包管理器领域，包注册表是一个服务器，它存储包内容以及每个包版本的信息（元数据）。Unity维护一个可供分发的官方包的中心注册表。默认情况下，所有项目都使用官方的Unity包注册表，但您可以添加额外的注册表以存储和分发私人包，或者在开发自定义包时对其进行暂存。&lt;/p&gt;
&lt;h2 id=&#34;package-management&#34;&gt;Package Management &lt;a href=&#34;#package-management&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Unity包管理器是一个管理整个包系统的工具。它的主要任务包括以下几点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它与Unity包注册表服务器以及您指定的任何其他注册表进行通信。&lt;/li&gt;
&lt;li&gt;它读取您的项目清单和获取包内容及元数据。&lt;/li&gt;
&lt;li&gt;它安装、升级及卸载包，无论它们是项目的依赖关系还是已安装包中的一种。&lt;/li&gt;
&lt;li&gt;它导入您以前下载或购买的Asset Store包。&lt;/li&gt;
&lt;li&gt;它启用和禁用Unity的内置包。&lt;/li&gt;
&lt;li&gt;它显示每个包的每个版本的信息。&lt;/li&gt;
&lt;li&gt;在项目及其包需要多个包版本时，它解决冲突。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unity包管理器按项目安装样本、工具和资产，而不是在特定机器或设备的所有项目间安装。它使用全局缓存存储下载的包元数据和内容。一旦在项目中安装，Unity将包资产视为项目中的其他任何资产，只是这些资产存储在包文件夹内并且是&lt;strong&gt;不可变&lt;/strong&gt;的。您只能从Local和Embedded包源永久性改变内容。&lt;/p&gt;
&lt;h2 id=&#34;package-sources&#34;&gt;Package sources &lt;a href=&#34;#package-sources&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;源描述了包的来源：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Registry&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity包管理器在您请求时，会将大多数包从包注册表服务器下载到您计算机上的全局缓存中。这些包是不可变的，所以您可以在项目中使用它们，但您不能修改它们或改变它们的包清单。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Built-in&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这些包允许您启用或禁用Unity的功能（例如，Terrain Physics、Animation等）。它们是不可变的。更多信息，请参见Built-in packages。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Embedded&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;存储在您的项目文件夹内的任何包都是嵌入式的。这个源对应于自定义状态，因为当您开始开发一个自定义包时，您通常会将所有需要的脚本、库、样本和其他资源放在项目文件夹下的一个文件夹中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Local&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以从您的计算机上的任何文件夹中安装一个包（例如，如果您本地克隆了一个开发仓库）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Tarball (local)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;您可以从计算机上的tarball文件中安装一个包。包管理器从tarball中提取包并将其存储在缓存中。然而，这些包是不可变的，与从本地文件夹安装的方式不同。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Git&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包管理器直接从Git仓库中而不是从包注册服务器安装基于&lt;strong&gt;Git&lt;/strong&gt;的包。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;要编辑包的包清单，请查看检查包。&lt;/p&gt;
&lt;p&gt;包管理器窗口会显示对应于这些源中的一些的标签。有关更多信息，请查看标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：包管理器将您从&lt;strong&gt;Asset Store&lt;/strong&gt;下载的包存储在一个与全局缓存分开的缓存中。请查看Asset Store包以获取更多信息。&lt;/p&gt;
&lt;h1 id=&#34;package-states-and-lifecycle&#34;&gt;Package states and lifecycle &lt;a href=&#34;#package-states-and-lifecycle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;从Unity编辑器2021.1版本开始，包在其生命周期中可能会经历以下状态：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-15-unity-document-2/upm-lifecycle_v2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;[][]&lt;/p&gt;
&lt;p&gt;使用Unity包管理器的包生命周期&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Birth&lt;/strong&gt; &lt;strong&gt;(A)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;当包的开发者正在创建包时，它处于&amp;quot;自定义&amp;quot;状态。当它准备好让Unity用户进行测试并提供反馈时，包进入&amp;quot;实验&amp;quot;状态。Unity并不支持实验性的包，并且不保证实验性的包会被完全发布并经过验证，可在生产中安全使用，直到它们进入了发布轨道。实验性的包要么在它们版本的主要部分使用&lt;code&gt;0&lt;/code&gt;，要么在它们版本的修订部分使用&lt;code&gt;-exp.#&lt;/code&gt;后缀。例如，&lt;code&gt;mypackage@0.1.2&lt;/code&gt; 或 &lt;code&gt;mypackage@1.2.3-exp.1&lt;/code&gt;。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Release track&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;一旦包通过了质量测试并且不包含任何实验性特性或功能（包括对实验性包的依赖），它就进入了“预发布”状态，该状态位于发布轨道上。这意味着Unity完全支持它，并承诺在当前的LTS周期结束时（例如2021.3）将它们正式发布。要查看此版本可用的预发布包列表，可以参阅预发布包列表。Unity的发布管理只有在包通过了几个测试阶段和验证过程后，才会给予包“已发布”状态，这也包括适当的文档，更改日志和许可文件的检查。这种状态的包在Unity编辑器中以发布标签出现，并且永远不会使用非数字后缀作为版本的一部分。要查看此版本可用的已发布包列表，可以参阅已发布包。如果包开发者更新或改变一个已发布的包，那个包可能会根据严重性返回到另一个状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Type of change:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;New state:&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Version bump:&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;(B)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;对API的重大改变导致API的失效&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1.2.3&lt;/code&gt; =&amp;gt; &lt;code&gt;2.0.0-exp&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;(C)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;对API的小改动，没有导致API失效，但影响了使用&lt;/td&gt;
&lt;td&gt;Pre-release&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1.2.3&lt;/code&gt; =&amp;gt; &lt;code&gt;1.3.0-pre&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;(D)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;修复错误，微小变更以及典型的补丁更新中的文档更新&lt;/td&gt;
&lt;td&gt;Released (same state)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1.2.3&lt;/code&gt; =&amp;gt; &lt;code&gt;1.2.4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Death&lt;/strong&gt; &lt;strong&gt;(E)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;到达生命周期末期的包在标记为“已弃用”的编辑器中不再受支持。处于该状态的包不应继续使用，因为它们可能失效或不安全。更多信息请参阅弃用包。有些实验性包无需经过发布周期轨道，直接进入已弃用状态。&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;包管理器窗口显示与这些状态中的一些相对应的标签。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：这些包状态仅适用于Unity内部开发的包。要了解他们特定的流程，请联系第三方包开发者。&lt;/p&gt;
&lt;h1 id=&#34;dependency-and-resolution&#34;&gt;Dependency and resolution &lt;a href=&#34;#dependency-and-resolution&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当你在包管理器窗口工作时，你可以从几个来源安装包（库、本地文件夹或压缩包、Git URL以及名称）。然而，当包管理器从这些来源无缝安装包时，它首先要进行一系列的计算来决定安装哪个版本。它还需要决定安装哪些其他包和版本以支持你选择的包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Direct dependencies直接依赖&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当你通过包管理器窗口选择一个包版本进行安装时，你正在向你的项目manifest添加一个“依赖”。这是一个声明，即你需要一个特定版本的某个包才能使项目正常工作。要向项目添加依赖，你需要以&lt;code&gt;包名称@包版本&lt;/code&gt;的形式在&lt;code&gt;&amp;lt;项目根目录&amp;gt;/Packages/manifest.json&lt;/code&gt;文件的依赖属性中添加对包和版本的引用。这些被称为“直接”依赖，因为你的项目直接依赖它们。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Indirect dependencies间接依赖&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;包也可以需要其他包才能工作。这些被称为“间接”（或转移）依赖。包开发者在开发过程中将这些添加到包manifest文件的依赖属性（&lt;code&gt;&amp;lt;包根目录&amp;gt;/package.json&lt;/code&gt;）。例如，在下面的图表中，&lt;code&gt;alembic@1.0.7&lt;/code&gt;包依赖于&lt;code&gt;timeline@1.0.0&lt;/code&gt;包，所以timeline包是一个“间接”依赖。反过来，项目依赖于&lt;code&gt;cinemachine@2.6.0&lt;/code&gt;和&lt;code&gt;alembic@1.0.7&lt;/code&gt;包，所以它们都是“直接”依赖。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-15-unity-document-2/upm-dependencies.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;该图展示了直接依赖和间接依赖&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Version overrides版本覆盖&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当你添加一个包版本作为依赖时，该版本并不一定是包管理器安装的版本。原因是包管理器必须考虑你项目中的所有依赖，无论是直接还是间接的。在以下示例中，请求的XR插件管理&lt;strong&gt;包版本是&lt;code&gt;4.0.3&lt;/code&gt;。然而，包管理器安装的版本是&lt;code&gt;4.0.6&lt;/code&gt;，因为另一个包依赖于更高的版本，如信息消息&lt;/strong&gt;(B)所示：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-15-unity-document-2/upm-solver-visual-cues.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当你在详情面板中点击信息按钮（A）时，会出现一个文本框（B）解释为何安装了这个版本而不是你请求的版本&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dependency graph依赖图&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;包管理器一次只能安装一个包的版本，所以它必须构建一个依赖图。这个图是项目的每个直接依赖和间接依赖的列表。依赖图决定安装每个包的哪个版本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lock file锁定文件&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当包管理器解决所有版本冲突后，它会将解决方案保存在一个锁定文件中，原因有两个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;确定性，确保每次都可靠地安装相同的包。&lt;/li&gt;
&lt;li&gt;效率，减少重新计算依赖图所需的时间和资源。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;global-cache&#34;&gt;Global cache &lt;a href=&#34;#global-cache&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;当Unity包管理器从注册表下载包内容和元数据时，它会将它们存储在全局缓存中。这使得重用和共享包更加高效，并且允许你在离线时安装和更新存储的包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：全局缓存不包含来自&lt;strong&gt;资产商店&lt;/strong&gt;的&lt;code&gt;.unitypackage&lt;/code&gt;格式的包。包管理器将这些类型的包存储在一个单独的缓存中。更多信息，请参考资产商店包。&lt;/p&gt;
&lt;h2 id=&#34;location&#34;&gt;Location &lt;a href=&#34;#location&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，Unity将全局缓存存储在一个根目录中，这个目录取决于操作系统（以及Windows上的用户账户类型）：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Operating system&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default root directory&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Example&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows (user account)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;%LOCALAPPDATA%\Unity\cache\upm&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;C:\Users\yourname\AppData\Local\Unity\cache\upm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Windows (system user account)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;%ALLUSERSPROFILE%\Unity\cache\upm&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;C:\ProgramData\Unity\cache\upm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;macOS&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;$HOME/Library/Caches/Unity/upm&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;/Users/yourname/Library/Caches/Unity/upm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Linux&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;$HOME/.cache/Unity/upm&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;/home/yourname/.cache/Unity/upm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: You can override the location of this root directory. Refer to Customize the global cache for more information.&lt;/p&gt;
&lt;h2 id=&#34;structure&#34;&gt;Structure &lt;a href=&#34;#structure&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;包管理器的全局缓存使用多个子缓存，每个子缓存都有不同的用途。包管理器将这些子缓存存储在全局缓存的文件夹下的子文件夹中：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Subfolder&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;db&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于存储包内容和元数据的注册表数据缓存。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;packages&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;包含从注册表获取的包tarballs的未压缩内容。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;git-lfs&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果你启用了Git大文件存储（LFS），则包含下载的Git大文件存储（LFS）文件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;在这些子文件夹中，每个注册表都有自己的路径，以便不同注册表上托管的包不会混淆。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;提示&lt;/strong&gt;：您可以重写这些文件夹的位置。有关更多信息，请参阅定制全局缓存。&lt;/p&gt;
&lt;h2 id=&#34;size&#34;&gt;Size &lt;a href=&#34;#size&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;从Unity编辑器的2023.2.0f1版本开始，注册表数据缓存（&lt;code&gt;db&lt;/code&gt;子文件夹）的大小限制为10 gigabytes (GB)。当达到该限制时，PackageManager会通过剔除最近最少使用的内容（基于最旧的一个程序包安装到项目的日期）来修剪注册表数据缓存。换句话说，PackageManager首先剔除的是您在最早时间内添加到项目中的程序包。然而，尽管PackageManager将这些程序包从缓存中剔除，但它们仍然存在于安装了它们的任何项目中。下次您将这些包添加到其他项目时，PackageManager将从适当的注册表中获取它们，而不是从您的缓存中获取。&lt;/p&gt;
&lt;p&gt;您可以重写注册表数据缓存限制的大小。有关信息，请参考定制全局缓存。&lt;/p&gt;
&lt;h2 id=&#34;requirements&#34;&gt;Requirements &lt;a href=&#34;#requirements&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;运行Unity编辑器进程的用户账户必须对根目录及其内容拥有完全的写入权限。没有这些权限，PackageManager无法在缓存中下载和保存程序包的元数据和内容。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Unity2023.2更新日志(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/13/2023-07-13-unity-Documents-1/</link>
      <pubDate>Thu, 13 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/13/2023-07-13-unity-Documents-1/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;new-in-unity-20232&#34;&gt;New in Unity 2023.2 &lt;a href=&#34;#new-in-unity-20232&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;h2 id=&#34;release-notes&#34;&gt;Release Notes &lt;a href=&#34;#release-notes&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;要了解更多关于这个Unity版本的新功能、变更和改进，可以参考2023.2版本的发布说明。&lt;/p&gt;
&lt;h2 id=&#34;upgrade-guide&#34;&gt;Upgrade Guide &lt;a href=&#34;#upgrade-guide&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果你正在将现有的项目从2023.1版本升级，可以阅读升级到2023.2的指南，了解你的项目可能会受到哪些影响。&lt;/p&gt;
&lt;h1 id=&#34;whats-new&#34;&gt;What’s new &lt;a href=&#34;#whats-new&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;了解自2023.1以来在Unity 2023.2中有哪些变化，并查阅受影响区域的文档。&lt;/p&gt;
&lt;h2 id=&#34;accessibility&#34;&gt;Accessibility &lt;a href=&#34;#accessibility&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我们新增了一个编辑器窗口，即Accessibility Hierarchy Viewer，它可以展示当前活跃的可访问性结构及其节点。如需访问Accessibility Hierarchy Viewer，你可以去主菜单的 &lt;strong&gt;Window &amp;gt; Accessibility &amp;gt; Accessibility Hierarchy viewer&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;audio&#34;&gt;Audio &lt;a href=&#34;#audio&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;我们新增了Audio Random Container，可以随机化音频并确保音量、音调、时间和触发器可以设置为非重复间隔，以确保你的游戏永远不会有两次相同的声音。&lt;/li&gt;
&lt;li&gt;在Audio Random Container中我们加入了一个VU表。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;authoring-tools&#34;&gt;Authoring Tools &lt;a href=&#34;#authoring-tools&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;2d&#34;&gt;2D &lt;a href=&#34;#2d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们在&lt;strong&gt;Tile Palette&lt;/strong&gt;编辑器窗口中增加了覆盖层支持。&lt;/p&gt;
&lt;h3 id=&#34;2d-physics&#34;&gt;2D Physics &lt;a href=&#34;#2d-physics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;我们在 &lt;strong&gt;Joint Angular Limits&lt;/strong&gt; gizmo中增加了&lt;code&gt;ArticulationBody.jointPosition&lt;/code&gt;指针线，以便在Scene视图中显示关节的准确位置。&lt;/p&gt;
&lt;h3 id=&#34;editor-and-workflow&#34;&gt;Editor and Workflow &lt;a href=&#34;#editor-and-workflow&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;新增了Scene视图的上下文菜单。您现在可以通过右键点击或使用自定义的键盘快捷方式在Scene视图中访问新的上下文菜单。这些菜单由UI Toolkit创建并可以在C#中扩展，提供了轻松访问常用命令的方式。&lt;/li&gt;
&lt;li&gt;在Scene视图的偏好设置中添加了&lt;strong&gt;仅在编辑器处于焦点状态时刷新Scene视图&lt;/strong&gt;的选项。启用此选项可使Scene视图仅在编辑器处于焦点状态时刷新。&lt;/li&gt;
&lt;li&gt;新增了可以用键盘快捷方式进行Animator状态之间切换的功能。&lt;/li&gt;
&lt;li&gt;增加了基本OpenType字体功能的支持。目前，只有字距调整功能是启用的。&lt;/li&gt;
&lt;li&gt;增加了一个新的Cameras覆盖层来替换Camera预览。您可以使用Cameras覆盖层进行相机的第一人称控制，并在Scene视图中管理相机。&lt;/li&gt;
&lt;li&gt;用UI Toolkit版本替换了大部分OS上下文菜单。&lt;/li&gt;
&lt;li&gt;增加了颜色检查器，这是一个用于校准光照和后处理的工具。用户可以通过&lt;strong&gt;GameObject&lt;/strong&gt; &amp;gt; &lt;strong&gt;Rendering&lt;/strong&gt; &amp;gt; &lt;strong&gt;Color Checker Tool&lt;/strong&gt;添加颜色检查器。该工具仅作为光照艺术家的生产工具，并不会在构建中保存。&lt;/li&gt;
&lt;li&gt;启用了编辑器显示不同许可证通知模态框的功能。&lt;/li&gt;
&lt;li&gt;增加了一个&lt;code&gt;PropertyCollectionAttribute&lt;/code&gt;，可以用来实现自定义抽屉的集合。&lt;/li&gt;
&lt;li&gt;使用Camera的平移、缩放和轨迹控制，添加了一个新的灯光放置工具。获取更多信息，请参阅从它的视角查看和控制灯光。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ui-toolkit&#34;&gt;UI Toolkit &lt;a href=&#34;#ui-toolkit&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;现在你可以用一个新的，灵活的运行时绑定系统在创建编辑器或运行时UI时轻松地将数据值连接到UI元素属性。您可以在UI Builder或C#代码中配置数据绑定。&lt;/li&gt;
&lt;li&gt;增加了新的控制元素，例如ToggleButtonGroup、Tab和TabViews，同时对现有的控制元素做出了改进。&lt;/li&gt;
&lt;li&gt;对Button、ListView和TreeView控件增加了图标支持。&lt;/li&gt;
&lt;li&gt;增加了新的UxmlElement和UxmlAttribute属性。在创建自定义控件时，这些属性替换了原有的UxmlFactory和UxmlTraits。这简化了自定义控件的创建，提供了通过C#属性的高效替代方案，无需编写大量的代码。此外，您现在可以像在Inspector中那样为字段创建自定义属性抽屉。&lt;/li&gt;
&lt;li&gt;对UI Builder进行了改进，改进了显示样式属性的驱动情况，优化了画布操作，并进行了其他的增强。更新的UI Builder现在也支持UXML Objects的编写，使其能够编辑MultiColumnTreeView和MultiColumnListView。&lt;/li&gt;
&lt;li&gt;在TextElement和TextField中，增加了Emojis Fallback Support字段，以控制在emoji范围内搜索字符的顺序（主字体vs全局回退）。另外，增加了对OpenType字体功能的基本支持，目前的焦点是启用字距调整功能。&lt;/li&gt;
&lt;li&gt;在UI Builder的Inspector中，为盒模型小部件增加了一个新的Spacing字段。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;textmeshpro&#34;&gt;TextMeshPro &lt;a href=&#34;#textmeshpro&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;增加了基本的Emoji支持。&lt;/li&gt;
&lt;li&gt;添加了基本的OpenType字体功能支持，目前只启用了字距调整功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;graphics&#34;&gt;Graphics &lt;a href=&#34;#graphics&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;批处理计算Skinning：Unity的Skinned Mesh Renderer组件使用计算调度在GPU上并行化顶点变换。Unity 2023.2在所有支持的平台上引入了对Skinned Mesh Renderers的优化。这些优化旨在批处理计算skin和blendshape调度。这可以增加并行变形的顶点数量，并提高角色和 skinned mesh 渲染的GPU性能。&lt;/li&gt;
&lt;li&gt;Progressive GPU Lightmapper现已退出预览，完全得到支持。&lt;/li&gt;
&lt;li&gt;添加了在运行时移动Light Probe位置的API。&lt;/li&gt;
&lt;li&gt;移除了Lighting窗口中的&lt;strong&gt;Auto Generate&lt;/strong&gt;设置。相关API现已废弃。为了在编辑时检查光照贴图，你现在可以选择Scene View Draw Mode，并将&lt;strong&gt;Lighting Data&lt;/strong&gt;设置为&lt;strong&gt;Preview&lt;/strong&gt;。这将展示一个烘焙光照的预览。预览光照贴图是非破坏性的，你可以在烘焙场景之后使用它们。&lt;/li&gt;
&lt;li&gt;添加了&lt;code&gt;BatchCullingContext.cullingFlags&lt;/code&gt;，用于指定是否应裁剪 lightmapped shadow casters。&lt;/li&gt;
&lt;li&gt;为&lt;code&gt;BatchRendererGroup&lt;/code&gt;添加了&lt;code&gt;rendererPriority&lt;/code&gt;支持。&lt;/li&gt;
&lt;li&gt;对构建计算队列上的异步光线追踪加速结构提供了支持。AsyncCompute CommandBuffers现在可以运行&lt;code&gt;CommandBuffer.BuildRayTracingAccelerationStructure&lt;/code&gt;命令。为RenderGraph和Render Graph Viewer添加了&lt;code&gt;RayTracingAccelerationStructure&lt;/code&gt;的支持。&lt;/li&gt;
&lt;li&gt;为Texture2DArrays添加了mipmap限制支持。&lt;/li&gt;
&lt;li&gt;为Texture2DArrays添加了mipmap剥离支持。&lt;/li&gt;
&lt;li&gt;为LoadImage添加了提供tiled EXR图像的支持。&lt;/li&gt;
&lt;li&gt;允许暴露光线追踪加速结构的构建标志，以平衡构建时间与GPU上的光线追踪速度和内存消耗。在创建和构建&lt;code&gt;RayTracingAccelerationStructure&lt;/code&gt;以及在Renderer设置的UI中，都可以从C#中自定义标志。&lt;/li&gt;
&lt;li&gt;为DX12添加了Native Render Pass支持。&lt;/li&gt;
&lt;li&gt;为D3D12（Windows和XBox平台）添加了批处理GPU skinning的支持。&lt;/li&gt;
&lt;li&gt;为粒子尾迹添加了Custom Vertex Streams功能。&lt;/li&gt;
&lt;li&gt;添加了&lt;code&gt;BakeTexture&lt;/code&gt;和&lt;code&gt;BakeTrailsTexture&lt;/code&gt;脚本方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;universal-render-pipeline-urp&#34;&gt;Universal Render Pipeline (URP) &lt;a href=&#34;#universal-render-pipeline-urp&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要获得URP新功能和改进的完整描述，请参考URP的新功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;添加了跨平台HDR显示支持。HDR显示器能够在更高的亮度差异范围内复制图像，接近自然光照条件。在这些设备上显示的HDR输出可以保留线性光照渲染和HDR图像的对比度和质量。编辑器和Standalone Players现在在所有的渲染管线和能力平台上，包括移动和XR，提供全面的HDR色调映射和显示支持。&lt;/li&gt;
&lt;li&gt;为Probe Volumes的间接照明添加了每个顶点质量级别，使得URP更高效地呈现照明环境。你可能需要在移动设备上进行进一步的优化，因为URP不支持Reflection Probes的Lighting Scenario混合或Lighting Normalization。&lt;/li&gt;
&lt;li&gt;在Motion Blur容量组件中添加了一个名为&lt;strong&gt;Camera And Objects&lt;/strong&gt;的新选项，该选项使用运动向量来模糊比摄像机的曝光时间移动更快的物体。&lt;/li&gt;
&lt;li&gt;添加了对额外定向光源cookies的支持。&lt;/li&gt;
&lt;li&gt;在URP Global Settings中添加了Default Volume Profile字段。&lt;/li&gt;
&lt;li&gt;在Universal Render Pipeline Asset中添加了Volume Profile字段。&lt;/li&gt;
&lt;li&gt;为URP材质添加了Alembic速度运动向量支持。&lt;/li&gt;
&lt;li&gt;为基于只有&lt;strong&gt;Time&lt;/strong&gt;节点的顶点动画的ShaderGraphs添加了自动&lt;strong&gt;TimeBased&lt;/strong&gt;运动向量生成。影响位置的所有其他数据在帧之间必须是常数。&lt;/li&gt;
&lt;li&gt;为使用正交投影的XR渲染和相机添加了对Forward+渲染路径的支持。&lt;/li&gt;
&lt;li&gt;在Forward+渲染路径中添加了对集中渲染的支持。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;high-definition-render-pipeline-hdrp&#34;&gt;High Definition Render Pipeline (HDRP) &lt;a href=&#34;#high-definition-render-pipeline-hdrp&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;要获得HDRP新功能和改进的完整描述，请参考HDRP的新功能。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为Decals投影器添加了HDRP路径跟踪器支持。路径跟踪器不支持来自decals的发光。&lt;/li&gt;
&lt;li&gt;增加了在运行时从磁盘流式加载Probe Volume数据的功能。你可以为不同的质量级别启用或禁用磁盘流式加载。&lt;/li&gt;
&lt;li&gt;使HDRP Shader Graph decals兼容透明对象。这意味着你可以使用Shader Graph创建的decals影响透明对象，以构建像雨滴、涟漪、自定义雕刻、玻璃上的污垢效果等程序效果。&lt;/li&gt;
&lt;li&gt;在HDRP物理天空中添加了一个带有星星和天体的夜空。&lt;/li&gt;
&lt;li&gt;为基于物理的天空添加了Shader Graph输出，并添加了控件来创建月亮。&lt;/li&gt;
&lt;li&gt;在Render Graph Viewer中添加了对异步计算pass和同步点的可视化。&lt;/li&gt;
&lt;li&gt;为体积云添加了beer阴影图。&lt;/li&gt;
&lt;li&gt;在HD Render Pipeline Asset中添加了Volume Profile字段。&lt;/li&gt;
&lt;li&gt;为带有彩色透射的薄对象添加了材料类型。&lt;/li&gt;
&lt;li&gt;为Lit ShaderGraphs的材料添加了禁用清漆的选项。&lt;/li&gt;
&lt;li&gt;添加了Global Pass API，你可以使用它在没有任何游戏对象的场景中向渲染管线注入自定义pass。&lt;/li&gt;
&lt;li&gt;为Arbitrary Output Variables (AOV)添加了体积雾全屏调试模式输出。&lt;/li&gt;
&lt;li&gt;添加了Adaptive Probe Volumes (APV)直接从磁盘流式加载数据的能力。这个功能只在具有计算阴影兼容性的设备上可用。&lt;/li&gt;
&lt;li&gt;添加了使用烘焙API独立于光照贴图或反射探针来烘焙Adaptive Probe Volumes (APV)的能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;multiplayer&#34;&gt;Multiplayer &lt;a href=&#34;#multiplayer&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;netcode-for-gameobjects&#34;&gt;Netcode for GameObjects &lt;a href=&#34;#netcode-for-gameobjects&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在网络对象组件的上下文菜单中添加了&lt;strong&gt;刷新场景中的预设实例&lt;/strong&gt;选项。使用此属性更新场景中存在的预设实例的&lt;code&gt;GlobalObjectIdHash&lt;/code&gt;值，这些预设实例在具有&lt;code&gt;NetworkObject&lt;/code&gt;组件之前就已存在。这个属性影响包含在构建列表中的所有场景。&lt;/li&gt;
&lt;li&gt;添加了&lt;code&gt;NetworkManager&lt;/code&gt;的&lt;code&gt;SetPeerMTU&lt;/code&gt;和&lt;code&gt;GetPeerMTU&lt;/code&gt;方法，以全面控制最大传输单元（MTU）大小。使用它为游戏对象的Netcode中的自定义协议。&lt;/li&gt;
&lt;li&gt;改进了网络预设标识生成（例如，&lt;code&gt;GlobalObjectIdHash&lt;/code&gt;）以修复Unity分配无效值的问题。&lt;/li&gt;
&lt;li&gt;以下方式改进了序列化API和codegen管道:
&lt;ul&gt;
&lt;li&gt;添加了&lt;code&gt;GenerateSerializationForTypeAttribute&lt;/code&gt;方法，你可以将此应用到任何类或方法，以确保特定类型包含在codegen序列化过程中。&lt;/li&gt;
&lt;li&gt;添加了&lt;code&gt;GenerateSerializationForGenericParameterAttribute&lt;/code&gt;方法，你可以使用它来将被&lt;code&gt;NetworkVariable&lt;/code&gt;类型包装的泛型类型包含在codegen过程中。&lt;/li&gt;
&lt;li&gt;暴露了额外的&lt;code&gt;NetworkVariableSerialization&lt;/code&gt;方法，以改进自定义&lt;code&gt;NetworkVariable&lt;/code&gt;的创建，没有任何装箱成本。你可以使用&lt;code&gt;NetworkVariableBase.MarkNetworkBehaviourDirty&lt;/code&gt;方法来将NetworkVariables标记为脏。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;泛型&lt;code&gt;NetworkBehaviour&lt;/code&gt;类型中的RPC现在可以序列化类的泛型类型的参数。&lt;/li&gt;
&lt;li&gt;改进了Netcode对32位ARMv7的支持。&lt;/li&gt;
&lt;li&gt;添加了额外的&lt;code&gt;NetworkManager&lt;/code&gt;事件&lt;code&gt;OnServerStarted&lt;/code&gt;、&lt;code&gt;OnServerStopped&lt;/code&gt;、&lt;code&gt;OnClientStarted&lt;/code&gt;和&lt;code&gt;OnClientStopped&lt;/code&gt;，以更好地通知&lt;code&gt;NetworkManager&lt;/code&gt;初始化过程。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;dedicated-server-platform&#34;&gt;Dedicated server platform &lt;a href=&#34;#dedicated-server-platform&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;在玩家设置中添加了&lt;strong&gt;专用服务器优化&lt;/strong&gt;选项，启用后，会从服务器构建中剥离所有着色器。启用此选项可以大大减少构建时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;unity-transport&#34;&gt;Unity Transport &lt;a href=&#34;#unity-transport&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Unity传输2.X现在是Unity传输的默认和推荐版本。&lt;/li&gt;
&lt;li&gt;现在可以通过在&lt;code&gt;NetworkSettings.WithNetworkConfigParameters&lt;/code&gt;中新的&lt;code&gt;maxMessageSize&lt;/code&gt;参数配置传输将发送的最大消息大小。这在网络设备处理较大数据包时出错的环境中非常有用（比如某些移动网络或VPN）。该值不包括IP和UDP头，但包括传输本身添加的头（例如，可靠性头）。默认值是1400。注意，建议客户端和服务器配置使用相同的值。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;package-manager&#34;&gt;Package Manager &lt;a href=&#34;#package-manager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;h3 id=&#34;changes-to-package-cache-management&#34;&gt;Changes to package cache management &lt;a href=&#34;#changes-to-package-cache-management&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;更改了全局缓存的默认位置和结构。&lt;/li&gt;
&lt;li&gt;注册数据缓存现在默认最大限制为10GB。你可以通过自定义全局缓存来覆盖默认值。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;changes-to-the-package-manager-window&#34;&gt;Changes to the Package Manager window &lt;a href=&#34;#changes-to-the-package-manager-window&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;添加了一个导航面板:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;添加了一个面板，以改进在包子集视图之间的导航。在早期版本中，这些上下文存储在&lt;strong&gt;Packages&lt;/strong&gt;下拉菜单中。&lt;/li&gt;
&lt;li&gt;在包管理器导航面板中添加了&lt;strong&gt;Services&lt;/strong&gt;作为专用条目。&lt;/li&gt;
&lt;li&gt;在导航面板中的&lt;strong&gt;In Project&lt;/strong&gt;下添加了&lt;strong&gt;Updates&lt;/strong&gt;作为嵌套条目。此嵌套视图列出了项目中所有有更新的包。&lt;/li&gt;
&lt;li&gt;在导航面板的My Registries下添加了单独的定位注册表作为嵌套条目。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对列表面板的增强:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在&lt;strong&gt;In Project&lt;/strong&gt;上下文的列表面板中添加了一个&lt;strong&gt;Packages - Asset Store&lt;/strong&gt;扩展器，以便你可以在&lt;strong&gt;In Project&lt;/strong&gt;视图中查看和管理Asset Store的包。&lt;/li&gt;
&lt;li&gt;搜索框的位置进行了重新调整，改变了其行为，以便在每个上下文基础上回撷你的搜索词。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对详情面板的增强:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;改进了在&lt;strong&gt;My Assets&lt;/strong&gt;上下文中管理包的流程，通过优化详情面板中的操作按钮。最常见的操作作为菜单按钮中的默认操作，其他操作列在菜单中。还添加了&lt;strong&gt;In Project&lt;/strong&gt;标签，明确表示Asset Store包已经导入到你的项目并且是最新的。&lt;/li&gt;
&lt;li&gt;更新了查看Asset Store包时&lt;strong&gt;Import&lt;/strong&gt;按钮的标签。下载更新的Asset Store包后，主操作按钮的标签是&lt;strong&gt;Import update #.# to project&lt;/strong&gt;，所以你需要明确需要将更新导入到你的项目。&lt;/li&gt;
&lt;li&gt;更新了从注册表中安装的包的文档链接的行为。你现在可以右击链接并选择&lt;strong&gt;Open in browser&lt;/strong&gt;或&lt;strong&gt;Open locally&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;当你登出并试图查看Asset Store包的详细信息时，添加了一个用你的Unity ID登录的按钮。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;其他增强:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在查看My Assets上下文时更新了Filters菜单中的值。&lt;/li&gt;
&lt;li&gt;更新了Filters控制的标签，以便显示选定的值而不是上一级别的类别。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;android&#34;&gt;Android &lt;a href=&#34;#android&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;添加了针对Android的Addressables包（&lt;code&gt;com.unity.addressables.android&lt;/code&gt;），为Addressables提供Play Asset Delivery支持。&lt;/li&gt;
&lt;li&gt;通过针对Android的Addressables包添加了纹理压缩格式定向支持，以将多种纹理压缩格式打包到Android资产包中。在安装时，只根据设备的移动GPU构建APK，使得加载和渲染纹理更快，且内存占用更少。&lt;/li&gt;
&lt;li&gt;添加了&lt;code&gt;ApplicationExitInfo&lt;/code&gt; API，提供关于应用程序崩溃和应用程序无响应（ANR）错误的信息。&lt;/li&gt;
&lt;li&gt;进行了以下改进:
&lt;ul&gt;
&lt;li&gt;设置&lt;code&gt;GameActivity&lt;/code&gt;为默认应用程序入口点，以提供对Android和你的应用程序之间交互的更多控制。&lt;/li&gt;
&lt;li&gt;将最低支持的Android版本提高到6.0（API级别23）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;profiler&#34;&gt;Profiler &lt;a href=&#34;#profiler&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;在Memory Profiler中添加了对AudioClip和Shader的元数据支持。&lt;/li&gt;
&lt;li&gt;在Profiler窗口中添加了一个Highlights模块。&lt;/li&gt;
&lt;li&gt;为CPU Profiler添加了一个新的Inverted Hierarchy视图。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;raytracing-api&#34;&gt;Raytracing API &lt;a href=&#34;#raytracing-api&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;射线追踪加速结构构建标志：新的射线追踪加速结构构建标志被引入到Unity的渲染器和RTAS API中。这些标志让你可以控制射线追踪内存使用、RTAS构建时间和射线追踪性能之间的权衡。开发者和艺术家可以使用新的标志来优化他们的场景和渲染器中的射线追踪性能。&lt;/li&gt;
&lt;li&gt;Shader中的内联射线追踪：现在可以在光栅化和计算着色器中使用内联射线追踪，只要是面向具有DXR1.1能力的Windows平台、Xbox Series X/S和Playstation 5。开发者可以从着色器内部发送射线查询，遍历束定的射线追踪加速结构并进行交叉测试。这使他们可以实现各种硬件加速的射线追踪效果和模拟。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;shader-graph&#34;&gt;Shader Graph &lt;a href=&#34;#shader-graph&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;添加了UGUI对Shader Graph的支持。Shader Graph现在在URP和HDRP中都为Canvas提供了子目标。UI艺术家可以使用Shader Graph为他们的UI元素创建自定义shader。定义UI元素的整体外观和风格，创建动画UI效果，并定义自定义按钮状态，同时使用更少的纹理内存。&lt;/li&gt;
&lt;li&gt;启用了Shader Graph Canvas主节点，以允许用户在HDRP，URP和Built-in中为Canvas创建UI shader。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;speedtree&#34;&gt;SpeedTree &lt;a href=&#34;#speedtree&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;使用传输遮罩在HDRP中提高SpeedTree的视觉质量，只在叶子上应用次表面散射。HDRP/Nature/SpeedTree8.shadergraph使用其次表面贴图作为传输遮罩节点，以消除树皮和小枝的非预期光传输。这也修复了过亮的广告牌照明与3D几何图形照明不匹配的问题。&lt;/p&gt;
&lt;h2 id=&#34;splines&#34;&gt;Splines &lt;a href=&#34;#splines&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;您现在可以在Spline对象上存储个性化数据。此外，编辑Inspector中点的界面已得到增强，某些API已向公众开放。当你在处理splines时，现在可以使用新的Scene视图上下文菜单。&lt;/p&gt;
&lt;h2 id=&#34;test-framework&#34;&gt;Test Framework &lt;a href=&#34;#test-framework&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;根据测试级别启用了重新尝试和重复测试。一旦测试完成了第一次迭代，Editor就会重新尝试或重复测试。将命令行参数传递给Editor以:
&lt;ul&gt;
&lt;li&gt;重复x次运行测试x次数或直到失败。这对测试不稳定的测试很有用。&lt;/li&gt;
&lt;li&gt;重试x，如果测试失败。这将运行测试x次数或直到成功。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;通过使用Editor命令行新参数&lt;code&gt;-randomOrderSeed x&lt;/code&gt;，你可以按随机顺序运行测试，其中&lt;code&gt;x&lt;/code&gt;是不同于0的整数。如果在项目中添加了新的测试，通过相同的种子将会保持随机顺序，新的测试将根据随机列表相应地放置。&lt;/li&gt;
&lt;li&gt;新增&lt;code&gt;TestFileReferences.json&lt;/code&gt;在播放器的构建步骤上生成，以便稍后由Test runners使用以丰富运行部分的数据。&lt;/li&gt;
&lt;li&gt;UTF版本现在会自动为SRP测试更新。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;version-control&#34;&gt;Version control &lt;a href=&#34;#version-control&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;添加了一个项目选项，用于支持追踪存在于项目根文件夹之外的磁盘上的包。&lt;/p&gt;
&lt;h2 id=&#34;vfx-graph&#34;&gt;VFX Graph &lt;a href=&#34;#vfx-graph&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;在模板窗口中添加了具有预定义效果的VFX Graph资产。你可以将这些模板作为自己效果的起点。&lt;/li&gt;
&lt;li&gt;新增了自定义HLSL块和操作员。自定义HLSL节点让您在粒子模拟期间执行自己的代码。在VFX Graph上下文中，您可以使用操作员进行横向流动，或者使用块进行纵向流动。&lt;/li&gt;
&lt;li&gt;添加了URP Decals与VFX Graph。现在在VFX Graph中支持URP Lit decal输出，使得在URP上创建符合场景照明和材料的惊艳decal效果成为可能。&lt;/li&gt;
&lt;li&gt;在HDRP和URP中为Shader Graph烟雾效果添加照明。这意味着您可以创建使用六方向照明的lit shader的自定义烟雾shader。&lt;/li&gt;
&lt;li&gt;扩展了URP中的Camera Depth和Color buffer行为。这意味着您可以使用深度缓冲区进行基于深度的碰撞，或者采样色彩缓冲区以创建自定义效果。&lt;/li&gt;
&lt;li&gt;在URP中添加了对运动向量的支持。&lt;/li&gt;
&lt;li&gt;对Shader Graph添加了对运动向量的支持。&lt;/li&gt;
&lt;li&gt;新增了使用VFX Graph的Shade Graph集成来使用材料变体工作流覆盖VFX Output中设置的能力。&lt;/li&gt;
&lt;li&gt;启用了VFX instancing，可以公开纹理，网格或图形缓冲区。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;web-platform-previously-webgl&#34;&gt;Web platform (previously WebGL) &lt;a href=&#34;#web-platform-previously-webgl&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Unity网页构建现在可以利用Emscripten工具链中最新的大小和性能优化。&lt;/li&gt;
&lt;li&gt;增加了支持指定您希望应用程序在运行时启动的浏览器类型及其可执行路径。您可以通过命令行或在&amp;quot;构建设置&amp;quot;窗口中的GUI设置来指定这个。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;xr&#34;&gt;XR &lt;a href=&#34;#xr&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;新增了对Hololens自动化的支持。&lt;/li&gt;
&lt;li&gt;扩展了Unity在URP，HDRP和内建渲染管线中对色调映射和输出到HDR显示器的集成支持，以支持具有HDR显示器的XR设备。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>UGUI中文教程(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/07/09/2023-07-09-unity-ugui/</link>
      <pubDate>Sun, 09 Jul 2023 11:13:34 +0800</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/07/09/2023-07-09-unity-ugui/</guid>
      <description>&lt;p&gt;Unity UI 是一组用于开发游戏和应用程序用户界面的工具。它是一个基于 GameObject 的 UI 系统，使用组件和游戏视图来排列、定位和设置用户界面的样式。 您无法使用Unity UI在Unity编辑器中创建或更改用户界面。&lt;/p&gt;
&lt;h3 id=&#34;unity-ui-unity-user-interface&#34;&gt;Unity UI: Unity User Interface &lt;a href=&#34;#unity-ui-unity-user-interface&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Unity UI 是一个用于开发游戏和应用程序用户界面的 UI 工具包。它是一个基于 GameObject 的 UI 系统，使用组件和游戏视图来排列、定位和设置用户界面的样式。 您无法使用Unity UI在Unity编辑器中创建或更改用户界面。&lt;/p&gt;
&lt;p&gt;本文档介绍了 Unity UI 功能，例如创建 Canvas、定位和动画元素、定义用户交互以及自动调整布局大小。&lt;/p&gt;
&lt;h3 id=&#34;canvas&#34;&gt;Canvas &lt;a href=&#34;#canvas&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;canvas画布&#34;&gt;Canvas(画布) &lt;a href=&#34;#canvas%e7%94%bb%e5%b8%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;画布是所有UI元素应该所在的区域。画布是一个带有Canvas组件的游戏对象，所有的UI元素都必须是这种画布的子对象。
使用菜单 GameObject &amp;gt; UI &amp;gt; Image 创建新的UI元素，比如一个Image，如果场景中尚未存在画布，将自动创建一个Canvas。UI元素被创建为此Canvas的子对象。
画布区域在场景视图中显示为矩形。这样可以轻松定位 UI 元素，而无需始终保持游戏视图可见。
Canvas使用EventSystem对象来帮助消息系统。&lt;/p&gt;
&lt;h4 id=&#34;draw-order-of-elements元素绘制顺序&#34;&gt;Draw order of elements(元素绘制顺序) &lt;a href=&#34;#draw-order-of-elements%e5%85%83%e7%b4%a0%e7%bb%98%e5%88%b6%e9%a1%ba%e5%ba%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;在Canvas中，UI元素按照它们在Hierarchy中出现的顺序进行绘制。首先绘制第一个子元素，然后是第二个子元素，依此类推。如果两个UI元素重叠，后出现的元素将会覆盖在先出现的元素之上。&lt;/p&gt;
&lt;p&gt;要改变元素覆盖的顺序，只需通过拖动它们在Hierarchy中的位置即可。也可以通过在Transform组件上使用以下方法来控制顺序：SetAsFirstSibling，SetAsLastSibling，和SetSiblingIndex。&lt;/p&gt;
&lt;h4 id=&#34;render-modes渲染模式&#34;&gt;Render Modes(渲染模式) &lt;a href=&#34;#render-modes%e6%b8%b2%e6%9f%93%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Canvas具有渲染模式设置，可以用来将其设置为在屏幕空间或世界空间中渲染。&lt;/p&gt;
&lt;h5 id=&#34;screen-space---overlay屏幕空间---叠加模式&#34;&gt;Screen Space - Overlay(屏幕空间 - 叠加模式) &lt;a href=&#34;#screen-space---overlay%e5%b1%8f%e5%b9%95%e7%a9%ba%e9%97%b4---%e5%8f%a0%e5%8a%a0%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;此渲染模式将UI元素放置在场景顶部的屏幕上进行渲染。如果屏幕尺寸调整或分辨率变化，Canvas将自动改变大小以匹配这些变化。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_Canvas_Screenspace_Overlay.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h5 id=&#34;screen-space---camera屏幕空间-相机模式&#34;&gt;Screen Space - Camera(屏幕空间-相机模式) &lt;a href=&#34;#screen-space---camera%e5%b1%8f%e5%b9%95%e7%a9%ba%e9%97%b4-%e7%9b%b8%e6%9c%ba%e6%a8%a1%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;这与屏幕空间 - 叠加相似，但在这种渲染模式下，Canvas被放置在指定相机前面的一定距离处。UI元素由这台相机渲染，这意味着相机设置会影响UI的外观。如果相机设置为透视图，UI元素将呈现透视效果，透视变形的程度可以通过相机视野调整。如果屏幕尺寸调整，分辨率变化，或相机视锥体变化，Canvas将自动改变大小以匹配这些变化。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_Canvas_Screenspace_Camera.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h5 id=&#34;world-space世界空间&#34;&gt;World Space(世界空间) &lt;a href=&#34;#world-space%e4%b8%96%e7%95%8c%e7%a9%ba%e9%97%b4&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;在这种渲染模式下，Canvas将像场景中的任何其他对象一样运作。Canvas的大小可以通过其Rect Transform手动设置，UI元素将根据3D位置在场景中的其他对象前面或者后面进行渲染。这对于应该成为世界一部分的UI非常有用。这也被称为&amp;quot;diegetic interface&amp;quot;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_Canvas_Worldspace.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;basic-layout&#34;&gt;Basic Layout &lt;a href=&#34;#basic-layout&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;basic-layout基础布局&#34;&gt;Basic Layout(基础布局) &lt;a href=&#34;#basic-layout%e5%9f%ba%e7%a1%80%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;在本节中，我们将介绍如何相对于Canvas和其他UI元素定位UI元素。如果你想在阅读的时候进行自我测试，你可以通过菜单GameObject -&amp;gt; UI -&amp;gt; Image来创建一个图像。&lt;/p&gt;
&lt;h4 id=&#34;the-rect-tool矩形工具&#34;&gt;The Rect Tool(矩形工具) &lt;a href=&#34;#the-rect-tool%e7%9f%a9%e5%bd%a2%e5%b7%a5%e5%85%b7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;每个UI元素在布局时都被表示为一个矩形。这个矩形可以在场景视图中使用工具栏的矩形工具进行操作。矩形工具既可以用于Unity的2D特性，也可以用于UI，事实上，甚至可以用于3D对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_Rect_Tool_Button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;矩形工具可以用来移动、调整大小并旋转UI元素。一旦你选中了一个UI元素，你可以通过在矩形内任何地方点击并拖动来移动它。你可以点击边缘或角落并拖动来调整其大小。可以通过将光标悬停在角落稍远的地方，直到鼠标光标看起来像一个旋转符号，然后在任一方向上点击并拖动来旋转元素。&lt;/p&gt;
&lt;p&gt;就像其他工具一样，矩形工具使用工具栏中设置的当前的轴心模式和空间。在使用UI时，通常最好将它们设定为Pivot和Local。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_Pivot_Local_Buttons.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;rect-transform矩形变换&#34;&gt;Rect Transform(矩形变换) &lt;a href=&#34;#rect-transform%e7%9f%a9%e5%bd%a2%e5%8f%98%e6%8d%a2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;形变换是一种新的变换组件，用于所有的UI元素，而不是使用常规的变换组件。、&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_RectTransform.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;矩形变换拥有常规变换的位置、旋转和缩放，但它也有宽度和高度，用于指定矩形的尺寸。&lt;/p&gt;
&lt;h5 id=&#34;resizing-versus-scaling调整大小与缩放&#34;&gt;Resizing Versus Scaling(调整大小与缩放) &lt;a href=&#34;#resizing-versus-scaling%e8%b0%83%e6%95%b4%e5%a4%a7%e5%b0%8f%e4%b8%8e%e7%bc%a9%e6%94%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;当矩形工具用于改变物体的大小时，通常是针对2D系统中的Sprites和3D Objects，它将改变物体的局部尺度。然而，当它被用于带有矩形变换的物体时，它将会改变宽度和高度，而保持本地缩放不变。这种调整大小不会影响字体大小、切片图像的边框等。&lt;/p&gt;
&lt;h5 id=&#34;pivot中心点&#34;&gt;Pivot(中心点) &lt;a href=&#34;#pivot%e4%b8%ad%e5%bf%83%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;旋转，大小和比例修改都是围绕中心点进行的，因此中心点的位置影响旋转，大小调整或缩放的结果。当工具栏的&amp;quot;Pivot&amp;quot;按钮设置为&amp;quot;Pivot&amp;quot;模式时，可以在&amp;quot;Scene View&amp;quot;中移动&amp;quot;Rect Transform&amp;quot;的中心点。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_PivotRotate.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h5 id=&#34;anchors锚点&#34;&gt;Anchors(锚点) &lt;a href=&#34;#anchors%e9%94%9a%e7%82%b9&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;矩形变换包括一个名为锚点的布局概念。在场景视图中，锚点显示为四个小三角形手柄，并且在检查器中也显示锚点信息。&lt;/p&gt;
&lt;p&gt;如果矩形变换的父对象也是矩形变换，那么子矩形变换可以以各种方式锚定到父矩形变换。例如，子对象可以锚定到父对象的中心，或者锚定到四个角中的一个。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_Anchored1.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;锚点还允许子对象随着父对象的宽度或高度一起拉伸。矩形的每个角都有一个固定的偏移量到其对应的锚点，即矩形的左上角有一个固定的偏移量到左上角的锚点等。这样，矩形的不同角落可以锚定到父矩形中的不同点。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_Anchored2.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;锚点的位置是以父矩形的宽度和高度的分数（或百分比）来定义的。0.0（0%）对应于左侧或底侧，0.5（50%）对应于中间，1.0（100%）对应于右侧或顶侧。但是锚点不仅限于边缘和中间，它们可以锚定到父矩形内的任何点。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_Anchored3.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;你可以单独拖动每一个锚点，或者如果它们在一起，你可以通过点击它们中间的位置并拖动来一起拖动它们。如果你在拖动锚点的同时按住Shift键，矩形的对应角将会和锚点一起移动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_Anchored4.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;锚点手柄的一个有用特性是，它们会自动吸附到兄弟矩形的锚点，以便进行精确定位。&lt;/p&gt;
&lt;h5 id=&#34;anchor-presets锚点预设按钮&#34;&gt;Anchor presets(锚点预设按钮) &lt;a href=&#34;#anchor-presets%e9%94%9a%e7%82%b9%e9%a2%84%e8%ae%be%e6%8c%89%e9%92%ae&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;在Inspector中，可以在 Rect Transform 组件的左上角找到锚点预设按钮。点击该按钮会打开锚点预设下拉菜单。在这里，你可以快速选择一些最常用的锚定选项。你可以将UI元素锚定到父元素的侧边或中间，或者随着父元素的大小一起拉伸。水平和垂直的锚定是独立的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_AnchorPreset.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;锚点预设按钮如果有选中的预设选项，会显示当前选中的预设选项。如果水平或垂直轴上的锚点设置的位置与预设中的任何位置不同，将显示自定义选项。&lt;/p&gt;
&lt;h5 id=&#34;anchor-and-position-fields-in-the-inspector检查器中的锚点和位置字段&#34;&gt;Anchor and position fields in the Inspector(检查器中的锚点和位置字段) &lt;a href=&#34;#anchor-and-position-fields-in-the-inspector%e6%a3%80%e6%9f%a5%e5%99%a8%e4%b8%ad%e7%9a%84%e9%94%9a%e7%82%b9%e5%92%8c%e4%bd%8d%e7%bd%ae%e5%ad%97%e6%ae%b5&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;如果锚点数字字段还未显示，你可以点击锚点展开箭头来显示。Anchor Min 对应场景视图中的左下锚点手柄，而 Anchor Max 则对应右上手柄。&lt;/p&gt;
&lt;p&gt;根据锚点是一起（产生固定的宽度和高度）还是分开（使矩形随父矩形一起拉伸），矩形的位置字段显示方式会有所不同。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_RectTransform_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当所有的锚点手柄在一起时，显示的字段有Pos X、Pos Y、Width和Height。Pos X和Pos Y的值表示相对于锚点的枢轴位置。&lt;/p&gt;
&lt;p&gt;当锚点分开时，字段部分或全部变为Left、Right、Top和Bottom。这些字段定义了由锚点定义的矩形内的填充。如果锚点在水平方向上分开，则使用Left和Right字段，如果在垂直方向上分开，则使用Top和Bottom字段。&lt;/p&gt;
&lt;p&gt;注意，通常情况下，更改锚点或枢轴字段中的值会对定位值进行反向调整，以使矩形保持原位。在不需要这种情况时，可以通过在检查器中点击R键开启Raw edit模式。这将导致Anchor和Pivot的值可以更改，而其他值不会因此变化。由于矩形的位置和大小取决于锚点和枢轴的值，所以这可能会导致矩形在视觉上移动或重新调整大小。&lt;/p&gt;
&lt;h3 id=&#34;visual-components&#34;&gt;Visual Components &lt;a href=&#34;#visual-components&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;visual-components视觉组件&#34;&gt;Visual Components(视觉组件) &lt;a href=&#34;#visual-components%e8%a7%86%e8%a7%89%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;随着UI系统的引入，已经添加了新的组件，这些组件将帮助你创建特定于GUI的功能。此部分将介绍可以创建的新组件的基础知识。&lt;/p&gt;
&lt;h4 id=&#34;text&#34;&gt;Text &lt;a href=&#34;#text&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_TextInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Text组件，也被称为Label，具有一个用于输入要显示的文本的文本区域。可以设置字体、字体样式、字体大小，以及文本是否具有富文本功能。&lt;/p&gt;
&lt;p&gt;有选项可以设置文本的对齐方式，以及横向和纵向溢出的设置，这些设置可以控制如果文本的尺寸大于矩形的宽度或高度时会发生什么，还有一个Best Fit选项，使文本重新调整大小以适应可用空间。&lt;/p&gt;
&lt;h4 id=&#34;image&#34;&gt;Image &lt;a href=&#34;#image&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ImageInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Image拥有一个Rect Transform组件和一个Image组件。可以将精灵应用到Image组件上，在Target Graphic字段下，并可以在Color字段中设置其颜色。也可以将材质应用到Image组件。Image Type字段定义了应用的精灵将如何显示，选项包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Simple - 等比例缩放整个精灵。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sliced - 利用3x3的精灵分割，所以调整大小不会扭曲角落，只有中心部分会被拉伸。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tiled - 类似于Sliced，但是将中心部分平铺（重复）而不是拉伸。对于完全无边框的精灵，整个精灵都会被平铺。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Filled - 以与Simple相同的方式显示精灵，除了它会从一个定义的方向、方式和量填充精灵。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;选择Set Native Size选项，当选择了Simple或Filled时显示，会将图像重置为原始精灵大小。&lt;/p&gt;
&lt;p&gt;可以通过从&amp;rsquo;Texture Type&amp;rsquo;设置中选择Sprite(2D / UI)来导入图片作为UI精灵。精灵具有附加的导入设置，与旧的GUI精灵相比，最大的不同是增加了精灵编辑器。精灵编辑器提供了9切分图像的选项，这可以将图像分成9个区域，这样如果精灵调整大小，角落不会拉伸或扭曲。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SpriteEditor.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;raw-image&#34;&gt;Raw Image &lt;a href=&#34;#raw-image&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Image组件需要一个精灵，而Raw Image则需要一个纹理（没有边界等）。只有在必要的情况下才应使用Raw Image，否则在大多数情况下Image将是适合的。&lt;/p&gt;
&lt;h4 id=&#34;mask&#34;&gt;Mask &lt;a href=&#34;#mask&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Mask并不是一个可见的UI控件，而是一种修改控件子元素外观的方式。掩码将子元素限制在父元素的形状内（也就是说，&amp;ldquo;掩蔽&amp;rdquo;）。所以，如果子元素大于父元素，那么只有适应父元素的子元素部分才会可见。&lt;/p&gt;
&lt;h4 id=&#34;effects&#34;&gt;Effects &lt;a href=&#34;#effects&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;视觉组件也可以应用各种简单的效果，如简单的阴影或轮廓。&lt;/p&gt;
&lt;h3 id=&#34;interaction-components&#34;&gt;Interaction Components &lt;a href=&#34;#interaction-components&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;interaction-components交互组件&#34;&gt;Interaction Components(交互组件) &lt;a href=&#34;#interaction-components%e4%ba%a4%e4%ba%92%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;这部分涵盖了UI系统中处理交互的组件，如鼠标或触摸事件以及使用键盘或控制器的交互。&lt;/p&gt;
&lt;p&gt;交互组件本身不可见，必须与一个或多个视觉组件组合起来才能正确工作。&lt;/p&gt;
&lt;h4 id=&#34;common-functionality公用功能&#34;&gt;Common Functionality(公用功能) &lt;a href=&#34;#common-functionality%e5%85%ac%e7%94%a8%e5%8a%9f%e8%83%bd&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;大部分交互组件都有一些共同点。它们都是可选择的，这意味着它们有共享的内置功能，可以用于可视化状态之间的过渡（正常、高亮、按下、禁用），并且可以使用键盘或控制器导航到其他可选择的项目。&lt;/p&gt;
&lt;p&gt;交互组件至少有一个UnityEvent，在用户以特定方式与组件交互时被触发。UI系统捕捉并记录了从附加到UnityEvent的代码传出的任何异常。&lt;/p&gt;
&lt;h4 id=&#34;button&#34;&gt;Button &lt;a href=&#34;#button&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Button有一个OnClick UnityEvent，用于定义当点击时它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ButtonExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;toggle&#34;&gt;Toggle &lt;a href=&#34;#toggle&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Toggle有一个IsOn复选框，用于确定Toggle当前是打开还是关闭状态。当用户点击Toggle时，这个值会翻转，相应地，视觉上的勾选标记也可以打开或关闭。它还有一个OnValueChanged UnityEvent，用于定义当值发生变化时它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;toggle-group&#34;&gt;Toggle Group &lt;a href=&#34;#toggle-group&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Toggle Group可以用来组合一组彼此独立的Toggle。属于同一组的Toggle被约束在一起，一次只能选择其中一个 - 选择其中一个会自动取消选择所有其他Toggle。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleGroupExample.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;slider&#34;&gt;Slider &lt;a href=&#34;#slider&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Slider具有一个十进制数值Value，用户可以在最小值和最大值之间拖动它。它可以是水平的也可以是垂直的。它还有一个OnValueChanged UnityEvent，用于定义当值发生变化时它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SliderExample.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;scrollbar&#34;&gt;Scrollbar &lt;a href=&#34;#scrollbar&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Scrollbar有一个十进制数值Value，范围在0和1之间。当用户拖动滚动条时，该值相应地进行变化。&lt;/p&gt;
&lt;p&gt;滚动条常与Scroll Rect和Mask一起使用，以创建滚动视图。Scrollbar有一个范围在0和1之间的Size值，用来确定手柄占整个滚动条长度的比例是多少。这通常是由另一个组件控制的，用来指示在滚动视图中可见的内容占总内容的比例有多大。Scroll Rect组件可以自动完成这个工作。&lt;/p&gt;
&lt;p&gt;滚动条可以是水平的，也可以是垂直的。它还有一个OnValueChanged UnityEvent，用于定义当值变化时，它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollbarExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;dropdown&#34;&gt;Dropdown &lt;a href=&#34;#dropdown&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Dropdown有一个可供选择的选项列表。每个选项可以指定一个文本字符串和可选的图像，可以在检查器中设置，也可以从代码动态设置。它有一个OnValueChanged UnityEvent，用于定义当当前选择的选项发生改变时它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownExample.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;input-field&#34;&gt;Input Field &lt;a href=&#34;#input-field&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Input Field用于使用户可以编辑Text Element的文本。它有一个UnityEvent，用于定义当文本内容发生变化时它将执行什么操作，还有另一个UnityEvent，用于定义当用户完成编辑时它将执行什么操作。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_InputFieldExample.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;scroll-rect-scroll-view&#34;&gt;Scroll Rect (Scroll View) &lt;a href=&#34;#scroll-rect-scroll-view&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;当需要在小区域内显示占用大量空间的内容时，可以使用Scroll Rect。Scroll Rect提供了滚动内容的功能。&lt;/p&gt;
&lt;p&gt;通常，Scroll Rect与Mask组合使用，以创建滚动视图，其中只有Scroll Rect内部的可滚动内容是可见的。它还可以额外地与一或两个Scrollbar组合使用，可以拖动它们进行水平或垂直滚动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollRectExample.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;animation-integration&#34;&gt;Animation Integration &lt;a href=&#34;#animation-integration&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Animation允许使用Unity的动画系统对控制状态间的每个过渡进行完全动画化。由于可以同时动画化的属性数量，这是过渡模式中最强大的一种。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_ButtonInspectorAnimation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要使用Animation过渡模式，需要将Animator组件附加到控制元素上。可以通过点击&amp;quot;Auto Generate Animation&amp;quot;自动完成。这也会生成一个已经设置了状态的Animator控制器，需要保存。&lt;/p&gt;
&lt;p&gt;新的Animator控制器可以立即使用。与大多数Animator控制器不同，此控制器还存储控制器过渡的动画，如果需要，可以进行定制。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_ButtonAnimator.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;例如，如果选择了一个附有Animator控制器的Button元素，则可以通过打开Animation窗口（Window&amp;gt;Animation）编辑按钮每个状态的动画。&lt;/p&gt;
&lt;p&gt;有一个Animation Clip弹出菜单可以选择所需的剪辑。可从&amp;quot;Normal&amp;quot;、&amp;ldquo;Highlighted&amp;rdquo;、&amp;ldquo;Pressed&amp;quot;和&amp;quot;Disabled&amp;quot;中选择。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUI_ButtonAnimationWindow.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Normal状态由按钮元素本身的值设置，可以为空。在所有其他状态中，最常见的配置是时间线开始时的单个关键帧。状态之间的过渡动画将由Animator处理。&lt;/p&gt;
&lt;p&gt;例如，可以通过从Animation Clip弹出菜单中选择Highlighted状态，并将播放头放在时间线开始处，来更改Highlighted状态下按钮的宽度：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;选择录制按钮&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在检查器中更改按钮的宽度&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;退出录制模式。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;切换到播放模式，看看在突出显示时按钮如何变大。&lt;/p&gt;
&lt;p&gt;任何数量的属性都可以在此关键帧中设置其参数。&lt;/p&gt;
&lt;p&gt;多个按钮可以通过共享Animator控制器来共享相同的行为。&lt;/p&gt;
&lt;p&gt;UI动画过渡模式与Unity的旧版动画系统不兼容。你应该仅使用Animator组件。&lt;/p&gt;
&lt;h3 id=&#34;auto-layout&#34;&gt;Auto Layout &lt;a href=&#34;#auto-layout&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;auto-layout自动布局&#34;&gt;Auto Layout(自动布局) &lt;a href=&#34;#auto-layout%e8%87%aa%e5%8a%a8%e5%b8%83%e5%b1%80&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Rect Transform布局系统具有足够的灵活性，可以处理许多不同类型的布局，并且它还允许以完全自由形式放置元素。但是，有时可能需要更加结构化的布局。&lt;/p&gt;
&lt;p&gt;自动布局系统提供了将元素放置在嵌套布局组中的方法，例如水平组，垂直组或网格。它还允许元素根据所包含的内容自动调整大小。例如，一个按钮可以动态地调整大小以精确地适应其文本内容加上一些填充。&lt;/p&gt;
&lt;p&gt;自动布局系统是基于基本的Rect Transform布局系统构建的系统。可以选择在部分或所有元素上使用。&lt;/p&gt;
&lt;h4 id=&#34;understanding-layout-elements理解布局元素&#34;&gt;Understanding Layout Elements(理解布局元素) &lt;a href=&#34;#understanding-layout-elements%e7%90%86%e8%a7%a3%e5%b8%83%e5%b1%80%e5%85%83%e7%b4%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;自动布局系统基于layout elements(布局元素)和layout controllers(布局控制器)的概念。layout elements(布局元素)是具有Rect Transform和其他可选组件的游戏对象。layout elements(布局元素)不直接设置自己的大小，但作为layout controllers(布局控制器)的其他组件可以使用它们提供的信息来计算它们应使用的大小。&lt;/p&gt;
&lt;p&gt;布局元素有定义其自身的属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minimum width(最小宽度)&lt;/li&gt;
&lt;li&gt;Minimum height(最小高度)&lt;/li&gt;
&lt;li&gt;Preferred width(首选宽度)&lt;/li&gt;
&lt;li&gt;Preferred height(首选高度)&lt;/li&gt;
&lt;li&gt;Flexible width(灵活的宽度)&lt;/li&gt;
&lt;li&gt;Flexible height(灵活的高度)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用布局元素提供的信息的布局控制器组件示例包括Content Size Fitter和各种Layout Group组件。布局组中的布局元素大小的基本原则如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先分配最小尺寸&lt;/li&gt;
&lt;li&gt;如果有足够的可用空间，则会分配首选大小&lt;/li&gt;
&lt;li&gt;如果有额外的可用空间，则分配灵活的大小&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;任何带有矩形变换的游戏对象都可以用作布局元素。默认情况下，它们的最小尺寸、首选尺寸和灵活尺寸均为 0。某些组件在添加到游戏对象时将更改这些布局属性。&lt;/p&gt;
&lt;p&gt;图像和文本组件是提供布局元素属性的组件的两个示例。他们更改首选宽度和高度以匹配精灵或文本内容。&lt;/p&gt;
&lt;h4 id=&#34;layout-element-component布局元素组件&#34;&gt;Layout Element Component(布局元素组件) &lt;a href=&#34;#layout-element-component%e5%b8%83%e5%b1%80%e5%85%83%e7%b4%a0%e7%bb%84%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;如果你想要覆盖最小，首选，或者灵活的尺寸，你可以通过在游戏对象上添加一个布局元素组件来达到目的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_LayoutElementInspector.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;布局元素组件允许你覆盖一个或多个布局属性的值。启用你想要覆盖的属性的复选框，然后指定你想要覆盖的值。&lt;/p&gt;
&lt;h4 id=&#34;understanding-layout-controllers-理解布局控制器&#34;&gt;Understanding Layout Controllers (理解布局控制器) &lt;a href=&#34;#understanding-layout-controllers-%e7%90%86%e8%a7%a3%e5%b8%83%e5%b1%80%e6%8e%a7%e5%88%b6%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;布局控制器是一类组件，它们负责控制一个或多个布局元素的大小，可能还包括位置，这里的布局元素指带有矩形变换(Rect Transforms)的游戏对象。布局控制器可能会控制其自身的布局元素（即它本身所在的游戏对象），或者控制子布局元素。&lt;/p&gt;
&lt;p&gt;充当布局控制器的组件本身也可以同时充当布局元素。&lt;/p&gt;
&lt;h4 id=&#34;content-size-fitter内容尺寸适配器&#34;&gt;Content Size Fitter(内容尺寸适配器) &lt;a href=&#34;#content-size-fitter%e5%86%85%e5%ae%b9%e5%b0%ba%e5%af%b8%e9%80%82%e9%85%8d%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Content Size Fitter 充当布局控制器，控制其自身布局元素的大小。查看自动布局系统实际运行的最简单方法是将 Content Size Fitter 组件添加到带有 Text 组件的游戏对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ContentSizeFitterInspector.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果将“Horizontal Fit”或“Vertical Fit”设置为“Preferred”，则矩形变换将调整其宽度和/或高度以适合文本内容。&lt;/p&gt;
&lt;h4 id=&#34;aspect-ratio-fitter宽高比适配器&#34;&gt;Aspect Ratio Fitter(宽高比适配器) &lt;a href=&#34;#aspect-ratio-fitter%e5%ae%bd%e9%ab%98%e6%af%94%e9%80%82%e9%85%8d%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Aspect Ratio Fitter 用作布局控制器，控制其自身布局元素的大小。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_AspectRatioFitterInspector.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;p&gt;它可以调整高度以适应宽度，反之亦然，也可以使元素适合其父级或包围其父级。 Aspect Ratio Fitter 不考虑布局信息，例如最小尺寸和首选尺寸。&lt;/p&gt;
&lt;h4 id=&#34;layout-groups布局组&#34;&gt;Layout Groups(布局组) &lt;a href=&#34;#layout-groups%e5%b8%83%e5%b1%80%e7%bb%84&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;布局组作为一个布局控制器，它控制其子布局元素的大小和位置。例如，水平将其子元素并排排列，网格布局组则将其子元素放置在网格中。
布局组并不控制它自己的大小。相反，它自身作为一个布局元素，可能会被其他布局控制器控制或者手动设置。
无论布局组被分配了什么大小，它在大多数情况下都会尝试为每一个子布局元素分配适当的空间，这基于他们报告的最小，首选和灵活的尺寸。而且，布局组还可以通过这种方式任意嵌套。&lt;/p&gt;
&lt;h4 id=&#34;driven-rect-transform-properties驱动的矩形变换属性&#34;&gt;Driven Rect Transform properties(驱动的矩形变换属性) &lt;a href=&#34;#driven-rect-transform-properties%e9%a9%b1%e5%8a%a8%e7%9a%84%e7%9f%a9%e5%bd%a2%e5%8f%98%e6%8d%a2%e5%b1%9e%e6%80%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;由于自动布局系统中的布局控制器可以自动控制某些UI元素的尺寸和位置，因此，那些尺寸和位置不应同时通过检视器或场景视图手动编辑。因为这些更改的值在下一次布局计算时将被布局控制器重置。
矩形变换有一个驱动属性的概念来解决这个问题。例如，将 Horizontal Fit 属性设置为“Minimum”或“Preferred”的 Content Size Fitter 将驱动同一游戏对象上矩形变换的宽度。宽度将显示为只读，并且矩形变换顶部的一个小信息框将通知一个或多个属性由 Conten Size Fitter 驱动。
除了防止手动编辑之外，驱动的矩形变换属性还有其他原因。只需更改游戏视图的分辨率或大小即可更改布局。这反过来又可以改变布局元素的大小或位置，从而改变驱动属性的值。但仅仅因为调整了游戏视图的大小而将场景标记为具有未保存的更改是不可取的。为了防止这种情况，驱动属性的值不会保存为场景的一部分，并且对它们的更改不会将场景标记为已更改。&lt;/p&gt;
&lt;h4 id=&#34;technical-details技术细节&#34;&gt;Technical Details(技术细节) &lt;a href=&#34;#technical-details%e6%8a%80%e6%9c%af%e7%bb%86%e8%8a%82&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;自动布局系统带有一些内置的组件，但也可以创建新的组件并以自定义的方式控制布局。这是通过让一个组件实现特定的接口实现的，这些接口会被自动布局系统识别。&lt;/p&gt;
&lt;h4 id=&#34;layout-interfaces布局接口&#34;&gt;Layout Interfaces(布局接口) &lt;a href=&#34;#layout-interfaces%e5%b8%83%e5%b1%80%e6%8e%a5%e5%8f%a3&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;如果一个组件实现了ILayoutElement接口，那么它就会被自动布局系统视为布局元素。&lt;/p&gt;
&lt;p&gt;如果一个组件实现了ILayoutGroup接口，那么它就应该驱动其子元素的Rect Transforms。&lt;/p&gt;
&lt;p&gt;如果一个组件实现了ILayoutSelfController接口，那么它就应该驱动自己的RectTransform。&lt;/p&gt;
&lt;h4 id=&#34;layout-calculations布局算法&#34;&gt;Layout Calculations(布局算法) &lt;a href=&#34;#layout-calculations%e5%b8%83%e5%b1%80%e7%ae%97%e6%b3%95&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;自动布局系统按照以下顺序评估和执行布局：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;通过在ILayoutElement组件上调用CalculateLayoutInputHorizontal，计算布局元素的最小值、首选值和灵活宽度。这按照从下到上的顺序执行，即先计算子元素，父元素在自身计算中可以考虑子元素的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过在ILayoutController组件上调用SetLayoutHorizontal，计算并设置布局元素的实际宽度。这按照从上到下的顺序进行，也就是说，在父元素之后计算子元素，因为子元素的宽度分配需要基于父元素中的全部宽度。此步骤之后，布局元素的Rect Transforms有了新的宽度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过在ILayoutElement组件上调用CalculateLayoutInputVertical，计算布局元素的最小值、首选值和灵活高度。这同样按照从下到上的顺序执行，即先计算子元素，然后父元素在自身的计算中可以考虑到子元素的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过在ILayoutController组件上调用SetLayoutVertical，计算和设置布局元素的实际高度。这按照从上到下的顺序进行，也就是说，在父元素之后计算子元素，因为子元素的高度分配需要基于父元素中可用的全部高度。此步骤之后，布局元素的Rect Transforms有了新的高度。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如上所述，自动布局系统先评估宽度，然后评估高度。因此，计算出的高度可能会依赖于宽度，但计算出的宽度绝不会依赖于高度。&lt;/p&gt;
&lt;h4 id=&#34;triggering-layout-rebuild触发布局重建&#34;&gt;Triggering Layout Rebuild(触发布局重建) &lt;a href=&#34;#triggering-layout-rebuild%e8%a7%a6%e5%8f%91%e5%b8%83%e5%b1%80%e9%87%8d%e5%bb%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;当一个组件上的属性改变可能导致当前布局不再有效时，需要进行布局重新计算。可以使用以下调用来触发：&lt;/p&gt;
&lt;p&gt;LayoutRebuilder.MarkLayoutForRebuild (transform as RectTransform);&lt;/p&gt;
&lt;p&gt;重建不会立即发生，而是在当前帧的结束时，也就是在绘制之前。之所以不立即重建，是因为这可能会导致在同一帧中多次重建布局，这对性能来说是不好的。&lt;/p&gt;
&lt;p&gt;触发重建的指导原则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在可以更改布局的属性的setter中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在这些回调中：&lt;/p&gt;
&lt;p&gt;OnEnable&lt;/p&gt;
&lt;p&gt;OnDisable&lt;/p&gt;
&lt;p&gt;OnRectTransformDimensionsChange&lt;/p&gt;
&lt;p&gt;OnValidate（仅在编辑器中需要，运行时不需要）&lt;/p&gt;
&lt;p&gt;OnDidApplyAnimationProperties&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rich-text&#34;&gt;Rich Text &lt;a href=&#34;#rich-text&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;rich-text富文本&#34;&gt;Rich Text(富文本) &lt;a href=&#34;#rich-text%e5%af%8c%e6%96%87%e6%9c%ac&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;UI 元素和文本网格的文本可以包含多种字体样式和大小。 UI 系统和旧版 GUI 系统都支持富文本。 Text、GUIStyle、GUIText 和 TextMesh 类具有富文本设置，指示 Unity 在文本中查找标记标签。 Debug.Log函数还可以使用这些标记来增强代码中的错误报告。标签不会显示，但指示要应用于文本的样式更改。&lt;/p&gt;
&lt;h4 id=&#34;markup-format标记格式&#34;&gt;Markup format(标记格式) &lt;a href=&#34;#markup-format%e6%a0%87%e8%ae%b0%e6%a0%bc%e5%bc%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;标记系统的设计来自于HTML，但并不意味着严格符合标准的HTML。基本思想是文本的一部分可以被包含在一对匹配的标签之间。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;We are &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt;not&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt; amused.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如示例所示，标签只是“尖括号”字符&amp;lt;和内的文本片段&amp;gt;。&lt;/p&gt;
&lt;p&gt;您将开始标记放在该部分的开头。标签内的文本表示其名称（在本例中为b）。&lt;/p&gt;
&lt;p&gt;您可以在该部分的末尾放置另一个标签。这是结束标签。它与开始标记具有相同的名称，但名称前面带有斜杠/字符。每个开始标签必须有一个相应的结束标签。如果不关闭开始标记，它将呈现为常规文本。&lt;/p&gt;
&lt;p&gt;这些标签不会直接显示给用户，而是被解释为对其所包含的文本进行样式设置的说明。上例中使用的标签b将粗体应用于单词“not”，因此文本在屏幕上显示为:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;标记的文本部分（包括包围它的标签）称为元素。&lt;/p&gt;
&lt;h4 id=&#34;nested-elements嵌套元素&#34;&gt;Nested elements(嵌套元素) &lt;a href=&#34;#nested-elements%e5%b5%8c%e5%a5%97%e5%85%83%e7%b4%a0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;通过将一个元素&amp;quot;嵌套&amp;quot;在另一个元素内，可以将多种样式应用于文本的一部分。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;We are &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;i&lt;/span&gt;&amp;gt;definitely not&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;i&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt; amused
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;标签应用斜体样式，所以这将在屏幕上呈现为:&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;注意关闭标签的顺序，它与打开标签的顺序相反。当你考虑到内部标签并不需要覆盖最外层元素的所有文本时，这个原因可能会更清晰。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;We are &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt;absolutely &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;i&lt;/span&gt;&amp;gt;definitely&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;i&lt;/span&gt;&amp;gt; not&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;b&lt;/span&gt;&amp;gt; amused
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;!-- raw HTML omitted --&gt;
&lt;h4 id=&#34;tag-parameters标签参数&#34;&gt;Tag parameters(标签参数) &lt;a href=&#34;#tag-parameters%e6%a0%87%e7%ad%be%e5%8f%82%e6%95%b0&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;一些标签对文本有简单的全有或全无效果，但其他一些标签可能允许变化。例如，颜色标签需要知道应用哪种颜色。通过参数在标签中添加这样的信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;We are &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;green&lt;/span&gt;&amp;gt;green&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;&amp;gt; with envy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;产生的结果是：&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;请注意，结束标记不包含参数值。或者，该值可以用引号引起来，但这不是必需的。&lt;/p&gt;
&lt;p&gt;标记参数不能包含空格。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;We are &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;green&lt;/span&gt;&amp;gt;green&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;&amp;gt; with envy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于字符两侧都有空格，因此不起作用&lt;code&gt;=&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id=&#34;supported-tags支持的标签&#34;&gt;Supported tags(支持的标签) &lt;a href=&#34;#supported-tags%e6%94%af%e6%8c%81%e7%9a%84%e6%a0%87%e7%ad%be&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;以下列表描述了Unity支持的所有样式标签。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;标签&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;描述&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;例子&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;备注&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;b&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将文本呈现为粗体。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;We are &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; amused.&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;i&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将文本呈现为斜体。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;We are &amp;lt;i&amp;gt;usually&amp;lt;/i&amp;gt; not amused.&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据给定的像素值参数设置文本的大小。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;We are &amp;lt;size=50&amp;gt;largely&amp;lt;/size&amp;gt; unaffected.&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;虽然这个标签可以用于Debug.Log，但你会发现，如果设置的大小过大，窗口栏和控制台的行间距看起来会很奇怪。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据参数值设置文本的颜色。颜色可以采用传统的HTML格式指定，即&lt;code&gt;#rrggbbaa&lt;/code&gt;&amp;hellip;其中字母对应表示颜色的红色，绿色，蓝色和alpha（透明度）值的十六进制数字对。例如，全不透明的青色将通过&lt;code&gt;color=#00ffffff&lt;/code&gt;进行指定&amp;hellip; 你可以用大写或小写指定十六进制值；&lt;code&gt;#FF0000&lt;/code&gt;等同于&lt;code&gt;#ff0000&lt;/code&gt;。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;We are &amp;lt;color=#ff0000ff&amp;gt;colorfully&amp;lt;/color&amp;gt; amused&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;另一个选择是使用颜色的名称。这样理解起来比较容易，但自然地，颜色的范围被限制了，而且总是假设颜色是完全不透明的。 &amp;lt;color=cyan&amp;gt;一些文本&lt;!-- raw HTML omitted --&gt; 可用的颜色名称在下面的表格中给出。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;material&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这只对文本网格有用，并使用参数指定的材质渲染文本的一个部分。该值是关联到检查器显示的文本网格的材质数组的索引。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;We are &amp;lt;material=2&amp;gt;texturally&amp;lt;/material&amp;gt; amused&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;quad&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这只对文本网格有用，并能在文本中内联渲染一个图像。它接受参数来指定用于图像的材质，图像的像素高度，以及进一步的四个参数，表示要显示的图像的矩形区域。不同于其他标签，quad标签并未环绕某段文本，因此没有结束标签 - 斜杠字符被放在初始标签的末尾，以表示它是&amp;quot;自关闭&amp;quot;的。&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;`&lt;!-- raw HTML omitted --&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这将选择渲染器材质数组中位置的材质，并将图像的高度设置为20像素。图像的矩形区域从由x，y，宽度和高度值给出的位置开始，这些值都是以纹理未缩放的宽度和高度的分数形式给出的。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;supported-colors支持的颜色&#34;&gt;Supported colors(支持的颜色) &lt;a href=&#34;#supported-colors%e6%94%af%e6%8c%81%e7%9a%84%e9%a2%9c%e8%89%b2&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;下面列出了你可以在&lt;!-- raw HTML omitted --&gt;富文本标签中使用名称替代十六进制标签的颜色。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;*&lt;strong&gt;Color name*&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;*&lt;strong&gt;Hex value*&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;*&lt;strong&gt;Swatch*&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;aqua (same as cyan)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#00ffffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/CyanSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;black&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#000000ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/BlackSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;blue&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#0000ffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/BlueSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;brown&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#a52a2aff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/BrownSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;cyan (same as aqua)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#00ffffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/CyanSwatch2.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;darkblue&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#0000a0ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/DarkblueSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;fuchsia (same as magenta)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ff00ffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MagentaSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;green&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#008000ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GreenSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;grey&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#808080ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GreySwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;lightblue&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#add8e6ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/LightblueSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;lime&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#00ff00ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/LimeSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;magenta (same as fuchsia)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ff00ffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MagentaSwatch2.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;maroon&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#800000ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MaroonSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;navy&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#000080ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/NavySwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;olive&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#808000ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/OliveSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;orange&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ffa500ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/OrangeSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;purple&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#800080ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/PurpleSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;red&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ff0000ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/RedSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;silver&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#c0c0c0ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/SilverSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;teal&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#008080ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/TealSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;white&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ffffffff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/WhiteSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;yellow&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;#ffff00ff&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/YellowSwatch.png&#34; alt=&#34;img&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Editor GUI(编辑器 GUI)&lt;/p&gt;
&lt;p&gt;默认情况下，编辑器 GUI 系统禁用了富文本，但可以通过自定义 GUIStyle 明确启用。应设定 richText 属性为 true，并将样式传递给对应的 GUI 函数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GUIStyle style = new GUIStyle ();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;style.richText = true;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GUILayout.Label(&amp;#34;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;30&lt;/span&gt;&amp;gt;Some &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yellow&lt;/span&gt;&amp;gt;RICH&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;color&lt;/span&gt;&amp;gt; text&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;size&lt;/span&gt;&amp;gt;&amp;#34;,style);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;event&#34;&gt;Event &lt;a href=&#34;#event&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Event System(事件系统)&lt;/p&gt;
&lt;p&gt;事件系统是一种基于输入（包括键盘、鼠标、触摸或自定义输入）向应用程序中的对象发送事件的方式。事件系统由几个协同工作以发送事件的组件组成。&lt;/p&gt;
&lt;p&gt;当你向GameObject添加一个事件系统组件时，你会注意到它暴露的功能不多，这是因为事件系统本身被设计为事件系统模块之间的管理器和通信协调者。&lt;/p&gt;
&lt;p&gt;事件系统的主要角色如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;管理被选中的GameObject&lt;/li&gt;
&lt;li&gt;管理正在使用的输入模块&lt;/li&gt;
&lt;li&gt;管理射线投射（如果需要的话）&lt;/li&gt;
&lt;li&gt;根据需要更新所有的输入模块&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Input Modules(输入模块)
输入模块是你如何希望事件系统行为的主要逻辑存在的地方，它们用于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;处理输入&lt;/li&gt;
&lt;li&gt;管理事件状态&lt;/li&gt;
&lt;li&gt;向场景对象发送事件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在事件系统中，一次只能有一个输入模块处于活动状态，而且它们必须是事件系统组件同一GameObject上的组件。&lt;/p&gt;
&lt;p&gt;Raycasters(射线投射器)
射线投射器用于确定指针所在的位置。输入模块通常使用在场景中配置的射线投射器来计算指向设备所在的位置。默认存在3个提供的射线投射器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图形射线投射器 - 用于UI元素&lt;/li&gt;
&lt;li&gt;2D物理射线投射器 - 用于2D物理元素&lt;/li&gt;
&lt;li&gt;物理射线投射器 - 用于3D物理元素&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你在你的场景中配置了2d/3d射线投射器，让非UI元素从输入模块接收消息就很简单了。只需附加一个实现了事件接口之一的脚本。关于这方面的例子，可以参见IPointerEnterHandler和IPointerClickHandler脚本参考页面。&lt;/p&gt;
&lt;h4 id=&#34;messaging-system消息系统&#34;&gt;Messaging System(消息系统) &lt;a href=&#34;#messaging-system%e6%b6%88%e6%81%af%e7%b3%bb%e7%bb%9f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;新的UI系统使用了一个旨在取代SendMessage的消息系统。该系统完全基于C#，旨在解决SendMessage系统中存在的一些问题。该系统使用自定义接口，可以在MonoBehaviour上实现，以表明该组件能够从消息系统接收回调。当调用次数被指定为目标GameObject时，将在所有实现了指定接口的GameObject的组件上发出调用，这些指定的接口就是调用要针对的。消息系统允许传递自定义用户数据，以及事件应传播的GameObject层次结构的深度；也就是说，它应该仅针对指定的GameObject执行，还是也应在子对象和父对象上执行。此外，消息框架提供了辅助函数，用于搜索并找到实现给定消息接口的GameObject。&lt;/p&gt;
&lt;p&gt;消息系统是通用的，不仅设计用于UI系统，还设计用于一般的游戏代码。添加自定义消息事件相对简单，它们将使用与UI系统用于所有事件处理的相同框架。&lt;/p&gt;
&lt;h5 id=&#34;defining-a-custom-message定义自定义消息&#34;&gt;Defining A Custom Message(定义自定义消息) &lt;a href=&#34;#defining-a-custom-message%e5%ae%9a%e4%b9%89%e8%87%aa%e5%ae%9a%e4%b9%89%e6%b6%88%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;如果你希望定义一个自定义消息，这相对来说很简单。在UnityEngine.EventSystems命名空间中，有一个基础接口叫做&amp;rsquo;IEventSystemHandler&amp;rsquo;。任何从此接口派生的东西都可以被视为通过消息系统接收事件的目标。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ICustomMessageTarget&lt;/span&gt; : IEventSystemHandler
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// functions that can be called via the messaging system&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Message1();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Message2();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一旦定义了这个接口，那么它就可以由MonoBehaviour实现。当实现它时，它定义了如果针对这个MonoBehaviours的GameObject发出了给定的消息，将会执行的功能。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;CustomMessageTarget&lt;/span&gt; : MonoBehaviour, ICustomMessageTarget
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Message1()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.Log (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Message 1 received&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Message2()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Debug.Log (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Message 2 received&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在，我们有了一个可以接收消息的脚本，我们需要发出消息。通常，这会是对某些松散耦合的事件的响应。例如，在UI系统中，我们会发出PointerEnter和PointerExit等事件，以及用户输入应用程序时可能发生的其他各种事件。&lt;/p&gt;
&lt;p&gt;要发送消息，存在一个静态助手类来完成这件事。它需要一个消息的目标对象、一些用户特定数据、以及一个映射到你想要定位的消息接口中具体功能的算子作为参数。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecuteEvents.Execute&amp;lt;ICustomMessageTarget&amp;gt;(target, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, (x,y)=&amp;gt;x.Message1());
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此代码将在实现ICustomMessageTarget接口的GameObject目标上的任何组件上执行Message1函数。ExecuteEvents类的脚本文档覆盖了Execute函数的其他形式，比如在子元素或者父元素中执行。&lt;/p&gt;
&lt;h4 id=&#34;input-modules输入模块&#34;&gt;Input Modules(输入模块) &lt;a href=&#34;#input-modules%e8%be%93%e5%85%a5%e6%a8%a1%e5%9d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;输入模块是可以配置和自定义事件系统主要逻辑的地方。打开即用的有两个输入模块，一个设计用于独立设备，一个设计用于触摸输入。每个模块都会按照你在所给配置上所预期的那样接收和派发事件。&lt;/p&gt;
&lt;p&gt;输入模块是事件系统的&amp;rsquo;业务逻辑&amp;rsquo;发生的地方。当启用事件系统时，它会查看附加了哪些输入模块，并把更新处理传递给特定模块。&lt;/p&gt;
&lt;p&gt;输入模块设计为基于你希望支持的输入系统来进行扩展或修改。它们的目的是将硬件特定输入（如触摸、摇杆、鼠标、运动控制器）映射成通过消息系统发送的事件。&lt;/p&gt;
&lt;p&gt;内置的输入模块被设计为支持常见的游戏配置，例如触摸输入、控制器输入、键盘输入和鼠标输入。如果你在你的MonoBehaviours上实现了特定的接口，它们会向应用程序中的控件发送各种各样的事件。所有的UI组件都实现了对于给定组件来说有意义的接口。&lt;/p&gt;
&lt;h4 id=&#34;supported-events支持事件&#34;&gt;Supported Events(支持事件) &lt;a href=&#34;#supported-events%e6%94%af%e6%8c%81%e4%ba%8b%e4%bb%b6&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;事件系统支持多个事件，用户还可以在自定义的输入模块中进一步定制这些事件。&lt;/p&gt;
&lt;p&gt;由独立输入模块和触摸输入模块支持的事件是通过接口提供的，可以通过实现接口在MonoBehaviour上实现。如果你配置了有效的事件系统，那么这些事件将在正确的时间被调用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPointerEnterHandler - OnPointerEnter - 当指针进入对象时被调用&lt;/li&gt;
&lt;li&gt;IPointerExitHandler - OnPointerExit - 当指针退出对象时被调用&lt;/li&gt;
&lt;li&gt;IPointerDownHandler - OnPointerDown - 当在对象上按下指针时被调用&lt;/li&gt;
&lt;li&gt;IPointerUpHandler - OnPointerUp - 当指针释放时被调用(在点击指针的游戏物体上调用)&lt;/li&gt;
&lt;li&gt;IPointerClickHandler - OnPointerClick - 当在同一对象上按下并释放指针时被调用&lt;/li&gt;
&lt;li&gt;IInitializePotentialDragHandler - OnInitializePotentialDrag - 当找到拖动目标时被调用，可以用来初始化值&lt;/li&gt;
&lt;li&gt;IBeginDragHandler - OnBeginDrag - 在拖动即将开始时在拖动对象上调用&lt;/li&gt;
&lt;li&gt;IDragHandler - OnDrag - 在拖动发生时在拖动对象上被调用&lt;/li&gt;
&lt;li&gt;IEndDragHandler - OnEndDrag - 拖动结束时在拖动对象上被调用&lt;/li&gt;
&lt;li&gt;IDropHandler - OnDrop - 在拖动结束的对象上被调用&lt;/li&gt;
&lt;li&gt;IScrollHandler - OnScroll - 当鼠标滚轮滚动时被调用&lt;/li&gt;
&lt;li&gt;IUpdateSelectedHandler - OnUpdateSelected - 在每个时钟周期内选定的对象上被调用&lt;/li&gt;
&lt;li&gt;ISelectHandler - OnSelect - 当对象成为选定的对象时被调用&lt;/li&gt;
&lt;li&gt;IDeselectHandler - OnDeselect - 当选中的对象变为非选中状态时被调用&lt;/li&gt;
&lt;li&gt;IMoveHandler - OnMove - 当移动事件发生时被调用（左，右，上，下）&lt;/li&gt;
&lt;li&gt;ISubmitHandler - OnSubmit - 当提交按钮被按下时被调用&lt;/li&gt;
&lt;li&gt;ICancelHandler - OnCancel - 当取消按钮被按下时被调用&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;raycasters射线投射器&#34;&gt;Raycasters(射线投射器) &lt;a href=&#34;#raycasters%e5%b0%84%e7%ba%bf%e6%8a%95%e5%b0%84%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;事件系统需要一种方法来检测当前的输入事件需要发送到哪里，这就是射线投射器提供的功能。给定一个屏幕空间位置，它们将收集所有潜在的目标，判断它们是否在给定位置下方，然后返回离屏幕最近的对象。有几种类型的射线投射器提供：&lt;/p&gt;
&lt;p&gt;图形射线投射器 - 用于UI元素，存在于画布上并在画布中进行搜索&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2D物理射线投射器 - 用于2D物理元素&lt;/li&gt;
&lt;li&gt;物理射线投射器 - 用于3D物理元素&lt;/li&gt;
&lt;li&gt;当场景中存在并启用了射线投射器时，事件系统在从输入模块发出查询时将使用它&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果使用了多个射线投射器，则他们所有人都将被投射，结果将根据元素到距离进行排序&lt;/p&gt;
&lt;h3 id=&#34;reference参考&#34;&gt;Reference(参考) &lt;a href=&#34;#reference%e5%8f%82%e8%80%83&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;h4 id=&#34;rect-transform&#34;&gt;Rect Transform &lt;a href=&#34;#rect-transform&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;Rect Transform组件是Transform组件的2D布局对应物。其中Transform代表单个点，Rect Transform代表UI元素可以放置其中的矩形。如果Rect Transform的父级也是一个Rect Transform，子Rect Transform也可以指定它相对于父矩形的位置和大小应如何设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_RectTransform_3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pos (X, Y, Z)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;矩形的旋转中心点相对于锚点的位置。旋转中心点是矩形旋转的位置。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Width/Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;矩形的宽度和高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Left, Top, Right, Bottom&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;矩形边缘相对于其锚点的位置。这可以被认为是在由锚点定义的矩形内部的填充。当锚点分开时（如下所示），此项将代替“位置（Pos）”和“宽度/高度（Width/Height）”。要访问这些选项，请点击RectTransform组件左上角的方形锚点预设（Anchor Presets）框。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Anchors&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;矩形左下角和右上角的锚点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Min&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义为父矩形大小的一部分的矩形左下角的锚点。0,0 对应于锚定到父矩形的左下角，而 1,1 对应于锚定到父矩形的右上角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义为父矩形大小的一部分的矩形右上角的锚点。0,0 对应于锚定到父矩形的左下角，而 1,1 对应于锚定到父矩形的右上角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pivot&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;矩形旋转的围绕点位置，定义为矩形本身大小的一部分。0,0 对应于左下角，而 1,1 对应于右上角。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rotation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对象围绕其枢轴点沿X、Y和Z轴旋转的角度（以度为单位）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在X、Y和Z维度上应用于对象的缩放因子。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Blueprint Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;就像它们没有被旋转和缩放一样编辑RectTransforms。这也启用了吸附功能。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Raw Edit Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当启用时，编辑轴心和锚点值将不会对矩形的位置和大小进行反向调整，以使其保持在一个地方。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;请注意，某些RectTransform的计算是在帧的结束时进行的，就在计算UI顶点之前，以确保它们与整个帧期间进行的所有最新变化保持同步。这意味着它们在执行Start和第一次执行Update还未首次计算。&lt;/p&gt;
&lt;p&gt;您可以通过创建一个Start()其中添加Canvas.ForceUpdateCanvases()方法来解决这个问题。这将迫使Canvas不是在帧的结束时更新，而是在调用该方法时更新。&lt;/p&gt;
&lt;h4 id=&#34;canvas-components&#34;&gt;Canvas Components &lt;a href=&#34;#canvas-components&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;h5 id=&#34;canvas-1&#34;&gt;Canvas &lt;a href=&#34;#canvas-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Canvas组件代表了UI布局和渲染的抽象空间。所有的UI元素都必须是具有附加了Canvas组件的游戏对象的子对象。当你从菜单中创建一个UI元素对象(GameObject &amp;gt; Create UI)时，如果场景中还没有Canvas对象，将自动创建一个Canvas对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasScreenSpaceCameraInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasWorldSpaceInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Render Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;UI呈现到屏幕上或者作为3D空间中的对象的方式。 &lt;em&gt;Screen Space - Overlay&lt;/em&gt;、&lt;em&gt;Screen Space - Camera&lt;/em&gt; 和&lt;em&gt;World Space&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pixel Perfect (Screen Space modes only)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是否应该为了精确而无抗锯齿地渲染UI？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Render Camera (Screen Space - Camera mode only)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;UI应该渲染到哪个相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Plane Distance (Screen Space - Camera mode only)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;UI平面应该放置在相机前方的距离。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Event Camera (World Space mode only)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将用于处理UI事件的相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Receives Events&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Canvas处理UI事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对所有UI元素来说，一个Canvas就足够了，但是场景中有多个Canvas也是可能的。也可以使用嵌套Canvas，也就是将一个Canvas作为另一个Canvas的子对象用于优化。嵌套的Canvas使用与其父对象相同的渲染模式。&lt;/p&gt;
&lt;p&gt;传统上，UI被渲染得就像是直接绘制在屏幕上的简单图形设计一样。也就是说，它们没有被摄像机观察的3D空间的概念。Unity支持这种屏幕空间渲染，但也允许UI作为场景中的对象进行渲染，这取决于渲染模式属性的值。可用的模式有Screen Space - Overlay、Screen Space - Camera 和World Space。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screen Space - Overlay&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在这种模式下，Canvas将会调整大小以适应屏幕，然后直接渲染，无需参考场景或摄像机(即使场景中完全没有摄像机，UI也会被渲染)。如果屏幕的大小或分辨率发生变化，UI将自动重新调整大小以适应。UI将会绘制在其他任何图形（如相机视图）之上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/CanvasOverlay.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;注意：Screen Space - Overlay模式下的Canvas需要被存储在层级结构的顶部。如果不这样做，UI可能会从视图中消失。这是一个内置的限制。请将Screen Space - Overlay的Canvas保持在层级结构的顶层，以得到预期的结果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Screen Space - Camera&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在这种模式下，Canvas被渲染得就像它是在距离给定摄像机一定距离的平面上绘制的。UI在屏幕上的大小并不会随着距离的变化而变化，因为它总是重新调整大小以完全适应摄像机的视锥体。如果屏幕的大小、分辨率或摄像机的视锥体发生了变化，那么UI将自动重新调整大小以适应。场景中距离摄像机比UI平面更近的3D对象将会渲染在UI的前面，而平面后面的对象会被遮挡。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/CanvasCamera.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;World Space&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这种模式将UI渲染得就像它是场景中的一个平面对象。然而，与Screen Space - Camera模式不同，这个平面并不需要面向摄像机，可以按照你喜欢的方式进行定向。Canvas的大小可以通过它的矩形变换进行设置，但它在屏幕上的大小将取决于摄像机的观察角度和距离。其它的场景对象可以经过Canvas的后面，穿过或者在Canvas的前面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/CanvasWorldSpace.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h5 id=&#34;canvas-scaler&#34;&gt;Canvas Scaler &lt;a href=&#34;#canvas-scaler&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Canvas Scaler组件用于控制Canvas中UI元素的整体比例和像素密度。这个缩放影响Canvas下的所有内容，包括字体大小和图片边框。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasScalerInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;UI Scale Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定Canvas中的UI元素如何进行缩放。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constant Pixel Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;让UI元素保持相同的像素大小，不论屏幕大小如何。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale With Screen Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;屏幕越大，UI元素就会越大。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constant Physical Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;让UI元素保持相同的物理大小，不论屏幕大小和分辨率如何。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Constant Pixel Size设置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scale Factor&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;通过这个因子来缩放画布中的所有UI元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reference Pixels Per Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果一个精灵设置了这个“Pixels Per Unit”，那么精灵中的一个像素将会覆盖UI中的一个单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Scale With Screen Size设置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reference Resolution&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是UI布局设计的分辨率。如果屏幕分辨率更大，UI将被放大，如果分辨率更小，UI将被缩小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Screen Match Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果当前分辨率的宽高比不符合参考分辨率，则使用此模式来缩放画布区域。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Match Width or Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据宽度、高度或其间的某种值来缩放画布区域。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Expand&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;横向或纵向扩展画布区域，因此画布的大小永远不会小于参考值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Shrink&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;横向或纵向裁剪画布区域，因此画布的大小永远不会大于参考值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Match&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定缩放是否以宽度或高度为参考，或者是两者之间的混合。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reference Pixels Per Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果一个精灵有这个“Pixels Per Unit”设置，那么精灵中的一个像素将覆盖UI中的一个单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Constant Physical Size设置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Physical Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用来指定位置和大小的物理单位。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fallback Screen DPI&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果屏幕DPI未知，应假定的DPI值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Default Sprite DPI&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于具有“Pixels Per Unit”设置的精灵，该设置与“Reference Pixels Per Unit”设置匹配的每英寸像素数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reference Pixels Per Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果一个精灵有这个“Pixels Per Unit”设置，那么它的DPI将匹配“Default Sprite DPI”设置。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;World Space Canvas设置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Dynamic Pixels Per Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于UI中动态创建的位图，如文本的单位像素数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Reference Pixels Per Unit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果一个精灵有这个&amp;rsquo;Pixels Per Unit&amp;rsquo;设置，那么在精灵中的一个像素将覆盖世界中的一个单位。如果&amp;rsquo;Pixels Per Unit&amp;rsquo;设置为1，那么在精灵中的&amp;rsquo;单位像素&amp;rsquo;设置将完全按照原样使用。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;对于设置为“Screen Space - Overlay”或“Screen Space - Camera”的Canvas，Canvas Scaler UI缩放模式可以设置为Constant Pixel Size，Scale With Screen Size或Constant Physical Size。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constant Pixel Size&lt;/strong&gt;
使用Constant Pixel Size模式，UI元素的位置和大小以屏幕上的像素为单位。当Canvas Scaler未附加时，这也是Canvas的默认功能。然而，可以通过Canvas Scaler的缩放因子设置为Canvas中的所有UI元素提供一种恒定的缩放。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scale With Screen Size&lt;/strong&gt;
使用Scale With Screen Size模式，可以根据指定的参考分辨率的像素来指定位置和大小。如果当前屏幕分辨率大于参考分辨率，Canvas将保留参考分辨率的分辨率，但将放大以适应屏幕。如果当前屏幕分辨率小于参考分辨率，Canvas将同样缩小以适应。&lt;/p&gt;
&lt;p&gt;如果当前屏幕分辨率的宽高比与参考分辨率不同，将分别缩放每个轴以适应屏幕将导致非均匀的缩放，这通常是不期望的。因此，ReferenceResolution组件会让Canvas分辨率偏离参考分辨率，以保持屏幕的宽高比。Screen Match Mode设置可以控制这种偏差的行为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Constant Physical Size&lt;/strong&gt;
使用Constant Physical Size模式，UI元素的位置和大小以物理单位（如毫米、点或点刻）指定。这种模式依赖于设备正确报告其屏幕DPI。您可以为不报告DPI的设备指定一种备选的DPI。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;World Space&lt;/strong&gt;
对于设置为&amp;rsquo;World Space&amp;rsquo;的Canvas，Canvas Scaler可以用来控制Canvas中UI元素的像素密度。&lt;/p&gt;
&lt;h5 id=&#34;canvas-group&#34;&gt;Canvas Group &lt;a href=&#34;#canvas-group&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Canvas Group可以用来从一个地方控制一整组UI元素的某些方面，无需单独处理每一个元素。Canvas Group的属性会影响它所在的GameObject以及所有的子元素。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasGroupInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Alpha&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此组中UI元素的透明度。值在0和1之间，其中0表示完全透明，1表示完全不透明。注意，元素本身也保持其透明度，因此Canvas Group的alpha值和单个UI元素的alpha值会相互乘以。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定此组件是否接受输入。当设置为false时，交互功能将被禁用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Block Raycasts&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此组件是否将充当Raycasts的碰撞器？你需要在附加到Canvas的图形射线投射器上调用RayCast函数。这不适用于Physics.Raycast。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ignore Parent Groups&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组是否会受到游戏对象层次结构中更上层Canvas Group组件设置的影响，或者它会忽略这些设置，从而覆盖它们？&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Canvas Group的典型用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过在窗口的GameObject上添加Canvas Group，控制其Alpha属性，实现整个窗口的淡入或淡出。&lt;/li&gt;
&lt;li&gt;通过在父GameObject上添加Canvas Group，并将其Interactable属性设置为false，使一整套控件无法交互（变灰）。&lt;/li&gt;
&lt;li&gt;通过在元素或其父元素上放置Canvas Group组件，并将其Block Raycasts属性设置为false，使一个或多个UI元素不阻止鼠标事件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;canvas-renderer&#34;&gt;Canvas Renderer &lt;a href=&#34;#canvas-renderer&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Canvas Renderer组件渲染包含在Canvas内的图形UI对象。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_CanvasRendererInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;菜单中可用的标准UI对象（GameObject &amp;gt; Create UI）在需要的地方都已附加Canvas Renderer，但您可能需要为自定义UI对象手动添加此组件。虽然检查器中没有公开的属性，但可以从脚本中访问一些属性和函数。&lt;/p&gt;
&lt;h4 id=&#34;visual-components-1&#34;&gt;Visual Components &lt;a href=&#34;#visual-components-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;h5 id=&#34;text-1&#34;&gt;Text &lt;a href=&#34;#text-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Text控件向用户显示非交互式的文本。这可以用于为其他GUI控件提供标题或标签，或者展示指令或其他文本。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_TextInspector2_1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控件显示的文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Character&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Font&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于显示文本的字体。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Font Style&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;应用于文本的样式。选项有&lt;em&gt;Normal&lt;/em&gt;（正常）、&lt;em&gt;Bold&lt;/em&gt;（粗体）、&lt;em&gt;Italic&lt;/em&gt;（斜体）和&lt;em&gt;Bold And Italic&lt;/em&gt;（粗斜体）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Font Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;显示文本的大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Line Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;文本行之间的垂直间隔。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Rich Text&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;文本中的标记元素是否应被解释为富文本样式？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Paragraph&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;文本的水平和垂直对齐。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Align by Geometry&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用字形几何的范围来执行水平对齐，而不是字形度量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal Overflow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;处理文本过宽无法适应矩形的情况的方法。选项有 &lt;em&gt;Wrap&lt;/em&gt; 和 &lt;em&gt;Overflow&lt;/em&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical Overflow&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;处理折行文本过高无法适应矩形的情况的方法。选项有 &lt;em&gt;Truncate&lt;/em&gt; 和 &lt;em&gt;Overflow&lt;/em&gt;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Best Fit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity是否应忽略大小属性，而只是试图使文本适应控件的矩形？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于渲染文本的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Material&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于渲染文本的材质。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一些控件（如Buttons和Toggles）具有内置的文本描述。对于没有隐式文本的控件（如Sliders），你可以使用文本控件创建的标签来指示其用途。文本也适用于指令列表、故事文本、对话和法律免责声明。&lt;/p&gt;
&lt;p&gt;文本控件提供了常见的字体大小、样式等参数，以及文本对齐方式。当启用富文本选项时，文本内的标记元素将被视为样式信息，因此你可以让单个词汇或短小的部分以粗体或不同的颜色显示。&lt;/p&gt;
&lt;h5 id=&#34;image-1&#34;&gt;Image &lt;a href=&#34;#image-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Image控件向用户展示一个非交互式的图片。你可以用它来作为装饰或图标，而且你可以通过脚本改变图片以反映其他控件的变化。该控件类似于原始图像控件，但是提供了更多的选项来动态渲染图像和精确填充控件矩形。然而，图像控件需要其贴图为精灵，而原始图像可以接受任何贴图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/ImageCtrlExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ImageInspector_1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Source Image&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;表示要显示的图像的贴图（必须导入为精灵）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;应用于图像的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Material&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于渲染图像的材质。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Raycast Target&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您希望Unity将图像视为射线投射的目标，请启用“Raycast Target”。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preserve Aspect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确保图像保持其现有尺寸。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Set Native Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将图像框的尺寸设置为纹理的原始像素大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;您必须将要显示的图像导入为Sprite，才能与Image控件一起使用。&lt;/p&gt;
&lt;h5 id=&#34;raw-image-1&#34;&gt;Raw Image &lt;a href=&#34;#raw-image-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Raw Image控件向用户显示一个非互动的图像。您可以用它做装饰或图标等用途，而且可以通过脚本改变图像以反映其他控件的变化。该控件与Image控件相似，但为图像的动画提供了更多的选项，并能准确地填充控件矩形。然而，Image控件要求其Texture为Sprite，而Raw Image可以接受任何Texture。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/RawImageCtrlExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_RawImageInspector184.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Texture&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;表示要显示的图像的纹理。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;应用于图像的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Material&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于渲染图像的材质。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Raycast Target&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果您希望Unity将图像视为射线投射的目标，请启用“Raycast Target”。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;UV Rectangle&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;图像在控件矩形内的偏移和大小，以标准化坐标（范围0.0到1.0）给出。图像的边缘被拉伸以填充UV矩形周围的空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;由于Raw Image不需要精灵纹理，您可以使用它来显示Unity播放器可以获取到的任何纹理。例如，您可能会显示使用WWW类从URL下载的图像，或者显示游戏中对象的纹理。&lt;/p&gt;
&lt;p&gt;UV矩形属性允许您显示较大图像的一小部分。X和Y坐标指定图像的哪个部分与控件的左下角对齐。例如，X坐标0.25 会截掉图像最左边的四分之一。W和H（也就是，宽度和高度）属性指示将要缩放以适应控件矩形的图像部分的宽度和高度。例如，宽度和高度为0.5将会将图像区域的四分之一放大到控件矩形。通过更改这些属性，您可以根据需要进行图像的缩放和调整大小（参见Scrollbar控件）。&lt;/p&gt;
&lt;h5 id=&#34;mask-1&#34;&gt;Mask &lt;a href=&#34;#mask-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Mask并不是一个可见的UI控件，而是一种修改控件子元素外观的方法。遮罩（即:“mask”）将子元素限制在父元素的形状内。因此，如果子元素大于父元素，那么只有符合父元素的子元素部分才会可见。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MaskCtrlExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MaskInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Show Graphic&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;遮罩（父对象）的图形是否应该以透明度的形式覆盖在子对象之上？&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Description (描述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;遮罩的一个常见用途是使用例如面板对象（menu: GameObject &amp;gt; Create UI &amp;gt; Panel）作为“框架”，来显示大图像的小部分。您可以首先将图像指定为面板对象的子对象来实现这一点。您应该将图像定位到面板区域后面应该可见的区域。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MaskDisabled.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;然后，向面板添加Mask组件。由于被面板的形状遮挡，子图像在面板外的区域将变得不可见。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/MaskEnabled.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;如果随后移动图像，则只有面板揭示的部分将会可见。这种移动可以通过滚动条来控制，例如创建一个可滚动的地图查看器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementation(实现原理)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;遮罩是使用GPU的模板缓冲器来实现的。&lt;/p&gt;
&lt;p&gt;*第一个遮罩元素将1写入模板缓冲器 *所有遮罩下面的元素在渲染时进行检查，仅在模板缓冲器中有1的区域呈现 *嵌套的遮罩会将递增的位掩码写入缓冲器，这意味着可渲染的子项需要具有模板值的逻辑与才能被渲染。&lt;/p&gt;
&lt;h5 id=&#34;rectmask2d&#34;&gt;RectMask2D &lt;a href=&#34;#rectmask2d&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;RectMask2D是一个与Mask控件类似的遮罩控制器。该遮罩将子元素限制在父元素的矩形内。与标准的遮罩控件不同，它有一些限制，但是它也有许多性能优势。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description(描述)&lt;/strong&gt;
RectMask2D的一个常见用途是显示较大区域的小部分。使用RectMask2D来框定这个区域。&lt;/p&gt;
&lt;p&gt;RectMask2D控件的限制包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它只在2D空间内工作&lt;/li&gt;
&lt;li&gt;它不能正确地遮盖不在同一平面上的元素&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RectMask2D的优点包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它不使用模板缓冲器&lt;/li&gt;
&lt;li&gt;没有额外的绘制调用&lt;/li&gt;
&lt;li&gt;无需改变材质&lt;/li&gt;
&lt;li&gt;性能快速&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;ui-effect-components&#34;&gt;UI Effect Components &lt;a href=&#34;#ui-effect-components&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;h5 id=&#34;shadow&#34;&gt;Shadow &lt;a href=&#34;#shadow&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;阴影组件对图形组件（如文字或图片）添加了简单的轮廓效果。它必须与图形组件位于同一GameObject上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_TextExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ShadowExample.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ShadowInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Effect Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;阴影的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Effect Distance&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;阴影的偏移量，表示为一个向量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Graphic Alpha&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将图形的颜色乘以效果的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;outline&#34;&gt;Outline &lt;a href=&#34;#outline&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;轮廓组件为诸如Text或Image的图形组件添加了一个简单的轮廓效果。它必须和图形组件在同一个游戏对象上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_TextExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_OutlineExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_OutlineInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Effect Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;轮廓的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Effect Distance&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;轮廓效果在水平和垂直方向上的距离。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Graphic Alpha&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将图形的颜色与效果的颜色进行乘法运算。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;position-as-uv1&#34;&gt;Position as UV1 &lt;a href=&#34;#position-as-uv1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;这为文本和图像图形添加了一个简单的位置作为UV1的效果。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_PositionAsUV1Inspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;interaction-components-1&#34;&gt;Interaction Components &lt;a href=&#34;#interaction-components-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;h5 id=&#34;selectable-base-class&#34;&gt;Selectable Base Class &lt;a href=&#34;#selectable-base-class&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Selectable类是所有交互组件的基类，它处理的是那些公共的项。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这决定了这个组件是否会接受输入。当它被设定为false时，交互会被禁用，并且转换状态会被设定为禁用状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在一个可选组件内，有几个过渡选项，具体取决于可选组件当前处于什么状态。不同的状态有：正常，高亮，按压和禁用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;还有一些导航选项，用来控制如何实现控件的键盘导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h6 id=&#34;transition-options&#34;&gt;Transition Options &lt;a href=&#34;#transition-options&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h6&gt;&lt;p&gt;在一个可选择的组件中，根据可选择组件当前所处的状态，有几个不同的过渡选项。不同的状态有：正常，高亮，按压和禁用。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableTransition.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;过度选项:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个选项是让按钮完全没有状态效果。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Color Tint&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据按钮所处的状态更改按钮的颜色。可以为每个独立的状态选择颜色。也可以设置不同状态之间的淡入淡出时间。数字越高，颜色间的淡入淡出变化就越慢。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sprite Swap&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;允许根据按钮当前所处的状态显示不同的精灵图像，这些精灵图像可以自定义。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Animation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;允许根据按钮的状态进行动画展示，为了使用动画过渡，必须存在一个动画器组件。确保禁用根运动是很重要的。要创建一个动画控制器，点击生成动画（或者创建你自己的），并确保一个动画控制器已经被添加到按钮的动画器组件中。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Color Tint&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableColorTint.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Target Graphic&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;交互组件所使用的图形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Normal Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控件的正常颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Highlighted Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被高亮时的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pressed Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被按下时的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disabled Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被禁用时的颜色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Color Multiplier&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这会将每次过渡的色彩和它的值相乘。通过这种方式，你可以创建大于1的颜色，以增亮那些基础颜色小于白色（或者透明度小于满透明度）的图形元素上的颜色（或者透明度）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fade Duration&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以秒为单位，从一个状态过渡到另一个状态所需的时间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Sprite Swap&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableSpriteSwap.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Target Graphic&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;要使用的普通精灵。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Highlighted Sprite&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被高亮时使用的精灵。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pressed Sprite&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被按下时使用的精灵。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disabled Sprite&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被禁用时使用的精灵。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Animation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableAnimation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Normal Trigger&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;使用的正常动画触发器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Highlighted Trigger&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被高亮时使用的触发器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Pressed Trigger&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被按下时使用的触发器。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Disabled Trigger&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当控件被禁用时使用的触发器。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h6 id=&#34;navigation-options&#34;&gt;Navigation Options &lt;a href=&#34;#navigation-options&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h6&gt;&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableNavigation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;导航选项指的是如何控制游戏模式下UI元素的导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;没有键盘导航。同时确保它不会因点击/轻触而接收焦点。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;实现水平导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;实现垂直导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Automatic&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;自动导航。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Explicit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在此模式下，你可以明确指定控件在按下不同方向键时的导航路径。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Visualize&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选择&amp;quot;可视化&amp;quot;会在场景窗口中给你展示你已经设置的导航的可视化表示。请看下图。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SelectableNavigationExplicit.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/GUIVisualizeNavigation.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在上述的可视化模式中，箭头指示了一组控件的焦点变化方式。也就是说，对于每一个独立的UI控件，你可以看到当某个控件被选中时，用户按下一个方向键后，哪个UI控件将会接下来获得焦点。所以在上面的例子中，如果&amp;quot;按钮&amp;quot;获得了焦点，用户按下了右箭头键，那么第一个（左边的）竖直滑动器将会接下来获得焦点。需要注意的是，因为竖直滑动器控制着滑动器的值，所以竖直滑动器不能通过上或下的键跳转焦点。同样，水平滑动器也不能通过左/右箭头键跳转焦点。&lt;/p&gt;
&lt;h5 id=&#34;button-1&#34;&gt;Button &lt;a href=&#34;#button-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;按钮控件响应用户的点击，用于开始或确认一个动作。熟悉的例子包括网页表单上使用的提交和取消按钮。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ButtonExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ButtonInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果你希望这个按钮能接受输入，就启用&amp;quot;可交互&amp;rdquo;。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件如何在视觉上响应用户操作的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定控件序列的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Click&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unity在用户点击按钮并释放时调用的UnityEvent。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;按钮被设计为在用户点击并释放时触发一个动作。如果在释放点击之前鼠标被移出按钮控件，动作就不会发生。&lt;/p&gt;
&lt;p&gt;按钮有一个叫做点击事件(On Click)的事件，当用户完成点击时会响应。典型的用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;确认一个决定（例如，开始游戏或者保存游戏）&lt;/li&gt;
&lt;li&gt;在GUI中移动到子菜单&lt;/li&gt;
&lt;li&gt;取消正在进行的动作（例如，下载一个新的场景）&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;toggle-1&#34;&gt;Toggle &lt;a href=&#34;#toggle-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Toggle控件是一个复选框，允许用户开启或关闭一个选项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组件会接受输入吗？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件如何视觉上响应用户操作的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件序列的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Is On&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换按钮是否从一开始就处于开启状态？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Toggle Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;切换按钮在其值改变时的图形反应方式。选项包括无（即，勾选标记简单地出现或消失）和淡出（即，勾选标记会淡入或淡出）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Graphic&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于勾选标记的图像。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Group&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个切换按钮所属的切换按钮组（如果有的话）。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当切换按钮被点击时调用的Unity事件。该事件可以将当前状态作为bool类型的动态参数发送。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;切换控制允许用户开启或关闭选项。你也可以将多个切换按钮组合到一个切换按钮组中，当一组选项中只应有一个被开启时。&lt;/p&gt;
&lt;p&gt;切换按钮有一个单一事件叫做&amp;quot;值变更时&amp;quot;，当用户改变当前值时该事件会作出响应。新的值会作为一个布尔参数传递给事件函数。切换开关的典型用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开启或关闭选项（例如，游戏时播放音乐）。&lt;/li&gt;
&lt;li&gt;让用户确认他们已阅读法律免责声明。&lt;/li&gt;
&lt;li&gt;在切换按钮组中选择一组选项中的一个（例如，一周中的某一天）。&lt;/li&gt;
&lt;li&gt;注意，切换按钮是一个为子元素提供可点击区域的父元素。如果切换按钮没有子元素（或者它们被禁用），则它不可点击。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;toggle-group-1&#34;&gt;Toggle Group &lt;a href=&#34;#toggle-group-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Toggle Group并不是一个可见的UI控件，而是一种修改一组切换按钮行为的方式。属于同一组的切换按钮被约束在同一时间只能有一个被开启 - 按下其中一个以开启它会自动关闭其他的切换按钮。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleGroupExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ToggleGroupInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Allow Switch Off&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是否允许没有任何切换按钮被开启？如果启用此设置，按下当前开启的切换按钮将关闭它，使得没有切换按钮被开启。如果禁用此设置，按下当前开启的切换按钮将不会改变其状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过将Toggle Group对象拖拽到组内每个切换按钮的Group属性中来建立切换按钮组。&lt;/p&gt;
&lt;p&gt;Toggle Group在用户必须从互斥的选项集中做出选择的任何地方都很有用。常见的例子包括选择玩家角色类型，速度设置（慢，中，快等），预设颜色和一周中的某一天。你可以在场景中一次拥有多个切换按钮组对象，所以如果必要，你可以创建多个独立的组。&lt;/p&gt;
&lt;p&gt;与其他UI元素不同，带有Toggle Group组件的对象不需要是一个画布对象的子对象，尽管切换按钮自身仍然需要这样。&lt;/p&gt;
&lt;p&gt;请注意，如果场景加载或实例化组时组内多个切换按钮被开启，Toggle Group不会立刻执行约束。只有当一个新的切换按钮被开启时，其他的才会被关闭。这意味着你需要确保只有一个切换按钮从一开始就被开启。&lt;/p&gt;
&lt;h5 id=&#34;slider-1&#34;&gt;Slider &lt;a href=&#34;#slider-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Slider控件允许用户通过拖动鼠标从预设范围内选择一个数值。请注意，类似的ScrollBar控件被用于滚动，而不是选择数值。熟悉的例子包括游戏中的难度设置和图片编辑器中的亮度设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SliderExample_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_SliderInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组件会接受输入吗？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件对用户操作在视觉上响应方式的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件序列的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fill Rect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;控件填充区域使用的图形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Handle Rect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滑块控件的&amp;quot;handle&amp;quot;部分所使用的图形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Direction&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当把手被拖动时，滑块值增加的方向。选项有从左到右，从右到左，从下到上和从上到下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Min Value&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当滑块把手位于最低端（由方向属性决定）时，Slider的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Max Value&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当滑块把手位于最高端（由方向属性决定）时，Slider的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Whole Numbers&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Slider的值是否应限制为整数值？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Slider的当前数值。如果在检查器中设定了值，它将被用作初始值，但是当数值变动时，该值将在运行时改变。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当Slider的当前值发生变化时，将会触发一个UnityEvent。这个事件可以将当前值作为浮点型的动态参数发送。无论是否启用了“Whole Numbers”（整数值）属性，该值都会以浮点型传递。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Slider的值是由其手柄沿其长度的位置决定的。随着手柄被拖动的距离增加，值会从最小值增加到最大值。默认的行为是让Slider从左到右增加，但也可以使用“Direction”（方向）属性来反转这种行为。你还可以通过为“Direction”属性选择“Bottom To Top”（从底部到顶部）或“Top To Bottom”（从顶部到底部）以设置滑块垂直增加。&lt;/p&gt;
&lt;p&gt;Slider有一个名为“On Value Changed”（数值改变时）的单一事件，当用户拖动手柄时会触发。滑块的当前数值会作为浮点型参数传递给这个函数。典型的使用案例包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;选择游戏的难度级别，灯光的亮度等。&lt;/li&gt;
&lt;li&gt;设置距离、大小、时间或角度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;scrollbar-1&#34;&gt;Scrollbar &lt;a href=&#34;#scrollbar-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Scrollbar控件允许用户滚动过大以至于无法完全看见的图像或其他视图。请注意，类似的Slider控件被用于选择数值，而不是滚动。熟悉的例子包括文本编辑器侧边的垂直滚动条，以及用于查看大图像或地图的一部分的垂直和水平对的滚动条。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollbarExample_3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollBarInspector_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组件会接受输入吗？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件对用户操作在视觉上反馈方式的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;决定控件序列的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fill Rect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于控件的背景区域的图形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Handle Rect&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于控件滑动&amp;quot;handle&amp;quot;部分的图形。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Direction&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当操作句柄被拖动时，滚动条值将以哪种方向增加。选项有从左到右，从右到左，从下到上和从上到下。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滚动条的初始位置值，范围在0.0到1.0之间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滚动条中手柄的部分大小，范围在0.0到1.0之间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Number Of Steps&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滚动条允许的不同滚动位置的数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当滚动条的当前值发生变化时调用的UnityEvent。该事件可以将值发送为float类型的动态参数。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;滚动条的值由手柄沿其长度的位置确定，该值被报告为极端末端之间的一部分。例如，默认的从左到右的条有一个0.0在左端，1.0在右端，0.5表示中点。可以通过为方向属性选择从上到下或从下到上来使滚动条垂直定向。&lt;/p&gt;
&lt;p&gt;滚动条与类似的滑块控件之间的一个重要区别是滚动条的手柄可以改变尺寸以表示可滚动的距离；当视图只能滚动很短的距离时，手柄会占满大部分条形，只允许稍微向任一方向移动。&lt;/p&gt;
&lt;p&gt;滚动条有一个称为“值改变时”的单一事件，该事件在用户拖动手柄时响应。当前值作为浮点参数传递给事件函数。滚动条的典型用途包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;垂直滚动一段文本。&lt;/li&gt;
&lt;li&gt;水平滚动时间线。&lt;/li&gt;
&lt;li&gt;成对使用时，可以水平和垂直滚动大图像，以查看放大的部分。手柄的大小改变以指示缩放的程度，从而指示可滚动的距离。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;dropdown-1&#34;&gt;Dropdown &lt;a href=&#34;#dropdown-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;下拉菜单可以用来让用户从选项列表中选择一个单一的选项。&lt;/p&gt;
&lt;p&gt;该控件显示当前选择的选项。一旦点击，它会打开选项列表，以便可以选择新的选项。选择新选项后，选项列表再次关闭，控件显示新选择的选项。如果用户点击控件本身，或者画布内的任何其他地方，列表也会关闭。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownExample_1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownExampleOpen.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Interactable&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组件会接受输入吗？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定控件对用户操作的视觉反应方式的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Navigation&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定控件序列的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Template&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;下拉列表的模板的Rect Transform。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Caption Text&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于保存当前选定选项文本的Text组件。（可选）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Caption Image&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于保存当前选定选项图片的Image组件。（可选）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Item Text&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于保存项目文本的Text组件。（可选）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Item Image&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;用于保存项目图片的Image组件。（可选）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Value&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当前选择选项的索引。0代表第一个选项，1代表第二个，以此类推。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Options&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可能的选项列表。每个选项都可以指定一个文本字符串和一个图片。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当用户点击下拉列表中的一个选项时，会触发的UnityEvent事件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;选项列表可以在Inspector中指定，或者可以通过代码进行赋值。每个选项都可以指定一个文本字符串，如果Dropdown支持的话，还可以选择性地指定一个图片。&lt;/p&gt;
&lt;p&gt;按钮有一个名为“On Value Changed”的事件，当用户完成对列表中某个选项的点击时触发。它支持发送一个整数值，这个值是所选选项的索引。0代表第一个选项，1代表第二个，以此类推。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The template system&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dropdown控件被设计为拥有一个子GameObject，该GameObject作为点击Dropdown控件时显示的下拉列表的模板。模板GameObject默认是不活跃的，但在编辑模板时可以让它活跃，以便更好地看到正在发生的事情。必须在Dropdown组件的Template属性中指定对模板对象的引用。&lt;/p&gt;
&lt;p&gt;模板必须有一个带有Toggle组件的项。当实际的下拉列表在点击Dropdown控件时被创建，这个项会被复制多次，列表中的每个选项都使用一个副本。项的父对象会自动调整大小，以便能够装下所有的项。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownHierarchySimple.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_DropdownHierarchyScrolling.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;模板可以通过许多不同的方式进行设置。由GameObject &amp;gt; UI &amp;gt; Dropdown菜单项使用的设置包括一个滚动视图，这样如果一次显示的选项太多，滚动条会出现，用户可以通过滚动条浏览选项。然而，这并不是模板设置的必要部分。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setup of text and image support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下拉菜单支持每个选项有一个文本内容和一个图片内容。文本和图片都是可选的。只有当Dropdown设置支持时，才能使用它们。&lt;/p&gt;
&lt;p&gt;当Caption Text和Item Text属性都设置时，下拉菜单支持每个选项的文本。当使用GameObject &amp;gt; UI &amp;gt; Dropdown菜单项时，默认会设置这些属性。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caption Text是用来放置当前选定选项文本的Text组件。它通常是Dropdown GameObject的子对象。&lt;/li&gt;
&lt;li&gt;Item Text是用来放置每个选项文本的Text组件。它通常是Item GameObject的子对象。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当Caption Image和Item Image属性都设置时，下拉菜单支持每个选项的图片。这些属性默认情况下不设置。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caption Image是用来放置当前选定选项图片的Image组件。它通常是Dropdown GameObject的子对象。&lt;/li&gt;
&lt;li&gt;Item Image是用来放置每个选项图片的Image组件。它通常是Item GameObject的子对象。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际用于下拉菜单的文本和图片在Dropdown组件的Options属性中指定，或者可以从代码中设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Placement of the dropdown list&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下拉列表相对于下拉控件的位置由模板的Rect Transform的锚点和枢轴决定。&lt;/p&gt;
&lt;p&gt;默认情况下，列表会显示在控件下方。通过将模板锚定在控件的底部来实现这一点。模板的枢轴也需要在顶部，这样当模板扩展以适应可变数量的选项项时，它只会向下扩展。&lt;/p&gt;
&lt;p&gt;Dropdown控件有简单的逻辑来防止下拉菜单显示在Canvas的边界外，因为这会使得选择某些选项变得不可能。如果默认位置的下拉菜单在Canvas的矩形内部完全看不见，它相对于控件的位置会翻转。例如，默认情况下显示在控件下方的列表会显示在它的上方。&lt;/p&gt;
&lt;p&gt;这种逻辑非常简单，有一定的限制。下拉菜单的模板不得大于Canvas大小的一半减去下拉控件的大小，否则如果下拉控件位于Canvas的中间，两个位置可能都没有足够的空间放置列表。&lt;/p&gt;
&lt;h5 id=&#34;input-field-1&#34;&gt;Input Field &lt;a href=&#34;#input-field-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;输入字段是一种使Text控件的文本可编辑的方法。像其他交互控件一样，它本身并非可见的UI元素，必须与一个或多个可视UI元素结合使用才能看见。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_InputFieldExample_4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_InputFieldExample2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_InputFieldInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Transition&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;确定控件对用户操作的视觉反应方式的属性。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;TextComponent&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;作为Input Field内容的Text元素的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;编辑开始前放置在字段中的初始文本。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Character Limit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;输入字段中可以输入的最大字符数的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Content Type&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义您的输入字段接受的字符类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Line Type&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义在文本字段内文本的格式化方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Placeholder&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是一个可选的“空”图形，用于显示输入字段中没有文本。请注意，即使输入字段被选中（也就是，当其被聚焦），这个“空”图形仍然会显示。例如：“Enter text&amp;hellip;”。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Caret Blink Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;定义用于指示建议插入文本的标记在行上的闪烁频率。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Selection Color&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;选中文本部分的背景色。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Hide Mobile Input (iOS only)&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在移动设备上隐藏与屏幕键盘关联的原生输入字段。请注意，这只在iOS设备上有效。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Change&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当输入字段的文本内容发生变化时，会调用一个UnityEvent。该事件可以将当前的文本内容作为字符串类型的动态参数发送。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;End Edit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当用户通过提交或点击某处从输入字段移除焦点以完成文本内容编辑时，会调用一个UnityEvent。该事件可以将当前的文本内容作为字符串类型的动态参数发送。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过菜单（Component &amp;gt; UI &amp;gt; Input Field），可以将输入字段脚本添加到任何已有的文本控件对象中。完成这项操作后，你还应将对象拖放到输入字段的文本属性上，以启用编辑功能。&lt;/p&gt;
&lt;p&gt;用户在输入过程中，文本控件自身的文本属性将会发生改变，编辑后可以从脚本中获取该值。请注意，富文本特意不支持可编辑的文本控件；字段在输入时会立即应用任何富文本标记，但标记基本上会“消失”，并且无法再改变或移除样式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hints(提示)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;若要获取输入字段的文本，请使用InputField组件本身的text属性，而不是显示文本的Text组件的text属性。Text组件的text属性可能会被裁剪，或者对于密码，可能由星号组成。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;scroll-rect&#34;&gt;Scroll Rect &lt;a href=&#34;#scroll-rect&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;当需要在一个小区域里显示占据大量空间的内容时，可以使用滚动矩形。滚动矩形提供了滚动此类内容的功能。&lt;/p&gt;
&lt;p&gt;通常滚动矩形会与遮罩组合使用，以创建一个只有滚动矩形内可滚动内容可见的滚动视图。它还可以额外地与一个或两个滚动条结合使用，这些滚动条可以拖动以水平或垂直滚动。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollRectExample_5.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollRectInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是对需要滚动的UI元素的矩形变换的引用，例如一个大图像。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用水平滚动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用垂直滚动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Movement Type&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无限制，弹性或者夹紧。使用弹性或夹紧可以强制内容保持在滚动矩形的边界内。当内容到达滚动矩形的边缘时，弹性模式会使内容反弹。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Elasticity&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这是弹性模式中使用的反弹量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Inertia&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当设置了惯性时，拖动后释放指针，内容会继续移动。当未设置惯性时，内容只有在拖动时才会移动。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Deceleration Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当设置了惯性，减速率决定了内容停止移动的速度。减速率为0将立即停止移动。减速率为1表示移动将永不减速。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Scroll Sensitivity&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;对滚轮和触控板滚动事件的敏感度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Viewport&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;指向作为内容矩形变换父级的视口矩形变换的引用。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal Scrollbar&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可选的引用到一个水平滚动条元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当不需要滚动条时，是否应自动隐藏滚动条，并可选地扩展视口。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滚动条和视口之间的空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical Scrollbar&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;可选的引用到一个垂直滚动条元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Visibility&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当不需要滚动条时，是否应自动隐藏滚动条，并可选地扩大视口。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;滚动条和视口之间的空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Event事件&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Property:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Function:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;On Value Changed&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当Scroll Rect的滚动位置发生变化时，会调用的UnityEvent。该事件可以将当前滚动位置作为Vector2类型的动态参数发送。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;滚动视图中的重要元素包括视口，滚动内容，以及可选的一个或两个滚动条。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;根GameObject有Scroll Rect组件。&lt;/li&gt;
&lt;li&gt;视口具有Mask组件。视口可以是根GameObject，也可以是根的子GameObject。如果使用自动隐藏的滚动条，它必须是一个子元素。视口的Rect Transform需要在Scroll Rect的Viewport属性中引用。&lt;/li&gt;
&lt;li&gt;所有滚动内容必须是视口的子对象的单一内容GameObject的子对象。内容的Rect Transform需要在Scroll Rect的Content属性中引用。&lt;/li&gt;
&lt;li&gt;滚动条（如果使用）是根GameObject的子对象。请参阅滚动条页面以获取有关滚动条设置的更多详细信息，并参阅下面的滚动条设置部分以获取有关带有滚动视图的滚动条设置的信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个图片显示了一个设置，其中视口是滚动视图根的子对象。这是使用GameObject &amp;gt; UI &amp;gt; Scroll View菜单选项时的默认设置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScrollRectHierarchy.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;要滚动内容，输入必须从ScrollRect的边界内部接收，而不是在内容本身上。&lt;/p&gt;
&lt;p&gt;在使用Unrestricted滚动移动时要小心，因为可能会以无法检索的方式失去对内容的控制。当使用Elastic或Constrained移动时，最好将内容定位到开始在ScrollRect的边界内，否则当RectTransform试图将内容带回其边界时，可能会出现不良行为。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scrollbar setup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可选地，Scroll Rect可以链接到水平和/或垂直滚动条。这些通常被放置在视口的兄弟层级中，存在时，应分别拖入到Scroll Rect的Horizontal Scrollbar和Vertical Scrollbar属性中。请注意，这样的水平滚动条上的Direction属性应设置为Left To Right，垂直滚动条设置为Bottom To Top。&lt;/p&gt;
&lt;p&gt;滚动条可以选择具有自动隐藏行为，如果内容不需要滚动，因为它没有大于视口，那么它会隐藏滚动条。请注意，自动隐藏只在Play Mode中发生。在Edit Mode中，滚动条始终显示。这可以防止在不应标记场景为dirty的情况下标记它，并且也有助于创建内容，即使显示滚动条，也有足够的空间。&lt;/p&gt;
&lt;p&gt;如果一个或两个滚动条的可见性行为设置为Auto Hide And Expand View，那么当滚动条隐藏时，视口会自动扩大以占据滚动条原本所在的多余空间。在这种设置中，视图的位置和大小由Scroll Rect驱动，水平滚动条的宽度以及垂直滚动条的高度也被驱动。在此设置中，视口以及滚动条必须是Scroll Rect根GameObject的子对象。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hints(提示)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;内容的RectTransform的轴心和锚点可以用来决定如果内容增长或收缩时，内容如何在滚动视图内对齐。如果内容应该保持与顶部对齐，将锚点设置在父对象的顶部，并将轴心设置到顶部位置。&lt;/p&gt;
&lt;h4 id=&#34;auto-layout-1&#34;&gt;Auto Layout &lt;a href=&#34;#auto-layout-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;自动布局系统提供了将元素放置在嵌套布局组（如水平组、垂直组或网格）中的方式。它还允许元素根据包含的内容自动调整大小。&lt;/p&gt;
&lt;h5 id=&#34;layout-element&#34;&gt;Layout Element &lt;a href=&#34;#layout-element&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;如果你想覆盖布局元素的最小、首选或弹性大小，你可以通过在GameObject中添加一个Layout Element组件来实现。&lt;/p&gt;
&lt;p&gt;布局控制器按以下顺序分配宽度或高度给布局元素：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先，布局控制器分配最小尺寸属性（Min Width, Min Height）。&lt;/li&gt;
&lt;li&gt;如果有足够的可用空间，布局控制器分配首选尺寸属性（Preferred Width, Preferred Height）。&lt;/li&gt;
&lt;li&gt;如果还有额外的可用空间，布局控制器分配弹性尺寸属性（Flexible Width, Flexible Height）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_LayoutElementInspector_3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当你启用宽度或高度属性时，旁边会出现一个值字段。使用这个值字段输入宽度或高度的确切值。最小和首选尺寸是以常规单位表示，而弹性尺寸则是以相对单位表示。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ignore Layout&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;当启用时，布局系统会忽略这个布局元素。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Min Width&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个布局元素应该具有的最小宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Min Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个布局元素应该具有的最小高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preferred Width&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在分配额外可用宽度之前，这个布局元素应该具有的首选宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Preferred Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在分配额外可用高度之前，这个布局元素应该具有的首选高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Flexible Width&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;此布局元素应相对于其同级元素填充的可用额外宽度的相对数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Flexible Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个布局元素相对于它的同级元素应填充的额外可用高度的相对数值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Layout Priority&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;这个组件的布局优先级。如果一个游戏对象有多个具有布局属性的组件（例如，一个Image组件和一个LayoutElement组件），布局系统会使用具有最高布局优先级的组件的属性值。如果组件有相同的布局优先级，布局系统使用每个属性的最高值，无论它来自哪个组件。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Description(描述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Layout Element组件允许你覆盖一个或多个布局属性的值。如果你想要覆盖一个属性的值，启用该属性的复选框，然后指定你想要覆盖的值。&lt;/p&gt;
&lt;p&gt;最小和优先大小以常规单位定义，而灵活的大小以相对单位定义。如果任何布局元素有大于零的灵活大小，意味着所有可用的空间将被填充满。兄弟元素的相对灵活大小值确定了每个兄弟元素填充可用空间的大小比例。最常见的是，灵活的宽度和高度设置为0或1。&lt;/p&gt;
&lt;p&gt;在某些情况下，同时指定优先大小和灵活大小是有意义的。灵活的大小只有在所有的优先大小都已完全分配后才被分配。因此，一个布局元素如果指定了灵活大小，但没有指定优先大小，将会保持其最小大小，直到其他布局元素已经增长到它们的全优先大小，然后基于额外的可用空间开始增长。通过也指定一个灵活的大小，这可以被避免，并且该元素可以与其他具有优先大小的布局元素一起增长到其优选大小，然后在所有的灵活大小都已分配后进一步增长。&lt;/p&gt;
&lt;h5 id=&#34;content-size-fitter&#34;&gt;Content Size Fitter &lt;a href=&#34;#content-size-fitter&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ContentSizeFitterInspector22.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal Fit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何控制宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unconstrained&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不要基于布局元素来驱动宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Min Size&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据布局元素的最小宽度来驱动宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Preferred Size&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据布局元素的首选宽度来驱动宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical Fit&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;高度是如何被控制的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Unconstrained&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不要根据布局元素来驱动高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Min Size&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据布局元素的最小高度来驱动高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Preferred Size&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据布局元素的优选高度来驱动高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Description(描述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Content Size Fitter充当一个布局控制器，控制其自身布局元素的大小。大小由Game Object上的布局元素组件提供的最小或优选大小决定。这类布局元素可以是Image或Text组件，布局组，或者是一个Layout Element组件。&lt;/p&gt;
&lt;p&gt;值得记住的是，当一个Rect Transform被调整大小 - 无论是由Content Size Fitter还是其他东西 - 调整大小是围绕枢轴进行的。这意味着可以使用枢轴来控制调整大小的方向。&lt;/p&gt;
&lt;p&gt;例如，当枢轴在中心时，Content Size Fitter将等同于所有方向来扩展Rect Transform。而当枢轴在左上角时，Content Size Fitter将向下和向右扩展Rect Transform。&lt;/p&gt;
&lt;h5 id=&#34;aspect-ratio-fitter&#34;&gt;Aspect Ratio Fitter &lt;a href=&#34;#aspect-ratio-fitter&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_AspectRatioFitterInspector_3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Aspect Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如何调整矩形的大小以强制执行宽高比。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;不要使矩形适应宽高比。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Width Controls Height&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据宽度自动调整高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Height Controls Width&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;根据高度自动调整宽度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Fit In Parent&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;宽度、高度、位置和锚点都会自动调整，使矩形在保持宽高比的同时适应其父级矩形。可能会有一些空间在父级矩形内部，但未被此矩形覆盖。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Envelope Parent&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;宽度、高度、位置和锚点会自动调整，使得矩形在保持宽高比的情况下覆盖父级矩形的全部区域。此矩形可能会超出父级矩形的范围。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Aspect Ratio&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;要强制执行的宽高比。这是宽度除以高度的值。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Description(描述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;宽高比适配器作为一个布局控制器，控制其自身布局元素的大小。它可以调整高度以适应宽度，反之亦然，或者它可以使元素适应其父元素的大小或者包裹其父元素。宽高比适配器并不会考虑像最小尺寸和首选尺寸这样的布局信息。&lt;/p&gt;
&lt;p&gt;值得记住的是，当一个矩形变换被调整大小 - 无论是由宽高比适配器还是别的什么调整的 - 调整是围绕枢轴进行的。这意味着，可以用枢轴来控制矩形的对齐方式。例如，一个放在顶部中心的枢轴会使矩形等量向两侧增长，仅向下增长，而顶边则保持在原位。&lt;/p&gt;
&lt;h5 id=&#34;horizontal-layout-group&#34;&gt;Horizontal Layout Group &lt;a href=&#34;#horizontal-layout-group&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Horizontal Layout Group组件将其子布局元素并排放置。这些元素的宽度由各自的最小、优选和灵活宽度按照下述模型确定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有子布局元素的最小宽度相加，以及它们之间的间距也被加入。得出的结果就是Horizontal Layout Group的最小宽度。&lt;/li&gt;
&lt;li&gt;所有子布局元素的优选宽度相加，和它们之间的间距也被加入。得出的结果就是Horizontal Layout Group的优选宽度。&lt;/li&gt;
&lt;li&gt;如果Horizontal Layout Group的宽度等于其最小宽度或者更小，那么所有子布局元素的宽度也将是它们各自的最小宽度。&lt;/li&gt;
&lt;li&gt;越接近Horizontal Layout Group的优选宽度，每个子布局元素的宽度也将越接近它们的优选宽度。&lt;/li&gt;
&lt;li&gt;如果Horizontal Layout Group的宽度超过其优选宽度，它将按照各自的灵活宽度比例向子布局元素分配额外的空间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_HorizontalLayoutGroupInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Padding&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在布局组的边缘之间的填充。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局元素之间的间距。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Child Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果子布局元素没有填满所有可用空间，使用何种对齐方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Control Child Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组是否控制其子布局元素的宽度和高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Child Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组在计算元素的大小和布局时，是否考虑其子布局元素的比例。&lt;!-- raw HTML omitted --&gt;宽度和高度分别对应每个子布局元素的Rect Transform组件中的Scale &amp;gt; X和Scale &amp;gt; Y值。&lt;!-- raw HTML omitted --&gt;你无法使用Animator Controller来动画化Scale值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Child Force Expand&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是否强制子布局元素扩展以填充额外的可用空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;vertical-layout-group&#34;&gt;Vertical Layout Group &lt;a href=&#34;#vertical-layout-group&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Vertical Layout Group组件将其子布局元素置于彼此顶部。他们的高度由相应的最小，首选和灵活高度决定，根据以下模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;所有子布局元素的最小高度被相加，之间的空间也被添加。结果就是Vertical Layout Group的最小高度。&lt;/li&gt;
&lt;li&gt;所有子布局元素的首选高度被相加，之间的空间也被添加。结果就是Vertical Layout Group的首选高度。&lt;/li&gt;
&lt;li&gt;如果Vertical Layout Group处于其最小高度或更小的状态，所有子布局元素也将具有它们的最小高度。&lt;/li&gt;
&lt;li&gt;Vertical Layout Group越接近其首选高度，每个子布局元素也越接近他们的首选高度。&lt;/li&gt;
&lt;li&gt;如果Vertical Layout Group高于其首选高度，它会将额外的空间按照各自的灵活高度的比例分配给子布局元素。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_VerticalLayoutGroupInspector23.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Padding&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组边缘内部的填充。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局元素之间的间距。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Child Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果子布局元素没有填充所有可用空间，将使用的对齐方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Control Child Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组是否控制其子布局元素的宽度和高度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Use Child Scale&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组在尺寸和布局元素时，是否考虑其子布局元素的缩放。&lt;!-- raw HTML omitted --&gt;宽度和高度对应于每个子布局元素的Rect Transform组件中的Scale &amp;gt; X和Scale &amp;gt; Y值。&lt;!-- raw HTML omitted --&gt;你无法使用Animator Controller来动画这些Scale值。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Child Force Expand&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是否强制子布局元素扩展以填充额外可用的空间。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;grid-layout-group&#34;&gt;Grid Layout Group &lt;a href=&#34;#grid-layout-group&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Grid Layout Group组件将其子布局元素置于一个格子中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_GridLayoutGroupInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Padding&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局组边缘内部的填充。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cell Size&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;每个组中布局元素的大小。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Spacing&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;布局元素之间的间距。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Start Corner&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;首个元素所在的角落。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Start Axis&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;沿哪个主轴放置元素。横向会填满整行后才开始新的行。纵向会填满整列后才开始新的列。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Child Alignment&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;如果布局元素没有填满所有可用空间，应使用的对齐方式。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Constraint&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将网格约束为固定数目的行或列，以帮助自动布局系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Description(描述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;与其他布局组不同，Grid Layout Group忽视其包含的布局元素的最小、优选和灵活尺寸属性，而是为所有元素分配固定尺寸，该尺寸由Grid Layout Group自身的Cell Size属性定义。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grid Layout Group and auto layout&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在使用Grid Layout Group作为自动布局设置的一部分时，需要注意一些特殊考虑，例如与Content Size Fitter一起使用。&lt;/p&gt;
&lt;p&gt;自动布局系统独立计算水平和垂直大小。这可能与Grid Layout Group存在冲突，因为行数取决于列数，反之亦然。&lt;/p&gt;
&lt;p&gt;对于任何给定数量的单元格，都有不同组合的行数和列数可以使网格适应其内容。为了帮助布局系统，你可以指定你希望表格具有固定数量的列或行，通过使用Constraint属性。&lt;/p&gt;
&lt;p&gt;以下是一些使用Content Size Fitter搭配布局系统的建议方法：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flexible width and fixed height&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您想设置一个具有灵活宽度和固定高度的网格，当添加更多元素时，网格会水平扩展，您可以按如下方式设置这些属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grid Layout Group Constraint：Fixed Row Count&lt;/li&gt;
&lt;li&gt;Content Size Fitter Horizontal Fit：Preferred Size&lt;/li&gt;
&lt;li&gt;Content Size Fitter Vertical Fit：Preferred Size 或 Unconstrained&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果使用不受约束的Vertical Fit，那么您需要给网格设定一个足够大的高度，以适应指定的单元格行数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fixed width and flexible height&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您想设置一个具有固定宽度和灵活高度的网格，当添加更多元素时，网格会垂直扩展，您可以按如下方式设置这些属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grid Layout Group Constraint：Fixed Column Count&lt;/li&gt;
&lt;li&gt;Content Size Fitter Horizontal Fit：Preferred Size 或 Unconstrained&lt;/li&gt;
&lt;li&gt;Content Size Fitter Vertical Fit：Preferred Size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果使用不受约束的Horizontal Fit，那么您需要给网格设定一个足够大的宽度，以适应指定的单元格列数。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Both flexible width and height&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果您想设置一个宽度和高度都灵活的网格，您可以实现，但是您将无法控制行和列的具体数量。网格将尝试使行和列的数量大致相同。您可以按如下方式设置这些属性：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grid Layout Group Constraint：Flexible&lt;/li&gt;
&lt;li&gt;Content Size Fitter Horizontal Fit：Preferred Size&lt;/li&gt;
&lt;li&gt;Content Size Fitter Vertical Fit：Preferred Size&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;event-1&#34;&gt;Event &lt;a href=&#34;#event-1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;h5 id=&#34;script---event-system-manager&#34;&gt;Script - Event System Manager &lt;a href=&#34;#script---event-system-manager&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;这个子系统负责控制构成事件的所有其他元素。它协调哪个输入模块当前处于活动状态，哪个GameObject当前被视为&amp;quot;selected&amp;quot;，以及其他一系列高级事件系统概念。&lt;/p&gt;
&lt;p&gt;每次&amp;rsquo;Update&amp;rsquo;，事件系统都会接收到调用，查看其输入模块，并找出应当用于此次更新的输入模块。然后，它将处理工作委派给这些模块。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;First Selected&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;被首先选定的GameObject。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Send Navigation Events&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;事件系统是否应允许导航事件（移动/提交/取消）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Drag Threshold&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;以像素为单位的拖拽软区域。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;script---graphic-raycaster&#34;&gt;Script - Graphic Raycaster &lt;a href=&#34;#script---graphic-raycaster&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Graphic Raycaster 用于对 Canvas 进行射线检测。Raycaster 查看 Canvas 上的所有图像，并确定是否有任何图像被击中。&lt;/p&gt;
&lt;p&gt;Graphic Raycaster 可以配置为忽略背面的图形，也可以被存在于其前面的2D或3D对象阻挡。如果您希望强制将此元素的处理置于射线检测的前端或后端，也可以应用手动优先级。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Ignore Reversed Graphics&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;是否应考虑面向远离Graphic Raycaster的图形？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Blocked Objects&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将阻挡图形射线检测的对象类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Blocking Mask&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;阻挡Graphic Raycast的对象类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;script---physics-raycaster&#34;&gt;Script - Physics Raycaster &lt;a href=&#34;#script---physics-raycaster&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Physics Raycaster在场景中对3D对象执行射线投射。这允许将消息发送给实现了事件接口的3D物理对象。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Depth&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;获取配置相机的深度。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Event Camera&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;获取此模块使用的相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Event Mask&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;相机遮罩和事件遮罩的逻辑与运算。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Final Event Mask&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;相机遮罩和事件遮罩的逻辑与运算。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;script---physics-2d-raycaster&#34;&gt;Script - Physics 2D Raycaster &lt;a href=&#34;#script---physics-2d-raycaster&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Physics 2D Raycaster是针对场景中的2D对象进行射线投射的。这允许向实现事件接口的2D物理对象发送消息。需要使用相机游戏对象，并且如果Physics 3D Raycaster没有添加到相机游戏对象中，它将会被添加到游戏对象中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Event Camera&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;将为这个射线投射器生成射线的相机。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Priority&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;相对于其他投射器的优先级。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Sort Order Priority&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基于排序顺序的射线投射器的优先级。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Render Order Priority&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基于渲染顺序的射线投射器的优先级。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id=&#34;script---standalone-input-module&#34;&gt;Script - Standalone Input Module &lt;a href=&#34;#script---standalone-input-module&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;这个模块旨在使控制器/鼠标输入按预期工作。按钮按压、拖拽等类似的事件会对输入作出响应。&lt;/p&gt;
&lt;p&gt;随着鼠标/输入设备的移动，模块会向组件发送指针事件，并使用Graphics Raycaster和Physics Raycaster来计算当前指针设备指向的元素。你可以根据你的需求配置这些射线投射器以检测或忽略你的场景的某些部分。&lt;/p&gt;
&lt;p&gt;该模块会对通过Input窗口跟踪的输入做出动作事件以及提交/取消事件的响应。该方法适用于键盘和控制器输入。可以在模块的检查器中配置被跟踪的轴和键。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Horizontal Axis&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为水平轴按钮输入所需的管理器名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Vertical Axis&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为垂直轴输入所需的管理器名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Submit Button&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为Submit按钮输入所需的管理器名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Cancel Button&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;为Cancel按钮输入所需的管理器名称。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Input Actions Per Second&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;每秒允许的键盘/控制器输入数量。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Repeat Delay&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;在每秒输入动作重复率生效前的延迟秒数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Force Module Active&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;启用此属性以强制使此Standalone Input Module处于活动状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模块使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;垂直/水平轴进行键盘和控制器导航&lt;/li&gt;
&lt;li&gt;提交/取消按钮用于发送提交和取消事件&lt;/li&gt;
&lt;li&gt;存在事件间的超时限制，只允许每秒钟达到最大事件数量&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;模块的流程如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果从输入窗口输入了有效的轴，则向选定的对象发送移动事件&lt;/li&gt;
&lt;li&gt;如果按下提交或取消按钮，则向选定的对象发送提交或取消事件&lt;/li&gt;
&lt;li&gt;处理鼠标输入&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;​			如果是新的按压操作：
​					发送PointerEnter事件（发送给沿层次结构向上可以处理的所有对象）
​					发送PointerPress事件
​					缓存拖动处理器（层次结构中可以处理它的第一个元素）
​					向拖动处理器发送BeginDrag事件
​					在事件系统中设定&amp;rsquo;Pressed&amp;rsquo;对象为选定
​			如果这是一个持续的按压：
​					处理移动
​					向缓存的拖动处理器发送DragEvent
​					如果触摸在对象之间移动，处理PointerEnter和PointerExit事件
​			如果这是一个释放：
​					向接收到PointerPress的对象发送PointerUp事件
​					如果当前的悬停对象与PointerPress对象相同，则发送PointerClick事件
​					如果缓存了拖动处理器，则发送一个Drop事件
​					向缓存的拖动处理器发送EndDrag事件
​			处理滚轮事件&lt;/p&gt;
&lt;h5 id=&#34;script---touch-input-module&#34;&gt;Script - Touch Input Module &lt;a href=&#34;#script---touch-input-module&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;注意：TouchInputModule已过时。现在，触摸输入在StandaloneInputModule中处理。&lt;/p&gt;
&lt;p&gt;此模块设计用于处理触摸设备。它会根据用户输入发送触摸和拖动的指针事件。此模块支持多点触控。&lt;/p&gt;
&lt;p&gt;该模块使用场景配置的Raycasters来计算当前正在触摸哪个元素。每一个当前的触摸都会发出一个射线。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Properties(属性)&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;属性:&lt;/strong&gt;&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;&lt;strong&gt;功能:&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;Force Module Active&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;强制使此模块处于活动状态。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Details(详情)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;模块的流程如下：&lt;/p&gt;
&lt;p&gt;对于每一个触摸事件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果这是一个新的按压
&lt;ul&gt;
&lt;li&gt;发送PointerEnter事件（发送给层次结构中每一个能处理它的对象）&lt;/li&gt;
&lt;li&gt;发送PointerPress事件&lt;/li&gt;
&lt;li&gt;缓存拖动处理器（在层次结构中能处理它的第一个元素）&lt;/li&gt;
&lt;li&gt;向拖动处理器发送BeginDrag事件&lt;/li&gt;
&lt;li&gt;在事件系统中设置&amp;rsquo;Pressed&amp;rsquo;对象为Selected&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果这是一个持续的按压
&lt;ul&gt;
&lt;li&gt;处理移动&lt;/li&gt;
&lt;li&gt;向缓存的拖动处理器发送DragEvent事件&lt;/li&gt;
&lt;li&gt;如果触摸在对象之间移动，处理PointerEnter和PointerExit事件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;如果这是一个释放
&lt;ul&gt;
&lt;li&gt;向接收到PointerPress的对象发送PointerUp事件&lt;/li&gt;
&lt;li&gt;如果当前悬停对象与PointerPress对象相同，则发送一个PointerClick事件&lt;/li&gt;
&lt;li&gt;如果有拖动处理器缓存，发送一个Drop事件&lt;/li&gt;
&lt;li&gt;向缓存的拖动处理器发送EndDrag事件&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;script---event-trigger&#34;&gt;Script - Event Trigger &lt;a href=&#34;#script---event-trigger&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h5&gt;&lt;p&gt;Event Trigger从事件系统接收事件，并为每个事件调用已注册的函数。&lt;/p&gt;
&lt;p&gt;你可以使用Event Trigger为每个事件系统事件指定希望调用的函数。你可以将多个函数分配给单个事件，每当Event Trigger接收到该事件，它就会调用这些函数。&lt;/p&gt;
&lt;p&gt;请注意，将Event Trigger组件附加到GameObject上会使该对象拦截所有事件，且此对象不会发生事件冒泡！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Event&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你可以通过点击添加新事件类型按钮，选择性地将每个受支持的事件包含在Event Trigger中。&lt;/p&gt;
&lt;h3 id=&#34;ui-how-tosui操作指南&#34;&gt;UI How Tos(UI操作指南) &lt;a href=&#34;#ui-how-tosui%e6%93%8d%e4%bd%9c%e6%8c%87%e5%8d%97&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;在这一部分，你可以学习到常见UI任务的解决方案。&lt;/p&gt;
&lt;h4 id=&#34;designing-ui-for-multiple-resolutions为多种分辨率设计ui&#34;&gt;Designing UI for Multiple Resolutions(为多种分辨率设计UI) &lt;a href=&#34;#designing-ui-for-multiple-resolutions%e4%b8%ba%e5%a4%9a%e7%a7%8d%e5%88%86%e8%be%a8%e7%8e%87%e8%ae%be%e8%ae%a1ui&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;现代游戏和应用程序通常需要支持各种不同的屏幕分辨率，特别是UI布局需要能够适应这一点。Unity的UI系统包括了许多用于此目的的工具，可以以各种方式结合使用。&lt;/p&gt;
&lt;p&gt;在这个操作指南中，我们将使用一个简单的案例研究，并在这个背景下查看并比较不同的工具。在我们的案例研究中，我们在屏幕角落有三个按钮，如下图所示，目标是将这种布局适应到各种分辨率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResBase.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在本操作指南中，我们将考虑四种屏幕分辨率：手机HD的纵向（640 x 960）和横向（960 x 640），以及手机SD的纵向（320 x 480）和横向（480 x 320）。该布局最初是在手机HD纵向分辨率下设置的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using anchors to adapt to different aspect ratios(使用锚点适应不同的纵横比)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;默认情况下，UI元素被锚定在父矩形的中心。这意味着它们与中心保持固定的偏移。&lt;/p&gt;
&lt;p&gt;如果将分辨率更改为横向纵横比，那么这种设置下的按钮可能不再位于屏幕的矩形内。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResCenter.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;让按钮保持在屏幕内的一种方法是改变布局，使得按钮的位置与屏幕的各自角落相对应。左上角按钮的锚点可以通过检查器中的锚点预设下拉菜单设置为左上角，或者通过在场景视图中拖动三角形的锚点句柄来设置。最好在游戏视图中设置的当前屏幕分辨率是布局最初设计的那个，其中按钮的放置看起来是正确的。同样，左下角和右下角按钮的锚点可以分别设置为左下角和右下角。&lt;/p&gt;
&lt;p&gt;一旦按钮被锚定到各自的角落，当将分辨率改变为不同的纵横比时，它们会坚持在那里。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResCorners.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;当屏幕大小改变为更大或更小的分辨率时，按钮也会保持在它们各自的角落。但是，由于它们保持以像素指定的原始大小，它们可能占据屏幕的更大或更小的比例。这可能是你想要的，也可能不是，这取决于你希望你的布局在不同分辨率的屏幕上表现如何。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResSizeChange.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;在这个指南中，我们知道，手机SD竖屏和横屏的较小分辨率并不对应于物理上较小的屏幕，而是对应于像素密度较低的屏幕。在这些低密度的屏幕上，按钮不应该比在高密度屏幕上看起来更大 - 它们应该以相同的大小出现。&lt;/p&gt;
&lt;p&gt;这意味着按钮应该以与屏幕缩小的百分比相同的百分比变小。换句话说，按钮的缩放应该跟随屏幕大小。这就是Canvas Scaler组件能够帮助的地方。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scaling with Screen Size(随屏幕大小缩放)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Canvas Scaler组件可以添加到根Canvas - 一个带有Canvas组件的游戏对象，所有的UI元素都是它的子对象。当通过GameObject菜单创建一个新的Canvas时，它也会默认被添加。&lt;/p&gt;
&lt;p&gt;在Canvas Scaler组件中，你可以将其UI Scale Mode设置为Scale With Screen Size。使用这种缩放模式，你可以指定一个分辨率作为参考。如果当前屏幕分辨率小于或大于这个参考分辨率，Canvas的缩放因子就会相应地设置，所以所有的UI元素都会随着屏幕分辨率一起放大或缩小。&lt;/p&gt;
&lt;p&gt;在我们的案例中，我们将Canvas Scaler设置为Phone HD竖屏分辨率640 x 960。现在，当将屏幕分辨率设置为Phone SD竖屏分辨率320 x 480时，整个布局缩小了，所以它看起来比例相同，就像在全分辨率下一样。所有的东西都缩小了：按钮的大小，它们到屏幕边缘的距离，按钮的图形，和文本元素。这就意味着布局在Phone SD竖屏分辨率下看起来与Phone HD竖屏分辨率下一样，只是像素密度更低。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResReferenceResolution.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;需要注意的一点是：添加了Canvas Scaler组件后，也很重要的是要检查布局在其它纵横比下的样子。通过将分辨率回调到Phone HD横屏，我们可以看到按钮现在看起来比它们应该的（和曾经的）更大。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResLandscapeWrongScaling.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;造成横屏纵横比下按钮更大的原因归结于Canvas Scaler设置的工作方式。默认情况下，它比较当前分辨率的宽度与Canvas Scaler的宽度，结果用作缩放所有内容的缩放因子。由于当前的横屏分辨率960 x 640的宽度比竖屏Canvas Scaler的640 x 960大1.5倍，因此布局放大了1.5倍。&lt;/p&gt;
&lt;p&gt;该组件有一个名为Match的属性，可以是0（宽度），1（高度）或者介于两者之间的值。默认设置为0，如前所述，它比较当前屏幕宽度与Canvas Scaler宽度。&lt;/p&gt;
&lt;p&gt;如果Match属性设置为0.5，那么它将同时比较当前宽度与参考宽度以及当前高度与参考高度，并选择一个介于两者之间的缩放因子。由于在这种情况下，横屏分辨率宽度大1.5倍，但也短1.5倍，这两个因素相互抵消，产生最终的缩放因子1，这意味着按钮保持原大小。&lt;/p&gt;
&lt;p&gt;至此，布局使用适当的锚定组合和Canvas上的Canvas Scaler组件，支持了所有四种屏幕分辨率。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_MultiResAllResolutions.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;making-ui-elements-fit-the-size-of-their-content让ui元素适应其内容的大小&#34;&gt;Making UI elements fit the size of their content(让UI元素适应其内容的大小) &lt;a href=&#34;#making-ui-elements-fit-the-size-of-their-content%e8%ae%a9ui%e5%85%83%e7%b4%a0%e9%80%82%e5%ba%94%e5%85%b6%e5%86%85%e5%ae%b9%e7%9a%84%e5%a4%a7%e5%b0%8f&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;通常在用Rect Transform定位一个UI元素时，它的位置和大小是手动指定的（可选的，包括与父Rect Transform一同拉伸的行为）。&lt;/p&gt;
&lt;p&gt;然而，有时你可能希望这个矩形能自动调整大小以适应UI元素的内容。这可以通过添加一个名为Content Size Fitter的组件来实现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fit to size of Text(调整以适应文本大小)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了让带有Text组件的Rect Transform适应文本内容，将Content Size Fitter组件添加到同一个拥有Text组件的游戏对象上。然后将Horizontal Fit和Vertical Fit下拉框都设置为Preferred。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does it work? (它是如何工作的?)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这里发生的是，Text组件作为一个Layout Element，可以提供有关其最小和最佳大小的信息。在手动布局中，这些信息不会被使用。Content Size Fitter是一种Layout Controller，它会监听由Layout Elements提供的布局信息，并根据这些信息控制Rect Transform的大小。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Remember the pivot(轴心点的重要)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当UI元素自动调整大小以适应其内容时，你应该特别注意Rect Transform的轴心点。当元素大小改变时，轴心点位置会保持不变，因此通过设置轴心点位置，你可以控制元素是向哪个方向扩大或缩小。例如，如果轴心点在中心，那么元素将会均等地向所有方向扩展；如果轴心点在左上角，那么元素会向右边和下方扩展。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fit to size of UI element with child Text(适应带有子Text的UI元素尺寸)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你有一个UI元素，如Button，它有一个背景图像和一个带有Text组件的子游戏对象，你可能希望整个UI元素适应文本的大小 - 可能还有一些填充。&lt;/p&gt;
&lt;p&gt;要做到这一点，首先在UI元素上添加一个Horizontal Layout Group，然后添加一个Content Size Fitter。将Horizontal Fit、Vertical Fit或两者设置为Preferred。你可以使用Horizontal Layout Group中的padding属性添加和调整填充。&lt;/p&gt;
&lt;p&gt;为什么要使用Horizontal Layout Group呢？其实也可以是Vertical Layout Group - 只要只有一个子元素，它们产生的效果是一样的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does it work? (它是如何工作的？)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Horizontal（或Vertical）Layout Group既充当Layout Controller也充当Layout Element。首先，它会监听组中子元素提供的布局信息 - 在这种情况下监听的是子Text。然后，它会确定组必须要有多大（最小值和优选大小），才能包含所有子元素，并作为提供这些有关最小值和优选大小信息的Layout Element。&lt;/p&gt;
&lt;p&gt;Content Size Fitter会侦听同一个Game Object上任何Layout Element（在这种情况下由Horizontal或Vertical Layout Group提供）的布局信息。根据它的设置，它会基于这些信息控制Rect Transform的大小。&lt;/p&gt;
&lt;p&gt;一旦设置了Rect Transform的大小，Horizontal（或Vertical）Layout Group就会确保根据可用的空间对其子元素进行定位和大小设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make children of a Layout Group fit their respective sizes(使Layout Group的子元素适应其各自的尺寸)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你有一个Layout Group（水平或垂直）并希望组中的每一个UI元素适应其各自的内容，你该怎么做呢？&lt;/p&gt;
&lt;p&gt;你不能在每个子元素上都放一个Content Size Fitter。原因是Content Size Fitter想要控制其自身的Rect Transform，但父Layout Group也想要控制子Rect Transform。这会造成冲突，结果是不确定的行为。&lt;/p&gt;
&lt;p&gt;然而，这也并非必要。父Layout Group已经可以使每个子元素适应内容的大小。你需要做的是在Layout Group中禁用Child Force Expand选项。如果子元素本身也是Layout Group，你可能需要在这些子Layout Group中也禁用Child Force Expand选项。&lt;/p&gt;
&lt;p&gt;一旦子元素不再以灵活的宽度扩展，它们的对齐方式可以在Layout Group中通过Child Alignment设置来指定。&lt;/p&gt;
&lt;p&gt;如果你希望一些子元素扩展以填充额外的可用空间，但不是其他子元素呢？你可以通过在你想要扩展的子元素中添加一个Layout Element组件并启用这些Layout Element上的Flexible Width或Flexible Height属性来轻松控制这一点。父Layout Group应该仍然禁用Child Force Expand选项，否则所有的子元素都将灵活地扩展。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How does it work? (它是如何工作的？)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;一个游戏对象可以有多个组件，每个组件都提供关于最小、优选和灵活大小的布局信息。一个优先级系统决定哪些值优先于其他值生效。Layout Element组件的优先级高于Text、Image和Layout Group组件，因此可以用来覆盖它们提供的任何布局信息值。&lt;/p&gt;
&lt;p&gt;当Layout Group监听子元素提供的布局信息时，它会考虑到被重新定义的灵活大小。然后，当控制子元素的大小时，它不会让它们大于其优选大小。然而，如果Layout Group启用了Child Force Expand选项，它将始终使所有子元素的灵活大小至少为1。&lt;/p&gt;
&lt;h4 id=&#34;creating-a-world-space-ui创建一个世界空间ui&#34;&gt;Creating a World Space UI(创建一个世界空间UI) &lt;a href=&#34;#creating-a-world-space-ui%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aa%e4%b8%96%e7%95%8c%e7%a9%ba%e9%97%b4ui&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;UI系统使得在场景中的其他2D或3D对象之间创建位于世界中的UI变得非常容易。&lt;/p&gt;
&lt;p&gt;开始时，通过使用GameObject &amp;gt; UI &amp;gt; Image创建一个UI元素（例如一个Image），如果你的场景中还没有的话。这同时也会为你创建一个Canvas。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set the Canvas to World Space(设置Canvas为世界空间)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;选中你的Canvas并将渲染模式更改为World Space。&lt;/p&gt;
&lt;p&gt;现在你的Canvas已经位于世界中，只要相机对准它，所有的相机都可以看到它，但是它可能与你场景中的其他对象相比很大。我们稍后再处理这个问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decide on a resolution(确定一个分辨率)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先，你需要决定Canvas的分辨率应该是多少。如果它是一张图片，那么这张图片的像素分辨率应该是多少呢？像800x600这样的分辨率可能是一个好的起点。你可以在Canvas的Rect Transform的宽度和高度值中输入分辨率。同时设置位置为0,0可能是一个好主意。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Specify the size of the Canvas in the world(指定Canvas在世界中的大小)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;现在，你应该考虑Canvas在世界中应该有多大。你可以使用缩放工具简单地缩小它，直到它有一个看起来不错的大小，或者你可以决定它应该有多少米。&lt;/p&gt;
&lt;p&gt;如果你希望它有特定的宽度（以米为单位），你可以通过使用 meter_size / canvas_width 来计算需要的缩放。例如，如果你希望它宽2米，Canvas的宽度是800，你就会得到2 / 800 = 0.0025。然后，你将Canvas的Rect Transform的Scale属性设置为0.0025，对X、Y和Z都进行设置，以确保它均匀地缩放。&lt;/p&gt;
&lt;p&gt;另一种思考的方式是，你正在控制Canvas中每个像素的大小。如果Canvas的缩放为0.0025，那么这也是Canvas中每个像素在世界中的大小。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Position the Canvas(定位Canvas)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;与设为屏幕空间的Canvas不同，世界空间的Canvas可以在场景中自由定位和旋转。你可以将Canvas放置在任何墙壁、地板、天花板或倾斜的表面（当然，也可以自由地悬挂在空气中）。只需在工具栏中使用常规的翻译和旋转工具即可。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating UI elements from scripting(通过脚本创建UI元素)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你正在创建一个动态的UI，其中的UI元素基于用户操作或游戏中的其他操作出现、消失或改变，你可能需要编写一个根据自定义逻辑实例化新UI元素的脚本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Creating a prefab of the UI element(创建UI元素的预制体)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;为了能够轻松地动态实例化UI元素，第一步是为你想要实例化的UI元素类型创建一个预制体。在场景中设置UI元素的外观，然后将元素拖入项目视图以将其转换为预制体。&lt;/p&gt;
&lt;p&gt;例如，一个按钮的预制体可以是一个带有Image组件和Button组件的游戏对象，和一个带有Text组件的子游戏对象。你的设置可能会根据你的需要而有所不同。&lt;/p&gt;
&lt;p&gt;你可能会想知道为什么我们没有API方法来创建各种类型的控制，包括视觉效果和所有其他元素。原因是有无数种方式可以设置一个按钮。它是使用图像、文本还是同时使用两者？甚至可能是多个图像？文本的字体、颜色、字体大小和对齐是什么样的？图像应该使用什么精灵或精灵？通过让你制作一个预制体并实例化它，你可以按照你想要的方式设置它。如果你以后想要改变UI的外观和感觉，你只需要改变预制体，然后它就会体现在你的UI中，包括动态创建的UI。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instantiating the UI element(实例化UI元素)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;像通常一样使用Instantiate方法实例化UI元素的预制体。在设置实例化UI元素的父级时，建议使用Transform.SetParent方法，并将worldPositionStays参数设置为false。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Positioning the UI element(定位UI元素)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;UI元素通常使用其Rect Transform进行定位。如果UI元素是Layout Group的子元素，那么它将被自动定位，可以跳过定位步骤。&lt;/p&gt;
&lt;p&gt;在定位Rect Transform时，首先确定它是否具有或应具有任何拉伸行为。当anchorMin和anchorMax属性不相同时，会发生拉伸行为。&lt;/p&gt;
&lt;p&gt;对于非拉伸的Rect Transform，通过设置anchoredPosition和sizeDelta属性最容易设置位置。anchoredPosition指定了枢轴相对于锚点的位置。sizeDelta在没有拉伸时就和大小一样。&lt;/p&gt;
&lt;p&gt;对于拉伸的Rect Transform，使用offsetMin和offsetMax属性设置位置可能更简单。offsetMin属性指定了rect的左下角相对于左下锚点的角。offsetMax属性指定了rect的右上角相对于右上锚点的角。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Customizing the UI Element(自定义UI元素)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你要动态实例化多个UI元素，那么你可能不希望它们看起来和做的事情都一样。无论是在菜单中的按钮，库存中的物品，还是其他东西，你可能希望各个项目有不同的文本或图像，当与之交互时，做不同的事情。&lt;/p&gt;
&lt;p&gt;这是通过获取各种组件并更改其属性来完成的。参见Image和Text组件的脚本引用，以及如何从脚本中使用UnityEvents。&lt;/p&gt;
&lt;h4 id=&#34;creating-screen-transitions创建屏幕过渡&#34;&gt;Creating Screen Transitions(创建屏幕过渡) &lt;a href=&#34;#creating-screen-transitions%e5%88%9b%e5%bb%ba%e5%b1%8f%e5%b9%95%e8%bf%87%e6%b8%a1&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h4&gt;&lt;p&gt;需要在多个UI屏幕之间进行转换是相当常见的。在这个页面中，我们将探讨一种使用动画和状态机来驱动和控制每个屏幕的简单方式来创建和管理这些过渡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Overview(概述)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;高级思想是我们的每个屏幕都将有一个动画控制器，包含两个状态（打开和关闭）和一个布尔参数（打开）。要在屏幕之间进行转换，你只需要关闭当前打开的屏幕并打开所需的屏幕。为了简化这个过程，我们将创建一个小型的类ScreenManager，它将跟踪并处理关闭任何已经打开的屏幕。触发转换的按钮只需请求ScreenManager打开所需的屏幕。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thinking about Navigation(关于导航)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你计划支持控制器/键盘导航的UI元素，那么有几件事情是需要注意的。避免在屏幕外部有Selectable元素是很重要的，因为那会让玩家能够选择到屏幕外的元素，我们可以通过停用任何屏幕外的层次结构来做到这一点。我们还需要确保当显示新屏幕时，我们设置其作为选定的元素，否则玩家将无法导航到新的屏幕。我们将在下面的ScreenManager类中处理所有这些。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Setting up the Animator Controller(设置动画控制器)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;让我们来看看为动画控制器做屏幕过渡的最常见和最小的设置。控制器将需要一个布尔参数（打开）和两个状态（打开和关闭），每个状态都应该有只有一个关键帧的动画，这样我们就让状态机为我们做过渡混合。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScreenTransitionAnimatorOpen.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScreenTransitionAnimatorClosed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;现在我们需要创建两种状态之间的转换，让我们从Open到Closed的转换开始，并正确设置条件，我们希望当参数Open设置为false时，从Open转换到Closed。现在我们创建从Closed到Open的转换，并设置条件为当参数Open为true时，从Closed转换到Open。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScreenTransitionAnimatorTransitionToOpen.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScreenTransitionAnimatorTransitionToClosed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Managing the screens(管理屏幕)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;有了上述所有设置，我们唯一缺少的就是在我们想要过渡的屏幕的Animator上把参数Open设置为true，并在当前打开的屏幕的Animator上把Open设置为false。为了做到这一点，我们将创建一个小脚本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine.UI;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; UnityEngine.EventSystems;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ScreenManager&lt;/span&gt; : MonoBehaviour {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Screen to open automatically at the start of the Scene&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Animator initiallyOpen;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Currently Open Screen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Animator m_Open;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Hash of the parameter we use to control the transitions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; m_OpenParameterId;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//The GameObject Selected before we opened the current Screen.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Used when closing a Screen, so we can go back to the button that opened it.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; GameObject m_PreviouslySelected;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Animator State and Transition names we need to check against.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; k_OpenTransitionName = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Open&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; k_ClosedStateName = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Closed&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OnEnable()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//We cache the Hash to the &amp;#34;Open&amp;#34; Parameter, so we can feed to Animator.SetBool.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_OpenParameterId = Animator.StringToHash (k_OpenTransitionName);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//If set, open the initial Screen now.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (initiallyOpen == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        OpenPanel(initiallyOpen);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Closes the currently open panel and opens the provided one.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//It also takes care of handling the navigation, setting the new Selected element.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; OpenPanel (Animator anim)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (m_Open == anim)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Activate the new Screen hierarchy so we can animate it.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        anim.gameObject.SetActive(&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Save the currently selected button that was used to open this Screen. (CloseCurrent will modify it)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; newPreviouslySelected = EventSystem.current.currentSelectedGameObject;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Move the Screen to front.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        anim.transform.SetAsLastSibling();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        CloseCurrent();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_PreviouslySelected = newPreviouslySelected;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Set the new Screen as then open one.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_Open = anim;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Start the open animation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_Open.SetBool(m_OpenParameterId, &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Set an element in the new screen as the new Selected one.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        GameObject go = FindFirstEnabledSelectable(anim.gameObject);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        SetSelected(go);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Finds the first Selectable element in the providade hierarchy.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; GameObject FindFirstEnabledSelectable (GameObject gameObject)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        GameObject go = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; selectables = gameObject.GetComponentsInChildren&amp;lt;Selectable&amp;gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; selectable &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; selectables) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (selectable.IsActive () &amp;amp;&amp;amp; selectable.IsInteractable ()) {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                go = selectable.gameObject;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; go;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Closes the currently open Screen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//It also takes care of navigation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Reverting selection to the Selectable used before opening the current screen.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; CloseCurrent()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (m_Open == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Start the close animation.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_Open.SetBool(m_OpenParameterId, &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Reverting selection to the Selectable used before opening the current screen.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        SetSelected(m_PreviouslySelected);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Start Coroutine to disable the hierarchy when closing animation finishes.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        StartCoroutine(DisablePanelDeleyed(m_Open));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//No screen open.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        m_Open = &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Coroutine that will detect when the Closing animation is finished and it will deactivate the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//hierarchy.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IEnumerator DisablePanelDeleyed(Animator anim)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; closedStateReached = &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; wantToClose = &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; (!closedStateReached &amp;amp;&amp;amp; wantToClose)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (!anim.IsInTransition(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                closedStateReached = anim.GetCurrentAnimatorStateInfo(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).IsName(k_ClosedStateName);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            wantToClose = !anim.GetBool(m_OpenParameterId);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;yield&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; WaitForEndOfFrame();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (wantToClose)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            anim.gameObject.SetActive(&lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//Make the provided GameObject selected&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//When using the mouse/touch we actually want to set it as the previously selected and&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;//set nothing as selected for now.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; SetSelected(GameObject go)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Select the GameObject.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        EventSystem.current.SetSelectedGameObject(go);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//If we are using the keyboard right now, that&amp;#39;s all we need to do.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; standaloneInputModule = EventSystem.current.currentInputModule &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; StandaloneInputModule;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (standaloneInputModule != &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//Since we are using a pointer device, we don&amp;#39;t want anything selected.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//But if the user switches to the keyboard, we want to start the navigation from the provided game object.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//So here we set the current Selected to null, so the provided gameObject becomes the Last Selected in the EventSystem.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        EventSystem.current.SetSelectedGameObject(&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;让我们把这个脚本挂起来，我们通过创建一个新的GameObject来实现这一点，我们可以把它重命名为&amp;quot;ScreenManager&amp;quot;，并添加上面的组件到它上面。你可以给它分配一个初始屏幕，这个屏幕在你的场景开始时会被打开。&lt;/p&gt;
&lt;p&gt;现在，让我们来做最后的部分，让UI按钮工作起来。选择应该触发屏幕过渡的按钮，并在检视器中的On Click()列表下添加一个新的动作。把我们刚创建的ScreenManager GameObject拖到ObjectField上，在下拉菜单中选择ScreenManager-&amp;gt;OpenPanel (Animator)，并把你希望用户点击按钮时打开的面板拖拽到最后的ObjectField上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-07-09-unity-ugui/UI_ScreenTransitionButtonInspector.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes(备注)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这种技术只需要每个屏幕都有一个带有Open参数和Closed状态的AnimatorController就可以工作&amp;ndash;你的屏幕或状态机器是如何构造的并不重要。这种技术也非常适用于嵌套屏幕，这意味着你只需要每个嵌套层级一个ScreenManager。&lt;/p&gt;
&lt;p&gt;我们在上面设置的状态机器的默认状态是Closed，所以所有使用这个控制器的屏幕都开始为关闭状态。ScreenManager提供了一个initiallyOpen属性，所以你可以指定哪个屏幕首先显示。&lt;/p&gt;
&lt;h3 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-RenderDoc Integration(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/11/2/2023-11-2-unity-document-101/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/11/2/2023-11-2-unity-document-101/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;renderdoc-集成&#34;&gt;RenderDoc 集成 &lt;a href=&#34;#renderdoc-%e9%9b%86%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;编辑器支持集成启动和捕获 RenderDoc 图形调试器，进行详细的帧内省和调试。&lt;/p&gt;
&lt;p&gt;该集成仅支持 RenderDoc 的 0.26 版本或更高版本，因此，如果当前安装的是较早版本，则必须更新至至少 0.26 版本。&lt;/p&gt;
&lt;p&gt;**注意：**尽管集成仅在编辑器中可用，但在独立播放器构建中，可以像平常一样使用 RenderDoc 而无需额外设置。&lt;/p&gt;
&lt;p&gt;**注意：**只有当 Unity 在 RenderDoc 支持的平台和 API 上运行时，才能捕获帧 - 目前仅支持 Windows 平台和 DirectX 11 或 OpenGL Core Profile。如果使用其他 API，则 RenderDoc 集成将暂时被禁用，直到启用支持的 API。&lt;/p&gt;
&lt;h2 id=&#34;加载-renderdoc&#34;&gt;加载 RenderDoc &lt;a href=&#34;#%e5%8a%a0%e8%bd%bd-renderdoc&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果检测到 RenderDoc 安装，则在加载编辑器后的任何时间，您可以右键单击 Game View 或 Scene View 的标签，然后选择 “Load RenderDoc” 选项。这将重新加载图形设备，因此您必须保存任何更改，但之后 RenderDoc 将准备好进行捕获，而无需重新启动编辑器或构建独立播放器。&lt;/p&gt;
&lt;p&gt;**注意：**您还可以像通常一样通过 RenderDoc 启动编辑器，或者通过命令行选项 - pass the -load-renderdoc 来从启动时加载 RenderDoc。&lt;/p&gt;
&lt;h2 id=&#34;使用-renderdoc-捕获帧&#34;&gt;使用 RenderDoc 捕获帧 &lt;a href=&#34;#%e4%bd%bf%e7%94%a8-renderdoc-%e6%8d%95%e8%8e%b7%e5%b8%a7&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;当检测到与编辑器加载的兼容版本的 RenderDoc 时，将在 Game View 和 Scene View 的&lt;strong&gt;工具栏&lt;/strong&gt;右侧出现一个新按钮。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-11-2-unity-document-101/RenderDocCaptureButton.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;点击这个按钮将触发对视图的下一帧渲染进行捕获。如果 RenderDoc 工具的&lt;strong&gt;用户界面&lt;/strong&gt;未打开，将启动一个新实例显示捕获的内容；如果它已经运行，则最新的捕获将自动显示在那里。从那里，您可以打开捕获的内容，并使用该工具进行调试。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-11-2-unity-document-101/RenderDocCaptureList.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;包含着色器调试信息&#34;&gt;包含着色器调试信息 &lt;a href=&#34;#%e5%8c%85%e5%90%ab%e7%9d%80%e8%89%b2%e5%99%a8%e8%b0%83%e8%af%95%e4%bf%a1%e6%81%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;默认情况下，为了优化 DirectX11 着色器的大小，会剥离调试信息。这意味着常量和资源将没有名称，并且无法获得&lt;strong&gt;着色器&lt;/strong&gt;源代码。要在着色器中包含此调试信息，在着色器的 CGPROGRAM 块内包含 &lt;strong&gt;#pragma enable_d3d11_debug_symbols&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;其他图形调试技术&#34;&gt;其他图形调试技术 &lt;a href=&#34;#%e5%85%b6%e4%bb%96%e5%9b%be%e5%bd%a2%e8%b0%83%e8%af%95%e6%8a%80%e6%9c%af&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果使用 D3D11 构建独立播放器，您可以捕获帧并使用 Visual Studio 图形调试器进行调试。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unity中文版-Create Gameplay Editor Features-Visual Studio C# integration(自翻译)</title>
      <link>https://www.chenqiaoqian.com/2023/11/1/2023-11-1-unity-document-100/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://www.chenqiaoqian.com/2023/11/1/2023-11-1-unity-document-100/</guid>
      <description>&lt;p&gt;翻译Unity中文版的初衷是因为官方提供的中文版存在缺陷，而且翻译的不全。现在基于Unity2023.2版本对官方文档进行翻译。&lt;/p&gt;
&lt;h1 id=&#34;visual-studio-c-集成&#34;&gt;Visual Studio C# 集成 &lt;a href=&#34;#visual-studio-c-%e9%9b%86%e6%88%90&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Unity 通过 Visual Studio 的 Code Editor Package 与 Microsoft Visual Studio 进行集成。这个包在安装 Unity 时预先安装。如果在安装 Unity 时已经安装了 Visual Studio，那么 Unity 默认使用 Visual Studio 来打开和编辑&lt;strong&gt;脚本&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-11-1-unity-document-100/VS-package.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;将-visual-studio-设置为默认的脚本编辑器&#34;&gt;将 Visual Studio 设置为默认的脚本编辑器 &lt;a href=&#34;#%e5%b0%86-visual-studio-%e8%ae%be%e7%bd%ae%e4%b8%ba%e9%bb%98%e8%ae%a4%e7%9a%84%e8%84%9a%e6%9c%ac%e7%bc%96%e8%be%91%e5%99%a8&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;如果在安装 Unity 时安装了 Visual Studio，或者在 Unity 安装过程中安装了 Visual Studio，Unity 会自动将 Visual Studio 设置为默认的脚本编辑器。您可以将 Visual Studio 作为模块安装到现有的 Unity 安装中。有关更多信息，请参阅使用 Unity Hub 下载和安装编辑器和模块。&lt;/p&gt;
&lt;p&gt;要手动设置默认的脚本编辑器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在主菜单中选择&lt;strong&gt;Edit &amp;gt; Preferences&lt;/strong&gt; (macOS: &lt;strong&gt;Unity &amp;gt; Settings&lt;/strong&gt;)以打开首选项窗口。&lt;/li&gt;
&lt;li&gt;打开&lt;strong&gt;外部工具&lt;/strong&gt;菜单。&lt;/li&gt;
&lt;li&gt;单击&lt;strong&gt;外部脚本编辑器&lt;/strong&gt;下拉菜单，并选择&lt;strong&gt;Microsoft Visual Studio&lt;/strong&gt;。该选项的外观根据您安装的 Microsoft Visual Studio 的版本而有所变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.chenqiaoqian.com/2023-11-1-unity-document-100/VS-external-tools.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;A：外部脚本编辑器下拉菜单，显示所选脚本编辑器的名称和版本。&lt;/p&gt;
&lt;p&gt;B：Unity 与所选脚本编辑器集成的 Unity 包的名称和版本。&lt;/p&gt;
&lt;p&gt;Unity 使用 Visual Studio 的 C# 编译器来编译脚本。当您使用 Visual Studio 和 Visual Studio 编辑器包时，Unity 和 Visual Studio 都会显示脚本中的任何错误详细信息。&lt;/p&gt;
&lt;p&gt;Unity 自动创建和维护 Visual Studio 的.sln 和.csproj 文件。您可以在&lt;strong&gt;首选项&lt;/strong&gt;窗口的&lt;strong&gt;外部工具&lt;/strong&gt;菜单中控制 Unity 是否为项目的某些元素生成.csproj 文件，如上面的屏幕截图所示。启用或禁用复选框以切换 Unity 是否为给定选项生成.csproj 文件。&lt;/p&gt;
&lt;p&gt;在项目中的任何贡献者对文件状态进行更改（例如编辑现有文件或创建新文件）时，Unity 会重新生成项目的.sln 和.csproj 文件。您还可以从 Visual Studio 中向解决方案添加文件。Unity 会导入任何新文件，并在下次重新创建项目文件时将它们包含进去。&lt;/p&gt;
&lt;h1 id=&#34;结论&#34;&gt;结论 &lt;a href=&#34;#%e7%bb%93%e8%ae%ba&#34; class=&#34;anchor&#34;&gt;🔗&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;搬砖愉快！&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
