Unity3d 移動(dòng)平臺(tái)宕機(jī)bug 之 ParticleSystemRenderer::UpdateCachedMesh

宕機(jī)bug日志分析:

通過(guò)logcat觀察到的宕機(jī)堆棧

案例一

ParticleSystemRenderer::UpdateCachedMesh()atParticleSystemRenderer.cpp:

0x2053c8c:push{r4,r5,r6,r7,lr}

0x2053c8e:add? ? r7,sp,#0xc

0x2053c90:push.w{r8,r10,r11}

0x2053c94:subsp,#0x8

...

0x2053c9a:mov.w? r10,#0x0

...

0x2053d16:str.w? r10,[sp,#4]

...

0x2053d42:blx0x294c5d8;symbol stubfor:memcpy

0x2053d46:ldr.w? r10,[sp,#4]? ? ? ? ? ? ; The game crashes here

0x2053d4a:b0x2053db0;ParticleSystemRenderer::UpdateCachedMesh()+292[inlined]ListElement::GetNext()constatLinkedList.h:71

案例二:

09-29?22:14:48.257?3093-3093/??A/DEBUG:?????r0?be2aabb0??r1?00000000??r2?0000000c??r3?00000000

09-29?22:14:48.257?3093-3093/??A/DEBUG:?????r4?cc83fc10??r5?cc0ce8d0??r6?be2aabb0??r7?0000000c

09-29?22:14:48.257?3093-3093/??A/DEBUG:?????r8?cc83fdac??r9?00000000??sl?00000006??fp?00000000

09-29?22:14:48.257?3093-3093/??A/DEBUG:?????ip?80000000??sp?eeb72290??lr?e0d8111c??pc?f6df87cc??cpsr?a0010010

09-29?22:14:48.307?3093-3093/??A/DEBUG:?backtrace:

09-29?22:14:48.307?3093-3093/??A/DEBUG:?????#00?pc?000177cc??/system/lib/

libc.so?(__memcpy_base+272)

libunity.so?(_ZN22ParticleSystemRenderer16UpdateCachedMeshEv+684)

libunity.so?(_ZN18AwakeFromLoadQueue30PersistentManagerAwakeFromLoadEi17AwakeFromLoadMode+176)

libunity.so?(_ZN18AwakeFromLoadQueue30PersistentManagerAwakeFromLoadEv+128)

libunity.so?(_ZN18LoadSceneOperation21CompleteAwakeSequenceEv+132)

libunity.so?(_ZN18LoadSceneOperation25PlayerLoadSceneFromThreadEv+316)

libunity.so?(_ZN18LoadSceneOperation19IntegrateMainThreadEv+184)

libunity.so?(_ZN14PreloadManager26UpdatePreloadingSingleStepENS_21UpdatePreloadingFlagsEi+388)

libunity.so?(_ZN14PreloadManager16UpdatePreloadingEv+328)

libunity.so?(_Z10PlayerLoopbbP10IHookEvent+616)

?/data/app/com.funova.metaworld-2/lib/arm/

libunity.so?(_Z15UnityPlayerLoopv+880)

libunity.so?(_Z12nativeRenderP7_JNIEnvP8_jobject+264)

?2/oat/arm/base.odex?(offset?0x22000)?(boolean?com.unity3d.player.UnityPlayer.nativeRender()+76)

?2/oat/arm/base.odex?(offset?0x22000)?(boolean?com.unity3d.player.UnityPlayer.a(com.unity3d.player


從報(bào)錯(cuò)信息字面意思來(lái)看,是在渲染過(guò)程中巷波,更新緩存的網(wǎng)格信息時(shí)灾常,內(nèi)存拷貝失敗室叉,導(dǎo)致宕機(jī)护姆。

可以初步判斷是mesh這類資源的出的問(wèn)題,并且是在需要mesh進(jìn)行內(nèi)存拷貝的時(shí)候。帶著這個(gè)疑問(wèn)去搜索了官方資料。

在Models 導(dǎo)入的說(shuō)明文檔中到找到了一個(gè)選項(xiàng):Read/Write Enabled 如果設(shè)置為enabled的話韭山,那就可以進(jìn)行內(nèi)存拷貝。 文檔連接

修復(fù)該宕機(jī)bug冷溃,就是需要把 Read/Write Enabled 勾上選項(xiàng)

Read/Write Enabled 選項(xiàng)說(shuō)明

Enables the mesh to be written at runtime so you can modify the data; it makes a copy in memory. When this option is turned off, it saves memory since Unity can unload a copy of mesh data in the game. However, if you are scaling or instantiating meshes at runtime with a non-uniform scale, you may have to enable “Read/Write Enabled” in their import settings. The reason is that non-uniform scaling requires the mesh data to be kept in memory. Normally this is detected at build time, but when meshes are scaled or instantiated at runtime you need to set this manually. Otherwise they might not be rendered in game builds correctly. The same applies if you need to create MeshColliders at runtime.

如果導(dǎo)入的mesh需要做 non-uniform scale (不均勻縮放)钱磅,那就需要進(jìn)行一次拷貝操作,那么對(duì)于mesh導(dǎo)入時(shí)似枕,需要設(shè)定為可以讀寫(xiě)盖淡,否者就會(huì)出現(xiàn)宕機(jī)或渲染的對(duì)象不正確的情況。

補(bǔ)充說(shuō)明凿歼,mesh出現(xiàn)這類問(wèn)題的時(shí)候褪迟,對(duì)MeshColliders也需要做相同的設(shè)置操作。

從內(nèi)存優(yōu)化角度來(lái)說(shuō)答憔,最好不好在有多份的mesh存在味赃,那樣會(huì)浪費(fèi)內(nèi)存

說(shuō)明在導(dǎo)入時(shí) Scale Factor 參數(shù)的設(shè)置會(huì)比較重要

Unity’s physics system expects 1 meter in the game world to be 1 unit in the imported file. If you prefer to model at a different scale then you can compensate for it here. Defaults for different 3D packages are as follows .fbx, .max, .jas, .c4d = 0.01, .mb, .ma, .lxo, .dxf, .blend, .dae = 1 .3ds = 0.1

以上說(shuō)明根據(jù)導(dǎo)入mesh的文件的格式,與unity物理系統(tǒng)的之間1m與1個(gè)單位的對(duì)應(yīng)關(guān)系

盡量在導(dǎo)入時(shí)機(jī)會(huì)做好標(biāo)準(zhǔn)縮放了虐拓,那么就不需要在scale 或 instantiating 時(shí)進(jìn)行多份內(nèi)存拷貝了洁桌。?




// 檢測(cè)工具

public static void CheckFXBReadWriteEnable()

{

string artPath = "Assets/Resourcex/art";

var paths = Directory.GetFiles(artPath, "*.meta", SearchOption.AllDirectories).Where(s => s.ToLower().EndsWith("fbx.meta"));

foreach (string path in paths)

{

using (StreamReader fsRead = new StreamReader(path))

{

int isReadable = 0;

float globalScale = 1f;

while (!fsRead.EndOfStream)

{

string line = fsRead.ReadLine();

if (line.IndexOf("isReadable") != -1)

{

string[] items = line.Split(':');

if (items.Length==2)

{

isReadable = Int32.Parse(items[1]);

}

}

else if (line.IndexOf("globalScale") != -1)

{

string[] items = line.Split(':');

if (items.Length == 2)

{

globalScale = float.Parse(items[1]);

}

}

}

if (globalScale != 1 && isReadable == 0)

{

Debug.LogErrorFormat("import model [ {0} ] scale factor is [{1}] must set read/write enable",

path, globalScale);

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市侯嘀,隨后出現(xiàn)的幾起案子另凌,更是在濱河造成了極大的恐慌,老刑警劉巖戒幔,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吠谢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诗茎,警方通過(guò)查閱死者的電腦和手機(jī)工坊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)献汗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人王污,你說(shuō)我怎么就攤上這事罢吃。” “怎么了昭齐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵尿招,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阱驾,道長(zhǎng)就谜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任里覆,我火速辦了婚禮丧荐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喧枷。我一直安慰自己虹统,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布隧甚。 她就那樣靜靜地躺著车荔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻逆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天菩帝,我揣著相機(jī)與錄音咖城,去河邊找鬼。 笑死呼奢,一個(gè)胖子當(dāng)著我的面吹牛宜雀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播握础,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辐董,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了禀综?” 一聲冷哼從身側(cè)響起简烘,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎定枷,沒(méi)想到半個(gè)月后孤澎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欠窒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年覆旭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型将,死狀恐怖寂祥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情七兜,我是刑警寧澤丸凭,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站惊搏,受9級(jí)特大地震影響贮乳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恬惯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一向拆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酪耳,春花似錦浓恳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至言疗,卻和暖如春晴圾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噪奄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工死姚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勤篮。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓都毒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親碰缔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子账劲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc閱讀 2,844評(píng)論 0 0
  • 文/蒙涓 那是我做過(guò)最令我難受的夢(mèng)。 夢(mèng)境里被藍(lán)色粉刷金抡,印襯出孤涼之意瀑焦。而藍(lán)色卻是我偏愛(ài)的顏色。我的四周都有深不見(jiàn)...
    蒙涓閱讀 290評(píng)論 3 6
  • 文人大多都對(duì)政治有著天生的抵觸,沈從文也不曾試圖把文學(xué)和政治分離開(kāi)來(lái)统捶。 他只想著借文學(xué)的美和善來(lái)改造世道良心榆芦。他對(duì)...
    頑皮的panda閱讀 3,173評(píng)論 7 3
  • 傳統(tǒng)電商即將面臨淘汰,新零售將興起崎淳,未來(lái)20年是新零售的世界堪夭,也是傳統(tǒng)電商的退幕,這是馬云在去年提出的觀點(diǎn)拣凹。 傳統(tǒng)...
    小程序進(jìn)行時(shí)閱讀 1,833評(píng)論 0 0
  • 用你的手執(zhí)筆 畫(huà)出一片我的天空 我虔誠(chéng)仰望 光 是你熱情的問(wèn)候 風(fēng) 是你輕柔的撫摸 雨 是你溫和的滋養(yǎng) 云 是你細(xì)...
    小rou球變身閱讀 478評(píng)論 0 0