1. 程式人生 > >Unity開發時遇到的各種需要注意的地方

Unity開發時遇到的各種需要注意的地方

前言:

最近在做東西的時候突然想到,自己以前做過的專案有很多地方需要注意的,然而並沒有記錄下來,導致下次還會出現這樣的問題。於是就有了這個想法,把之前各種各樣奇奇怪怪的問題都記錄下來,解決方案也寫下了。

一是加深記憶,二是萬一又遇到了好歹也有個參考;

 

正文:

1、Transform.GetComponentsInChildren 找不到元件!?

這是因為Transform.GetComponentsInChildren這個方法預設是不包含不啟用的物體的。所以如果被查詢的元件一開始沒有啟用,那麼在不填寫引數的情況下就會找不到該元件。

如果要找未啟用的元件,則需要在括號裡寫ture:

 

2、在使用Queue.Peek 的時候報錯:InvalidOperationException: Operation is not valid due to the current state of the object .

遇到過一次,這個原因是在佇列中元素為空的時候就會丟擲這個錯誤。

所以在Peek的時候需要判斷一下佇列的元素數量。

public T Peek() {
            if (_size == 0)
                ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EmptyQueue);
    
            return _array[_head];
        }

參考:https://blog.csdn.net/fdyshlk/article/details/77394738

 

3、編輯器下呼叫協程的問題;

編輯器下不能直接呼叫協程,畢竟沒有MonoBehavior,但是可以用別的方法來模擬協程的運作。

參考:https://blog.csdn.net/cai612781/article/details/78992805

 

4、在編輯器下用WWW載入Textrue2D的問題:

在根據上述方法能使用協程之後,用WWW來載入某個Texture(png)。一直弄出來是一個白圖,而且沒名字,很神奇。但是實際上圖片是有載入進來的,如果分別列印www.texture的寬和高是正確的,byte[]的資料也是有的。但是名字沒有,而且texlsize肯定是(0,0)。

其實這個只是API呼叫的問題。如果使用 EditorGUI.DrawTextureAlpha 這種方法肯定是畫不出來的,白圖。但是如果使用GUI.Draw又是可以的。當然最後推薦使用 GUILayout.Box,還可以自動佈局。

至於圖片名字肯定是沒了的不用糾結了,所以要在載入之後手動給這張圖片賦值一次名字。

 

5、自由縮放的EditorWindow如何獲取當前尺寸

window = (T)GetWindow(typeof(T), false, "...");

獲取window,之後在window.position.size可以獲取到當前的視窗的尺寸。

 

6、關於應用失去焦點的問題

最近發現過應用失去焦點導致的問題,在點選事件中出現過。比如我們設定手指懸浮或者按下在某個區域的時候觸發某個操作,然而擡起手指或者滑鼠移開的時候操作取消。但是如果在滑鼠按下/進入之後,應用失去了焦點,然後滑鼠擡起/離開,然後再獲得焦點,不會再接收到滑鼠擡起/離開的資訊。這樣就導致本來是該懸浮在某個地方的tips,就沒有懸浮而是一直存在了。

在電腦上的操作很簡單,就是滑鼠按下,然後Alt+Tab切換出去,然後再切回來就可以重現。

但是手機上怎麼操作呢?一開始我以為手機上是沒法做到這一點的,但實際上也是可以的。那就是先按住,然後另一個手指按手機的Home鍵就可以了,和電腦的Alt+Tab是一個道理。但這個前提是手機要有Home鍵,所以可以預見如果有全面屏、沒有Home鍵的手機是不存在這個問題的。

 

7、Android Device Monitor (LogCat)在哪裡?

就是那個可以在電腦上看到手機報錯的的Log的AndroidStudio外掛在哪裡。實際上這是個bat檔案,在SDK的tools目錄中的monitor.bat。其實挺好找的。