MaskableGraphicはグラフィックから継承された、とIClippable、IMaskable、IMaterialModifier 3つのインタフェースを継承しています。それはRawImage、画像や親クラスのテキストです。
のグラフィックから継承されたメソッド:
OnEnable:セットm_ShouldRecalculateStencil(テンプレートを再計算する必要が)UpdateClipParent(親オブジェクトの更新カット)を呼び出し、真である、SetMaterialDirty(汚い、グラフィック機能で作られたセット)を呼び出します。マスクコンポーネント場合は、再計算されたマスクをMaskUtilities.NotifyStencilStateChanged静的関数を呼び出します。
OnDisable:m_ShouldRecalculateStencilがtrueに設定され、順番にSetMaterialDirty UpdateClipParentを呼び出します。中StencilMaterialでm_MaskMaterialを取り外し、m_MaskMaterialがnullに設定置きます。マスクコンポーネント場合は、静的関数MaskUtilities.NotifyStencilStateChangedを呼び出します。
OnTransformParentChanged (とき親オブジェクトの変更):設定m_ShouldRecalculateStencilはターンコールUpdateClipParent、SetMaterialDirtyで、真実です。
(親オブジェクトのキャンバスステータス変更)OnCanvasHierarchyChanged:m_ShouldRecalculateStencilがtrueに設定され、UpdateClipParent、SetMaterialDirtyを呼び出し回します。
UpdateClipParentコードを見て:
プライベート ボイドUpdateClipParent() { VAR新規の親=(マスカブル&&のisActive())?MaskUtilities.GetRectMaskForClippable(本):ヌル; // 新しい親が異なるか非アクティブである場合 ならば(m_ParentMask =!ヌル &&(新規の親= m_ParentMask ||!!newParent.IsActive())) { m_ParentMask.RemoveClippable(この); UpdateCull(偽); } // 新規の親がアクティブでない場合、それを再度追加していない 場合(新規の親!= nullを&& newParent.IsActive()) newParent.AddClippable(この)。 m_ParentMask = 新規の親。 }
親オブジェクトは、(RectMask2Dコンポーネントは、セクションの範囲を超えてRectTransformの子オブジェクトの子オブジェクトの親RectTransformが遮断されるに応じてカットすることができる)のコンポーネントをRectMask2D見つけるMaskUtilities.GetRectMaskForClippableを呼び出します。
新規の親等しくないm_ParentMaskまたは新規の親が活性化されていない場合、それはRemoveClippable(偽、clippable.SetClipRectにRemoveClippable(新規のRect()と呼ばれる)は、長方形のカットを閉じ、そしてにおけるm_ClipTargetsのRectMask2Dから身を除去する)を呼び出し、その後除去更新します。
新規の親がアクティブにした場合、AddClippableは(中m_ClipTargetsのRectMask2Dに自分自身を追加すること)を呼び出します。
m_ParentMaskに割り当てられた新規の親。
のIClippableから継承されたメソッド:
(親オブジェクトの変更の際にIClippable状態と呼ばれる)RecalculateClipping:UpdateClipParentを呼び出します。
カル:validRectのclipRectが偽であるかrootCanvasRectの長方形と一致しない場合は、UpdateCullを呼び出します。UpdateCull、入力canvasRenderer.cullカル、canvasRenderer.cull =カル、に等しくない場合、コールバックm_OnCullStateChanged、グラフィックOnCullingChangedリコール機能。
SetClipRect:validRectが渡された値、開閉選択canvasRendererの長方形のカットを。
のIMaskableから継承されたメソッド:
RecalculateMasking:m_MaskMaterialでStencilMaterialを削除し、m_MaskMaterialがnullに設定され、m_ShouldRecalculateStencilは真、コールSetMaterialDirty機能に設定しました。
のIMaterialModifierから継承されたメソッド:
パブリック 仮想材質GetModifiedMaterial(素材基本素材) { VAR = toUse 基本素材。 もし(m_ShouldRecalculateStencil) { VARの rootCanvasの=のMaskUtilities.FindRootSortOverrideCanvas(変換)。 m_StencilValue =マスカブル?MaskUtilities.GetStencilDepth(、rootCanvas変換):0 ; m_ShouldRecalculateStencil = 偽; } // 我々が有効にマスクコンポーネントを持っている場合、それはなります // マスク材料を生成します。これは最適化です // これは、しかし:(コンポーネント間のいくつかのカップリングを追加 maskComponent = GetComponent <マスク>マスク;() であれば(m_StencilValue> 0 &&(maskComponent == NULL!|| maskComponent.IsActive())) { VARの maskMat = StencilMaterial.Add( toUse、(1 << m_StencilValue) - 1、StencilOp.Keep、CompareFunction.Equal、ColorWriteMask.All、(1 << m_StencilValue) - 1、0 ); StencilMaterial.Remove(m_MaskMaterial); m_MaskMaterial = maskMat。 toUse= m_MaskMaterial。 } 戻りtoUseと、 }
GetModifiedMaterialは:m_ShouldRecalculateStencilがtrueの場合、MaskUtilities.FindRootSortOverrideCanvasによってrootCanvasを取得し、マスカブルに従って、ために割り当てられたテンプレートの深さまたは0をm_StencilValue、m_ShouldRecalculateStencilはfalseに設定しました。
0より大きく、マスクm_StencilValueコンポーネントが存在しないか、またはアクティブ化されていない場合、m_MaskMaterialにStencilMaterialに基本素材、stencilID、操作およびその他のパラメータを入れて、新しい素材と交換します。