2D/3D Paint API 总览
本页按模块整理了关键类与常用成员,便于快速查阅。
核心组件
| 组件 | 作用 |
| InputController | 在鼠标、触控、手写笔与 VR 设备之间统一路由与过滤输入。 |
| RaycastController | 执行网格射线检测,并将命中/相交数据排队供绘制使用。 |
| PaintController | 统一管理 PaintManager,并提供共享的画笔/工具/模式设置。 |
| PaintManager | 面向单个目标对象,聚合绘制状态、图层与渲染管线。 |
快速跳转
控制器
InputController 是用于管理用户输入的单例组件。
属性与字段
| 成员 | 说明 |
public int MaxTouchesCount {...} | 同时绘制允许的最大触点数量。 |
public InputMethods ActiveInputMethods {...} | 启用的输入方式:VRMode、Pen、Touch、Mouse(默认全部启用)。 |
public IList<Canvas> Canvases {...} | 需要忽略射线检测的 Canvas 列表,用于避免在其子对象上绘制。 |
public bool BlockRaycastsOnPress {...} | 当指针悬停在 Canvas 项上时是否阻止绘制。 |
public GameObject[] IgnoreForRaycasts {...} | 需要忽略射线检测的 GameObject(Canvas 的子对象,但不会阻止绘制)。 |
public Transform PenTransform | 用于绘制的笔/手的 Transform(VR 绘制使用)。 |
public float MinimalDistanceToPaint | Pen 到表面的最小绘制距离(VR 绘制使用)。 |
事件
| 事件 | 说明 |
public event Action<int, Vector3> OnMouseHover | 鼠标悬停在对象上时触发。 |
public event Action<int, Vector3, float> OnMouseDown | 在对象上按下鼠标左键时触发。 |
public event Action<int, Vector3, float> OnMouseButton | 鼠标左键按住期间持续触发。 |
public event Action<int, Vector3> OnMouseUp | 在对象上释放鼠标左键时触发。 |
RaycastController
RaycastController 是单例组件,用于处理射线与三角形的相交检测,并保存场景中所有可用于射线检测的对象数据。
属性与字段
| 成员 | 说明 |
public bool UseDepthTexture {...} | 是否使用 Depth Texture 辅助射线检测;当场景中存在多个 PaintManager 时很有用。若使用 SRP,需要在 URP/HDRP 设置中启用 DepthTexture。 |
方法
| 方法 | 说明 |
public void InitObject(IPaintManager paintManager, Component paintComponent, Component renderComponent) | 初始化 PaintManager 对象。 |
public IList<Triangle> GetLineTriangles(IPaintManager paintManager, int fingerId) | 返回被线段相交的三角形列表。 |
public Mesh GetMesh(IPaintManager paintManager) | 返回与 PaintManager 关联的网格。 |
public void DestroyMeshData(IPaintManager paintManager) | 销毁为射线检测创建的网格数据。 |
public void AddCallbackToRequest(IPaintManager sender, int fingerId, Action callback = null) | 为 PaintManager 的请求添加回调。 |
public void RequestRaycast(IPaintManager sender, InputData inputData, InputData previousInputData, Action<RaycastRequestContainer> callback = null) | 创建“射线-三角形相交”请求;实际在 LateUpdate 中执行。 |
public RaycastData TryGetRaycast(RaycastRequestContainer requestContainer, int fingerId, Vector3 pointerPosition) | 从已发送请求中取回射线检测数据。 |
public RaycastData RaycastLocal(IPaintManager paintManager, Ray ray, Vector3 pointerPosition, int fingerId, bool useWorld = true) | 检查射线是否与任意三角形相交,并返回对应的 RaycastData。 |
PaintController
PaintController 是管理所有 PaintManager 的单例。启用 “Use Shared Settings” 时,会为所有 PaintManager 提供共享设置;否则每个 PaintManager 使用自己的独立设置。
属性与字段
| 成员 | 说明 |
public bool OverrideCamera { … } | 是否覆盖用于射线检测的相机。 |
public Camera Camera { … } | 用于射线检测的相机引用。 |
public bool UseSharedSettings | 是否在所有 PaintManager 之间共享画笔、绘制模式与工具设置。 |
public PaintMode PaintMode { … } | 当前绘制模式。 |
public PaintTool Tool { … } | 当前绘制工具。 |
public Brush Brush { … } | 当前画笔实例。 |
方法
| 方法 | 说明 |
public void RegisterPaintManager(PaintManager paintManager) | 注册 PaintManager。 |
public void UnRegisterPaintManager(PaintManager paintManager) | 取消注册 PaintManager。 |
public IPaintMode GetPaintMode(PaintMode mode) | 返回指定绘制模式的实例。 |
public PaintManager[] GetActivePaintManagers() | 返回当前激活的 PaintManager 数组。 |
public PaintManager[] GetAllPaintManagers() | 返回所有已注册的 PaintManager。 |
public IEnumerable<PaintManager> GetAllPaintManagersAsEnumerable() | 以 IEnumerable 形式返回所有已注册的 PaintManager。 |
PaintManager
PaintManager
PaintManager 是对对象进行绘制的核心组件。它包含 Paint(材质/投射设置)与 BasePaintObject(绘制对象逻辑)等实例。
属性与字段
| 成员 | 说明 |
public GameObject ObjectForPainting { ... } | 被绘制的 GameObject。 |
public Paint Material { ... } | Paint 类的实例。 |
public ILayersController LayersController {...} | LayersController 实例引用。 |
public LayersContainer LayersContainer {...} | LayersContainer 资源引用。 |
public FilterMode FilterMode { ... } | 绘制相关 RenderTexture 的 FilterMode。 |
public IBrush Brush { ... } | PaintManager 使用的画笔。 |
public ToolsManager ToolsManager { ... } | 管理 PaintManager 内的所有绘制工具。 |
public PaintTool Tool { ... } | 当前绘制工具。 |
public BasePaintObject PaintObject { … } | 当前被绘制对象的处理实例。 |
public IStatesController StatesController { … } | StatesController 实例引用。 |
public bool CopySourceTextureToLayer {...} | 是否将源纹理复制到图层中。 |
public bool UseSourceTextureAsBackground { … } | 是否将源纹理作为背景图层。 |
public bool HasTrianglesData { … } | 是否包含三角形数据。 |
public Triangles[] Triangles { … } | 获取/设置三角形数组。 |
public bool Initialized { … } | 是否已初始化。 |
public int SubMesh { … } | 绘制对象网格的子网格索引。 |
public int UVChannel { … } | 网格使用的 UV 通道。 |
public PaintSpace PaintSpace {...} | 当前选择的绘制空间。 |
public IPaintMode PaintMode | 当前绘制模式实例。 |
事件
| 事件 | 说明 |
public event Action<PaintManager> OnInitialized | 初始化完成时触发,返回 PaintManager 实例。 |
public event Action OnDisposed | PaintManager 资源释放时触发。 |
方法
| 方法 | 说明 |
public void Init() | 初始化 PaintManager;若已初始化,会重建内部数据(RenderTexture、网格、材质等)。 |
public void DoDispose() | 销毁所有资源(RenderTexture、网格、材质等),并恢复原始材质与纹理。 |
public bool IsActive() | 返回当前是否可进行绘制。 |
public void Render() | 触发对象渲染更新。 |
public void SetPaintMode(PaintMode paintMode) | 设置绘制模式。 |
public RenderTexture GetPaintTexture() | 返回绘制流程中的合成纹理。 |
public RenderTexture GetPaintInputTexture() | 返回输入 RenderTexture(当前帧点/线,或鼠标事件间的输入)。 |
public RenderTexture GetResultRenderTexture() | 返回结果 RenderTexture(合成后的图层)。 |
public Texture2D GetResultTexture(bool hideBrushPreview = false) | 返回最终 Texture2D(合成图层);可选隐藏画笔预览;使用后请正确销毁避免内存泄漏。 |
public void SetLayersData(LayersContainer container) | 设置图层数据。 |
public LayerData[] GetLayersData() | 获取当前图层数据。 |
public bool IsLayersContainerExists(string filename) | 检查存储中是否存在指定文件名的 LayersContainer。 |
public bool SaveToLayersContainer(string filename) | 保存 LayersContainer 到存储;成功返回 true。 |
public bool DeleteLayersContainer(string filename) | 从存储删除 LayersContainer;成功返回 true。 |
public bool LoadFromLayersContainer(string filename) | 从存储加载 LayersContainer;成功返回 true。 |
public void InitBrush() | 初始化画笔设置。 |
public Ray GetRay(Vector3 screenPosition) | 从屏幕坐标生成 Ray。 |
BasePaintObject
BasePaintObject 是在 RenderTexture 上绘制的基础类。其派生类(如 CanvasRendererPaint、SpriteRendererPaint、MeshRendererPaint、SkinnedMeshRendererPaintObject)会基于输入数据实现绘制位置判定等逻辑。
属性与字段
| 成员 | 说明 |
public bool InBounds { … } | 是否在可绘制边界内。 |
public bool IsPainting { … } | 是否正在绘制。 |
public bool IsPainted { … } | 当前帧是否发生了绘制。 |
public bool ProcessInput | 是否处理当前绘制对象的输入。 |
事件
| 事件 | 说明 |
public event Action<PointerData> OnPointerHover | 悬停事件;参数 PointerData 包含本地坐标、屏幕坐标、UV、纹理坐标、压力、finger id。 |
public event Action<PointerData> OnPointerDown | 按下事件;参数 PointerData 同上。 |
public event Action<PointerData> OnPointerPress | 按住事件;参数 PointerData 同上。 |
public event Action<PointerUpData> OnPointerUp | 抬起事件;PointerUpData 包含屏幕坐标、是否在对象边界内、finger id。 |
public event Action<DrawPointData> OnDrawPoint | 绘制点事件;供开发者获取绘制数据;DrawPointData 包含纹理坐标、压力、finger id。 |
public event Action<DrawLineData> OnDrawLine | 绘制线事件;供开发者获取绘制数据;DrawLineData 包含起止纹理坐标、起止压力、finger id。 |
方法
| 方法 | 说明 |
public void Init(IPaintManager paintManager, IPaintData paintData, Transform objectTransform, Paint paint) | 初始化绘制对象。 |
public void DoDispose() | 销毁之前创建的 RenderTexture 与网格。 |
public void OnMouseHover(InputData inputData, RaycastData raycastData) | 悬停处理。 |
public void OnMouseHoverFailed(InputData inputData) | 悬停时若 Canvas 项阻挡射线检测则调用。 |
public void OnMouseDown(InputData inputData, RaycastData raycastData) | 按下处理。 |
public void OnMouseButton(InputData inputData, RaycastData raycastData) | 按住处理。 |
public void OnMouseFailed(InputData inputData) | 按下/按住时若 Canvas 项阻挡射线检测则调用。 |
public void OnMouseUp(InputData inputData) | 抬起处理。 |
public Vector2? GetTexturePosition(InputData inputData, RaycastData raycastData) | 若射线命中对象,则从屏幕坐标换算得到纹理坐标并返回。 |
public FrameDataBuffer<FrameData> SavePaintState(int fingerId = 0) | 保存指定 fingerId 的绘制状态。 |
public void RestorePaintState(FrameDataBuffer<FrameData> paintDataStorage, int fingerId = 0) | 恢复指定 fingerId 的绘制状态。 |
public void DrawPoint(DrawPointData drawPointData, Action onFinish = null) | 使用 DrawPointData 从代码绘制点。 |
public void DrawPoint(InputData inputData, RaycastData raycastData, Action onFinish = null) | 使用 InputData 与 RaycastData 从代码绘制点。 |
public void DrawLine(DrawLineData drawLineData, Action onFinish = null) | 使用 DrawLineData 从代码绘制线。 |
public void DrawLine(InputData inputDataStart, InputData inputDataEnd, RaycastData raycastDataStart, RaycastData raycastDataEnd, KeyValuePair<Ray, RaycastData>[] raycasts = null, Action onFinish = null) | 使用 InputData 与 RaycastData 从代码绘制线。 |
public void FinishPainting(int fingerId = 0, bool forceFinish = false) | 结束绘制。 |
public void RenderGeometries(bool finishPainting = false) | 渲染到合成 RenderTexture。 |
public void RenderToTextures() | 将所有 RenderTexture 合成到最终 RenderTexture。 |
public void RenderToTextureWithoutPreview(RenderTexture resultTexture) | 渲染最终 RenderTexture(不包含画笔预览)。 |
public void SaveUndoTexture() | 将当前激活图层纹理保存到撤销/重做系统。 |
public void SetRaycastProcessor(BaseRaycastProcessor processor) | 设置射线处理器。 |
StatesController
StatesController 用于管理撤销/重做状态,记录对象变化及其历史状态。
属性与字段
| 成员 | 说明 |
public int ChangesCount { ... } | 变化次数。 |
事件
| 事件 | 说明 |
public event Action<RenderTexture> OnClearTextureAction | 清空 RenderTexture 的事件。 |
public event Action OnRenderTextureAction | 撤销/重做触发渲染的事件。 |
public event Action OnChangeState | 撤销/重做过程中状态变化事件。 |
public event Action OnResetState | 重置状态事件,通常用于清空 InputTexture。 |
public event Action OnUndoRequested | 请求执行 Undo 时触发。 |
public event Action OnUndo | Undo 执行完成时触发。 |
public event Action OnRedoRequested | 请求执行 Redo 时触发。 |
public event Action OnRedo | Redo 执行完成时触发。 |
public event Action<bool> OnUndoStatusChanged | Undo 状态变化事件;返回是否可 Undo。 |
public event Action<bool> OnRedoStatusChanged | Redo 状态变化事件;返回是否可 Redo。 |
方法
| 方法 | 说明 |
public void DoDispose() | 销毁状态数据。 |
public void Enable() | 启用撤销/重做。 |
public void Disable() | 禁用撤销/重做。 |
public void AddState(Action action) | 通过指定 action 添加新状态。 |
public void AddState(object entity, string property, RenderTexture oldValue, RenderTexture newValue, Texture source) | 添加 RenderTexture 变化状态。 |
public void AddState(object entity, string property, object oldValue, object newValue) | 添加属性变化状态。 |
public void AddState(IList collection, NotifyCollectionChangedEventArgs rawEventArg) | 记录列表变化并添加状态。 |
public void Undo() | 执行 Undo。 |
public void Redo() | 执行 Redo。 |
public int GetUndoActionsCount() | 返回可 Undo 的动作数量。 |
public int GetRedoActionsCount() | 返回可 Redo 的动作数量。 |
public bool CanUndo() | 返回是否可执行 Undo。 |
public bool CanRedo() | 返回是否可执行 Redo。 |
public void EnableGrouping(bool useCustomGroup = false) | 启用动作分组;在 DisableGrouping() 前会将动作记录为一个组。 |
public void DisableGrouping(bool useCustomGroup = false) | 禁用动作分组。 |
LayersController
LayersController 用于管理图层实例与图层属性,提供对图层的增删改合并等操作。
属性与字段
| 成员 | 说明 |
public ReadOnlyCollection<ILayer> Layers { ... } | 所有图层集合。 |
public ILayer ActiveLayer { ... } | 当前激活图层。 |
public bool CanDisableLayer { ... } | 是否允许禁用激活图层(避免禁用所有图层)。 |
public bool CanRemoveLayer { ... } | 是否允许移除激活图层(避免移除最后一个图层)。 |
public bool CanMergeLayers { ... } | 是否允许将激活图层与其下方图层合并(两者需启用)。 |
public bool CanMergeAllLayers { ... } | 是否允许合并所有已启用图层(至少启用两个)。 |
public int ActiveLayerIndex { ... } | 激活图层索引。 |
事件
| 事件 | 说明 |
public event Action<ObservableCollection<ILayer>, NotifyCollectionChangedEventArgs> OnLayersCollectionChanged | 图层集合变化时触发。 |
public event Action<ILayer> OnLayerChanged | 图层渲染相关属性变化时触发;用于在修改图层参数后触发对象渲染。 |
public event Action<ILayer> OnActiveLayerSwitched | 激活图层切换事件。 |
public event Action<bool> OnCanRemoveLayer | 是否可移除图层的状态事件(至少需保留一个图层用于绘制)。 |
方法
| 方法 | 说明 |
public void DoDispose() | 释放所有图层数据。 |
public void Init(int width, int height) | 以指定宽高初始化图层。 |
public void CreateBaseLayers(Texture sourceTexture, bool copySourceTextureToLayer, bool useSourceTextureAsBackground) | 使用源纹理创建默认图层。 |
public void SetFilterMode(FilterMode mode) | 设置图层纹理的过滤模式。 |
public ILayer AddNewLayer() | 创建并添加新图层。 |
public ILayer AddNewLayer(string name) | 创建并添加指定名称的新图层。 |
public ILayer AddNewLayer(string name, Texture sourceTexture) | 创建并添加指定名称/源纹理的新图层。 |
public void AddLayerMask(ILayer layer, Texture source) | 使用指定源纹理为指定图层添加遮罩。 |
public void AddLayerMask(ILayer layer) | 为指定图层添加遮罩。 |
public void AddLayerMask(Texture source) | 使用源纹理为当前激活图层添加遮罩。 |
public void AddLayerMask() | 为当前激活图层添加遮罩。 |
public void RemoveActiveLayerMask() | 移除当前激活图层的遮罩。 |
public ILayer GetActiveLayer() | 返回当前激活图层。 |
public void SetActiveLayer(ILayer layer) | 将指定图层设为激活。 |
public void SetActiveLayer(int index) | 通过索引设置激活图层。 |
public void SetLayerOrder(ILayer layer, int index) | 设置指定图层的顺序。 |
public void RemoveActiveLayer() | 移除激活图层。 |
public void RemoveLayer(ILayer layer) | 移除指定图层。 |
public void RemoveLayer(int index) | 通过索引移除图层。 |
public void MergeLayers() | 将激活图层与其下方图层合并(两者需启用)。 |
public void MergeAllLayers() | 将所有已启用图层合并到激活图层(至少两个图层启用)。 |
public void SetLayerTexture(int index, Texture texture) | 设置指定索引图层的纹理。 |
public Texture2D GetActiveLayerTexture() | 返回激活图层 Texture2D;注意用后需正确销毁以避免内存泄漏。 |
public Texture2D GetLayerTexture(int layerIndex) | 返回指定索引图层的 Texture2D;同样需要正确销毁。 |
Layer
Layer 表示单个图层,负责管理图层数据与属性。
属性与字段
| 成员 | 说明 |
public Action<Layer> OnRenderPropertyChanged | 当影响图层渲染的属性变化时触发。 |
public bool Enabled { ... } | 图层是否启用。 |
public bool CanBeDisabled { ... } | 图层是否可被禁用。 |
public bool MaskEnabled { ... } | 图层遮罩是否启用。 |
public string Name { ... } | 图层名称。 |
public float Opacity { ... } | 图层不透明度。 |
public Texture SourceTexture { ... } | 图层源纹理。 |
public RenderTexture RenderTexture { ... } | 图层 RenderTexture。 |
public RenderTargetIdentifier RenderTarget { ... } | 图层 RenderTexture 的标识符。 |
public Texture MaskSourceTexture { ... } | 遮罩源纹理。 |
public RenderTexture MaskRenderTexture { ... } | 遮罩 RenderTexture。 |
public RenderTargetIdentifier MaskRenderTarget { ... } | 遮罩 RenderTexture 的标识符。 |
public BlendingMode BlendingMode { ... } | 图层混合模式。 |
事件
| 事件 | 说明 |
public event Action<ILayer> OnLayerChanged | 图层属性变化时触发。 |
方法
| 方法 | 说明 |
public void Create(string layerName, int width, int height, RenderTextureFormat format, FilterMode filterMode) | 使用指定参数创建图层 RenderTexture。 |
public void Create(string layerName, Texture source, RenderTextureFormat format, FilterMode filterMode) | 使用指定源纹理创建图层 RenderTexture。 |
public void Init(CommandBufferBuilder bufferBuilder, Func<bool> canDisableLayer) | 初始化图层。 |
public void AddMask(RenderTextureFormat format) | 以指定 RenderTextureFormat 创建遮罩。 |
public void AddMask(Texture maskTexture, RenderTextureFormat format) | 使用指定纹理与格式创建遮罩。 |
public void RemoveMask() | 移除遮罩。 |
public void SaveState() | 使用 StatesController 保存图层 RenderTexture 的状态。 |
public void DoDispose() | 释放所有图层数据。 |
Paint
Paint 用于存储与管理绘制材质数据及其参数。
属性与字段
| 成员 | 说明 |
public Material PaintMaterial { … } | 绘制使用的材质。 |
public Material PaintWorldMaterial { … } | PaintSpace.World 下绘制使用的材质。 |
public string ShaderTextureName { … } | 用于绘制的 Shader 纹理名称。 |
public int DefaultTextureWidth { … } | 对象没有源纹理时使用的默认纹理宽度。 |
public int DefaultTextureHeight { … } | 对象没有源纹理时使用的默认纹理高度。 |
public Color DefaultTextureColor { … } | 默认纹理颜色。 |
public ProjectionMethod ProjectionMethod { … } | 纹理投射方法:Planar 沿笔刷法线投射(适合平面/轻微曲面);Triplanar 在 X/Y/Z 平面间混合(适合多朝向表面)。 |
public ProjectionDirection ProjectionDirection { … } | 用于投射时的笔刷法线计算方式:Normal 使用三角形法线;Ray 使用射线方向。 |
public float NormalCutout { … } | 用于避免在 PaintSpace.World 下绘制到背向射线的面:-1.0 表示不裁剪;0.0 丢弃背向表面;1.0 仅保留正向表面。 |
public float ProjectionMaxAngle { … } | 笔刷法线与片元法线之间允许的最大夹角;控制在 PaintSpace.World 下笔刷在曲面上的“包裹”程度。 |
public AngleAttenuationMode ProjectionAngleAttenuationMode { … } | Max Angle 对 Alpha 的影响方式:Smooth 为渐变衰减;Hard 为硬切。 |
public float ProjectionBrushDepth { … } | 沿笔刷法线方向的深度(厚度)影响范围(相对笔刷大小):0.0 关闭;> 0.0 将影响限制在一定体积范围内。 |
public float ProjectionDepthFadeRange { … } | 在 Brush Depth 定义的深度范围内,从全强到 0 的渐变区间。 |
public float ProjectionEdgeSoftness { … } | 笔刷边缘柔和度(PaintSpace.World):0.0 为硬边;> 0.0 以指数方式衰减 Alpha。 |
public int MaterialIndex { … } | 对象中的材质索引。 |
public Texture SourceTexture { … } | 绘制材质使用的源纹理。 |
方法
| 方法 | 说明 |
public void Init(IRenderComponentsHelper renderComponents, Texture source) | 使用渲染组件与源纹理初始化绘制材质。 |
public void CreateWorldMaterial() | 创建 PaintSpace.World 下绘制用材质。 |
public void DoDispose() | 销毁之前创建的材质。 |
public void RestoreTexture() | 将源纹理恢复到材质中。 |
public void SetObjectMaterialTexture(Texture texture) | 为对象设置新纹理。 |
public void SetPreviewTexture(Texture texture) | 设置用于显示画笔预览的纹理。 |
public void SetPaintTexture(Texture texture) | 将图层纹理设置到材质。 |
public void SetInputTexture(Texture texture) | 将输入纹理设置到材质。 |
public void SetPreviewVector(Vector4 brushOffset) | 设置用于显示画笔预览的向量数据。 |
Brush
Brush 用于存储与管理画笔材质及其参数。
属性与字段
| 成员 | 说明 |
public string Name { … } | 画笔名称(必须唯一)。 |
public Material Material { … } | 画笔材质。 |
public FilterMode FilterMode { … } | 画笔 RenderTexture 的过滤模式。 |
public Color Color { … } | 画笔颜色。 |
public Texture SourceTexture { … } | 画笔源纹理。 |
public RenderTexture RenderTexture { … } | 画笔 RenderTexture。 |
public float MinSize { … } | 画笔最小尺寸。 |
public float Size { … } | 画笔尺寸。 |
public float RenderAngle { … } | 画笔渲染角度(度)。 |
public Quaternion RenderQuaternion { … } | 画笔渲染四元数。 |
public float Hardness { … } | 画笔硬度。 |
public bool Preview { … } | 是否启用画笔预览。 |
事件
| 事件 | 说明 |
public event Action<Color> OnColorChanged | 画笔颜色变化时触发。 |
public event Action<Texture> OnTextureChanged | 画笔纹理变化时触发。 |
public event Action<bool> OnPreviewChanged | 画笔预览开关变化时触发。 |
方法
| 方法 | 说明 |
public void Init(IPaintMode mode) | 初始化画笔的材质、网格与 RenderTexture。 |
public void DoDispose() | 销毁之前创建的 RenderTexture、网格与材质。 |
public void SetValues(Brush brush) | 从另一个画笔复制参数。 |
public void Render() | 将画笔渲染到 RenderTexture。 |
public void RenderFromTexture(Texture texture) | 从指定纹理渲染画笔(不改变 SourceTexture)。 |
public void SetColor(Color colorValue, bool render = true, bool sendToEvent = true) | 设置画笔颜色,并可选渲染与触发事件。 |
public void SetTexture(Texture texture, bool render = true, bool sendToEvent = true, bool canUpdateRenderTexture = true) | 设置画笔纹理,并可选渲染/触发事件/更新 RenderTexture。 |
ToolsManager 负责管理 PaintManager 内可用的所有工具,包括工具注册与切换。
属性与字段
| 成员 | 说明 |
public IPaintTool CurrentTool | 当前工具。 |
事件
| 事件 | 说明 |
public event Action<IPaintTool> OnToolChanged | 当前工具变化时触发;参数为新的工具实例。 |
方法
| 方法 | 说明 |
public void Init(PaintManager paintManager) | 初始化 ToolsManager,并订阅 PaintManager 相关事件。 |
public void DoDispose() | 释放工具相关资源。 |
public void SetTool(PaintTool paintTool) | 将指定工具设为当前工具。 |
public IPaintTool GetTool(PaintTool tool) | 按 PaintTool 类型获取工具实例。 |
BasePaintTool 是所有绘制工具的基类:通过 PaintManager 的输入事件处理图层纹理。
属性与字段
| 成员 | 说明 |
public virtual PaintTool Type { … } | 工具类型。 |
protected IPaintData Data | 工具用于处理图像的数据入口,可获取图层、RenderTexture、Brush、状态等信息。 |
public virtual bool AllowRender { … } | 是否允许渲染。 |
public virtual bool CanDrawLines { … } | 是否允许绘制线;为 false 时只能绘制点。 |
public virtual bool ConsiderPreviousPosition { … } | 若上一绘制位置未变化,是否仍渲染。 |
public virtual bool ShowPreview { … } | 是否显示画笔预览。 |
public virtual int Smoothing { … } | 线条平滑等级(1–10):1 关闭平滑;10 最大平滑(影响 SpriteRenderer 与 RawImage)。 |
public virtual bool RandomizePointsQuadsAngle { … } | 绘制点时是否随机 quad 角度。 |
public virtual bool RandomizeLinesQuadsAngle { … } | 绘制线时是否随机 quad 角度(可用于模拟喷枪效果)。 |
public virtual bool RenderToLayer { … } | 是否渲染到图层纹理。 |
public virtual bool RenderToInput { … } | 是否渲染到输入纹理。 |
public virtual bool RenderToTextures { … } | 是否渲染到任意 RenderTexture。 |
public virtual bool DrawPreProcess { … } | 是否在绘制前执行预处理。 |
public virtual bool DrawProcess { … } | 是否在合成过程中执行绘制。 |
public virtual bool BakeInputToPaint { … } | 是否将 InputTexture 烘焙到图层纹理。 |
public virtual bool ProcessingFinished { … } | 工具是否处理完成。 |
public virtual bool RequiredCombinedTempTexture { … } | 是否需要临时的合成纹理。 |
public BasePaintToolSettings BaseSettings { … } | 基础设置引用。 |
public T Settings { … } | 工具专属设置引用。 |
方法
| 方法 | 说明 |
public void FillWithColor(Color color) | 用指定颜色填充当前激活图层。 |
public virtual void OnDrawPreProcess(RenderTargetIdentifier combined) | 在合并图层到 combined 纹理前执行预处理。 |
public virtual void OnDrawProcess(RenderTargetIdentifier combined) | 在合并图层到 combined 纹理过程中执行绘制。 |
BasePaintToolSettings 是所有工具设置的基类;每个工具都可以派生自己的设置类。
属性与字段
| 成员 | 说明 |
public bool CanPaintLines { … } | 是否允许绘制线;为 false 时只能绘制点。 |
public bool DrawOnBrushMoveOnly { … } | 是否仅当绘制位置变化时才渲染画笔。 |
public int Smoothing { … } | 线条平滑等级(1–10):1 关闭、10 最大;当 > 1 时绘制会有约 2 帧延迟(影响 SpriteRenderer 与 RawImage)。 |
public bool RandomizePointsQuadsAngle { … } | 绘制点时是否随机 quad 角度。 |
public bool RandomizeLinesQuadsAngle { … } | 绘制线时是否随机 quad 角度;配合合适的笔刷纹理可模拟喷枪效果。 |
若工具的设置类带有 [PaintToolSettings] 特性,则其参数可在 Inspector 中显示。
颜色选择器相关类
ColorPickerManager
ColorPickerManager 提供完整的颜色选择界面,支持多种布局、调色板集成以及多种颜色空间表示。
属性与字段
| 成员 | 说明 |
public enum Mode { Rectangle, Circle, CircleFull, CircleCircle, CircleTriangle, Texture, Palette } | 运行时可用的布局模式。 |
public Color CurrentColor { get; } | 当前选中颜色(线性颜色空间)。 |
public bool IsDragging { get; } | 当指针在调色板内按下时为 true。 |
public CursorContrastMode CursorContrast { get; set; } | 控制光标可读性(None、InvertColor、InvertLightness)。 |
public UnityEvent<Color> OnColorChanging | 拖动过程中持续触发,用于实时预览。 |
public UnityEvent<Color> OnColorChanged | 用户确认选择时触发。 |
方法
| 方法 | 说明 |
public void SetColor(Color color, bool notify = true) | 通过代码设置取色器颜色(可选是否触发事件)。 |
public void SetMode(Mode mode) | 运行时切换布局。 |
public void SetPaletteTexture(Texture2D texture) | 设置纹理并一键切换到 Texture 模式。 |
public void ForceReapplyMaterials() | 重建内部材质(通常仅在 Shader 变更后需要)。 |
public void UpdatePaletteMode(Mode mode) | 强制刷新某个模式的 Shader(高级用法)。 |
public void UpdateAllUI() / UpdateCursor() | 刷新 UI 绑定与光标显示。 |
模式设置(Mode Settings)
| 设置项 | 说明 |
public TextureModeSettings TextureSettings | Texture 模式配置(取样、吸附、源纹理)。 |
public PaletteModeSettings PaletteSettings | Palette 模式配置(调色板资源与取样覆盖)。 |
ColorPalette (ScriptableObject)
表示一个生成的调色板,并为取色器的 Palette 模式自动创建/缓存纹理。
属性与字段
| 成员 | 说明 |
public string PaletteName { get; } | 调色板显示名称。 |
public PaletteType Type { get; } | 当前生成类型。 |
public Color[] BaseColors { get; } | 生成用的种子颜色(Custom 类型会直接使用)。 |
public Color[] GeneratedColors { get; } | 生成器输出的颜色数组。 |
public PaletteSettings Settings { get; } | 生成与纹理布局设置。 |
public Texture2D GeneratedTexture { get; } | Palette 模式使用的缓存纹理表示。 |
public IReadOnlyList<PaletteHandleOverride> HandleOverrides { get; } | 生成后对单个颜色的覆盖设置。 |
方法
| 方法 | 说明 |
public void GeneratePalette() | 重建 GeneratedColors 并更新纹理缓存。 |
public Texture2D GetOrCreateTexture() | 返回缓存纹理(必要时创建)。 |
public void RegenerateTexture() | 清空缓存纹理,使其在下次访问时重建。 |
public void SetBaseColors(params Color[] colors) | 更新种子颜色并重新生成。 |
public void SetPaletteType(PaletteType type) | 修改生成类型并重建。 |
public void SetHandleOverride(int index, float? saturation, float? value) | 覆盖指定色块的饱和度/明度。 |
public void ClearHandleOverride(int index, bool saturation, bool value) | 清除指定 index 的覆盖。 |
public void ClearAllOverrides(bool saturation, bool value, bool rebuild = true) | 批量重置覆盖设置。 |
PaletteType:Complementary、Triadic、Tetradic、Analogous、SplitComplementary、Monochromatic、Gradient、Custom。
CursorContrastMode:None、InvertColor、InvertLightness(根据取样亮度对光标进行变暗/变亮以提升对比度)。
PaletteSettings 字段:ColorCount、SaturationVariation、LightnessVariation、HueShift、Layout、SmoothTransitions、AutoSize、TextureWidth、TextureHeight、RotationAngle。
TextureModeSettings / PaletteModeSettings
ColorPickerManager 使用的模式配置容器;二者都继承自 TextureBasedModeSettings。
属性与字段
| 成员 | 说明 |
public bool UseBicubicSampling | 对渐变进行平滑插值取样。 |
public bool SnapCursor | 将选择吸附到像素中心。 |
public bool IgnoreTransparent | 取样时忽略透明像素。 |
public float TransparentAlphaThreshold | 忽略透明像素时的 Alpha 阈值。 |
public Color[] IgnoredColors | 不允许被选中的颜色。 |
public float IgnoreColorTolerance | 忽略颜色的容差范围。 |
public abstract Texture2D GetTexture() | 获取该模式所基于的纹理。 |
public class TextureModeSettings { public Texture2D Texture; } | Texture 模式的源纹理。 |
public class PaletteModeSettings { public ColorPalette ColorPalette; } | Palette 模式的调色板资源(纹理按需生成)。 |
平均颜色计算器
AverageColorCalculator
AverageColorCalculator 用于计算纹理的平均颜色。它会按设定精度对纹理进行采样,并可选择忽略透明像素。
属性与字段
| 成员 | 说明 |
public PaintManager PaintManager | 用于获取平均色的 PaintManager。 |
public PaintRenderTexture PaintRenderTexture | 用于计算平均色的目标纹理。 |
public bool SkipTransparentPixels | 采样时是否跳过源纹理中的透明像素。 |
事件
| 事件 | 说明 |
public event Action<Color> OnGetAverageColor | 在绘制过程中计算出平均色时触发。 |
方法
| 方法 | 说明 |
public void SetAccuracy(int accuracy) | 设置采样精度。 |
AverageColorCalculator 使用 XD Paint/Average Color Shader 对纹理进行采样并计算平均颜色。该过程主要由两个参数控制:主纹理与精度(精度相当于采样数量的“分母”)。精度越高,采样数量与 GPU 开销越大;精度越低,性能越好但准确性下降。
ColliderPainter
ColliderPainter
ColliderPainter 允许基于碰撞数据在 PaintObject 表面绘制。它会在 OnCollisionEnter 与 OnCollisionStay 期间捕获命中位置,并使用画笔根据碰撞数据对对象进行绘制。
事件
| 事件 | 说明 |
public event Action<PaintManager, Collision> OnCollide | 发生碰撞时触发;可基于碰撞数据执行绘制。第一个参数为 PaintManager,第二个参数为 Collision。 |
属性
| 属性 | 说明 |
public Color Color | 碰撞绘制时使用的颜色。 |
public float Pressure | 缩放画笔大小的值,用于模拟压力。 |