【Unity3D】RuntimeTransformGizmos插件

博客分类: Unity3D-Plugin 阅读次数: comments

【Unity3D】RuntimeTransformGizmos插件

一、前文

  Runtime Transform Gizmos看名字顾名思义就是一个可以让Unity在运行的时候,控制物体位置方向缩放的小工具。   Runtime Transform Gizmos是一个脚本API,它可以让你在游戏中转换对象,能够在游戏中直观和专业的转换对象是非常有用的,特别是当你在运行时编辑器或游戏中,使用者可以移动、旋转和缩放对象。想要做一个模型工具吗?你肯定需要一些方法让他们在场景中操作对象,这个插件将可以完成。   因为网上的教程特别少,所以特意编写这篇文章,如果能给大家带来点帮助,请大家给我点个赞哦。

Asset Store中的截图 在这里插入图片描述

官方Demo中的截图 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

二、下载地址

  1. 可以直接在Asset Store中下载导入,30美金,如果想要追求原创,并且可以想要追求最新版的话可以从官方下载
  2. https://download.csdn.net/download/q764424567/10908107 如果只是学习的话,就从这个链接用免费的积分下载就行了 。

三、正文

1、 导入

将压缩包解压之后得到 在这里插入图片描述 拖入到Unity中就可以了 在这里插入图片描述

2、官方Demo

在这里插入图片描述 只是一些简单的模型,没有特别的地方 在这里插入图片描述 重点

如何去看官方Demo呢 在这里插入图片描述 官方Demo大部分場景都會比較簡單 所以主要就是看一下场景中都有哪些东西 灯光就不说了,Parent是模型,没有加载脚本,所以主要就是这个(Singleton)RTEditor.RuntimeEditorApplication这个对象了。

接下来就主要讲一下这个对象

3、(Singleton)RTEditor.RuntimeEditorApplication对象

在这里插入图片描述

4、工具使用步骤

新建场景 在这里插入图片描述 初始化 在这里插入图片描述 在这里插入图片描述 新建父对象,然后新建一些模型 在这里插入图片描述 保存场景然后运行 在这里插入图片描述 已经可以正常运行了

5、快捷键

本章会列出默认的快捷键,注意:包含LCTRI的热键。在游戏视图中不能正常工作,你需要添加SHIFT键才能使它们正常工作。默认的快捷键也可以通过定制键映射来改变快捷键。

快捷键作用
W激活位置变换工具
E激活旋转工具
R激活缩放工具
U激活体积缩放工具
Q关闭装置,这可以使没有一个工具在活动
G激活世界坐标轴
L激活本地坐标轴
P变换中心点和网格轴心点
F相机对焦到当前选中的物体
空格+ 鼠标滑轮修改网格Y的位置
空格+ 左CTRL + 鼠标滑轮比例更大的修改网格Y的位置
左CTRL + D 复制对象
V Translation模式下,执行模型顶点捕捉
B Translation模式下,执行BoxCollider顶点捕捉
左CTRL Translation模式下,执行顶点移动的时候以更大的比例移动
SHIFT Translation模式下,当按住时,允许你沿着相机的右侧和轴向上平移;
空格Translation模式下,地形(或网格,如果没有地形盘旋)表面位置与Y轴对齐
空格+XTranslation模式下,地形(或网格,如果没有地形盘旋)表面位置与X轴对齐
空格+ZTranslation模式下,地形(或网格,如果没有地形盘旋)表面位置与Z轴对齐
左CTRL + 空格Translation模式下,地形(如果没有地形盘旋,则使用网格)没有轴向对齐的地表位置
左ALT Translation模式下,激活移动比例(可以在gizmo检查器中指定比例值)
左 CTRL Rotation 模式下,执行顶点移动的时候以更大的比例移动
左 CTRL Scale 模式下,执行顶点移动的时候以更大的比例移动
左 SHIFT Scale 模式下,按住不放时,允许您同时沿所有轴执行缩放操作
左 CTRL Volume scale 模式下,执行顶点移动的时候以更大的比例移动
左SHIFT Volume scale 模式下,在拖动开始之前按住它,将会使这个小工具从对象的中心缩放
左CTRL 多选
左SHIFT 取消多选,并选定当前对象
CTRL/CMD + SHIFT + Z 撤销
CTRL/CMD + SHIFT + Y 返回

6、小工具Gizmos

在这一章中,我们将看看这些小发明是如何工作的,以及可以为每个小发明修改的所有属性。我们还会讨论变换空间和变换轴心点。除了一些小的例外,所有的小发明都像你在Unity编辑器中可以访问的那些一样。例如,scale gizmo允许您使用一组缩放三角形一次沿两个轴缩放。此外,当您用鼠标悬停其中一个gizmo轴时,该轴的颜色将更改为为所选状态设置的颜色。您不需要按鼠标左键来改变悬停轴的颜色

6.1 Translation Gizmos

可以在场景中移动物体,就像在Unity Editor模式中一样,下面是软件在运行时候的截图 在这里插入图片描述 如何使用呢?

