unity 技巧1
2016-04-28 09:47
281 查看
1,让一个物体围绕某一点旋转,有几种方法?分别是什么?
旋转函数transform.Rotate()来实现。
transform的RotateAround(vector3 postion,vector3 axis,float angle)函数
[JavaScript] 纯文本查看 复制代码
?
[align=left] 然后大家拖动obj1和obj2就可以看到物体永远保持z轴朝向obj1,并且以obj2的位置来保持y轴的倾斜度。[/align]
[align=left]2,Mesh,Sphere,Box,Capsule,四种碰撞器。请按照性能开销由小到大进行排序。[/align]
[align=left]collider的性能和效率大概的顺序是:Sphere Collider > Capsule Collider> Box Collider > Mesh Collider.[/align]
[align=left]3,向量的点积,叉积,在游戏中的应用(分别举一个例子说明)[/align]
判断目标在自己的前后方位可以使用下面的方法:
[C#] 纯文本查看 复制代码
?
[align=left]返回值为正时,目标在自己的前方,反之在自己的后方[/align]
判断目标在机子的左右方位可以使用下面的方法:
[C#] 纯文本查看 复制代码
?
[align=left]返回值为正时,目标在自己的右方,反之在自己的左方[/align]
a.normalized 和 b.normalized 表示的是两个向量的单位向量, 因为在公式里,有向量和模的除法,得出来的结果就是单位向量,所以我们这里和后面都直接用单位向量来计算,省去不少麻烦。
Mathf.Rad2Deg 表示的是 单位弧度的度数。详情请见作者文章: Unity3D之Mathf.Rad2Deg和Mathf.Deg2Rad
通过叉积计算度数是通过公式 |c|=|a||b|sin<a,b> 来逆向求值。|c| 其实就是叉积的模,换句话说,也代表着 Vector3.Distance (Vector3.zero, Vector3.Cross (a.normalized, b.normalized))的值。
4,输出: 600,0.2,120,119;
该方式对于浮点数会做无条件舍去,失去精确度。
如果希望获取float的整数部分可以 d = Math.Floor(c);
Math.Round:四舍六入五取偶
Math.Ceiling:只要有小数都加1
Math.Floor:总是舍去小数
5,如何让粒子效果显示在UI前面?(NGUI或UGUI选其一回答)
如果是NGUI修改粒子的renderQueue,修改尽量大就在所有UI上面,如果希望在2个UI之间就需要看看NGUI源码,http://m.blog.csdn.net/blog/yxriyin/44037673
如果是UGUI一种是可以使用相机把处理粒子,一种是设置sortingOrder http://www.xuanyusong.com/archives/3435
[align=left]6,当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?[/align]
[align=left]会发生穿透(碰撞检测失败)[/align]
[align=left]解决方法:[/align]
增大细小物体的碰撞体
使用射线检测
可以physics time减小,不建议这样做
确保rigidbody不超过一定的速度,这个也不实用
7,Update(),Awake(),Start()的执行顺序是?游戏开始后,分别在何时执行?
Awake()-> Start()-> Update();
脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到
Awake ->OnEable-> Start -> FixedUpdate-> Update -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy
Awake:用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。
Update:正常帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。
8,数列 1,1,2,3,5,8,13... 第 n 位数是多少 ? 用 C# 递归算法实现
[C#] 纯文本查看 复制代码
?
9,当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存?
使用pool对象池。
使用AssetBundle也可以降低一定内存。
10,Unity动态加载资源有几种方法,分别是什么?
通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。
通过bundle的形式:即将资源打成 asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。
通过AssetDatabase.loadasset :这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的
旋转函数transform.Rotate()来实现。
transform的RotateAround(vector3 postion,vector3 axis,float angle)函数
[JavaScript] 纯文本查看 复制代码
?
[align=left]2,Mesh,Sphere,Box,Capsule,四种碰撞器。请按照性能开销由小到大进行排序。[/align]
[align=left]collider的性能和效率大概的顺序是:Sphere Collider > Capsule Collider> Box Collider > Mesh Collider.[/align]
[align=left]3,向量的点积,叉积,在游戏中的应用(分别举一个例子说明)[/align]
判断目标在自己的前后方位可以使用下面的方法:
[C#] 纯文本查看 复制代码
?
判断目标在机子的左右方位可以使用下面的方法:
[C#] 纯文本查看 复制代码
?
a.normalized 和 b.normalized 表示的是两个向量的单位向量, 因为在公式里,有向量和模的除法,得出来的结果就是单位向量,所以我们这里和后面都直接用单位向量来计算,省去不少麻烦。
Mathf.Rad2Deg 表示的是 单位弧度的度数。详情请见作者文章: Unity3D之Mathf.Rad2Deg和Mathf.Deg2Rad
通过叉积计算度数是通过公式 |c|=|a||b|sin<a,b> 来逆向求值。|c| 其实就是叉积的模,换句话说,也代表着 Vector3.Distance (Vector3.zero, Vector3.Cross (a.normalized, b.normalized))的值。
4,输出: 600,0.2,120,119;
该方式对于浮点数会做无条件舍去,失去精确度。
如果希望获取float的整数部分可以 d = Math.Floor(c);
Math.Round:四舍六入五取偶
Math.Ceiling:只要有小数都加1
Math.Floor:总是舍去小数
5,如何让粒子效果显示在UI前面?(NGUI或UGUI选其一回答)
如果是NGUI修改粒子的renderQueue,修改尽量大就在所有UI上面,如果希望在2个UI之间就需要看看NGUI源码,http://m.blog.csdn.net/blog/yxriyin/44037673
如果是UGUI一种是可以使用相机把处理粒子,一种是设置sortingOrder http://www.xuanyusong.com/archives/3435
[align=left]6,当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?[/align]
[align=left]会发生穿透(碰撞检测失败)[/align]
[align=left]解决方法:[/align]
增大细小物体的碰撞体
使用射线检测
可以physics time减小,不建议这样做
确保rigidbody不超过一定的速度,这个也不实用
7,Update(),Awake(),Start()的执行顺序是?游戏开始后,分别在何时执行?
Awake()-> Start()-> Update();
脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到
Awake ->OnEable-> Start -> FixedUpdate-> Update -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy
Awake:用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如GameObject.FindWithTag()这样的函数搜索它们。每个游戏物体上的Awake以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息Awake总是在Start之前被调用。它不能用来执行协同程序。
Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。在所有脚本实例中,Start函数总是在Awake函数之后调用。
Update:正常帧更新,用于更新逻辑。每一帧都执行,处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。
8,数列 1,1,2,3,5,8,13... 第 n 位数是多少 ? 用 C# 递归算法实现
[C#] 纯文本查看 复制代码
?
使用pool对象池。
使用AssetBundle也可以降低一定内存。
10,Unity动态加载资源有几种方法,分别是什么?
通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。
通过bundle的形式:即将资源打成 asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。
通过AssetDatabase.loadasset :这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的
相关文章推荐
- 【Unity3d开发记录】Unity动态画曲线、弧线(GL画线)在UI上的显示
- unity 3D之ugui Scroll Rect拖拽消息冲突问题
- 科睿科技CEO王松奇亲自教你unity vr 教程、你的第一个unity VR游戏
- 如何有效提升Unity Gear VR游戏性能
- Unity项目中UI美术必须知道的程序要点
- 【VR】Unity3d VR学习笔记——Unity烘焙
- 【AR】Kinect + Unity 体感及增强现实开发历程
- Unity3D_NGUI_性能优化实践_CPU卡顿(五)
- 【Unity】广告牌(Billboard)材质
- [置顶] Unity与Android交互-android的安装与配置
- 【Unity】使用C#中的委托类型实现代理设计模式
- untiy 3d ShaderLab_第 2 章Unity中Shader(着色器)的形态_3_Shader的数据接口:属性和 uniform变量
- untiy 3d ShaderLab_第 2 章Unity中Shader(着色器)的形态_2_Unity中Shader的3种形态
- untiy 3d ShaderLab_第 2 章Unity中Shader(着色器)的形态_1_Unity通过ShaderLab 来组织Shader
- Unity打包同一文件Hash不一样
- Shader之学习笔记一
- unity c#和c++调用
- 【Unity】基于MVC模式的双肩包系统 UGUI实现
- Unity3d开发(十二)使用Menu.SetCheck更改菜单勾选状态
- Unity3D 自定义事件(事件侦听与事件触发)