日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何避免动态字体Font Texture过大

發(fā)布時間:2023/12/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何避免动态字体Font Texture过大 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是第148篇UWA技術(shù)知識分享的推送。今天我們繼續(xù)為大家精選了若干和開發(fā)、優(yōu)化相關(guān)的問題,建議閱讀時間10分鐘,認真讀完必有收獲。

UWA 問答社區(qū):answer.uwa4d.com
UWA QQ群2:793972859(原群已滿員)


本期目錄:

  • 如何能避免動態(tài)字體Font Texture過大
  • 場景Object對不同鼠標(biāo)按鍵產(chǎn)生不同響應(yīng)事件的實現(xiàn)方式
  • UGUI中,在Canvas下改變某一UI是否會引起所有UI的重繪
  • 播放Idle動畫后角色產(chǎn)生位移
  • 如何解決更新后場景中貼圖會變黑的問題

UI

Q:Failed to update dynamic font (arial) texture; all the needed characters do not fit onto a single texture (max size 4096). Try using less text or a smaller font size.
項目中已經(jīng)把字號控制在4個(16,22,26,30)了,理論上字號并不多,而且安卓上不會出現(xiàn)這種情況,一直查不清是什么問題。

A:我們使用FairyGUI,默認使用高清字體模式——編輯器下用設(shè)計分辨率設(shè)計字體大小,手機上根據(jù)實際分辨率進行了等比放大。例如設(shè)計分辨率用1280x720,手機分辨率1920x1080,字號就擴大了1.5倍。并且我們字體控件使用了自動適配控件大小模式,文本長度超過控件長度的話,會自動進行縮小字號來匹配,這樣字號數(shù)量不可控的又多了起來。

我們目前的解決方案是:1.取消了高清字體模式;2.項目約定字號只用偶數(shù),更改源碼自動縮小的字號也只產(chǎn)生偶數(shù)。

感謝潘友成@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/5c3c51ee050b697811b11e7d


Input

Q:我在場景中實例化一物體,并且該物體會對鼠標(biāo)指針的進入和進出做出響應(yīng)(例如,指針指向物體時改變顏色,移出時恢復(fù)顏色)。同時,我還需要對鼠標(biāo)的按鍵狀態(tài)進行響應(yīng),左鍵和右鍵產(chǎn)生不同的操作。這種需求,除了在Object腳本的Update里做判斷外,還有沒有更效率的實現(xiàn)方式?

A:可以借助IpointerClickHandler接口:
https://docs.unity3d.com/ScriptReference/EventSystems.IPointerClickHandler.html

using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.Events;public class RightClick : MonoBehaviour, IPointerClickHandler{public UnityEvent leftClick;public UnityEvent middleClick;public UnityEvent rightClick;public void OnPointerClick(PointerEventData eventData){if (eventData.button == PointerEventData.InputButton.Left)leftClick.Invoke ();else if (eventData.button == PointerEventData.InputButton.Middle)middleClick.Invoke ();else if (eventData.button == PointerEventData.InputButton.Right)rightClick.Invoke ();}}

將以上腳本掛在Object之上即可。

感謝hcj@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/5b3e0d212a652c518d8d5300


UGUI

Q:請問如果一個Canvas下的某一個UI改變或者移動了,或者增減某個UI,會導(dǎo)致整個Canvas下所有元素的Rebuild嗎?

我看網(wǎng)絡(luò)上的大部分例子都是一個Canvas作為根節(jié)點,之后用Panel作為某一個界面的父節(jié)點,放在Canvas下。我有點疑惑,如果任何UI的改變都會引起Canvas的重構(gòu),重新計算Mesh之類的,那只有一個Canvas的界面布局方法,不是會導(dǎo)致很多無畏的消耗?

我想設(shè)計為:每一個功能界面都是以獨立Canvas作為容器。那這個界面下的UI變化就不會影響到其他的Canvas,不會導(dǎo)致所有UI的重繪。這樣的想法會有問題嘛?Canvas多了會有額外性能消耗嗎?(DrawCall這個我已經(jīng)考慮過了,可以接受)

還有其它可行的設(shè)計方案嗎?

A1:首先,推薦UWA博客里面有一篇關(guān)于UGUI優(yōu)化的文章:
https://blog.uwa4d.com/archives/QA_UGUI-1.html

