Unity面试题及答案(十三)
五十六:Vertex Shader是什么,怎么计算?
顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。
Vertex Shader对输入顶点完成了从local space到homogeneous space(齐次空间)的变换过程,homogeneous space即projection space的下一个space。在这其间共有world transformation, view transformation和projection transformation及lighting几个过程。
五十七:下列代码在运行中会产生几个临时对象?
string a = new string(“abc”); a = (a.ToUpper() + “123”).Substring(0, 2);
在C#中第一行是会报错的(Java中倒是可行)。
应该这样初始化:
string b = new string(new char[]{‘a’,’b’,’c’});
答案为:5个临时对象
五十八:下列代码在运行中会发生什么问题?如何避免?
List ls = new List(new int[] { 1, 2, 3, 4, 5 }); foreach (int item in ls) { Console.WriteLine(item * item); ls.Remove(item); }
产生运行时错误,在 ls.Remove(item)这行,因为foreach是只读的。不能一边遍历一边修改。
五十九:Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?
仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用
支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。
注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象