Rect Transform
各种参数
是显示pos还是width/height
还是left/top/right/bottom之类巴拉巴拉,各种混合的展示baby,都是看anchor的设置
pivot的设置影响具体数值
至于blueprint mode ,就是用了之后框框不变,who wanna do this my Jesus?
raw edit mode,原始编辑,改pivot和锚点不会改变矩形pos的值,可以让位置的调整更优雅
pivot 和anchor都是可以直接在窗口里拖动调整的,calm down baby
不同于一般的transform,Rect Transform左边的靶子可以很方便
关于代码
因为继承了transform
shift和alt有奇效
shift把自己pivot也跟着anchor去move his body
alt则是把自己的位置凑到锚点矛的地方去
Standalone Input Module
依赖于Event System
Horizontal Axis / Vertical Axis
这两个属性简单来说:
- Horizontal Axis:定义了哪些键用来控制左右移动(例如在菜单选项之间左右切换)。
- Vertical Axis:定义了哪些键用来控制上下移动(例如在垂直排列的菜单项之间上下切换)。
这些“轴”(Axis)绑定到输入系统中预设的名称。Unity 的默认设置是:
- Horizontal 绑定到左箭头和右箭头、或者
A
和D
键。 - Vertical 绑定到上箭头和下箭头、或者
W
和S
键。
Submit Button/ Cancel Button
同样的,这两个属性定义了你在 UI 中确认和取消操作时使用的键。
Unity默认情况下,
Submit
通常绑定到 Enter
键或 Space
键。
Cancel
绑定到 Esc
键。
using UnityEngine;
using UnityEngine.EventSystems;
public class Example : MonoBehaviour
{
void Start()
{
// 创建一个新的 EventSystem 对象
GameObject eventSystem = new GameObject("EventSystem");
eventSystem.AddComponent<EventSystem>();
// 添加 Standalone Input Module
eventSystem.AddComponent<StandaloneInputModule>();
}
}
定义这些是否画蛇添足?
自己一样可以检测哪些键按下,的确,但是这样更统一,可以 省去一些设备差异造成的麻烦
Unity 的输入系统:
自动处理不同平台上的输入方式(比如键盘、游戏手柄、触摸设备等)。当你使用 Horizontal Axis
和 Vertical Axis
时,Unity 的系统会自动将这些抽象的方向输入映射到合适的按键或控制器(例如游戏手柄上的左摇杆)。
自动处理 UI 元素的焦点导航。你只需要指定哪些按键控制水平/垂直移动,Unity 就会帮你处理焦点在按钮或其他 UI 元素之间的切换,而不必自己写代码去检测并更新焦点。
通过使用预定义的 Horizontal
和 Vertical
轴,你可以在项目中保持一致的输入方式,避免自己手动处理方向键的检测逻辑。这使得代码更加简洁,且易于维护。你不必自己手动定义按键行为,只需配置输入系统即可。
Event System
Graphic Raycaster
blocking object 默认下为none,也就是说ui就是完全独立于整个世界的,里面的无论是什么物体,就算有碰撞器,也不会挡住ui 的交互,
plus,有3d碰撞器,也有2d碰撞器
mask则是层级的二次精确设置哪些层的物体的碰撞器可以有影响
Screen Space - Overlay:此模式下,Canvas 会直接渲染在屏幕上方,并且与相机无关。它独立于场景中的任何3D对象,相当于“覆盖”在屏幕上的一种全屏UI显示方式。所以碰撞器无视。raycaster的block也和overlay无关
Screen Space - Camera:Canvas 会跟随指定的相机进行渲染,UI元素会被放置在相机的渲染层上,因此与场景中的相机视角相关联。碰撞器相比overlay更可控。
Canvas Scaler
canvas为world space时出现的3d模式
constant physical size
canvas scaler 设置的是父对象canvas的缩放和大小
reference pixels per unit
Scale Factor
canvas的rect transform是默认不可改的,这里的Scale可以通过更改大小,然后因为公式
像素长度*缩放因子=屏幕(物理)像素长度
三种scale mode
constant physical size和constant pixel size 基本上一样,只是添加了一些新的算法
分辨率自适应,不管控ui的位置,管控Canvas
不同电脑有不同的像素点个数,ui在不同的分辨率下展现出相同的效果,自适应
rect长度*缩放系数=屏幕分辨率长度
分辨率自适应,是一种通过算法,算出可以在不同电脑分辨率下,展现出相同UI位置效果的缩放比例,然后自动修改
对于3d物体
对于正常的3D物体(非UI元素),它们的显示与 Camera
的投影设置相关,而不是与Canvas的UI机制相关。
正交投影(Orthographic Projection):物体的尺寸和分辨率无关,它们会在屏幕上按实际世界单位显示。在不同的分辨率下,虽然物体的物理尺寸不会变化,但因为(活生生的手机)屏幕空间的像素密度不同,可能会导致物体看起来“大小不一致”,但实际上它们的(虚假的网络)世界单位是固定的。
透视投影(Perspective Projection):正常3D渲染中常用的方式。物体的显示受摄像机的视角和投影矩阵的影响,物体远近会显得大小不同。分辨率变化可能会影响画面清晰度和渲染细节,但物体的实际渲染位置和大小是依赖于Camera的投影规则,而不是分辨率本身。
分辨率对3D物体显示的影响
这里可能会让你感到困惑的是,虽然UI有分辨率自适应的明确规则,但3D物体的显示也会受到分辨率的一些间接影响。比如:
-
屏幕的Aspect Ratio(宽高比):如果设备分辨率的宽高比发生变化,而Camera的设置(如
Field of View
)没有相应调整,那么3D场景中的物体可能会显得被拉伸或压缩,因为摄像机的视野变了。尤其是在使用透视投影时,这种变化更加明显。 -
Viewport 和 Clipping:摄像机的视口(Viewport)和裁剪(Clipping)也会受到分辨率的影响,可能导致部分物体在不同的分辨率下显示与预期不一致。这是因为摄像机在不同的屏幕比例下看到的场景区域会发生变化。
-
固定像素大小的材质或对象:如果你有一些纹理或材质的分辨率是固定的,而显示设备的分辨率提高,可能会导致这些材质看起来模糊,因为它们没有足够的像素细节来匹配更高分辨率的屏幕。
分辨率自适应和UI与物体的关系
-
对于UI元素,分辨率自适应主要依赖于Canvas和Canvas Scaler的设置。无论设备分辨率如何,UI都会通过缩放来确保一致的用户体验。
-
对于3D物体,分辨率并不会直接改变物体的世界单位或大小,但屏幕宽高比和摄像机的投影设置会影响物体在屏幕上的显示效果。所以,虽然3D物体本质上和Canvas的分辨率自适应机制不同,但在高分辨率设备上,3D物体的显示可能看起来不同,主要原因是视角和像素密度的不同,而不是物体的实际大小或位置发生变化。
Canvas
world space
一般关联主摄像机
摄像机模式
不拖上摄像机默认为overlay
不推荐为主摄像机,plane distance是物理上的ui距离
摄像机模式一般新建一个摄像机来操纵ui层的显示
layer是canvas之间控制显示的先后顺序倒带,order in layer则是layer相同的情况下,更进一步的比较
可以多个canvas,一般一个就够了