unity3d 游戏bug日志的一个bug

N种让Unity陷入死循环的方法
用了2年多unity了, 犯过N多白痴错误,比如各种死循环bug....
最傻逼的 while循环无法满足退出条件
while(a&b) DoSomething(); 结果写错条件导致a
永远不会大于b,悲剧了....
最白痴的 for循环也能死
for(int i=n; i&=0;
i-=2)中不幸吧i-=2写成i=2.....
假死变真死
协同函数&while(true){} 里忘记写 yield return
函数调用判断条件失误
某个 插件里偶尔会发生的, Function1调用了Function2,
Function2判断条件不满足又调用了Function1......
递归归归归归归......
某个同事干的,递归查询路径写入周围连接点的时候忘记检查吧上一级也写入了.....
我需要那个组件.....
unity里可以用 RequireComponent
要求这个脚本需要一个组件支援,有个功能分成两个脚本写,鉴于加上这个如果物体上没有这个组件就会自动添加需要的组件,于是我在两个脚本上都加上了RequreireComponent另一个脚本,于是.......
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用户名:Liu_guozhu
文章数:52
评论数:26
访问量:79843
注册日期:
阅读量:1297
阅读量:3317
阅读量:582608
阅读量:467410
51CTO推荐博文
&&&&&&&&&&&& 本人在做线上与线下Unity教学中,经常遇到一些常见的疑问,为了更好的快速进行答复,我平时注意收集了一些典型的错误与疑问,且附有个人解答,供大家交流之用。不足之处,请大家指明。&&& 如果后期总结的易错误点,量比较大时我会进行分类处理,更加方便大家查询。&1: Ngui 和 UGUI 用法是一样的么?现在游戏公司还在用NGUI 还是用Unity内置的UI系统?答: 如果你是Unity学习者,建议你NGUI/uGUI都学习,因为目前旧项目一般都用NGUI, 现在立项的公司很多考虑用uGUI ,毕竟第1是官方技术且是开源的技术,而是后继会不断发展,有潜力。&&2: unity3d的 Terrain上无法烘焙树木的阴影,该如何解决?答:Detail meshes 本身不参与烘焙过程,但是其会对地形的lightmap进行采样。所以,需要对原生的lightmap进行修改,添加阴影。&&3: uGUI 中 slider和scorllbar这么相似,分别用在那些地方啊?答:解释如下: Slider 控件适合做项目中的“音量调节”、“生命数值”显示等方面,注重数值展示方面。ScrollBar 控件一般不建议单独使用,属于“基础性”控件,适合与其他控件组合成功能更加强大的“复合控件”,例如我在视频中讲解的“ScrollRect”控件。(作为用户选择部分)&&4:& unity做个项目,安装在手机上运行一会卡死,都不知道从哪里入手找bug,求各位大神帮忙。。。答:你自己开发一个移动设备上的找Bug的机制: 如下操作: 第1: 使用Application.persistentDataPath 作为保存数据的路径。 自己写一个调试类 (例如: Debuger.cs) 第2:把需要在程序中切入的调试代码,最终写入txt 文件(或者XML文件) 第3: 在手机死机后,没有关系。重新进入后,进入自己开发的一个专门显示txt 或者XML 中内容的页面,查看程序运行到哪里,最终找到原因。这种机制原理,适用于所有的移动平台的调试。&&5 this.gameObject.transform.position= new Vector3(1F, 2F, 3F); 老师,gameObject和transform,position都是属性,他们之间怎么能引用呢,不是应该通过对象和类来引用的吗?答:transform 是GameObject 的属性。 而GameObject是不能直接应用 transform 的,没有这个静态属性。(Unity规定)。 所以我们通过this.gameObject. 。 获得这个脚本所在对象(返回GameObject).然后再获取transform。&&6: uGUI 中 老师,我怎么拉不动那中心点,总是拉着整个button或text?答:你拉不动那个中心点,原因是Unity快捷栏中的“Center”在起作用,它保证中线点就一直在控件的中心位置。 所以请把“Center”点击改为“Pivot”就可以移动控件中心点了。&&7: C# 有高内聚低耦合的概念吗?&答:"高内聚低耦合"是开发中的一个重要设计与开发原则,C#作为国际上最流行的开发语言之一,当然具备。 本质上其实与语言无关,这是一种开发的宗旨、思想。&&8: unity5 可以使用visualstudio 开发代码,哪可以使用Eclipse开发吗?答:目前Unity 不支持Eclipse 作为代码编辑器插件开发项目。&&9: 数组定义好长度之后,想要改变长度怎么办?答:数组的特点就是,一点定义了长度,就不能更改。如果你要用可变长数组,就学习“Unity编程基础篇”,里面讲解了ArrayList集合。它的长度是可变的集合。其本质内部实现也是用数组,进行多个数组相互倒换实现的。&&10: 旋转的局部坐标系与世界坐标系的区别是什么?答:局部坐标旋转是指以父物体为参考,进行旋转。而世界坐标系以“坐标陀螺”来进行旋转。类似的情况例如:东、南、西、北、是世界坐标系。而前、后、左、右是局部坐标系&&11: uGUI 怎么改变Canvas的屏幕大小?答:两种方法:1:可以推进摄像机,如果是2D开发,则把摄像机的Size 设置的更小些。 2:可以使用代码方式对Canvas 的Scele 做缩放处理。&&12: 怎样保存游戏进度? Save 和 Load功能?答:保存游戏的进度本质就是数据持久化技术的应用。例如我视频中说的Unity提供的Playerfab 。可以把当前玩家的位置信息、状态(分数、血量、**)等保存且持久化即可。如果是复杂的大量数据保存,建议用XML作对象与XML的串行化。具体可以看看我下月发行的《Unity3d/2d 游戏开发零基础到精通》的,“数据持久化”章节有详细论述。&&13: 请问:我想通过脚本实现自定义换肤,如何实现比较好?如何利用Sprite Pakcer打包?答://动态追加控件 GameObject GoCloneObject = newGameObject("Button"); //添加精灵(外观处理) Image image= GoCloneObject.AddComponent&Image&(); Button btn =GoCloneObject.AddComponent&Button&(); image.overrideSprite=Resources.Load("Textures/Sprites/Emoticon - Frown", typeof(Sprite))as S以上代码可以实现动态生成控件,且自定义“换肤”。UGUI 中严格来说,我们不需要“Sprite Pakcer打包 ”&&14: 用vs2013打开创建的C#脚本,调试的时候显示:无法直接启动带有类库输出类型的项目,请在此解决方案中添加一个引用库项目的可执行项目。将这个可执行项目设置为启动项目!我已经设置了那个启动项目,但是还是调试错误?答:是这样的。 VS只是我们写代码的工具,提供了类方法提示、方法高亮显示等功能。但是脚本的运行,还是需要运行Unity的Play 按钮的。&&15: 老师我的VS 是Blend forstudio2013,在unity编辑器设置为VS打开C#脚本时,报错打开的不是有效的项目,这该怎么办啊答:建议使用VS 2013(官方默认的是MonoDevelop)。你说的VS 版本可能不兼容。&&16: 老师,我在unity5.0里面,想播放动画,this.animation.play ();这样不行~答:API 有所更改。this.GetComponent&Animation&().Play();更多Unity5.0 内容API更新请首先看我博客: & 。&&17: text.rectTransform.rect.Set(0, 0, 417, 2*(j * 52.5f + 300));为什么没有效果呢?如果要设置text的hright属性要怎么办?答:这样定义:txt_Obj.rectTransform.sizeDelta = newVector2(200, 200);//改变宽度与高度。&&18: 老师,我问一个问题,我在game视图16:10 Portrait(10:16)的视图下运行游戏,场景里的物体运动都是正常的但是当我把game视图切换到free aspect的时候,场景里的运动物体就都有了“残影”,就像是屏幕没有刷新一样,这个是什么问题呢,我的摄像机用的是正交模式就像是屏幕不刷新了,每一帧都停留到了屏幕上?答:1: 这种情况,先考虑在你角色的背后,加一个背景贴图。2: ngui的图集打的不能太大。&&19: 老师,Unity中“预加载”什么意思,如何实现?答:&“预加载”一般分为两种情况:第1种情况: 转换场景的时候,我们可以使用异步场景加载的技术,来实现。目的是给玩家一个显示画面,在系统后台加载场景数据,等加载完毕,显示整个场景。代码举例如下:&&& public class ScenesLoading : MonoBehaviour{&&&&&&& public Slider&& Sli_P&&&&&&&&&&&&&&&&&& //调用进度条&&&&&&& private AsyncO&&&&&&&&&&&&&&&&&&&&& //异步对象&&&&&&& private float curP&&&&&&&&&&&&&&&&&&&&&&&& //当前进度&&&&&&&& void Start ()&&&&&&& {&&&&&&&&&&& StartCoroutine(loadScene());&&&&&&& }&&&&&&&& //异步读取场景&&&&&&& IEnumerator loadScene()&&&&&&& {&&&&&&&&&&& //async =Application.LoadLevelAsync(ConvertNames.SceneNames[GlobalParameterManager.LoadingScenesName]);&&&&&&&&&&&&&&&&&&&&&& async =Application.LoadLevelAsync(ConvertNames.GetInstance().ScenesToName(GlobalParameterManager.LoadingScenesName));&&&&&&&&&&& curProgress = async.&&&&&&&&&&&&&&&&&& }&&&&&&&& void Update()&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&& if (curProgress &= 1)&&&&&&&&&&& {&&&&&&&&&&&&&&& curProgress += 0.01f;&&&&&&&&&&& }&&&&&&&&&&& Sli_Progressbar.value =curP&&&&&&& }&&&& }&第2种情况:& 在同一场景中实现“预加载”。&如果一个场景非常庞大,势必要进行优化。优化最简单的思路可以如下:1&& 遮挡剔除。2&& LOD 层级细节。3&& “层消隐”处理&如果以上步骤还不明显的话,可以人为的把整个大场景,划分为几个部分,当“角色”(主角)要进入一块“区域”的时候,可以提前3-20秒进行场景的加载,当“角色”离开这片区域时,我们则可以销毁这片“区域”,以节省计算机或者移动端设备的内容空间。 这就是“预加载”技术。核心代码如下:&&&&&&& void Start()&&&&&&& {&&&&&&&&&&&& //启动加载大型建筑模型&&&&&&&&&& StartCoroutine("LoadBigBuilding");&&&&&&& }&&&&&&&&&&&&&&&&&&&& //本场景进入若干秒后,启动“预加载”大型场景&&&&&&& IEnumerator LoadBigBuilding()&&&&&&& {&&&&&&&&&&& yield return newWaitForSeconds(intLoadTime);&&&&&&&&&&& GameObjectgoBuilding_A=Resources.Load("Prefabs/Scenes_A") as GameO&&&&&&&&&&& GameObject goCloneBuildingA =GameObject.Instantiate(goBuilding_A, Vector3.zero, Quaternion.identity) asGameO&&&&&&& }&&20:& 刘老师,There are 2 audio listeners in the scene. Please ensure there is always exactly one audio listener in the scene.控制台的消息怎么删除,不出现这个答: 这个警告信息告诉我们,场景中存在了2个“音频监听器”,这是Unity不允许的。 解决方法很简单,你只需要把其中一个摄像机的监听给禁止即可。例如下图:&&&&&21:角色控制器能不能触发OnTriggerEnter等方法?答:角色控制器(CharacterController)不能应用OnTriggerEnter 等方法,如果需要检测CC(CharacterController),需要对方通过名称或者Tag来触发检测。如果需要CC给刚体施加“力”,可以用& OnControllerColliderHit() 方法实现。&(关于其他更多的初学者常见Unity疑问与解答,后面还会继续总结,敬请期待.)&&&&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)我是一个程序猿,一天我坐在路边一边喝水一边苦苦检查bug,这时一个乞丐在我边上坐下了,开始要饭,我觉得他可怜,就给了他一块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽...-Unity3D-论坛-U3D在线
Unity3D在线
当前位置: ->
-> 我是一个程序猿,一天我坐在路边一边喝水一边苦苦检查bug,这时一个乞丐在我边上坐下了,开始要饭,我觉得他可怜,就给了他一块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽...
Unity3D 论坛 > 我是一个程序猿,一天我坐在路边一边喝水一边苦苦检查bug,这时一个乞丐在我边上坐下了,开始要饭,我觉得他可怜,就给了他一块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽...围观:219 | 回复:19
董元香积分:216帖子:3
我是一个程序猿,一天我坐在路边一边喝水一边苦苦检查bug,这时一个乞丐在我边上坐下了,开始要饭,我觉得他可怜,就给了他一块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽幽说,这里少了一个分号。我惊奇的问:“你也懂这行啊”&乞丐说:“我以前就是做这个的。”
欧阳清宵积分:509帖子:15
欧阳清宵积分:509帖子:15
令狐巨宜积分:1490帖子:23
欧阳清宵积分:509帖子:15
令狐巨宜积分:1490帖子:23
那个镜头特效
令狐巨宜积分:1490帖子:23
令狐巨宜积分:1490帖子:23
令狐巨宜积分:1490帖子:23
然后出错&还是自带的
董元香积分:216帖子:3
宋笑民积分:203帖子:18
谁知道unity如何打包&平板嘛
免责声明:本站所有内容来源于互联网,如果本站部分内容侵犯您的权益,请您告知,站长会立即处理
Copyright Unity3D在线 All Rights Reserved.Theme by U3dOL 备案:京ICP备号-4 |SiteMap |网站地图 |百度统计| 联系我们作为Unity3D的脚本而言,c#中for是否真的比foreach效率更高? - 知乎350被浏览33994分享邀请回答28625 条评论分享收藏感谢收起

我要回帖

更多关于 unity3d 游戏bug日志 的文章

 

随机推荐