如果单击并拖动其中一个gizmo轴,您将沿着相应的gizmo轴执行转换。这个小发明还有一组正方形。单击并拖动其中一个方块将允许vou同时沿两个轴执行转换。如果你按住Shift,一个正方形将显示在gizmo位置的中心。选择方块时,点击并拖动鼠标,将沿着摄像机的右轴和上轴进行平移。这有点像在屏幕空间中执行翻译。注:move gizmo可用于执行特定的特殊操作,如上面讨论的摄像机轴平移或顶点抓拍等。当执行特殊操作时,会在gizmo的中心出现一个正方形。我把它叫做特殊运算平方或者简称为特殊运算平方

Gizmo Base Scale

:统一的轴的比例,这个比例适用于所有的轴

Preserve Gizmo Screen Size

:勾选之后,轴的比例大小不受摄像机远近影响,取消勾线之后,轴的比例大小就跟着摄像机远近进行变化

X,Y,Z Axis Color

:可以调整三个轴的颜色

Show X,Y,Z Axis

:是否显示X,Y,Z轴 在这里插入图片描述

Axis Length

:轴长度

Arrow Cone Radius

:圆锥体箭头的半径

Arrow Cone Length

:圆锥体箭头的长度

Are Arrow Cones Lit

:圆锥体箭头是否高亮显示

Multi Axis Square Alpha

:整体移动轴的Alpha值

Multi Axis Square Size

:整体移动轴的大小

Adjust Multi Axis For Better Visibility

:勾选之后整体移动轴的方向会随着摄像机的位置进行调整,以适合可以更方便的点击到

Color Of Special Op Square

:在特殊操作的时候显示的轴的颜色(相机轴向平移、顶点捕捉或地形/网格表面放置)

Color Of Special Op Square(Selected)

: 当移动到上面说的特殊情况下的颜色 在这里插入图片描述

Transformable Layers

:Transform工具可以控制的层,如果没有勾选将控制不了

Vertex Snap Layers

:顶点工具可以控制的层

所有的小发明都有相关的键映射,允许你改变热键,激活一个特定的小发明的行为(例如顶点捕捉,步骤捕捉,表面放置,特殊的op等)。检查器中键映射的显示格式如下图所示: 在这里插入图片描述 举个栗子 在这里插入图片描述 用于激活带有Z轴的move gizmo的表面布局对齐

Num keys

:键值映射,最多有两个值,如果不想用的话可以设成0

Modifiers

:组合键使用,需要组合键的勾选Modifiers,比如左Ctrl+Space,就可以勾选LeftControl

Mouse buttons

:鼠标组合键

6.2 Rotation Gizmos

旋转小工具允许你在场景中旋转对象,它的行为方式与Unity编辑器相同。下面显示了旋转的屏幕截图 在这里插入图片描述 使用旋转装置旋转装置有3个彩色的圆圈,可以用来绕一个轴旋转。您可以通过单击其中一个圆来绕单个轴旋转,然后开始插入鼠标。正如你在上面的图像中看到的,还有一个外圆(这个外圆包围着旋转的球体,它也稍大一些)。点击这个圆,然后拖动鼠标将允许你围绕摄像机视图矢量旋转。如果你单击虚球上的一个点(不是我们目前讨论的任何组件上的点),你将能够围绕摄像机向右和向上旋转轴。

旋转小发明支持步骤捕捉,它允许您以指定的步骤值(以度数单位表示)的增量旋转。例如,如果将该步骤值设置为15,则只在累计旋转量为> 15时执行旋转。为了使用阶跃捕捉,您必须保持Ctrl按钮按下,然后像往常一样操作这个小发明。注意:只有当你使用3种颜色的圆圈中的一种时,才可以使用步骤捕捉。 在这里插入图片描述

Gizmo Base Scale

:统一的轴的比例,这个比例适用于所有的轴

Preserve Gizmo Screen Size

:勾选之后,轴的比例大小不受摄像机远近影响,取消勾线之后,轴的比例大小就跟着摄像机远近进行变化

X,Y,Z Axis Color

:可以调整三个轴的颜色

Show X,Y,Z Axis

:是否显示X,Y,Z轴 在这里插入图片描述

Full Circle X,Y,Z

:默认情况下,旋转圆只被绘制一半,勾选之后,绘制整个圆

Rotation Sphere Radiu

:控制旋转球的半径大小

Rotation Sphere Color

:控制旋转球的颜色

Is Rotation Sphere Lit

:勾选之后,渲染的时候会旋转球受灯光影响

Show Rotation Guide

:显示一个旋转度数的旋转导轨

Rotation Guide Line Color

:改变旋转导轨的颜色

Rotation Guide Disc Color

:改变旋转导轨盘的颜色

Rotation Sphere Boundary

:如果选中此属性,则旋转的边界将会被绘制

Show Camera Look Rotation Circle

:指定是否可以沿着相机视图旋转向量画。注意:如果不是这样。选中后,您将无法沿摄像机视图矢量旋转。

Camera Look Rotation Circle Radius Scale

:允许你对摄像机视旋转圆的半径进行比例尺缩放,使圆变大或变小。注:比例是相对于旋转球的半径。例如,如果旋转球的半径是2。半径是1。5。圆的最终半径是2 15 =3。

Camera Look Rotationn Circle Line Color

:允许你控制相机的颜色看起来旋转圆;

Camera Lool Rotation Circle Color (Selected)

:一样属性上面所讨论的,但是是当圆被选中时(即鼠标悬停时);

Snap Step Value (In Degress)

