朋友给的面试题,先试着做做
一,什么是泛型?泛型和传统类型的Boxing/Unboxing有什么区别?写一个泛型类C使其继承于Cbase。
泛型是使类型参数化实现在同一份代码上操作的多种类型,将算法从数据结构中抽象出来,使操作能够作用于不同的类型,提高程序的效率,通用性和类型安全性,进而简化整个编程模型。
区别:泛型避免了类型转化,性能更优,C#中装箱是指将值类型转换为引用类型,拆箱是指将引用类型转换为值类型,类型转化可能引起安全性问题,而且泛型解决了boxing的问题。
(⊙o⊙)…
泛型类:具有一个或多个类型变量的类
class C<T> { }
创建泛型类实例时,需要为其变量赋值。C <String> c =new C<String>;
泛型的继承 :泛型类需要保证它的所有构造类型都能够满足基类的要求,故而
public abstact class Cbase
{
public abstract void F(int i);//基类
}
public class C<T>: Cbase//泛型派生类
{
public virtual void F(T t){ }
public override void F(int i){ }
}
泛型之间的继承原则:封闭类型不能继承开放类型。
二,OnEnable,Awake,Start执行的先后顺序:
Awake,OnEable,Start
三,正交摄像机和透视摄像机的区别,第一人称摄像机Fov变化会产生怎样的摄像机效果?
正交摄像机
Orthographic (无消失点投影)
正交视图无法看到一个物体是远离自己还是正在我们面前。为什么?因为它不会根据距离收缩。所以如果你如果你画一个固定大小的物体在视点前面,同时画一个同样大小的物体在第一个物体的远后方,你无法说那个物体是第一个。因为两个都是一样的大小,根距离无关。他们不会随着距离而收缩。通常我们在unity中制作2D UI,或是2D游戏的时候,就会把Camera的投射选择此项,例如NGUI的UICamera组件,默认的视图就是正交,还有2DTookit,也会把Main Camera的视图选择成正交,能准确表达物体在空间的位置。
透视摄像机
Perspective (有消失点投影)
透视视图和我们从眼睛看到的视图是一样的。例如,一个高个子的人站在你面前,他看上去是很高的。但是如果这个高个子站在100米以外,他甚至还没有你的拇指大。他看上去会随着距离而缩小,但是我们实际上都知道,它依然是个高个子。这种效果叫做透视。上面例子中提到的两个物体,第二个物体将会显示地更小,所以我们可以区分哪个是离我们近的物体,那个是离我们远的物体。这个在3D中经常用到,例如3D Max中几种不同的视图,而Unity的Main Camera默认也是这种视图,具有很强的空间表现力。
视角Fov是指:镜头能覆盖的范围,第一人称摄像机Fov变化后视野会随着数值变大而变宽。
四,给定屏幕一个点(x,y),如何进行对场景中的GameObject 进行射线拾取;
碰撞检测,RPG类型游戏捡装备,3D拾取技术,原理是当玩家用手指单击屏幕时生成一条由屏幕发射到游戏世界的射线,起点就是玩家手指触摸的地方。
先简单写一个移动端平台上的3d拾取代码
foreach(Touch touch in Input.touches)//对当前触控进行循环
{
Ray ray = Camera.mainScreenPointToRay(touch.position);//声明由触控点和摄像机组成的射线