[回到版面]
回應模式
名 稱
E-mail
標 題
內 文
附加圖檔[] []
刪除用密碼(刪除文章用。英數字8字元以內)
  • 可附加圖檔類型:GIF, JPG, PNG, JPEG,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 10000 KB。當回文時E-mail填入sage為不推文功能
  • 當檔案超過寬 125 像素、高 125 像素時會自動縮小尺寸顯示
  • 程式碼可使用 [code][/code] 以 google-code-prettify 標亮 (程式自動判斷語言類別)

  • 公告、舉報、建議請向DB管理室辦理。
  • 本板討論遊戲製作為主,改造方面也可討論,但如果牽涉到版權,請自重。
  • 3D建模請至3D板, 3D遊戲製作(Ex.怎麼用DirectX跑3D?)則可在這討論。
  • 本板為一般向板面,禁止張貼上車圖。

檔名:1494939263577.jpg-(252 KB, 850x1108) [以預覽圖顯示]
252 KBUnity IEnumerator 名稱: 無名氏 [17/05/16(二)20:54 ID:Ht1dfTbo] No.12752  
想尋問一下,Unity中,有些人不鼓勵使用IEnumerator的理由是什麼呢?
之前使用的情況是除非GameObject被關閉而強制被切斷外,會出現錯誤

除此之外,在效能上或其他方面上會比在Update自己寫計時器來得差嗎?
無標題 名稱: 無名氏 [17/05/16(二)23:36 ID:nl8nFiwQ] No.12753   
我用unity雖然不久但也有3.4年了
我還真沒聽過這種說法

不過我猜大概就unity中IEnumerator是模擬Thread
所以會有跟Thread一樣的缺點.加深複雜程度且難以debug
大概是老手會叫新手還沒基本概念前先不要用

至於效能來說寫在Update通常都比較耗能啦
無標題 名稱: 無名氏 [17/05/17(三)23:22 ID:qlf9.kKc] No.12758   
我是原PO~
其實是讀了這篇:
http://unitytaiwan.blogspot.tw/2017/03/unity_15.html

然後讀了不少有關Update或Coroutine的相關文章
嗯...但還是沒什麼想法

目前練習的小程式用了幾個Coroutine時間大約在2~10秒結束
同一時間執行最大數量約在3~4個

不確定這樣的寫法好不好 (畢竟方便而且程式容易懂)
用在一些遊戲邏輯的計時之中
無標題 名稱: 無名氏 [17/05/18(四)02:12 ID://8HohI2] No.12759 2推  
這篇文章指的耗能方面是記憶體.而我之前提到是CPU的部分
是會依據需求決定的.兩邊的寫法並沒有絕對

而他說就要盡力避免的是需要長時間即時判斷之類的情況
我舉例子來說好了

IEnumerator TestA()
{
int x = 1;
while (true)
{
print(x);
yield return null;
}
}


Update()
{
int x = 1;
print(x);
}

這兩段雖然都是每幀印出x這值.但在記憶體內Coroutine那個
除了紀錄Coroutine執行階段的值外.還需要紀錄x的值

但Update中x這值在離開Update生命週期後就會重記憶體內被釋放掉.雖然每幀執行Update時會在建立出來.但卻不必額外負擔Coroutine的固定消耗.

簡單來說如果這個Coroutine真有必要長時間存在.竟量使用在需要異步操作的功能上.如他所說的HTTP 傳輸、資源載入或是檔案 I/O之類
無名氏: 感謝~那我大概了解了~~!! (2vrtAqsY 17/05/18 23:38)
baka: |ー`)<先前我自己試得出的簡單結論是 記憶體 VS CPU,自己2選1吧 (LeB.fKeA 17/05/19 14:23)
無標題 名稱: 無名氏 [17/05/20(六)13:44 ID:RfcJbW5.] No.12762 1推  
Coroutine 真正造成問題的時間點並不在於建立時配置的記憶體
而是在於累計了一段時間後 GC 導致的畫面卡頓現象
會說適合長時間等待的用途 是因為這樣的用途通常不會頻繁的開啟 Coroutine 而在 heap 上配置暫存用的記憶體
這樣的用途相對拉長了 GC 發生的頻率 或 GC 發動時 需要回收的記憶體數量

如果有從 Profiler 觀察頻繁使用 Coroutine 對記憶體配置時的效能影響
那麼要觀察的對象並非 GC Allocated 時的突波 而是 Total GC Allocated 暴跌的那個瞬間 (這時的的 CPU usage 遠大於 GC Allocated 時的 CPU usage)

當然要迴避 Total GC Allocated 暴跌時 CPU 的突波現象 最快的方法還是回頭查找 GC Allocated 的時機點 並視其情況重構

所以 並不是怕新手搞亂程式結構或閱讀困難的問題 事實上 Coroutine 的本意 就是拿來簡化 並增加程式碼可讀性的 所以有時候明知道可能會多一點效能問題 還是會視情況而使用 Coroutine 來處理事情
無名氏: 感謝,我再研究看看 (OanFIAqU 17/05/22 00:13)

【刪除文章】[]
刪除用密碼:
第一頁[0] 最後一頁