- Unity基础
- 1.Unity3D中的协程(coroutine),C#线程和进程之间的区别是什么?
- 2.Unity中碰撞器(Collider)和触发器(Trigger)的区别?
- 3.碰撞条件和触发条件
- 4.触发相关函数和碰撞相关函数
- 5.Unity中常用的周期函数
- 6.物理更新一般在哪个系统函数里?为什么?
- 7.用代码实现第三人称角色控制器?第一人称角色控制器
- 8.Gameobje的销毁
- 9.UnityAction和UnityFunc的区别
- 10.unity常用资源路径有哪些
- 11.向量的点乘、叉乘以及归一化的意义?
- Unity性能优化
- 1.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。
- 2.请简述一下对象池原理,什么情况下使用?
- 3.lod 是什么,优缺点是什么?
- 4.MipMap是什么?作用?
- 5.、MeshCollider 和其他 Collider 的一个主要不同点?
- C#
- 1.什么是面向对象编程
- 2.面向对象和面向过程有什么区别
- 3.面向对象的三大特性
- 4.重写和重载的区别
- 5.值类型和引用类型
- 6.public、private、protected、internal、sealed的区别
- 7.装箱和拆箱的区别
- 8.什么是接口,接口的定义代码实现
- 9.接口类和抽象类之间的不同
- 10.C#中有哪些常用的容器类,各有什么特点,性能区别?
- 11.什么是泛型
- 12.结构体和类有什么区别
- 13.C#引用和C++指针的区别
- 14.c#中Using的作用
- 15.字典Dictionary的内部实现原理
- 设计模式
- 1.常用的设计模式
- 2.设计模式原则
2.Unity中碰撞器(Collider)和触发器(Trigger)的区别?进程progress:进程是线程的容器。
线程thread: 同一时间可以同时执行多个线程。开辟多条线程开销很大。线程适合多任务同时处理,并发并行。
协程:同一时间只能执行某个协程。开辟多个协程开销不大。协程适合对某任务进行分时处理,这期间不影响主程序的继续执行,可以协同工作。
3.碰撞条件和触发条件碰撞器(Collider)有碰撞效果,触发器(Trigger)没有碰撞效果
6.物理更新一般在哪个系统函数里?为什么?Awake >onEnable >Start > FixedUpdate > Update>Yield >LateUpdate >OnGui>OnDisable>OnDistroy
7.用代码实现第三人称角色控制器?第一人称角色控制器FixedUpdate函数,因为该函数是渲染帧执行,所以比较适用于物理引擎的计算。
8.Gameobje的销毁待完成
9.UnityAction和UnityFunc的区别Destroy销毁消息对象,内存中还是存在,只有内存不够才被清除释放内存
DestroyImmediate立即销毁对象,并释放内存
10.unity常用资源路径有哪些1.两者本质上都是委托
2.Action只用于没有返回值的方法,Func只用于有返回值的方法
//获取的目录路径最后不包含 / //获得的文件路径开头包含 / Application.dataPath; //Asset文件夹的绝对路径 //只读 Application.streamingAssetsPath; //StreamingAssets文件夹的绝对路径(要先判断是否存在这个文件夹路径) Application.persistentData ; //可读写 //资源数据库 (AssetDatabase) 是允许您访问工程中的资源的 API AssetDatabase.GetAllAssetPaths; //获取所有的资源文件(不包含meta文件) AssetDatabase.GetAssetPath(object) //获取object对象的相对路径 AssetDatabase.Refresh(); //刷新 AssetDatabase.GetDependencies(string); //获取依赖项文件 Directory.Delete(p, true); //删除P路径目录 Directory.Exists(p); //是否存在P路径目录 Directory.CreateDirectory(p); //创建P路径目录 AssetDatabase //类库,对Asset文件夹下的文件进行操作,获取相对路径,获取所有文件,获取相对依赖项 Directory //类库,相关文件夹路径目录进行操作,是否存在,创建目录,删除等操作11.向量的点乘、叉乘以及归一化的意义?
Unity性能优化 1.当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。点乘:可以获得两个向量A和B所构成平面
点乘 dot :用来求向量之间的夹角,以及B向量在A向量上的投影
normalized:用在只关系方向,不关心大小的情况下
2.请简述一下对象池原理,什么情况下使用?使用对象池技术,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回
3.lod 是什么,优缺点是什么?将对象存储在一块预先划出的内存区域,需要时取出使用。从而减少GC,提高了游戏性能。当游戏中需要频繁的创建某个物体对象时可以使用对象池。
4.MipMap是什么?作用?LOD 技术即 Levels of Detail 的简称,意为多细节层次。 LOD 技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
优点:可根据距离动态地选择渲染不同细节的模型
缺点:加重美工的负担,要准备不同细节的同一模型,同样的会稍微增加游戏的容量。
5.、MeshCollider 和其他 Collider 的一个主要不同点?在三维计算机图形的贴图渲染中有一个常用的技术被称为 Mipmapping 。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件 , 这样的贴图被称为 MIP map 或者 mipmap 。
C# 1.什么是面向对象编程MeshCollider是基于顶点数据,片面组成,消耗性能
BoxCollider是基于算法的,性能好
2.面向对象和面向过程有什么区别面向对象编程是一种计算机编程架构。面向对象程序设计以对象为核心,通过建立模型把客观世界中的实体抽象为问题域中的对象。优点:重用性、灵活性和扩展性。
3.面向对象的三大特性面向过程是具体化的,流程化的,面向过程是面向对象的基础。面向对象可以说是面向过程的抽象,
| 面向对象的三大特性 | |
|---|---|
| 封装 | 指将一个计算机系统中的数据以及与这个数据相关的一切操作封装在一个模块中,从而实现高内聚、低耦合的状态,对于用户来说不需要了解底层原理只需要通过封装外的通道对计算机进行相关方面的操作即可 |
| 继承 | 主要指的是两种或者两种以上的类之间的联系与区别,子类通过继承父类的功能并在其上扩展,减少了代码的重复,提高了代码的清晰度 |
| 多态 | 多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态; |
5.值类型和引用类型重写:运行时发生,在子类中重写定义父类中的方法,子类中的方法和父类中的方法是一样的。即方法名、参数的个数、次序、类型和返回值都相同
重载:编译时发生,在同一作用域下,方法名相同,参数个数、次序、类型不同。
常见的值类型:基础内置类型:int double floatd等,结构体,枚举
常见的引用类型:类,接口,委托,数组
内存区域上的区别:C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用(在栈中存储),数据存储在数据堆中。值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。引用类型的对象总是在进程堆中分配(动态分配)。
拷贝策略:值类型是拷贝数据,引用类型是拷贝引用地址
6.public、private、protected、internal、sealed的区别C#中引用类型和值类型都继承自System.Object类
| public | 任何外部类都可以不受限制的存取类数据 |
| private | 限定此类内部使用 |
| protected | 除了类本身可以用外,任何继承此类的类都可以使用 |
| internalinternal | 表示在同一个应用程序(Application)或类库(Library)中都可以使用 |
| sealed | 声明类就不能继承,声明方法就是不能被重写 |
8.什么是接口,接口的定义代码实现装箱:值类型转换成引用类型的过程,生成新的引用
拆箱;引用类型转换成值类型的过程
装箱操作:托管堆分配内存,值类型拷贝数据,object地址指向托管堆对象
拆箱操作:根据object引用地址找到托管堆上的数据,栈上数据拷贝
接口是引用类型,不能定义字段,不能实例化,可以定义【非静态的】属性、索引器、事件、方法,不能写任何访问修饰符默认public。接口要小而精,定义一组方法,继承接口的派生类要实现接口的所有方法。
public delegate void DelegateTest();
public interface ITest //只能包含非静态成员函数,隐式public,但不允许访问修饰符
{
void Method(string a); //方法
string Property //属性
{
get; set;
}
event DelegateTest EventTest; //事件,需要先定义一个委托
int this[int index] //索引器
{
get; set;
}
}
9.接口类和抽象类之间的不同
相同点:
1、都可以被继承
2、都不能被实例化
3、都可以包含方法声明
4、派生类必须实现未实现的方
10.C#中有哪些常用的容器类,各有什么特点,性能区别?不同点
1、抽象基类可以定义字段,接口类不可以定义字段
2、抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。
3、接口可以被多重实现,抽象类只能被单一继承
4、抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
| 容器 | 特点 |
|---|---|
| Stack-参考地址 | 先进后出,入栈和出栈,底层泛型数组实现,入栈动态扩容2倍 |
| Queue-参考地址 | 先进先出,入队和出队,底层泛型数组实现 |
| ArrayList-参考地址 | 动态增加数组,适合插入删除少,查找多的情况 |
| List-参考地址 | 底层实现是泛型数组,适合插入删除多,查找少的情况 |
| HashTableHashTable-参考地址 | 是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构,查找时间O(1) |
| Dictionary-参考地址 | 通过Key/Value(键值对的形式来存放数据;该类最大的优点就是它查找元素的时间复杂度接近O(1),实际项目中常被用来做一些数据的本地缓存,提升整体效率。 |
12.结构体和类有什么区别泛型是C#语言和公共语言运行库中的一个新功能,它将类型参数的概念引入,大大简化类型之间的强制转换或装箱操作的过程,从而实现代码的灵活复用。
13.C#引用和C++指针的区别1.类型不同:结构体是值类型,类是引用类型
2.存储不同:结构使用栈存储,而类使用堆存储
3.作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
4.初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化
14.c#中Using的作用C#不支持指针,但可以使用,指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
不同点:指针是个实体,引用是个别名。
15.字典Dictionary的内部实现原理1、 引用命名空间
2、 为命名空间或类型创建别名
3、using语句允许程序员指定使用资源的对象应当何时释放资源.using语句中使用的对象必须实现IDisposable接口
设计模式 1.常用的设计模式1.哈希算法
2.Hash桶算法
3.解决碰撞冲突算法(拉链法)
观察者模式
单例模式
状态模式
工厂方法模式
2.设计模式原则策略模式
0、单一职责原则
一个类实现一个功能
1、开闭原则OCP(Open Close Principle)
对扩展开放,对修改关闭。
2、里氏代换原则LSP(Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现,即子类一定可以替换其基类。
3、依赖倒转原则DIP(Dependence Inversion Principle)
针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则ISP(Interface Segregation Principle)
使用多个隔离的接口,比使用单个接口要好。
它还有另外一个意思是:降低类之间的耦合度。
5、迪米特法则,又称最少知道原则DP(Demeter Principle)
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则CRP(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。