其次,UI元素的位置,顏色,大小變化,都會導(dǎo)致Canvas的更新或者重建,因此要避免重建,要盡可能把頻繁變化的UI元素從復(fù)雜的Canvas中分離出來,以此將動態(tài)UI元素的變化所引起的網(wǎng)格更新或重建所涉及到的范圍變小,減輕Canvas更新和重建帶來的性能開銷。

再次,通常情況下,如果整個游戲只有一個Canvas,確實會帶來很多無謂的性能消耗。

最后,每一個功能界面以獨立的小Canvas作為容器存在,我們在量級很小(整個游戲不超過10個界面)的產(chǎn)品里面用過。能否通用所有項目情況,我認為需要具體情況具體分析。
感謝張銳@UWA問答社區(qū)提供了回答

A2:推一波自己文章,記錄了相關(guān)的概念,應(yīng)該能幫助你有個清晰的認識:
https://www.jianshu.com/p/5c44eb589751

關(guān)于Canvas的劃分,首先每個功能肯定有一個獨立的Canvas,在做顯隱控制的時候會方便。然后對于界面復(fù)雜的功能,要酌情拆分出子Canvas,拆分條件可以參考UWA文章,基本是動靜分離為主。

UGUI中,Canvas少不一定DrawCall少,所以這方面可以不必太過在意。而且當(dāng)界面臃腫的時候,重建的消耗是遠高于多幾個DrawCall的。

感謝Walker@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/5c5125b97692f15c777a5558


動畫

Q:我希望角色模型在播放Idle動畫時位置保持在原地,當(dāng)打開Apply Root Motion時,角色會產(chǎn)生微小的位移和旋轉(zhuǎn),關(guān)閉Apply Root Motion時,角色位置雖然能夠保持在原地,但角色的動畫就會很奇怪,兩只腳不再保持跟地面接觸,而是像漂浮在空中一樣擺動兩腿。

A:如果是Humanoid模式的話,可以試試這邊的Bake Into Pose的選項:


如果是Generic的話,可以先看看這里的設(shè)置是不是None:


如果是None也有問題,再把動畫壓縮關(guān)了試試,看看是不是精度的問題:

?

該回答由UWA提供,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/5c5fdfc32b3589332f1a4951


紋理

Q:從2017.4.17f1更新到2017.4.18f1(19f1和20f1也會有這個問題)后,再打版本運行到Android 4后,場景中某些貼圖會變成黑色,某些貼圖不會。

出問題和不出問題的貼圖,都是ETC1格式,Diffuse材質(zhì);
出現(xiàn)問題的設(shè)備有:紅米Note1(4.4.4)、紅米2(4.4.4)、三星 G3608(4.4.4)、三星Galaxy S3(4.3)、Oppo1107(4.4.4);
UWA的紅米2(5.1.1)沒有發(fā)現(xiàn)這類問題。

補充截圖如下:

?

@deviljz 提到在2018.2 上遇到過一個變黑的Bug,滿足以下4個條件貼圖會變黑色:
1、長寬比不是1:1
2、開Mipmap
3、ETC壓縮
4、在安卓4.4上
感覺應(yīng)該和我們遇到的問題一樣,請問這種有什么解決辦法,除了降低Unity版本。

A:解決方法:只要讓2、3條件有1個不滿足就行了。

比如寫個OnPreprocessTexture方法,判斷長寬比不是1:1的情況下強制指定壓縮方式是ETC2,不用ETC壓縮。

感謝deviljz@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/5c61184763826a332ad994da

今天的分享就到這里。當(dāng)然,生有涯而知無涯。在漫漫的開發(fā)周期中,您看到的這些問題也許都只是冰山一角,我們早已在UWA問答網(wǎng)站上準(zhǔn)備了更多的技術(shù)話題等你一起來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官網(wǎng):www.uwa4d.com
官方技術(shù)博客:blog.uwa4d.com
官方問答社區(qū):answer.uwa4d.com
官方技術(shù)QQ群:793972859(原群已滿員)

封面圖來源:Unreal Landscape
https://lab.uwa4d.com/lab/5b85803f02004fb659765ee1

總結(jié)

以上是生活随笔為你收集整理的如何避免动态字体Font Texture过大的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。