:这允许您控制步骤,启用步骤拍摄时使用的值。这个值用度数表示使用 在这里插入图片描述

Transformable Layers

:Transform工具可以控制的层,如果没有勾选将控制不了 在这里插入图片描述

键映射,跟上面使用方法一样,不再详解

6.3 Scale Gizmos

Scale gizmo的工作方式几乎与Unity编辑器中的缩放小工具相同,下面的图片显示了这个缩放装置 在这里插入图片描述 使用定标仪这个比例装置有3个彩色轴。单击这些轴并拖动鼠标,将单独对指定的轴执行缩放操作。正如您在上面的图像中看到的,还有3个多轴三角形。点击其中一个三角形,并拖动鼠标,将执行一次沿两个轴的缩放操作。如果你想同时在所有轴上执行缩放操作,你必须按住Shift键,然后拖动鼠标。 Scale gizmo支持步骤捕捉,允许您以指定的世界单位数量的增量进行缩放。例如,如果step值设置为1,则只在累计scale为>=1时执行scale操作。为了使用步骤捕捉,您必须按下ctrl键,然后像往常一样使用Scale gizmo(拖动轴或多轴三角形,或按Shift一次按下所有轴的比例)。 在这里插入图片描述

Axis Length

:缩放轴的长度

Scale Box Width,Height,Depth

:这个属性控制这个gizmo轴顶端的盒子

Are Scale Boxes Lit

:如果选中,缩放框在渲染时会受到灯光的影响。如果你想要一个外观平直的小玩意,你可以取消这个属性;

Adjust Axis Length While Scaling Objects

:勾选之后,gizmo轴的长度将缩放以及对象同时进行操作。例如,如果你沿着X轴缩放这个属性被选中,当物体在X轴上变大或变小时,这个小玩意的X轴也会变大或变小;

Multi Axis Triangle Sid

:控制多轴三角形的相临边的长度,这可以让三角形变大或变小

Adjust Multi Axis For Better Visibility

:如果选中此属性,则多轴三角形将始终根据摄像机视图向量调整其位置,以获得更好的可视性。位置总是以这样一种方式计算:无论当前相机的角度如何,选择这3个三角形中的任何一个都很容易。如果未选中此选项,则三角形将始终位于相同的位置,对于某些摄像机角度,可能难以选择某些三角形;

Adjust Multi Axis Triangles While Scaling Objects

:在缩放对象时调整多轴三角形如果选中此选项,则多轴三角形的面积将与缩放操作中涉及的对象一起缩放。例如,如果你沿着X轴和Y轴缩放这个属性被选中,当物体在X轴和Y轴上变大或变小时,这个小玩意的XY三角形也会变大或变小;

Color Of All-Axes Square Lines

:控制线条的颜色,当你想要同时缩放所有轴时出现的方块

Color Of All-Axes Square Lines(Selected)

:跟上面的属性一致,但它适用于被选中(即鼠标悬停的时候)

Screen Size Of All-Axes Square

:允许你控制哪个方块的屏幕大小,当你想要同时执行三个轴上的缩放操作时出现

Adjust All-Axes Square While Scaling Objects

:如果选中此选项,则允许您同时沿所有3个轴缩放的正方形的面积将与缩放操作中涉及的对象一起缩放。

Draw Objects Local Axes While Scaling

:如果选中此属性,则在执行缩放操作时,将绘制缩放操作所涉及的对象的本地轴。注意:这些轴的颜色将与用于绘制gizmo轴的颜色相同。

Objects Local Axes Length

:这个属性允许你控制obiject当地轴的长度时呈现。此属性仅适用于检查缩放时绘制对象的局部轴。

Preserve Axes Screen Size

:如果勾选这个属性,对象的大小当地轴线将保持大致相同的不管多远的对象是相机。否则,当它们靠近或远离相机时,线条就会变大或变小。此属性与一般讨论的保持小发明屏幕尺寸属性相同

Adjust Object Local Axes While Scaling

:如果这是勾选时,物体的长度本地线将被对象参与缩放管理。例如,如果你是沿着X和Y轴缩放和检查这个属性,作为对象变得更大沿着X轴和Y轴或更小,当地X和Y轴的对象还成为规模更大或更小

Snap Step Value(In World Units)

:这允许您控制在启用步骤捕捉时使用的步骤值。该值以世界单位表示

6.4 Volume Scale Gizmos

volume scale gizmo是另一种gizmo类型,它允许您执行对象缩放 它的工作原理和标准的缩放小工具有点不同。,而不是使用可以拖动的轴 gizmo的工作方式与Unity提供给你的box collider小部件几乎相同 修改盒子对撞机。这与步骤捕捉功能结合起来可以提供很多功能 在某些场景中更直观的缩放界面。 在这里插入图片描述 这个小发明由6个拖动手柄组成,可以拖动它们来缩放对象。有两个拖动 每个轴的句柄。拖动其中一个将沿相应的对象本地轴缩放。 默认情况下,当您拖动时,gizmo的行为将类似于Unity Box Collider小部件,这意味着 物体的大小和位置都会受到影响。 在拖动之前按住SHIFT键将导致从对象的中心开始缩放。 这个键可以从gizmo的检查器中修改。注意:音量缩放小发明只有当一个对象被选中,并且该对象必须有amesh连接到它时才能工作。当选择多个对象时,gizmo将被隐藏

