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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

unity, undo

發(fā)布時(shí)間:2025/3/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity, undo 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如果在操作一個(gè)Object之前調(diào)用Undo.RecordObject(Object),且操作確實(shí)造成Object某些屬性的改變,則會(huì)產(chǎn)生一個(gè)undo記錄。

如果我們的架構(gòu)不是直接操作Object,而是操作一個(gè)ui,并在某些時(shí)機(jī)通過(guò)ui.save(Object)將數(shù)據(jù)回寫到Object,那么:

1,如果我們每幀都ui.save(Object)的話,則Object始終保持同步更新,與直接操作Object是等價(jià)的,所以只要在對(duì)ui操作之前調(diào)用Undo.RecordObject(Object),那么只要操作確實(shí)造成ui某些屬性改變(并且這個(gè)屬性是要回寫到Object的,進(jìn)而導(dǎo)致Object相應(yīng)屬性的變化),則會(huì)產(chǎn)生一個(gè)undo記錄。

2,如果我們嫌每幀都調(diào)ui.save(Object)太耗,改成每隔一段較長(zhǎng)的時(shí)間才save一次的話,則Object相對(duì)于ui的更新是滯后的,那么在對(duì)ui進(jìn)行操作之前調(diào)用Undo.RecordObject(Object),但要注意,在這之前應(yīng)該先調(diào)用一下ui.save(Object),以便保證Record下來(lái)的快照是最新的數(shù)據(jù),然后在執(zhí)行ui的操作代碼,接著,我們應(yīng)該再調(diào)用一次ui.save(Object),原因是,我們要在保證在這幀結(jié)束之前讓Object的狀態(tài)變?yōu)椴僮髦蟮淖钚聽(tīng)顟B(tài),這樣,在幀末unity就會(huì)自動(dòng)對(duì)我們Record下來(lái)的快照和Object操作之后的最新?tīng)顟B(tài)進(jìn)行對(duì)比,如果存在差異,產(chǎn)生一條undo記錄。即:

ui.save(Object);//Object變成修改前的最新?tīng)顟B(tài)

Undo.RecordObject(Object);//記錄Object修改前的最終狀態(tài)(狀態(tài)A)

ui.modify();//對(duì)ui進(jìn)行修改

ui.save(Object);//Object變成修改后的最新?tīng)顟B(tài)(狀態(tài)B)

//unity 對(duì) 狀態(tài)A 和 狀態(tài)B 進(jìn)行對(duì)比,產(chǎn)生undo記錄

總結(jié):

如果每幀ui.save(Object)對(duì)性能影響不是很大的話,還是每幀save比較簡(jiǎn)單。

注:通常情況下,ui.save(Object)并不是非常耗費(fèi),所以可以每幀執(zhí)行。但反過(guò)來(lái)由數(shù)據(jù)重建ui(即Object.buildUI(ui))是比較耗費(fèi)的,所以O(shè)bject.buildUI(ui)應(yīng)只在個(gè)別時(shí)機(jī)才調(diào)用。

----補(bǔ)充:

當(dāng)執(zhí)行undo/Redo操作后,會(huì)產(chǎn)生一個(gè)UndoRedoPerformed消息,如果我們用的不是直接操作Object的架構(gòu),則應(yīng)該在收到UndoRedoPerformed消息后立刻根據(jù)object更新ui,如下:

Event e = Event.current;

?if (e.commandName == "UndoRedoPerformed") {//ref: http://answers.unity3d.com/questions/33065/repaint-on-undo.html
????Debug.Log ("undo performed");
????Object.buildUI(ui);
???}

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的unity, undo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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