Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 28. květen 2017, 18:21:43 Předmět: Fonty a velikosti napříč zařízeními |
|
|
Mám aplikaci, která poběží všude možně (tablety, mobily, PC, ale klidně i TV obrazovka...). Problém mám s fonty. Jak mám nastavit velikost fontů?
- Zkoušel jsem nastavit velikost přímo v pixelech - problém je, že na mobilu kde je vysoké DPI je to hrozně "mrňavé" a nečitelné, zatímco na 24" monitoru je to OK
- Nastavit velikost v pt - písma jsou všude stejně veliká, bez ohledu na DPI. Nicméně na mobilu jsou zase tím pádem strašně obrovské texty, zatímco na 24" monitoru je to OK
Nějaký nápad, jak se tohle řeší? Můžu udělat nějakou např. lineární (či jinou) funkci v závislosti na rozlišení a DPI... ale nějak se mi zdá, že to asi není úplně ideální. Např. web-browsery mi fonty vykreslují korektně a odpovídající velikostí jak na PC tak na mobilech. Ale jak přesně fungují, nevím.
PS: Používám FreeType knihovnu, renderovací systém na fonty jsem si psal sám _________________ Perry.cz |
|
Návrat nahoru |
|
|
Diskobolos
Založen: 14. 03. 2017 Příspěvky: 63 Bydliště: Praha
|
Zaslal: 28. květen 2017, 19:59:11 Předmět: |
|
|
V Unity tohle řeší plugin Text Mesh Pro, který pro jeho úspěch dali jako oficiální náhražku jejich text komponenty.
To používá něco, čemu říká Signed Distance Field a umožňuje to ostré renderování fontů v různých rozlišeních.
Více viz zde: https://forum.unity3d.com/threads/textmesh-pro-advanced-text-rendering-for-unity-beta-now-available-in-asset-store.227790/
Nevím, co kde a jak používáš, ale jsou tam přibalené SDF shadery a musíš si vygenerovat texturu s fonty, přes Unity je na to GUI klikátko, co texturu udělá z libovolného fontu. Takže by to teoreticky mohlo jít použít.
Nevýhoda je, že musíš specifikovat, které znaky z daného fontu to má do té textury přidat. |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 28. květen 2017, 21:24:01 Předmět: Re: Fonty a velikosti napříč zařízeními |
|
|
Nemůžeš to jednoduše udělat tak, řekněme, že víš, že jsi
v landscape režimu a budeš mít na výšku x řádků textu,
tak zvolit velikost fontu v pixelech, aby se to tam vešlo?
(případně do toho zakomponovat aspect ratio) |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 29. květen 2017, 08:02:45 Předmět: |
|
|
Diskobolos: perry měl zřejmě na mysli problém s automatickou volbou velikosti písma, ne "jak vytvořit label v unity". :-)
Jak píše mar, co tak zvolit jako měrnou jednotku procenta? Pokud dokážeš nastavit velikost v pixelech, stačí ti pak jen znát šířku a výšku obrazu. Jinak, myslím, že se nevyhneš více layoutům podle typu zařízení. Přecejen na mobil ta aplikace možná bude lepší jinak rozvržená, než na PC. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Diskobolos
Založen: 14. 03. 2017 Příspěvky: 63 Bydliště: Praha
|
Zaslal: 29. květen 2017, 08:32:51 Předmět: |
|
|
]semo[ napsal: |
Diskobolos: perry měl zřejmě na mysli problém s automatickou volbou velikosti písma, ne "jak vytvořit label v unity".
|
Neradil jsem, jak to udělat v Unity, jen upozorňoval na SDF, přečti si to, ale beru, že to asi bylo mimo mísu.
Jinak v Unity se velikost textu počítá automaticky podle rozlišení / aspect ratio. Děláš to tam tak, že si nejdřív definuješ "reference resolution" a na něm pak postavíš gui, např. při rozlišení 1920x1080 uděláš label o šířce 200px a fontu 20pt.
Když se pak změní rozlišení, šířka labelu a velikost textu se přepočítá.
Je tam krapet problém při změně aspect ratio - v Unity si můžeš vybrat z vícero možností, jak to řešit. |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 29. květen 2017, 09:09:08 Předmět: |
|
|
To zalezi dost na aplikaci, nekdy muzes chtit, aby text mel na zarizenich fyzicky stejnou velikost, nekdy te zajima spis pomer velikost textu/velikost displeje. Pises, ze ti to ma jet na mobilech, PC, TV, takze roli hraje i viewing distance... Na HD telefonu je citelny mensi font nez na HD televizi, kterou sledujes z nekolika metru, takze vedet rozliseni a DPI ti samo o sobe v tomhle proste nepomuze. A jak pise Diskobolos, od Unity se da dost inspirovat, jak se resi design UI pro ruzna rozliseni. Velikost fontu je jen jeden z problemu... |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 29. květen 2017, 09:52:30 Předmět: |
|
|
Nejde o layout / GUI. Ty fonty nejsou v GUI, ale v popiscích mapy Mapu mám "upravenou" přes poměry stran a rozlišení, takže vidím větší / menší úseky. Jen ty fonty pak jsou třeba moc velké.
Nicméně asi jsem našel řešení přes základní velikosti fontů, podobně jako fungují browsery. Systém vrací základní velikost pro standardní font a tu pak násobím scale hodnotou (em, %). Wokna i iOS tuto informaci o základní velikosti vrací (nebo mi to alespoň přijde), jak je na tom Android zatím nevím
Pro wokna např.:
kód: |
HWND handle = win_utils_find_main_window(GetCurrentProcessId());
//The tmHeight value of the TEXTMETRIC structure thus actually refers to line spacing rather than the font point size.
//The point size can be derived from tmHeight minus tmInternalLeading.
TEXTMETRIC m;
GetTextMetrics(GetDC(handle), &m);
|
Jestli je to dobré řešení se ukáže, až to překlopím na mobily nebo testnu na jiných verzích Woken ... zatím mám build jen pro Win 10 verzi a tam mi to přijde funkční. _________________ Perry.cz |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 29. květen 2017, 11:01:06 Předmět: |
|
|
Zase je výhoda, že takhle si uživatel třeba nastaví v systému větší fonty (třeba blbě vidí) a bude mu to rovnou fungovat :-).
Diskobolos: vpohodě :) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|