默认情况下,如果在拖动手柄时按住LCTRL, gizmo将缩放对象 指定步骤大小的增量(可以在检查器中修改)。启用的快捷键 也可以从检查器更改比例。 在这里插入图片描述

Line Color

:构成这个小发明盒子的线条的颜色。默认情况下不能用太小的alpha值,这样做的话不会完全覆盖对象选择框行。修改这个颜色可能意味着你还需要修改对象选择框线条的颜色,这样两个元素就可以很好地组合在一起;

Drag Handle Size (In pixels)

:拖动手柄的像素大小;

Snap Step(In World Units)

:当snap处于活动状态时,它控制snap step的增量。 注意:snap增量是用世界单位指定的。例如,如果这个值设置为2,gizmo将缩放对象,使其大小以2个世界单元的增量增加/减少

7、RunTime编辑器子系统

7.1、(Singleton)RTEditor.RuntimeEditorApplication

在这里插入图片描述

Enable Undo/Redo

:是否启用撤销/恢复

Use Custom Camera

:是否使用自己的自定义摄像机,注意:使用自己的摄像机之后,视角移动和对焦功能就失效了

Use Unity Colliders

:使用Unity碰撞器,如果这是选中的,你需要将碰撞器附加到游戏对象,以便能够与他们互动(例如选择,表面放置,顶点捕捉等)。如果没有选中,系统将使用自己的API来处理对象交互。这样做的好处是你不需要将任何碰撞器附加到你的游戏对象上。注意:如果你使用的网格分辨率很高,我建议你检查这个选项。在这种情况下,您可能会在应用程序启动时体验到较慢的帧速率。另一方面,如果您使用的是sprite对象,则需要取消勾选,否则你将无法与它们进行交互。

Light/Particle/Empty/ Object Volume Size

:光/粒子系统/空物体体积大小,只有在使用Unity碰撞器时才可见。在这种情况下,该工具现在使用自己的内部对象表示,这使得与场景对象进行交互成为可能。这3个值允许您定义光、粒子系统和空对象的体积大小。空对象是没有网格、地形、精灵或粒子系统组件的对象。如果为这些对象类型之一启用了选择,系统将使用这个卷大小来定义对象的边界框,以确定对象是否被选中(通过单击或选择矩形)

XZ Grid Settings

下面是对网格的设置

Is Visible

:允许您指定网格是否应该在场景中呈现

Line Color

:网格线的颜色

Cell Size X

:X轴上的网格的单元格大小

Cell Size Z

:Z轴上的网格的单元格大小

Y Position

:网格在Y轴上的位置

Y Offset Scroll Sensitivity

:Y轴的偏移滚动灵敏度,当使用鼠标滚轮调整网格的高度时,此属性用于指定网格对鼠标滚轮的敏感度;注意:此属性仅适用于没有使用Snapping/Steping的情况

Y Step

:Y轴阶跃值,当网格的Y位置被修改时使用Snapping/Steping启用。

7.2、(Singleton)RTEditor.EditorGizmoSystem

此对象的名称在首次创建时设置为(singleton) RTEditorEditorGizmoSystem,但如果您愿意,可以更改它。它表示管理所有gizmo对象的系统。它允许你在不同的gizmo类型之间切换,它计算gizmo对象的位置和方向,它还允许你改变gizmo变换空间和变换轴点 在这里插入图片描述

Translation Gizmo

:这是Translation Gizmo,可以用来在场景中平移物体,这是初始化系统时自动设置的

Rotation Gizmo

:这是Rotation Gizmo,可以在场景中旋转物体,这是初始化系统时自动设置的

Scale Gizmo

:这是Scale Gizmo,可以在场景中缩放物体,这是初始化系统时自动设置的

Volume Scale Gizmo

:这是Volume Scale Gizmmo,可以在场景中以BoxCollider的形式修改物体,这是初始化系统时自动设置的

Active Gizmo Type

:初始化的时候,默认激活的Gizmo

Translation;Rotation;Scale VolumeScale

:打开或者关闭不同类型的Gizmo

组件下面是一些键映射,在前面都解释过了,就不再重复了。 在这里插入图片描述

7.3、(Singleton)RTEditor.EditorObjectSelection

此对象的名称设置为(Singleton)RTEditor.EditorObjectSelection,这是系统初始化的时候设置的,可以更改。 这个系统可以去对象进行选择,该系统可以:

注意:如果使用Unity Colliders在RuntimeEditorApplication Inspector中被选中,你将只能选择带有collider的对象。

在这里插入图片描述

Restrications

限制条件

Can Select Terrain Objects

:可以选择地形对象

Can Select Light Objects

:可以选择灯光对象

Can Select Particle System Objects

:可以选择粒子系统对象

Can Select Sprite Objects

:可以选择Sprite对象

Can Select Empty Objects

:可以选择空对象。空对象是没有网格、光线、粒子系统、精灵或地形组件的对象;

Can Click-Select

:可以单选

Can Multi-Select

:可以多选

Selectable Layers

:可以被选择的层

Duplicatable Layers

:可以被复制的层

Selection Box Render Settings

对象选择之后的BoxRender设置 在这里插入图片描述

Draw Selection Boxes

