u3d预制件笔记

news/2025/2/26 19:30:04

本文意在整合预制件相关重要信息,将较多的信息量浓缩出精华,并记录个人理解心得

一.预制件的概念和用途

Unity 的预制件系统允许创建、配置和存储游戏对象及其所有组件、属性值和子游戏对象作为可重用资源。预制件资源充当模板,在此模板的基础之上可以在场景中创建新的预制件实例。

精简结论:预制件是gameObject的模板

二.预制件应用场合

  • 要在场景中的多个位置或项目中的多个场景之间重用以特定方式配置的游戏对象,比如道具,子弹,怪物,应将这类游戏对象转换为预制件
  • 如果游戏对象在一开始不存在于场景中,而希望在运行时实例化游戏对象(比如UI界面,子弹等),即使只有一个也应使用预制件。

精简结论:在场景中存在多个运行时生成的游戏对象应转换为预制件

预制件的掌握应该达成双向理解的程度:满足应用条件时能反应过来创建预制件,看到已存在的预制件时能判断出于什么需要而创建的

三.创建预制件资源和实例

3.1 创建预制件资源

将一个gameObject从 Hierarchy 窗口拖入 Project 窗口。该游戏对象和子游戏对象在 Project 窗口中成为新的资源。Project中的蓝色立方体图标代表预制件资源。

创建预制件资源的这一过程也会将原始游戏对象转换为预制件实例。该对象现在将成为新创建的预制件资源的实例。预制件实例以蓝色文本显示在 Hierarchy 窗口中,预制件的根游戏对象显示为蓝色立方体预制件图标。

3.2 创建预制件实例

可通过将预制件资源从 Project 视图拖动到 Hierarchy 或 Scene 视图,在 Editor 中创建预制件资源的实例。

3.3 选择预制件资源

有时想在有大量预制件的项目中快速找到某个预制件资源,有3种做法:

A.在预制件模式下点击标题

B.右键gameObject,在菜单中点击Select PrefabAsset

C.在Inspector中点击Open

3.4 替换预制件资源(不常用了解即可)

若要替换预制件资源,可采用的方法是从 Hierarchy 窗口中拖动新的游戏对象并将其放到 Project 窗口中现有的预制件资源上方。

四.在预制件模式下编辑预制件

要编辑预制件资源,请在预制件模式下将其打开。预制件模式允许您单独查看和编辑预制件资源的内容(独立于场景中的所有其他对象)。在预制件模式下所做的更改会影响该预制件的所有实例

4.1 进入预制件模式

可通过多种方法在预制件模式下开始编辑预制件,包括:

1.Hierarchy 中预制件旁边的箭头按钮(推荐)

2.Hierarchy 中选中预制件实例,Inspector中点击Open按钮

3.在 Project 窗口中双击预制件(推荐)

4.单击预制件资源的 Inspector 窗口中的“Open Prefab”按钮

4.2 退出预制件模式

进入预制件模式会使 Scene 视图和 Hierarchy 窗口仅显示该预制件的内容。在此处,预制件的根是常规游戏对象:没有蓝色的预制件实例图标。

Hierarchy 窗口在顶部显示一个预制件标题栏,其中显示当前打开的预制件。可以使用标题栏中的后退箭头向后导航一步

在预制件模式下,Scene 视图会在顶部显示一个示踪导航栏。最右边的条目是当前打开的预制件。使用示踪导航栏可导航回主要场景或可能已打开的其他预制件资源。

4.3 Auto Save

预制件模式在 Scene 视图的右上角有一个 Auto Save 设置。启用此设置后,对预制件所做的任何更改都会自动保存到预制件资源。默认情况下会启用 Auto Save。如果希望在进行更改时不自动将这些更改保存到预设资源,请关闭 Auto Save。在这种情况下,当退出当前预制件的预制件模式时,系统会询问是否要保存未保存的更改。

实践经验:推荐关闭Auto Save

好处1:如果对预制件进行了较多编辑,可节省时间,提升开发效率。

好处2:打开prefab后,只想进行一些尝试性的更改,比如隐藏一些gameObject,无需用版控软件对prefab还原。

4.4 撤消

在预制件模式下对预制件资源进行更改时,只能在仍处于预制件模式下时才能撤消这些更改。

五.实例覆盖

5.1 实例覆盖概述

