Unity问答第4期

来源:互联网 发布:宾馆前台软件 编辑:程序博客网 时间:2024/05/01 00:48

Unity问答第4期

1、在Unity里3个update(FixedUpdate、Update、LateUpdate)的用法和区别?

9ria游戏开发社区的黄祖祥的文章《关于Unity3D中的Update、LateUpdate、FiexdUpdate》:
http://bbs.9ria.com/thread-417976-1-1.html

博客园的赵青青的两篇文章总结的http://www.cnblogs.com/zhaoqingqing/p/3454091.html
http://www.cnblogs.com/zhaoqingqing/p/3296086.html

Update()是每帧执行的函数,更新频率和设备的性能有关。
一般你要不停地计算不停地执行着什么的话,是写在Update里的。

FixedUpate()是固定时间间隔执行函数(可人为调整间隔时间),不受游戏帧率影响。
但如果你写的算法是要不断的处理Rigidbody(俗称刚体)以及物理运算神马的,那就最好写在FixedUpate,

LateUpdate()是在所有Update()函数执行完之后,执行。
正因为LateUpdate慢于update所以可以避免在update中因频繁的计算物体的位置方向选装导致的抖动问题。

2、Unity3d中的1单位是FBX文件中的1单位的几倍?
答:unity中的1单位是fbx文件中的1单位的100倍。这题考你模型缩放的问题,建模软件、游戏引擎软件都有自己的单位比例,在建模软件(如max、maya)中制作模型时。

建议:如果我们想unity中使用1单位=1米的话,那在max和maya中制作的时候,单位就设置成1厘米,以此类推。

注意上面的只是建议(其实你不按套路出牌也没关系,fbx导出到unity里后,在里面也可以调整缩放比。)但毕竟是过来人的建议。

3、为了减少性能开销,移动端实现实时阴影的方法是什么?

答:一般像COC的做法是直接用一个圆的黑的图做实时阴影,很多卡通类的游戏也都是这么做的,确实够简单粗暴。


雨松momo早前写的一篇文章吧《RenderTexture制作动态阴影四十八》

http://www.xuanyusong.com/archives/2132

还有新浪博客的一篇《Unity3D实时阴影——Projector投影器》
http://blog.sina.com.cn/s/blog_799860f90102vkp2.html

 4、一张图片的像素格式为512*512,若每个像素占4位,存储这张图片的大小为多少KB/MB?

1个字节为8位
0.5个 字节为4位

所以512 * 512 * 0.5 = 131072 B
131072 / 1024 = 128 KB
128 / 1024 = 0.125MB

那么如果假设每个通道占4位,也就是一个像素占4*4,也就是16位,
那得出的这张图的大小为512 * 512 * 0.5 * 4  = 524288 B
524288  / 1024 = 512KB

唯一的解释是,我想,这应该是一张只带alpha通道的灰度图,
也就是一个像素,只包含一个通道的信息,那么就和我们的答案一模一样了。

 5、Unity5.X版本中,如何添加GUI Text组件?是否有其他更好的方法代替它?(新手常见问题)

答:既然这道题是针对新手,DC老湿就不妨多啰嗦几句。
有两种方法添加GUI Text组件
1、选中要添加组件的载体——>Component——>Rendering——>GUI Text。

2、选中要添加组件的载体——>在其Inspector面板下点击Add Component——>GUI Text。


6、项目导入一张图集后,如何在Unity中使用?(变成一张张的小图)
答:这个题是UI的题目,同上。
三种方法,ngui、dfgui、ugui
NGUI和DFGUI,是要先把这整张图集切成一张张的小图,里有其各自的MakeAtlas做成一个Atlas图集预设,然后再其各自的Sprite(NGUI是UISprite,DFGUI是dfSprite里面去,Sprite.SpriteName得到你想要的单张小图)。

而UGUI的做法,跟据宣雨松(雨松momo)的说法是,UGUI的原理是让开发者彻底模糊图集的概念,让开发者不要去关心自己的图集。做界面的时候用小图,而在最终打包的时候,unity才会把你的小图合并在一张大图集里面。这一切的一切都是自己动完成的,开发者不用过分在意。

详细的做法和操作步骤在这个链接里。
http://www.xuanyusong.com/archives/3304


7、当一个物体在视野内被其他物体遮挡,不希望对该物体进行渲染,可以通过哪一个模块实现?
答:可以通过遮挡剔除实现。
首先选中场景中的某个物体在其Inspector检视面板里,把Static勾上。

8、值类型和引用类型的区别?
答:
博客园的《值类型和引用类型,栈和堆的含义》http://www.cnblogs.com/tonney/archive/2011/04/28/2032205.html
网上搜到的无非内存分配空间,和你讲栈和你讲堆。

其实你可以这么理解,更加形象,
“你手里有份报纸很有趣,你朋友很想看,你复印了一份,给你朋友”这个就叫值类型的操作。
“你发现一个网址很有趣,你朋友很想看,你把这个网址,告诉你朋友”这个就叫引用类型的操作。

10、下列代码在运行中会发生什么问题?如何避免?

List<int> ls = newList<int>(new int[]{1,2,3,4,5});foreach(int item in ls){         Console.WriteLine(item*item);         ls.Remove(item);}

那么学编程的人都知道foreach和for不一样,遍历的时候,是不能对集合内的成员随意删改的,这也是二者最大的区别之一。

泰斗社区:原文地址
====================================================================================

结束。

0 0
原创粉丝点击