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。其实挺好找的。
8、如何让一个空物体(Empty)也能相应点击?
给他挂上如下脚本:
/// <summary>/// 点击目标;/// </summary>public class RaycastTarget : Graphic{public override void SetMaterialDirty() { return; }public override void SetVerticesDirty() { return; }protected override void OnPopulateMesh(VertexHelper vh){vh.Clear();return;}}
原理:和Image、Text一样继承自Graphic,然后把绘制网格的部分给干掉了。
9、重写Unity组件的Inspector面板后,属性不刷新?
最近重写了一个Image,在Image里面有个布尔值。使用如下方法写后发现这个IsCricleImage值不刷新:
public override void OnInspectorGUI(){serializedObject.Update();EditorGUILayout.PropertyField(IsCricleImage);EditorGUILayout.Space();if (!IsCricleImage.boolValue)base.OnInspectorGUI();serializedObject.ApplyModifiedProperties();}
这可就奇了怪了,但是如果我把 serializedObject.ApplyModifiedProperties();这一行移动到 EditorGUILayout.PropertyField(IsCricleImage);下面,就像这样:
public override void OnInspectorGUI(){serializedObject.Update();EditorGUILayout.PropertyField(IsCricleImage);serializedObject.ApplyModifiedProperties();EditorGUILayout.Space();if (!IsCricleImage.boolValue)base.OnInspectorGUI(); }
就毫无问题了。真是奇怪……难道是因为中间间隔了一行EditorGUILayout.Space();的缘故吗?
10、如何正确地导入Job System系列:
一些JobSystem需要用到的类,如Unity.Entities找不到?那么应该怎样才能连接进去呢?
1、更改框架为4.x
2、VS升级到最新;
3、manifest.json文件,将以下内容合并进去:
{"dependencies":
{"com.unity.entities": "0.0.12-preview.5"
},"registry": "https://packages.unity.com","testables": ["com.unity.collections","com.unity.entities","com.unity.jobs"]
}
4、重启Unity;
11、16进制的颜色如何变成Color?
如下:
Color DisableColor;ColorUtility.TryParseHtmlString("#86969f", out DisableColor);
12、获取HostName的时候报错?
项目从5.6.6升级到2018.3.5的时候出现的,在使用 System.Net.Dns.GetHostName(); 时直接抛出报错:
System.ExecutionEngineException:String conversion error : Illegal byte sequence encounted in the input.at (wrapper managed-to-native) System.net.Dns.GetHostName_internal(string&) at & ……
结果大概如上。
此时你需要点击我的电脑→右键→属性,看看你的计算机名是不是设置为中文了。我是这样的情况,改成英文然后重启就OK了。
13、Unity 的 RectTransfrom 中关于锚点(Anchor Presets)的设置
就是如下图的这个东西:
如何用代码来设置呢?参考以下两篇连接:
https://www.jianshu.com/p/6192e14f88bb
https://answers.unity.com/questions/1225118/solution-set-ui-recttransform-anchor-presets-from.html#answer-form
13、反射获取子类:
public static class TypeExt{static List<Type> subTypes = new List<Type>();public static List<Type> SubTypes(this Type aThis){subTypes.Clear();Type[] types = aThis.Assembly.GetTypes();//接口需要用不同的判定方法;bool IsInterface = aThis.IsInterface;for (int i = 0; i < types.Length; i++){Type type = types[i];if (type == null)continue;if (IsInterface){var arr = type.GetInterfaces();foreach (Type temp in arr){if (temp == aThis)subTypes.Add(type);break;}}else if (type.IsSubclassOf(aThis)){subTypes.Add(type);}}return subTypes;}}
14、直线与平面的交点
/// <summary>/// 计算直线与平面的交点/// <param name="point">直线上某一点</param>/// <param name="direct">直线的方向</param>/// <param name="planeNormal">垂直于平面的的向量</param>/// <param name="planePoint">平面上的任意一点</param>/// <returns></returns>private Vector3 GetIntersectWithLineAndPlane(Vector3 point, Vector3 direct, Vector3 planeNormal, Vector3 planePoint){float d = Vector3.Dot(planePoint - point, planeNormal) / Vector3.Dot(direct.normalized, planeNormal);//直线与平面的交点Vector3 hitPoint = d * direct.normalized + point;return hitPoint ;}
Unity开发时遇到的各种需要注意的地方相关推荐
- Pico XR Unity开发时如何设置应用版权保护
最新尝试 2022.10.5 按开发文档要求,开启了应用版权保护,并将设备的SN加入了清单 再直接构建后运行,依然会提示"该应用未通过版权保护检测", 2022.10.6 因还未上 ...
- 《Unity开发实战》——3.9节鼠标悬停时高亮显示材质
本节书摘来自华章社区<Unity开发实战>一书中的第3章,第3.9节鼠标悬停时高亮显示材质,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云 ...
- 【VR开发】Unity开发VR时的基本设置
[背景]Unity对VR的支持个人感觉要由于虚幻引擎,但尽管如此,设置上还是需要花一番功夫研究.好在Unity推出了统一平台的VR集成插件,通过包含该插件的设置,通过Unity开发的VR游戏可以同时支 ...
- Hololens Unity 开发入门 之 Hello HoloLens
Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要记录 HoloLens Unity 开发入门 ~ 一.说在前面的话 Unity 对 VR AR 甚至 将来的 MR ...
- unity开发入门_Unity游戏开发终极入门指南
unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...
- 【蓝鸥Unity开发基础三】课时14 刚体
[蓝鸥Unity开发基础三]课时14 刚体 一.刚体 物理引擎: 物理引擎能够真实的模拟物理效果 Unity中使用的是NVIDIA的PhysX物理引擎 在Unity中使用Rigidbody让游戏对象受 ...
- Unity开发《一起来捉妖》教程 | 4.抛掷封妖灵珠
洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,今天咱们来开发封妖灵珠?" 大智:"好啊,你觉得实现封妖灵珠 ...
- Unity开发《一起来捉妖》教程 | 3.随机妖怪位置及旋转提示
洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,我找了个小精灵的模型,嘿嘿,不过我经常运行的时候找不到模型在哪,怎么办?&quo ...
- Unity开发《一起来捉妖》教程 | 2.用摄像头图像做背景
洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"我们接下来是不是需要将显示融合到屏幕上,才能称得上是AR呢?" 大智:&qu ...
最新文章
- 牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
- Jmeter-jtl性能测试报告转换-2种导出方法
- sinacloud webpy mysql_Mysqldb和webpy的安装
- 快速上手Google C++ 测试框架googletest
- set python用法_Python set()用法及代码示例
- 整数、区间与区间端点 (二)
- linux 文件安装大全,linux 文件包安装大全
- 天才小毒妃 第952章 龙非夜挖的坑
- c语言快捷键的使用方法,电脑快捷键的使用方法
- 常用的背景色、文字颜色
- 计算机二级能加综合测评,2016综合测评加分细则.doc
- 提升网站关键词的排名
- html给文字添加下划线
- 汽车振动响应分析-频响函数法(附程序)
- html5通用兄第选择器,css 通用兄弟选择器( ~ )
- 怎样查询快递物流,并自动识别快递单号是否签收
- 关于计算机的网络作文,关于网络的作文:网络_450字
- Sci-Fi 科幻迷们,爱死机第二季来啦 | Mixlab 科幻实验
- map与sync.Map
- matlab求复数相位角,怎么求复数相位
热门文章
- ②五元物联网芯片点亮led 庆科EMW3060 , 运行alios- blink程序
- 签章服务器系统,优泰科技首页_电子签名 手写批注 电子印章 全文批注
- 电源管理之pmu驱动分析
- 《漫画算法》终于出电子书了!
- r720服务器独立显卡显示,dell服务器进入bios独立显卡(dellr720安装独立显卡)
- 计算机基础在线网络课程,欢迎访问大学计算机基础网络课程
- 《A fast parallel algorithm for thinning digital patterns》论文算法python代码实现
- js中文汉字转拼音详细教程
- 计算机进入pe快捷键,华硕笔记本电脑快捷键进入u盘启动教程
- 计算机动画可分为二维和三维动画,二维动画与三维动画设计的区分