实例覆盖允许在预制件实例之间创建变化。修改预制件资源时,更改将反映在其所有实例中。但是,也可以直接对单个实例进行修改。这样的做法叫做在特定实例上创建实例覆盖

有四种不同的实例覆盖类型:

  • 覆盖属性的值

  • 添加组件

  • 删除组件

  • 添加子游戏对象

实例覆盖存在一些限制:

  • 无法更改属于预制件的游戏对象的父级,
  • 且无法删除属于预制件的游戏对象(可以停用游戏对象,算作属性覆盖)

5.2 实例覆盖在Editor中的一些表现

在 Inspector 窗口中,实例覆盖的名称标签以粗体显示,左边距使用蓝线显示。

添加和删除的组件在 Inspector 中的相应图标上也有加减符号标示,而添加的游戏对象在 Hierarchy 窗口中的相应图标上有一个加号标示

5.3 覆盖优先

预制件实例上覆盖的属性值始终优先于预制件资源的值。这意味着,如果更改预制件资源的属性,对覆盖该属性的实例没有任何影响。

如果对预制件资源进行更改,但未按预期更新所有实例,则应检查实例上是否覆盖了该属性。最好仅在确实必要时才使用实例覆盖,因为如果整个项目中有大量实例覆盖,则很难判断对预制件资源的更改是否对所有实例都有影响。

实践经验:如果只有一个实例,在实例覆盖后点击Apply All,将变化同步预制体资源。

5.4 实例覆盖不包括Transform和RectTransform中的部分属性

对于在实例中改变Transform的Position和Rotation,以及RectTransform中的WidthHeightMarginsAnchors 和 Pivot 属性,一种特殊情况,不是作为显式实例覆盖

这是因为要求预制件的多个实例采用相同的位置和旋转是极其罕见的情况。更常见的情况是希望预制件实例具有不同的位置和旋转,因此 Unity 不会将它们视为预制件覆盖。

5.5 Overrides 下拉菜单

Overrides 下拉窗口显示预制件实例上的所有覆盖。允许将实例的覆盖应用于预制件资源,或将实例上的覆盖恢复为预制件资源上的值。只有根预制件实例会显示 Overrides 下拉选单按钮,其他预制件内的预制件不会显示此按钮。Overide菜单以树形结构显示:根节点下/gameobject/组件/属性,预制件中的值和覆盖值的对比,如下图所示。

  • Apply 会修改预制件资源。此操作会将覆盖(当前仅在您的预制件实例上)置于资源之上。这意味着预制件资源现在具有该修改,而预制件实例不再具有该修改作为覆盖。

  • Revert会修改预制件实例。此操作实质上会丢弃您的覆盖并将其恢复为预制件资源的状态。

Revert All 和 Apply All 按钮,用于一次性还原或应用所有更改。

5.6 上下文菜单

除了 Overrides 下拉窗口,还可以使用 Inspector 中的上下文菜单来还原应用各个覆盖。

六.嵌套预制件

可以在其他预制件内包含预制件实例。这称为嵌套预制件。

  • 在预制件模式下,可将其他预制件(需排除自身和包含自身的预制件,unity不支持)托到Hierarchy中,即形成嵌套

也可将非预制件类型的子节点托到Project中将其转化为预制件,形成嵌套

七.预制件变体

如果存在预制体A,希望基于A存在预制体A1,A2,A3,则应使用预制件变体。

7.1 创建预制件变体

可在 Project 视图中的预制件上右键单击,然后选择 Create > Prefab Variant。这样将创建所选预制件的变体,该变体最初没有任何覆盖。

还可以将预制件实例从 Hierarchy 窗口中拖动到 Project 窗口中。执行此操作时会出现一个对话框,询问是要创建新的原始预制件还是预制件变体。如果选择预制件变体,则会根据拖动的预制件实例创建新的预制件变体。

预制件变体将显示带有箭头的蓝色预制件图标。

7.2 编辑预制件变体

编辑预制件变体的操作大部分和编制预制件一样,有以下几处不同

  • 标题变为变体类型的icon
  • 根节点为实心立方体
  • 覆盖按钮标题多了to Base

八.解压预制件实例

要将预制件实例的内容恢复到常规游戏对象,请解压缩预制件实例。此操作正是创建(打包)预制件的相反操作,不同之处在于此操作不会破坏预制件资源,而是仅影响预制件实例。

