跳转至

2D/3D Paint API 总览

本页按模块整理了关键类与常用成员,便于快速查阅。

核心组件

组件 作用
InputController 在鼠标、触控、手写笔与 VR 设备之间统一路由与过滤输入。
RaycastController 执行网格射线检测,并将命中/相交数据排队供绘制使用。
PaintController 统一管理 PaintManager,并提供共享的画笔/工具/模式设置。
PaintManager 面向单个目标对象,聚合绘制状态、图层与渲染管线。

快速跳转

章节 跳转
Controllers:输入与射线控制器 Controllers
绘制流程与工具相关类 PaintManager
取色器与调色板相关类 Color Picker Classes
平均颜色计算器 Average Color Calculator
ColliderPainter 工具 ColliderPainter

控制器

InputController

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 上绘制的基础类。其派生类(如 CanvasRendererPaintSpriteRendererPaintMeshRendererPaintSkinnedMeshRendererPaintObject)会基于输入数据实现绘制位置判定等逻辑。

属性与字段

成员 说明
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

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

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

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 中显示。

Image title

颜色选择器相关类

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; } 控制光标可读性(NoneInvertColorInvertLightness)。
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。

CursorContrastModeNoneInvertColorInvertLightness(根据取样亮度对光标进行变暗/变亮以提升对比度)。

PaletteSettings 字段:ColorCountSaturationVariationLightnessVariationHueShiftLayoutSmoothTransitionsAutoSizeTextureWidthTextureHeightRotationAngle

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 缩放画笔大小的值,用于模拟压力。