当前位置:网站首页>Unity3d: ugui source, Rebuild Optimization
Unity3d: ugui source, Rebuild Optimization
2022-07-23 12:40:00 【Plume debout du quatrième soir】
ImageComment dessiner
UnityLes objets rendus sont tous des mailles(Mesh)Composition,Et la cellule de dessin du maillage est l'élément(Point、Ligne、Triangle)
Les informations de dessin sont stockées dansVertexhelperDans la classe,Sauf les sommets,Y compris les normales、UV、Couleur、Tangente.
RebuildConcept
CanvasResponsable de la mise en place du noeud EnfantUIFusion de mailles d'éléments,Et générer les instructions de rendu appropriées à envoyer àUnityProcessus de pipeline graphique pour.Alors...CanvasC'est le renduUIComposants de,QuandUILe changement est effectué une foisBatch,C'est le principal facteur de performance.Attention!CanvasDeBatchN'affecte que ses noeuds enfants,Mais ça n'affectera pas son filsCanvas.
RebuildProcédures pour
- Image,TextC'est l'héritage.Graphic,GraphicOui.ICanvasElementInterface,RéalisationrebuildFonctions
public interface ICanvasElement
{
/// <summary>
/// Rebuild the element for the given stage.
/// </summary>
/// <param name="executing">The current CanvasUpdate stage being rebuild.</param>
/// // SelonCanvasUpdate Les différentes étapes de la reconstruction des éléments
void Rebuild(CanvasUpdate executing);
- CanvasUpdateRegistryÉcouterCanvasDewillRenderCanvasesÉvénements, Cet événement est appelé chaque image avant le rendu
public class CanvasUpdateRegistry
{
// Mise en page de la file d'attente de reconstruction ,QuandUI Mettre en file d'attente les éléments dont la disposition doit être mise à jour
private readonly IndexedSet<ICanvasElement> m_LayoutRebuildQueue = new IndexedSet<ICanvasElement>();
// File d'attente de reconstruction de dessin ,QuandUI Mettre en file d'attente l'image de l'élément lorsqu'elle doit être mise à jour
private readonly IndexedSet<ICanvasElement> m_GraphicRebuildQueue = new IndexedSet<ICanvasElement>();
protected CanvasUpdateRegistry()
{
//J'écoute.CanvasDewillRenderCanvasesÉvénements, Cet événement est appelé chaque image avant le rendu
Canvas.willRenderCanvases += PerformUpdate;
}
- PerformUpdate Collecte des files d'attente de reconstruction de mise en page , Appel de la file d'attente de reconstruction graphique ICanvasElement.Rebuild Achèvement de la reconstruction
Quand rejoindre la reconstruction
Via les paramètres“Données sales”Réalisé,Inclure la disposition(Layout)、Matériaux(Material)Et les sommets(Vertices)Trois Parties, Mise en page sale , La mise en page sera reconstruite , Pour rendre les sommets ou les matériaux sales , Reconstruction du dessin . La reconstruction de la mise en page s'ajoute à m_LayoutRebuildQueueMoyenne, La reconstruction graphique s'ajoute à m_GraphicRebuildQueueMoyenne,Attendre d'être appelé.
SetLayoutDirty: Rejoignez la file d'attente de reconstruction de mise en page
SetVerticesDirty,SetMaterialDirty:Matériaux, Les transformations Vertex sont ajoutées à la file d'attente de reconstruction graphique
Reconstruction de la disposition: Emplacement ou taille ;
Reconstruction d'images: Changement de vertex ,Changement de matériau(Taille, Rotation et changement de texte 、Modification de l'image)
Optimisation
Principaux objectifs,Prends ça.Profile- Oui.Canvas.SendWillRenderCanvRéduction des paramètres. En limitant le nombre de sommets , Changement de vertex, etc .
textModification des attributs(“123”–>“1234”),DéclencheurSetLayoutDirty: Compte à rebours. ,Selon1sChangement, Ne pas changer en temps réel
Modifier le texte,Couleur de l'image,DéclencheurSetVerticesDirty( Changement de vertex ), Donc changer la couleur de l'image est préférable changer la couleur de l'ombre
layout Composants causant des problèmes de reconstruction
text Tracé, Problèmes de performance des ombres
Génération d'un caractère 4Les sommets,
Si vous ajoutezShadow C'est l'équivalent Text Copié une fois. 8- Oui.,
OutlineIl vaTextCopier4 Génération universelle 20Les sommets.
Utiliser leshaderRemplacertextGradient
ImageChoix du format
Image: Le nombre de sommets dépend Image TypeLe choix de.
①Simple 4 Les sommets;
②Sliced CocherFillCenter Le nombre de sommets est 36 - Oui., Non coché oui 32 - Oui.;
③Tiled Dépend deRectranform Taille définie et taille originale , C'est parti. N Le tableau est 4*N - Oui.;
④Filled Plus de choix, Mais au moins, oui. 4- Oui..
Donc, pourImagePréféréSimple Le modèle suivant est Sliced Mode et non coché FillCenterSéparation dynamique et statique :Canvas.SendWillRenderCanvases()AvecCanvas.BuildBatch() Est calculé comme suit: Canvas Pour le noeud racine ,C'est différent.CanvasÇa n'affectera pas l'autre.Canvas.Mais, Une grande quantité de séparation dynamique et statique affecte CanvasApprobation conjointe, Pour pouvoir cibler le combat UI, Séparation de l'interface principale
Voir les facteurs d'influence de la reconstruction dans le code source
DéclencheurSetLayoutDirty
Graphic:
- protected override void OnRectTransformDimensionsChange():QuandUIDeRectTransform Rappel au changement ,Hérite.UIBehavior Le rappel est disponible
Image:
- protected override void OnCanvasHierarchyChanged(): Changement d'état de la toile mère
Text:
- textModification des attributs: Compte à rebours. ,Selon1sChangement, Ne pas changer en temps réel
- public bool supportRichText: Définir si le texte riche est activé , Règle de commutation ( Tant que l'état est différent de la dernière fois ,SetLayoutDirtyUn instant., Pas en temps réel après ouverture Dirty)
- public bool resizeTextForBestFit: Définir si le texte peut être automatiquement redimensionné en heures , Règle de commutation
- public int resizeTextMinSize: Taille minimale admissible du texte
- public int resizeTextMaxSize: Définir la taille maximale du texte
- public TextAnchor alignment: Texte relatif RectTransform Positionnement de.
- public int fontSize:Taille du texte
- public HorizontalWrapMode horizontalOverflow: Mode de débordement horizontal
- public VerticalWrapMode verticalOverflow: Mode de débordement vertical
- public float lineSpacing:Espacement des lignes, Spécifiez un facteur pour la hauteur de la ligne de police .La valeur est: 1 L'espacement standard des lignes sera généré lorsque
- public FontStyle fontStyle:Style de police
DéclencheurSetVerticesDirty: Changement de vertex
Graphic:
- public virtual Color color:Couleur, Donc changer la couleur de l'image est préférable changer la couleur de l'ombre
- protected override void OnRectTransformDimensionsChange():QuandUIDeRectTransform Rappel au changement ,Hérite.UIBehavior Le rappel est disponible
Image:
- public Type type:Simple,SlicedAttendez.
- public bool preserveAspect: Maintenir le rapport d'aspect , Règle de commutation
- public bool fillCenter
- public FillMethod fillMethod:Mode de remplissage
- public float fillAmount
- public bool fillClockwise
- public int fillOrigin
- public bool useSpriteMesh: Culture de la partie transparente de l'image
- protected override void OnCanvasHierarchyChanged(): Changement de toile parent
RawImage:
- public Texture texture
- public Rect uvRect
Shadow:
- public Color effectColor
- public Vector2 effectDistance
- public bool useGraphicAlpha
Text:
- public virtual string text
- public bool supportRichText
- public bool resizeTextForBestFit
- public int resizeTextMinSize
- public int resizeTextMaxSize
- public TextAnchor alignment
- public bool alignByGeometry: Effectuer un alignement horizontal en utilisant la géométrie du champ de la section , Au lieu d'un glyphe .
Cela peut conduire à un meilleur alignement à gauche et à droite , Mais cela peut entraîner un positionnement incorrect lorsque vous essayez d'écraser plusieurs polices ( Comme la police de contour professionnelle )Allez. - public int fontSize
- public HorizontalWrapMode horizontalOverflow
- public VerticalWrapMode verticalOverflow
- public float lineSpacing
- public FontStyle fontStyle
DéclencheurSetMaterialDirty: Changement de matériau
Graphic:
- public virtual Material material
Mask:
- public bool showMaskGraphic:
- protected override void OnEnable()
- protected override void OnDisable()
- protected override void OnValidate():Pour l'éditeur
MaskableGraphic:
- public bool maskable
- protected override void OnTransformParentChanged()
- protected override void OnCanvasHierarchyChanged()
- public virtual void RecalculateMasking(): Recalculer le masque pour cet élément et tous les éléments enfants .
DéclencheurSetAllDirty,Changement total
ImageIndirectement hérité deGraphic,Quand ilSpriteEn cas de changement,AppelleSetAllDirtyFonctions
SetAllDirty Changer le timing
Graphic:
- protected override void OnTransformParentChanged() Changement d'objet parent
- protected override void OnEnable()
- protected override void Reset(): Assigner les valeurs par défaut , Disponible uniquement sous l'éditeur ,Ça peut être ignoré.
- protected override void OnDidApplyAnimationProperties(): Modification des attributs d'animation
- protected override void OnValidate(): Chargement du script ou Inspector Appelé lorsque l'une des valeurs est modifiée , Disponible uniquement sous l'éditeur ,Ça peut être ignoré.
Image:
- static void RebuildImage(SpriteAtlas spriteAtlas) Changement d'Atlas
- spriteModification des attributs
- overrideSprite Modifier temporairement l'image
- public override void SetNativeSize() Définir la taille
Text:
- public void FontTextureChanged(): Texture de police modifiée :TTFPolices dynamiques,Text À chaque affectation Unity Génère une carte , Et enregistrer chaque mot UVInformation, La police est affichée selon UV L'information est extraite de la carte générée et finalement rendue à l'écran .
- fontChangement de propriété
边栏推荐
猜你喜欢
![[AUTOSAR DEM iv.event memory]](/img/11/78ab6e5e49aa24f061e0f431112fc2.png)
[AUTOSAR DEM iv.event memory]

Unity3d:场景加载 GameObejct上脚本执行顺序

【无标题】

C语言数据库:基于tcp多进程的在线词典,有详细的步骤已经图解,欢迎大家来观看
Blog Building III: comment system selection
![[AUTOSAR com 2. Advanced introduction to communication protocol stack]](/img/d2/16b58126a160a13e22eb8158f5ec8c.png)
[AUTOSAR com 2. Advanced introduction to communication protocol stack]

WebSocket 协议讲解

C# 自定义栈(Stack)

Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView

A comprehensive and detailed summary of the basic principles of steel structure
随机推荐
Vs attribute configuration related knowledge
Three versions and optimization of quick sorting by interval -- friends may not know it
Unity鼠标控制摄像机拖拽、旋转、缩放(模拟编辑器摄像机功能)
Embedded from entry to mastery (buried) - sharing of ultra detailed knowledge points 2
整数乘以整数溢出了
队列与堆的相互实现(纯c实现)
C#:快速排序,有相同的数字会忽略,然后继续先前的寻找方向去找下一个满足要求的数字进行替换
冒泡排序,快速排序
C# 自定义栈(Stack)
C语言:基于顺序表的学生管理系统,超级详细,全部都有注释,看完不懂来扇我。
C# 自定义双向链表
Blog Building II: next theme related settings beta
广播,组播,单播
Enter the triangle side length and calculate the area
3.2daydayup draw inferences from one instance: three days of fishing and two days of net learning
如何用普通的文本编辑器写Web页面
(1)ASIO
刷题笔记:二叉树的中序遍历(三种解法-递归,迭代,Morris)
linkerd服务网格调研笔记
Embedded from entry to mastery (buried) - sharing of ultra detailed knowledge points 3