:画选择框,你可以取消这个如果你不想画的对象选择

Selection Box Style

:选择框样式

Selection Box Render Mode

:选择框的Render模式

Corner Line Percentage

:角线,比例只有当使用这个属性对象选择框风格将角线。它指定了一半的框宽/高/深度的百分比,可以用来渲染角线。例如,0.5的值表示角线将是盒子的一半大小。1的值将使边角线等于盒子的半维;

Selection Box Line Color

:选择框线段颜色

Selection Box Size Add

:选择框的大小增加,小偏移量添加到选择框大小呈现。必要的,以避免Z战斗。例如,当选择多维数据集时,假设没有使用额外的偏移量,则选择框行像素将与多维数据集像素发生冲突,在选择框行中将出现空白

Selection Rectangle Render Settings

选择矩形渲染设置

Border Line Color

:边框线段颜色设置

Fill Color

:填充颜色

7.4、(Singleton)RTEditor.EditorCamera

此对象的名称设置为(Singleton)RTEditor.EditorCamera,在系统初始化的时候就自动设置,可以修改这个名字。这个相机可以让你在运行的时候浏览场景,提供基本的旋转,平移和缩放功能。 在这里插入图片描述 Zoom Settings 变焦设置 Is Zoom Enabled:是否启用摄像机变焦 Zoom Mode:摄像机变焦模式 Standard模式 Orthographic Standard Zoom Speed:直角平滑变焦速度,这允许你控制变焦速度时,变焦模式设置为平滑。此值仅在编辑器摄像机设置为正投影时应用。 Perspective Standard Zoom Speed:透视平滑变焦速度,与直角平滑值相同,但它适用于编辑器相机设置为透视 Smooth模式 Orthographic Smooth Value:直角平滑值,当缩放模式设置为平滑时,这允许您控制缩放速度达到0的速度。较小的值产生较长的缩放效果较大的值产生较短的缩放效果。此值仅适用于编辑器摄像机设置为 Perspective Smooth Value:透视平滑值,与正投影平滑值相同,但当Editor相机设置为透视时适用。 注意:当缩放模式设置为标准时,平滑值从检查器中消失,缩放速度属性被替换为标准缩放模式的缩放速度。由于相同的变焦速度在不同的相机类型和变焦模式下工作方式不同,因此根据相机类型和变焦模式设置不同的变焦速度非常有用。 Pan Settings 平移设置 Pan Mode:平移模式 Standard标准模式 Standard Pan Speed:平移速度 Smooth平滑模式 Note:Time value is approximate.注:时间值为近似值。 Smooth Value:平滑值 Smooth Pan Speed:平滑速度 Invert X Axis:反转平移X轴 Invert Y Axis:反转平移Y轴 Focus Settings对焦设置 Focus Mode:对焦模式 Smooth 平滑模式,相机对焦速度会随着时间推迟缓慢下降 Smooth Focus Time:平滑焦点时间 Focus Distance Time:平滑焦点的间隔时间 Constant Speed 恒速,相机会恒定速度对焦 Constant Focus Speed:恒定速度 Focus Distance Scale:对焦距离刻度,当相机对焦时,将为相机计算一个位置,使其正好位于obiect选择的前面。此属性允许您缩放相机和对象选择之间的距离。较大的值会使相机远离焦点。最小可能的比例是1.0f Instant 瞬间,相机会瞬间对焦到物体 Focus Distance Scale:对焦距离刻度,当相机对焦时,将为相机计算一个位置,使其正好位于obiect选择的前面。此属性允许您缩放相机和对象选择之间的距离。较大的值会使相机远离焦点。最小可能的比例是1.0f Rotation Speed(Degrees):旋转速度(度),允许您指定的相机旋转速度度数。注意:这个值适用于所有类型的旋转:法线(环顾四周)和轨道。 Move Speed(units/second):移动速度(单位/秒),允许您控制相机移动速度,当相机使用WASD和QE键移动。 Background Settings 相机背景设置 Is Visible:设置背景是否可见 Top Color:顶部背景渐变色 Bottom Color:下部背景渐变色 Gradient Offset:渐变偏移,取[- 1,1]区间内的值,它允许您指定一种颜色应该比另一种颜色呈现得更多。例如,较小的值将呈现更多的顶部颜色,较大的值将呈现更多的底部颜色,值1将只呈现顶部颜色。值1将只呈现底部颜色

7.5、(Singleton)RTEditor.EditorUndoRedoSystem

此对象的名称设置为(singleton) RTEditor.EditorUndoRedoSystem,名字可以更改。它负责允许执行撤销和重做 在这里插入图片描述 这里目前只有一个属性,这是一个标记为Action Limit的整数字段。此属性允许指定可撤消或重做的操作的最大数量。

7.6、(Singleton)RTEditor.EditorMeshDatabase

储存网格数据库 在这里插入图片描述

7.7、(Singleton)RTEditor.MessageListenerDatabase

消息侦听器数据库 在这里插入图片描述

7.8、(Singleton)RTEditor.InputDevice

输入设备 在这里插入图片描述

7.9、(Singleton)RTEditor.SceneGizmo

这个包包含一个场景小发明,非常类似于在Unity中实现的,除了一些小的例外:

