Unity脚本基础

一丶题目: Unity3D中的协程(coroutine)和C#线程之间的区别是什么?

答案:多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问 Unity3D 的对象、组件、方法。
Unity3d 没有多线程的概念,不过 unity 也给我们提供了 StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine 为什么叫协同程序呢,所谓协同,就是当你在 StartCoroutine 的函数体里处理一段代码时,利用 yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。而 LoadLevelAsync则允许你在后台加载新资源和场景,所以再利用协同,你就可以前台用 loading 条或动画提示玩家游戏未卡死,同时后台协同处理加载的事宜

...

公司出处:上海趣成/上海悉梦计算机

二丶题目: 简述 Unity3D 支持的作为脚本的语言的名称

答案:Unity 的脚本语言基于 Mono 的.Net 平台上运行,可以使用.NET 库,这也为 XML、数据库、正则表达式等问题提供了很好的解决方案。
Unity 里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。
JavaScript:和网页中常用的 JavaScript 不一样,它编译后的运行速度很快,语法方面也会有不少区别。
C# Boo:可以看做是 Python 语言的变种,又糅合了 Ruby 和 C#的特性,它是静态类型语言

...

公司出处:上海趣成/上海悉梦计算机

三丶题目: Unity3D 是否支持写成多线程程序?如果支持的话需要注意什么?

答案:仅能从主线程中访问 Unity3D 的组件,对象和 Unity3D 系统调用支持:如果同时你要处理很多事情或者与 Unity 的对象互动小可以用 thread,否则使用coroutine。
注意:C#中有 lock 这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

...

公司出处:上海趣成/上海悉梦计算机

四丶题目: OnEnable、Awake、Start 运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?

答案:Awake -》OnEnable-》Start
OnEnable 在同一周期中可以反复地发生

...

公司出处:上海趣成/上海悉梦计算机

五丶题目: 请简述 OnBecameVisible 及 OnBecameInvisible 的发生时机,以及这一对回调函数的意义?

答案:当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。

...

公司出处:上海趣成/上海悉梦计算机

六丶题目: Unity3D 如何获知场景中需要加载的数据?

答案:Resource.Load
AssetBundle.Load

...

公司出处:上海趣成/上海悉梦计算机

七丶题目: 物体发生碰撞时,有几个阶段,分别对应的函数

答案:三个阶段,OnCollisionEnter/Stay/Exit 函数

...

公司出处:上海趣成/上海悉梦计算机

八丶题目: u3d 中,几种施加力的方式,描述出来

答案:rigidbody.AddForce/AddForceAtPosition,都是 rigidbody 的成员函数

...

公司出处:上海趣成/上海悉梦计算机

九丶题目: 物体自旋转使用的函数叫什么

答案:transform.Rotate

...

公司出处:上海趣成/上海悉梦计算机

十丶题目: 物体绕某点旋转使用函数叫什么

答案:transform.RotateAround

...

公司出处:上海趣成/上海悉梦计算机

十一丶题目: u3d 提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数

答案:PlayerPrefs.SetInt 与 PlayerPrefs.GetInt

...

公司出处:上海趣成/上海悉梦计算机

十二丶题目: unity3d 从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法

答案:Awake –>OnEnable –> Start –> Update –> FixedUpdate –> LateUpdate –>OnGUI –> Reset –> OnDisable –> OnDestroy

...

公司出处:上海趣成/上海悉梦计算机

十三丶题目: 物理更新一般在哪个系统函数里?

答案:FixedUpdate,每固定帧绘制时执行一次,和 update 不同的是 FixedUpdate 是渲染帧执行,如果你的渲染效率低下的时候 FixedUpdate 调用次数就会跟着下降。FixedUpdate 比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update 就比较适合做控制。

...

公司出处:上海趣成/上海悉梦计算机

十四丶题目: 移动相机动作在哪个函数里,为什么在这个函数里

答案:LateUpdate,,是在所有 update 结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有 update 操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

...

公司出处:上海趣成/上海悉梦计算机

十五丶题目: 什么是协同程序?

答案:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。

...

公司出处:上海趣成/上海悉梦计算机

十六丶题目: 反向旋转动画的方法是什么?

答案:反转动画,讲动画的速度调到-1,碰撞时,被碰撞物体与碰撞物体有collider 组件, 碰撞物体有刚体组件, 或角色碰撞得包含角色组件 OR 改变 animation.speed

...

公司出处:上海趣成/上海悉梦计算机

十七丶题目: 用代码实现第三角色控制器

答案:...

公司出处:上海趣成/上海悉梦计算机

十八丶题目:实现吊机吊物体的功能 

答案:吊机吊物体需要节点挂接和坐标系转换

...

公司出处:上海趣成/上海悉梦计算机

十九丶题目: 获取、增加、删除组件的命令分别是什么

答案:获取:GetComponent
增加:AddComponent
删除:Destroy

