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。其实挺好找的。

猜你喜欢

转载自blog.csdn.net/cyf649669121/article/details/82885890