前言:

最近在做东西的时候突然想到,自己以前做过的项目有很多地方需要注意的,然而并没有记录下来,导致下次还会出现这样的问题。于是就有了这个想法,把之前各种各样奇奇怪怪的问题都记录下来,解决方案也写下了。

一是加深记忆,二是万一又遇到了好歹也有个参考;

正文:

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开发时遇到的各种需要注意的地方相关推荐

  1. Pico XR Unity开发时如何设置应用版权保护

    最新尝试 2022.10.5 按开发文档要求,开启了应用版权保护,并将设备的SN加入了清单 再直接构建后运行,依然会提示"该应用未通过版权保护检测", 2022.10.6 因还未上 ...

  2. 《Unity开发实战》——3.9节鼠标悬停时高亮显示材质

    本节书摘来自华章社区<Unity开发实战>一书中的第3章,第3.9节鼠标悬停时高亮显示材质,作者 (爱尔兰)Matt Smith (巴西)Chico Queiroz,更多章节内容可以访问云 ...

  3. 【VR开发】Unity开发VR时的基本设置

    [背景]Unity对VR的支持个人感觉要由于虚幻引擎,但尽管如此,设置上还是需要花一番功夫研究.好在Unity推出了统一平台的VR集成插件,通过包含该插件的设置,通过Unity开发的VR游戏可以同时支 ...

  4. Hololens Unity 开发入门 之 Hello HoloLens

    Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要记录 HoloLens Unity 开发入门 ~ 一.说在前面的话 Unity 对 VR AR 甚至 将来的 MR ...

  5. unity开发入门_Unity游戏开发终极入门指南

    unity开发入门 Unity is a great tool for prototyping everything from games, to interactive visualisations ...

  6. 【蓝鸥Unity开发基础三】课时14 刚体

    [蓝鸥Unity开发基础三]课时14 刚体 一.刚体 物理引擎: 物理引擎能够真实的模拟物理效果 Unity中使用的是NVIDIA的PhysX物理引擎 在Unity中使用Rigidbody让游戏对象受 ...

  7. Unity开发《一起来捉妖》教程 | 4.抛掷封妖灵珠

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,今天咱们来开发封妖灵珠?" 大智:"好啊,你觉得实现封妖灵珠 ...

  8. Unity开发《一起来捉妖》教程 | 3.随机妖怪位置及旋转提示

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"智哥,我找了个小精灵的模型,嘿嘿,不过我经常运行的时候找不到模型在哪,怎么办?&quo ...

  9. Unity开发《一起来捉妖》教程 | 2.用摄像头图像做背景

    洪流学堂,让你快人几步.你好,我是郑洪智. 洪流学堂公众号回复捉妖,可以获取本教程的源码工程. 小新:"我们接下来是不是需要将显示融合到屏幕上,才能称得上是AR呢?" 大智:&qu ...

最新文章

  1. 牛客练习赛84:牛客推荐系统开发之标签重复度(点分治+动态开点权值线段树)
  2. Jmeter-jtl性能测试报告转换-2种导出方法
  3. sinacloud webpy mysql_Mysqldb和webpy的安装
  4. 快速上手Google C++ 测试框架googletest
  5. set python用法_Python set()用法及代码示例
  6. 整数、区间与区间端点 (二)
  7. linux 文件安装大全,linux 文件包安装大全
  8. 天才小毒妃 第952章 龙非夜挖的坑
  9. c语言快捷键的使用方法,电脑快捷键的使用方法
  10. 常用的背景色、文字颜色
  11. 计算机二级能加综合测评,2016综合测评加分细则.doc
  12. 提升网站关键词的排名
  13. html给文字添加下划线
  14. 汽车振动响应分析-频响函数法(附程序)
  15. html5通用兄第选择器,css 通用兄弟选择器( ~ )
  16. 怎样查询快递物流,并自动识别快递单号是否签收
  17. 关于计算机的网络作文,关于网络的作文:网络_450字
  18. Sci-Fi 科幻迷们,爱死机第二季来啦 | Mixlab 科幻实验
  19. map与sync.Map
  20. matlab求复数相位角,怎么求复数相位

热门文章

  1. ②五元物联网芯片点亮led 庆科EMW3060 , 运行alios- blink程序
  2. 签章服务器系统,优泰科技首页_电子签名 手写批注 电子印章 全文批注
  3. 电源管理之pmu驱动分析
  4. 《漫画算法》终于出电子书了!
  5. r720服务器独立显卡显示,dell服务器进入bios独立显卡(dellr720安装独立显卡)
  6. 计算机基础在线网络课程,欢迎访问大学计算机基础网络课程
  7. 《A fast parallel algorithm for thinning digital patterns》论文算法python代码实现
  8. js中文汉字转拼音详细教程
  9. 计算机进入pe快捷键,华硕笔记本电脑快捷键进入u盘启动教程
  10. 计算机动画可分为二维和三维动画,二维动画与三维动画设计的区分