...

公司出处:上海萌果信息科技有限公司

二十丶题目: Animation.CrossFade 命令作用是:()

A.动画放大 B.动画转换 C.动画的淡入为其他动画

答案:C

...

公司出处:上海萌果信息科技有限公司

二十一丶题目: Application.loadLevel 命令为:()

A.加载关卡 B.异步加载关卡 C.加载动作

答案:A

...

公司出处:上海萌果信息科技有限公司

二十二丶题目:调试记录到控制台的命令是什么?

答案:Debug.Log();

...

公司出处:上海萌果信息科技有限公司

二十三丶题目: 编辑器类存放路径是什么?

答案:工程目录下的 Assets/Editor 文件夹下。

...

公司出处:上海萌果信息科技有限公司

二十四丶题目:使用原生 GUI 创建一个可以拖动的窗口命令是什么? 

答案:GUI.DragWindow();

...

公司出处:上海萌果信息科技有限公司

二十五丶题目: localPosition 与 Position 的使用区别?

答案:localPosition:自身位置,相对于父级的变换的位置。 Position:在世界坐标transform的位置

...

公司出处:上海萌果信息科技有限公司

二十六丶题目: 含义

Mathf.Round
Mathf.Clamp
Mathf.Lerp

答案:Mathf.Round 四舍五入
Mathf.Clamp 限制
Mathf.Lerp 插值

...

公司出处:上海萌果信息科技有限公司

二十七丶题目: 写一个计时器工具,从整点开始计时,格式为:00:00:00

答案:private float timer = 0f;
    private int h = 0;
    private int m = 0;
    private int s = 0;
    private string timeStr = string.Empty;
    void Update () {
        timer += Time.deltaTime;
        if (timer >= 1f) {s++;  timer = 0;}
        if (s >= 60) {m++;s = 0;}                                    if (m >= 60) {h++;m = 0;}
        if (h >= 99) {h = 0;}    }
    void OnGUI(){
        timeStr = string.Format ("{0:D2}:{1:D2}:{2:D2}", h, m, s);
        GUI.Label (new Rect (10, 10, 100, 200), timeStr);
    }

...

公司出处:上海萌果信息科技有限公司

二十八丶题目: 写出 Animation 的五个方法

答案:AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样

...

公司出处:上海萌果信息科技有限公司

二十九丶题目: 用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个 Cube 即)。

答案:在场景中添加一个Plan,Camera,Directional Light,Cube。添加两个脚本一个挂在Camera上,另一个挂在Cube上。                                         

1. 鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现

2.鼠标实现在场景中拖动物体:解决思路就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作,得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。                                                                  具体代码实现:http://www.cnblogs.com/hewencong/p/4299722.html

...

公司出处:上海萌果信息科技有限公司

三十丶题目: NGUI Button 怎样接受用户点击并调用函数,具体方法名称是什么

答案:

1、主要是在UICamera脚本中用射线判断点击的物体并通过SendMessage调用OnClick() OnPress()等函数,可以说NGUI的按钮是通过发消息这个方式调用的。具体方法名称是OnClick()
2、
void Awake ()
    {  
                //获取需要监听的按钮对象
        GameObject button = GameObject.Find("UI Root/Button3");
                //设置这个按钮的监听,指向本类的ButtonClick方法中。
        UIEventListener.Get(button).onClick = OnButton3Click;
    }
 
    private void OnButton3Click(GameObject button)
    {
        Debug.Log("我是按钮3被点击了");
    }

...

公司出处:上海萌果信息科技有限公司

三十一丶题目:<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法。

答案:Vector3 v 代表初速度 v'代表现在的速度, 假设小鸟是沿的 z 轴也就是 transform.forward方向运动的质量为 1,那么 v‘=v-new Vector3(0,g*t,f*t),transform.Translate(v')做的就是抛物线运动(g 为重力加速度不要用现实中的需要自己调试,f 为阻力也要自己调试设置,t 为时间)

...

公司出处:上海萌果信息科技有限公司

三十二丶题目: 当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?

答案:

1、使用预制物体对象 Prefab
2、使用对象池技术,不使用时关闭,使用时打开

...

公司出处:上海萌果信息科技有限公司

三十三丶题目: 碰撞检测需要物体具备什么属性?

答案:能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器
Physics.OverlapSphere 相交球检测碰撞,碰撞检测需要包围盒】

...

公司出处:上海萌果信息科技有限公司

三十四丶题目: Vector3.forward 与 Vector3(0,0,1)是一样的意思对吗?

答案:对

...

公司出处:上海萌果信息科技有限公司

三十五丶题目: 下哪个函数在游戏进入新场景后会被马上调用?

答案:MonoBehaviour.OnLevelWasLoaded

...

公司出处:上海萌果信息科技有限公司

猜你喜欢

转载自blog.csdn.net/ji2570489271/article/details/78683653
今日推荐