NFT數藏系統開發詳細(邏輯功能)NFT實物數藏模式系統開發流程(原始碼搭建)
NFT將成為元宇宙的關鍵基礎設施,元界悔成為NFT最實出的應用,NFT的獨特性和可替代性將為現實世界中的人類沉浸在元宇宙中提供可靠的墓礎元宇宙是線上線下世界的融合,物理與電子相結合的方式。元宇宙為虛擬世界深入現實世界鋪平了道路,無論是從虛擬到現實,還是從現實到虛擬,都致力於為使用者提供更真實的體驗。
Image怎麼繪製的
Unity中渲染的物體都是由網格(Mesh)構成的,而網格的繪製單元是圖元(點、線、三角面)
繪製資訊都儲存在Vertexhelper類中,除了頂點外,還包括法線、UV、顏色、切線。
Rebuild概念
Canvas負責將子節點的UI元素的網格合併,並生成相應的渲染指令再傳送到Unity的圖形管道的過程。所以Canvas就是渲染UI的元件,當UI發生變化就要執行一次Batch,它是影響效能更大的元兇。注意Canvas的Batch只會影響其子節點,但不會影響其子Canvas。
Rebuild的程式流程NFT鏈遊開發原始碼模式威:StPv888
Image,Text都是繼承Graphic,Graphic有ICanvasElement介面,實現rebuild函式
public interface ICanvasElement { ///<summary> ///Rebuild the element for the given stage. ///</summary> ///<param name="executing">The current CanvasUpdate stage being rebuild.</param> /////根據CanvasUpdate的不同階段重建元素 void Rebuild(CanvasUpdate executing); CanvasUpdateRegistry監聽Canvas的willRenderCanvases事件,這個事件會在渲染前進行每幀呼叫 public class CanvasUpdateRegistry { //佈局重建佇列,當UI元素的佈局需要更新時將其加入佇列 private readonly IndexedSet<ICanvasElement>m_LayoutRebuildQueue=new IndexedSet<ICanvasElement>(); //圖形重建佇列,當UI元素的影像需要更新時將其加入佇列 private readonly IndexedSet<ICanvasElement>m_GraphicRebuildQueue=new IndexedSet<ICanvasElement>(); protected CanvasUpdateRegistry() { //監聽了Canvas的willRenderCanvases事件,這個事件會在渲染前進行每幀呼叫 Canvas.willRenderCanvases+=PerformUpdate; }複製
PerformUpdate收集佈局重建佇列,圖形重建佇列呼叫ICanvasElement.Rebuild完成重建
何時加入重建
透過設定“髒資料”實現的,包括佈局(Layout)、材質(Material)和頂點(Vertices)三部分,設定佈局為髒,將進行佈局重建,設定頂點或材質為髒,則進行圖形重建。佈局重建會將自身加入m_LayoutRebuildQueue中,圖形重建則會將自身加入m_GraphicRebuildQueue中,等待被呼叫。
SetLayoutDirty:加入到佈局重建佇列
SetVerticesDirty,SetMaterialDirty:材質,頂點變換加入到圖形重建佇列
佈局重建:位置或者大小;
影像重建:頂點變化,材質變化(大小,旋轉以及文字變化、圖片的修改)
最佳化
主要目標,把Profile裡Canvas.SendWillRenderCanv引數調小。透過限制頂點數量,頂點變化等。
text屬性改變(“123”–>“1234”),觸發SetLayoutDirty:在做倒數計時相關,按照每1s改變,不要實時改變
改文字,圖片顏色,觸發SetVerticesDirty(頂點改變),所以改圖片顏色最好是改材質球顏色
layout元件引起重建問題
text描邊,陰影效能問題
一個字元產生4個頂點,
如果再加上Shadow則相當於又把Text複製了一遍產生8個,
Outline則會將Text複製4遍產生20個頂點。
用相應的shader替換
text漸變
Image格式選擇
Image:頂點數量取決於Image Type的選擇。
①Simple 4個頂點;
②Sliced勾選FillCenter的頂點數是36個,不勾選是32個;
③Tiled取決於Rectranform設定的大小和原圖大小,鋪開了N張圖就是4*N個;
④Filled選擇比較多,但最少也有4個。
所以對於Image首選Simple模式其次則是Sliced模式且不勾選FillCenter
動靜分離:Canvas.SendWillRenderCanvases()與Canvas.BuildBatch()的計算是以Canvas為根節點進行的,不同Canvas不會影響另外一個Canvas。但是,大量的動靜分離反而影響Canvas的合批,所以可以針對性的對戰鬥UI,主介面做分離
原始碼中檢視影響重建因素
觸發SetLayoutDirty
Graphic:
protected override void OnRectTransformDimensionsChange():當UI的RectTransform更改時的回撥,只要繼承UIBehavior即可獲取回撥
Image:
protected override void OnCanvasHierarchyChanged():父畫布的狀態改變
Text:
text屬性改變:在做倒數計時相關,按照每1s改變,不要實時改變
public bool supportRichText:設定是否開啟富文字時,開關規則(只要狀態跟上次不同,SetLayoutDirty一下,而不是開啟後實時Dirty)
public bool resizeTextForBestFit:設定是否允許文字自動調整大小時,開關規則
public int resizeTextMinSize:允許的最小文字大小
public int resizeTextMaxSize:設定最大文字大小
public TextAnchor alignment:文字相對其RectTransform的定位。
public int fontSize:文字大小
public HorizontalWrapMode horizontalOverflow:水平溢位模式
public VerticalWrapMode verticalOverflow:垂直溢位模式
public float lineSpacing:行間距,指定為字型行高的一個因子。值為1時將生成標準行間距
public FontStyle fontStyle:字型樣式
觸發SetVerticesDirty:頂點變化
Graphic:
public virtual Color color:顏色,所以改圖片顏色最好是改材質球顏色
protected override void OnRectTransformDimensionsChange():當UI的RectTransform更改時的回撥,只要繼承UIBehavior即可獲取回撥
Image:
public Type type:Simple,Sliced等
public bool preserveAspect:是否保持高寬比,開關規則
public bool fillCenter
public FillMethod fillMethod:填充模式
public float fillAmount
public bool fillClockwise
public int fillOrigin
public bool useSpriteMesh:圖片透明部分裁剪
protected override void OnCanvasHierarchyChanged():父畫布改變
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:使用區段的字形幾何執行水平對齊,而不是字形指標。
這可以導致更好的擬合左和右對齊,但可能會導致不正確的定位當試圖覆蓋多個字型(如專業輪廓字型)上
public int fontSize
public HorizontalWrapMode horizontalOverflow
public VerticalWrapMode verticalOverflow
public float lineSpacing
public FontStyle fontStyle
觸發SetMaterialDirty:材質改變
Graphic:
public virtual Material material
Mask:
public bool showMaskGraphic:
protected override void OnEnable()
protected override void OnDisable()
protected override void OnValidate():編輯器用
MaskableGraphic:
public bool maskable
protected override void OnTransformParentChanged()
protected override void OnCanvasHierarchyChanged()
public virtual void RecalculateMasking():為此元素和所有子元素重新計算遮罩。
觸發SetAllDirty,全改變
Image間接繼承自Graphic,當它的Sprite發生變化時,會呼叫SetAllDirty函式
SetAllDirty改變時機
Graphic:
protected override void OnTransformParentChanged()父物體改變
protected override void OnEnable()
protected override void Reset():賦值預設值,只在編輯器下有用,可無視
protected override void OnDidApplyAnimationProperties():動畫屬性改變
protected override void OnValidate():指令碼載入或Inspector中的任何值被修改時會呼叫,只在編輯器下有用,可無視
Image:
static void RebuildImage(SpriteAtlas spriteAtlas)圖集改變
sprite屬性改變
overrideSprite臨時修改圖片
public override void SetNativeSize()設定大小
Text:
public void FontTextureChanged():字型紋理被修改:TTF動態字型,Text每次賦值的時候Unity會生成貼圖,以及儲存每個字的UV資訊,那麼顯示字型的時候根據UV資訊去生成的貼圖裡取最終渲染在螢幕上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2936330/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nft數藏系統開發功能(原始碼Demo)原始碼
- NFT數藏實物專案系統開發技術)(成熟原始碼)原始碼
- 數藏nft系統開發原始碼獨立部署原始碼
- nft數藏平臺系統開發技術方案丨數藏nft系統ai繪畫定製開發技術流程AI
- nft數藏現成案例系統開發
- NFT蝸客數藏開發丨蝸客數藏系統開發技術丨NFT數字藏品詳情
- 探元數藏NFT開發丨藏品原始碼丨探元數藏系統設計開發丨NFT技術原始碼
- MT碳數藏(NFT)系統模式開發技術分析模式
- NFT元宇宙鏈遊/系統開發/NFT數藏/NFT鏈遊遊戲模式元宇宙遊戲模式
- 悅境2.0數藏系統技術開發/原始碼/DAPP/NFT原始碼APP
- NFT金鳳數藝數藏開發丨原始碼丨金鳳數藝系統開發丨Defi丨NFT原始碼
- 鏈遊NFT遊戲/NFT元宇宙/系統技術開發/NFT數藏遊戲元宇宙
- NFT數藏(鏈遊)元宇宙藝術交易系統功能開發詳情元宇宙
- 非梵藝術NFT數藏開發/系統技術開發/非梵藝術NFT模式模式
- NFT鏈遊數藏盲盒元宇宙系統開發流程丨NFT鏈遊盲盒案例原始碼元宇宙原始碼
- NFT天空數藏系統技術開發丨python語言丨天空數藏nft丨defiPython
- 金鳳數藝NFT數藏系統技術開發示例
- NFT天空數藏元宇宙技術開發系統及程式碼示例丨NFT元宇宙
- NFT數字藏品開發丨NFT盲盒數藏系統技術開發丨DAPP丨Defi丨NFTAPP
- NFT非梵藝術/數藏系統開發/非梵藝術技術開發NFT詳情
- NFT數藏商品系統開發技術詳情
- Doodles數藏NFT元宇宙開發系統技術丨原始碼丨Doodles元宇宙功能元宇宙原始碼
- NFT數藏數字藏品系統開發專案邏輯分析方案(原理分析)
- 數字藏品nft系統開發平臺搭建原始碼原始碼
- NFT數字藏品系統開發功能技術需求方案丨AI繪畫數藏模式系統開發對接功能AI模式
- NFT(數字藏品)系統開發案例詳情丨NFT數字藏品開發原始碼說明原始碼
- NFT元宇宙數藏開發團隊專業開發各種鏈遊模式系統元宇宙模式
- NFT數字藏品鑄造系統開發(開發方案)丨NFT數字藏品鑄造系統開發(開發原始碼)原始碼
- NFT交易平臺系統開發丨NFT發行鑄造交易系統開發詳情原始碼搭建原始碼
- Stepn/nft跑鞋系統開發/鏈遊專案開發/技術詳細/玩法邏輯/原始碼案例原始碼
- NFT生態藝術開發丨NFT數藏藝術丨NFT生態藝術系統開發技術
- NFT數藏古玩拍賣平臺運營模式分析 | NFT數藏古玩拍賣平臺開發原始碼示例模式原始碼
- NFT數字藏品系統開發原始碼部署丨NFT鏈遊元宇宙遊戲系統開發原始碼搭建原始碼元宇宙遊戲
- NFT數字藏品開發需求丨NFT數字藏品系統開發(開發原理)丨NFT數字藏品原始碼功能原始碼
- 數字藏品nft系統開發功能介紹詳情
- NFT質押智慧合約系統開發邏輯分析原始碼原始碼
- NFT數字藏品開發功能丨NFT數字藏品系統開發(開發流程及方案)
- NFT數藏元宇宙藝術品交易系統開發技術解析元宇宙