在这里插入图片描述 在这里插入图片描述 Corner:设置Scene Gizmo渲染的位置,值有ToplLeft, TopRight, BottomRight和BottomLeft X,Y,Z Axis Color:设置轴的颜色 Negative Axis Color:负轴的颜色 Cube Color:连接小部件轴锥的立方体的颜色; Hovered Componet Color:鼠标悬停组件颜色,当鼠标悬停在光标上时,gizmo组件(立方体、圆锥)的颜色; Camera Look Aligh Duration (Seconds):相机外观触发的持续时间,以秒为单位。当单击gizmo轴锥时,会发生这种对齐。

8、脚本

本章提供了构建应用程序时最需要的脚本信息。最重要的是学习如何注册到应用程序中发生的不同类型的事件(对象选择、gizmo操作等),以便您的应用程序能够相应地进行操作。

8.1 The IRTEditorEventListener interface

有时候,您可能希望侦听可以分别发送到各个方面的不同类型的事件。由于这个原因,系统公开了IRTEditorEventListener,它可以由所有必须侦听这些事件的 Monobheaviors 程序实现。

界面如下图所示: 在这里插入图片描述

现在让我们讨论接口公开的每个方法。注意:在讨论完所有方法之后,我们将在最后讨论ObjectSelectEventAres和ObiectDeselectEventArgs。

现在让我们讨论ObjectSelectEventArgs和ObjectDeselectEventArgs参数。 下一个图像显示ObjectSelectEventArgs类公开的属性:

在这里插入图片描述

下一个图像显示ObjectDeselectEventArgs类公开的属性: 在这里插入图片描述 在这种情况下,只有第一个属性不同。它被称为DeselectActionType,用于指定对象是如何被取消选择。 下面是一个你可以实现这个接口的例子:

在这里插入图片描述 因此,只需从Monobehaviour和IRTEditorEventListener派生并实现接口方法。当然,您需要将此脚本附加到所有必须侦听这些事件的对象。最有效的方法是将这个脚本附加到一个对象上,使该对象成为预置对象,并使用该预置实例化场景中的对象(在运行时或编辑器中)

8.1.1 Useful GameObject Extensions

使用IRTEditorEventListener接口,您可以定制对象选择发生的方式。例如,您可能有一组网格对象,它们都附加到一个空的父对象对象。假设允许选择空的游戏对象(可以在编辑器对象选择检查器中选中空对象),您可能希望将选择委托给这个对象,这样您就可以一次操作所有网格对象。这只是一个例子,但是有很多方法可以定制选择。

这个任务通常需要对所涉及的obiect层次结构进行某种处理。下面的清单显示了一些有用的GameObject extension方法和实用函数,可以帮助你在:

GameObject GetFirstEmptyParent(这个GameObject GameObject)方法将从指定的游戏对象开始向上移动,直到找到一个空的父对象。这可以是一个直接父对象的游戏对象,也可以是层次结构更上层的对象。

注意:当满足以下所有条件时,对象被认为是空的: 它没有网格: 它没有地形; 它没有轻分量: 无粒子系统组件: 无有效精灵渲染器;

8.2 Gizmos

8.2.1 Gizmo events

gizmo对象公开了一些您有时可能需要侦听的事件。它们是GizmoDragStart, GizmoDragUpdate和GizmoDragEnd。所有事件处理程序接受对触发事件的gizmo的引用: 在这里插入图片描述 因此,监听这些事件很简单,只需创建事件处理程序,然后将它们注册到gizmos即可。为了注册到gizmo事件,您需要访问gizmo对象,您可以这样做。如下所示: 在这里插入图片描述 在上面的图像中,所有gizmos的拖动开始事件都使用相同的处理程序,但是在这里要记住的重要一点是访问gizmos的方式。您可以订阅另一种类型的事件,但它属于EditorGizmoSystem类。它允许您检测 EditorGizmoSystem 何时发生了更改。 在这里插入图片描述 订阅此事件可以通过以下代码完成:EditorGizmoSvstem.Instance。ActiveGizmoTypeChanged + = MyHandler;MyHandler必须有一个与上面图像中的委托匹配的原型。处理程序必须接受的唯一参数是新类型的gizmo。

8.2.2 Gizmo Object Masks

有时,指示小部件忽略某些对象或对象层是有用的。为例如,你可能想要移动gizmo忽略场景中的一些树对象。在这种情况下,您可以将树对象分配给move gizmo的掩码。或者,如果树对象已经被分配到一个专用层,那么您可以屏蔽整个对象层。

注意:在使用卷刻度小部件时不支持对象掩码。

下面是用于蒙版/取消蒙版对象和对象层的方法。这些“方法属于‘Gizmo’基类,所以它们可以用于任何Gizmo类型: • public void MaskObject(GameObject gameObject); • public void UnmaskObject(GameObject gameObject); • public void MaskObjectCollection(IEnumerable collection); • public void UnmaskObjectCollection(Ienumerable collection); • public bool IsGameObjectMasked(GameObject gameObject); • public void MaskObjectLayer(int objectLayer); • public void UnmaskObjectLayer(int objectLayer); • public void IsObjectLayerMasked(int objectLayer); • public bool CanObjectBeManipulated(GameObject gameObject) TranslationGizmo trGizmo = EditorGizmoSystem.Instance.TranslationGizmo; trGizmo.MaskObject(myObject); trGizmo.MaskObjectLayer(objectLayer); trGizmo.MaskObjectCollection(myObjectCollection); trGizmo.UnmaskObjectCollection(myObjectCollection);