可通过在 Hierarchy 窗口中右键单击预制件实例并选择 Unpack Prefab 来解压缩预制件实例。场景中生成的游戏对象不再与其以前的预制件资源有任何关联。预制件资源本身不受此操作的影响,

如果在解压缩之前在预制件实例上有任何覆盖,这些覆盖将被“烘焙”到生成的游戏对象上。也就是说,值将保持不变,但不再具有覆盖状态,因为没有需要覆盖的预制件。

如果解压缩内含嵌套预制件的预制件,则嵌套的预制件仍然是预制件实例,并且仍然关联到它们各自的预制件资源。同样,如果解压缩预制件变体,根部将会有一个新的预制件实例,即基础预制件的实例。

通常,解压缩预制件实例后生成的对象与您进入该预制件的预制件模式时看到的对象相同。这是因为预制件模式会显示预制件内部的内容,而解压缩预制件实例会解压缩预制件的内容。

如果希望将预制件实例替换为普通游戏对象并完全消除与所有预制件资源的所有关联性,则可以在 Hierarchy 窗口中右键单击该预制件实例,然后选择 Unpack Prefab Completely。此做法相当于解压缩预制件,并继续解压缩原先作为嵌套预制件或基础预制件出现的所有预制件实例。

官方手册参考:

预制件


http://www.niftyadmin.cn/n/5869100.html

相关文章

OkHttp、Retrofit、RxJava:一文讲清楚

一、okHttp的同步和异步请求 Call 是 OkHttp 的核心接口,代表一个已准备好执行的 HTTP 请求。它支持 同步 和 异步 两种模式: enqueue——>okHttp异步 OkHttpClient client new OkHttpClient();Request request new Request.Builder().url("…

UIAutomation开发常用方法的参考文档

简介 由于UIAutomation的官方文档只有一个github中的readme文件,只是简单的使用示例,具体使用还需要在代码中查找,非常不方便。经过我多年使用UIAutomation开发的经验和整理,把常用的功能梳理成本文档,作为我的开发参考使用,这样就不用每次都翻代码了,同时也可以使用AI…

【机器学习】强化学习(2)——捋清深度强化学习的思路

在之前学习的过程中我了解到深度学习中很重要的一个概念是反向传播,最近看论文发现深度强化学习(DRL)有各种各样的方法,但是却很难区分他们的损失函数的计算以及反向传播的过程有何不同。在有监督的学习中,损失可以理解…

什么是死锁?构成死锁的条件如何解决

什么是死锁?构成死锁的条件&如何解决 1. 什么是死锁 在计算机科学中,死锁是一种非常常见且棘手的问题。从线程和锁的角度来看,死锁主要存在三种典型情况:一线程一锁、两线程两锁以及 M 线程 N 锁。接下来,我们将…

微信小程序源码逆向 MacOS

前言 日常工作中经常会遇到对小程序的渗透测试,微信小程序的源码是保存在用户客户端本地,在渗透的过程中我们需要提取小程序的源码进行问题分析,本篇介绍如何在苹果电脑 MacOS 系统上提取微信小程序的源码。 0x01 微信小程序提取 在苹果电…

HTML解析 → DOM树 CSS解析 → CSSOM → 合并 → 渲染树 → 布局 → 绘制 → 合成 → 屏幕显示

一、关键渲染流程 解析 HTML → 生成 DOM 树 浏览器逐行解析 HTML&#xff0c;构建**DOM&#xff08;文档对象模型&#xff09;**树状结构 遇到 <link> 或 <style> 标签时会暂停 HTML 解析&#xff0c;开始加载 CSS 解析 CSS → 生成 CSSOM 将 CSS 规则解析为**…

Pycharm-Version: 2024.3.3导入conda环境

打开一个新项目&#xff0c;点击File->Settings 找到Project->python interpreter 新增环境&#xff0c;点击add interpreter->add local interpreter 点击select existing->conda&#xff0c;选择地址为&#xff1a;anoconda/library/bin/conda.bat&#xff0c…

Fisher散度:从信息几何到机器学习的隐藏利器

Fisher散度&#xff1a;从信息几何到机器学习的隐藏利器 在机器学习和统计学中&#xff0c;比较两个概率分布的差异是常见任务&#xff0c;比如评估真实分布与模型预测分布的差距。KL散度&#xff08;Kullback-Leibler Divergence&#xff09;可能是大家熟悉的选择&#xff0c…