8.2.3 Axes Masks

所有的小发明(除了体积缩放小发明)支持轴掩码和这些掩码应用 对象。例如,你可以告诉移动的gizmo它不能沿着Z轴移动某个物体 轴。axis蒙版函数调用属于Gizmo基类,因此它们可以与所有3个Gizmo一起使用 类型。注意:仅当使用gizmo轴或 multi-axes。这里是一个简短的总结,gizmo组件是受口罩的影响 move gizmo rotation gizmo scale gizm void SetObjectAxisMask(GameObject gameObj, bool[] axisMask) void SetObjectAxisMask(GameObject gameObj, int axisIndex, bool isMasked) TranslationGizmo trGizmo = EditorGizmoSystem.Instance.TranslationGizmo; trGizmo.SetObjectAxisMask(gameObj, new bool[] {true, true, false}; RotatinoGizmo rotGizmo = EditorGizmoSystem.Instance.RotationGizmo; rotGizmo.SetAxisMask(gameObj, 0, false); rotGizmo.SetAxisMask(gameObj, 1, true); rotGizmo.SetAxisMask(gameObj, 2, true)

8.3 Actions

每个可以执行然后撤销或重做的操作(即撤销/重做)都驻留在它自己的类中,该类实现了两个接口:IUndoableAndRedoableAction和IAction。下图显示了派生的操作类型及其实现的接口之间的关系: 在这里插入图片描述 这些接口驻留在以下位置:AssetslRuntime Transform GizmosIScripts Editor Undo Redo SystemlActions。例如,使用实现撤消、重做和执行方法的action类执行对象复制。所有可以撤消/重做的操作都必须包装在自定义操作类中。

8.3.1 Defining An Action

在本章中,我们将看到一个示例,演示如何实现自己的编辑器应用程序可能需要的新操作。让我们假设您已经实现了一个图形用户界面,该界面允许用户更改不同的gizmo属性。我们还假设您已经决定让用户撤销并重做changihg a gizmo轴颜色的操作。注意:如果不需要撤销/重做,则不需要实现action类。 The Gizmo基类包含两个方法,可以帮助你做到这一点: • public Color GetAxisColor(GizmoAxis axis); • public void SetAxisColor(GizmoAxis axis, Color color 以下是你需要完成的步骤: 在EditorActions。定义一个新的动作类,它表示gizmo轴颜色更改动作。这个脚本位于以下位置:AssetsRuntime Transform Gizmos ScriptsEditor Undo Redo SystemlActions Editor Actions。这个类的实现可能如下图所示: 在这里插入图片描述 现在,为了改变活动部件的X轴的颜色,你需要写 在这里插入图片描述 这将改变活动的gizmo的X轴的颜色,它还将允许撤销/重做,如果不需要撤销/重做,就不需要实现action类。直接使用Gizmo属性/方法就可以了

8.4 Scene Management

8.4.1 Game Object Sphere Tree

为了让你独立于碰撞器与对象交互(当使用Unity碰撞器在运行时编辑器应用检查器中未选中时),该工具使用树形结构来组织场景中的对象。此树必须执行的一个操作是确定对象转换何时发生更改。该系统可以在2架无人机上实现: 手动跟踪对象转换数据(默认),它工作得非常好;使用变换。对象的属性进行更改,以确定是否更改了任何转换特定的数据。这是最快的,但默认情况下不被激活,因为工具将被设置。这个标记为false,您可能希望在代码的其他部分自己管理这个值。 如果您确定不需要在代码的任何部分手动设置此值,那么可以执行以下步骤来激活此功能:

  1. 打开资产IRuntime转换GizmoslScripts场景管理边界卷层次树状球体对象树\GameObjectSphereTree。cs文件;
  2. 取消对文件顶部一行的注释(即:#define USE TRANSFORM已更改);从这个过程中获得的速度不是很显著,但是如果您愿意的话,您可能想要这样做。这两种方法都很好。2. 取消对文件顶部一行的注释(即:#define USE TRANSFORM已更改);从这个过程中获得的速度不是很显著,但是如果您愿意的话,您可能想要这样做。这两种方法都很好。
    8.4.2 Picking Mesh Objects

    系统将需要访问网格数据,以便允许您选择网格对象。如果网格被标记为不可读,系统将执行以下步骤: 它将检查游戏对象是否附加了网格碰撞器,并使用它来执行拣选操作; 如果没有网格碰撞器,它将使用游戏对象的方块音量进行拾取。

    8.5 Object Selection Masks

    对象选择机制是在编辑器对象选择中实现的。选择模块是一个单例类,这意味着您可以通过编写如下代码来访问它:EditorObjectSelection.cs (Assets\Runtime Transform Gizmos\Scripts\Editor Object Selection).

    8.5.1 Object Selection Masks

    您可能希望场景中的一些对象被对象选择模块忽略。如果是这种情况,您可以在运行时将对象分配给对象选择掩码。传送到选择掩码的对象将永远不会被选中。 在这里插入图片描述 注意:当您向选择掩码中添加对象时,如果这些对象中有任何一个被选中,它们将被自动取消选择同样,你也可以从选择蒙版中删除对象: 在这里插入图片描述

    8.5.2 Manually changing the object selection

    大多数情况下,您将让对象选择模块完成它的工作,并使用鼠标通过单击或使用选择矩形来选择对象。然而,有时您可能希望这样做手动更改对象选择。例如,如果您希望实现CTRL+ a fiuncality来选择场景中的所有对象,那么您将需要一种方法来告诉选择模块选择什么对象为此,可以(在EditorObjectSelection类中)使用SetSelectedObjects方法。其类型如下: 在这里插入图片描述 简单地说,该方法接受您希望选择的obiects的集合和一个boolean参数,该参数允许您指定是否可以撤消/重做选择操作。注意:这个方法会考虑到任何指定的限制(对象选择蒙版,图层蒙版,可以选择网格对象,可以选择地形对象等等)。不通过此筛选器的对象将不会被选中。还有,之前选过的所有片段。如果v不在“selectedObiects”集合中,则将被取消选择。因此,此方法不附加到当前选择。它改变了选择。您还可以通过调用ClearSelection手动清除obiect选择: 在这里插入图片描述 该参数允许指定清除操作是否可以撤消/重做。 你可能会发现其他有用的方法有: bool AddObiectToSelection(GameObiect gameObi 添加一个对象到当前选择。第一个参数表示必须添加到选择中的对象,第二个参数指定操作是否可以撤消/重做; bool RemoveObjectFromSelection((GameObject gameObj, bool allowUndoRedo) 第二个参数指定操作是否可以撤消/重做。

    8.5.3 Listening to Selection Changed events

    通过在选择模块中注册一个偶处理器,可以监听选择更改事件,如下图所示: 在这里插入图片描述 处理程序必须具有以下原型: 在这里插入图片描述 处理程序必须接受的唯一参数是的实例

ObjectSelectionChangedEventArgs. 现在让我们讨论存储在这个对象中的属性/informatibn: 在这里插入图片描述 第一个属性是一个名为ObjectSelectActionType的枚举类型,如下所示: 在这里插入图片描述 它告诉客户端代码,如果有对象被选中,这就是它们被选中的方式。 现在我们来讨论可能的值 • Click – 对象是通过单击鼠标选择的; • ClickAppend – 对象是通过单击选中的,但是带有选择热键的追加活动的,它导致将对象追加/添加到当前选择项中; • MultiSelect – 对象是通过选择矩形选择的; • Undo – 这些对象被选择为撤销操作的一部分。当您更改对象选择(以任何方式、形状或形式),然后撤销时,就会发生这种情况,这将使对象选择恢复到以前的状态。因此,撤消机制将重新选择以前选择的对象; • Redo – 与撤销相同,但它适用于重做操作; • AddObjectToSelectionCall – 对象是通过调用来选择的EditorObjectSelection。实例.AddObjectToSelection; • SetSelectedObjectsCall – 对象是通过调用来选择的实例是EditorObjectSelection.Instance.SetSelectedObjects • None – 在某些场景中用于指示没有选择对象

第二个属性是一个集合,它包含所选择的所有对象。一起 选择action type属性,这2个属性可以用来找出哪些对象已经被选中,以及在哪些对象中被选中 的方式。注意:如果SelectActionType属性设置为None,这意味着没有选择对象 在这种情况下,对象集合为空

接下来的两个属性与前两个几乎相同,但是它们提供了关于哪些对象的信息 以什么方式被取消选举。让我们看看ObjectDeselectActionType是什么样的: 在这里插入图片描述 • ClearSelectionCall – 对象是通过调用来取消选择的EditorObjectSelection.Instance.ClearSelection; • SetSelectedObjectsCall – 对象是通过调用来取消选择的 EditorObjectSelection.Instance.SetSelectedObjects。这是因为这个方法根据指定的集合更改对象选择,因此以前当选的,将被取消选举; • RemoveObjectFromSelectionCall – 通过调用,将对象从选择项中删除 EditorObjectSelection.Instance.RemoveObjectFromSelection; • ClearClickAir – 当用户在空中单击时,将取消选择对象。这原因 要被选择模块清除的对象选择; • ClickAlreadySelected – 当用户单击带有append to的对象时就会发生这种情况 选择热键激活,对象已经被选中。在这种情况下,模块将取消选择它; • MultiDeselect – 当multideschosen热键处于活动状态时,使用选择矩形取消选择对象; • Undo – 对象作为撤销操作的一部分被取消选择; • Redo – 作为重做操作的一部分,对象被取消选择; • DeselectInactive – 在选择对象之后,有时可能会发生某些情况 变得不活跃。该模块将检查每一帧中不活动的对象,并将它们从选择中删除。当从选择项中删除这些对象时,将使用这种类型的取消选择操作; • None – 在某些情况下,指示没有取消选择对象是有用的

回到ObjectSelectionChangedEventArgs, DeselectAction’lype和DeselectedObjects告诉你哪些对象以什么方式被取消了。如果DeselectActionType设置为None,这意味着没有对象被取消选择,DeselectedObjects是空的。接下来,我们有一个Gizmolype属性,它告诉您在选择更改时使用的gizmo的类型。最后一个属性IsGizmoActive指定当用户通过相应的热键关闭gizmo时,gizmo是否处于活动状态。