天天看點

[Unity3D]藍港面試題

1. 請簡述值類型與引用類型的差別

答:

差別:

1.值類型存儲在記憶體棧中,引用類型資料存儲在記憶體堆中,而記憶體單元中存放的是堆中存放的位址。

2.值類型存取快,引用類型存取慢。

3.值類型表示實際資料,引用類型表示指向存儲在記憶體堆中的資料的指針和引用。

4.棧的記憶體是自動釋放的,堆記憶體是.NET中會由GC來自動釋放。

5.值類型繼承自System.ValueType,引用類型繼承自System.Object。

2.C#中所有引用類型的基類是什麼

引用類型的基類是System.Object 值類型的基類是System.ValueType

同時,值類型也隐式繼承自System.Object

3.請簡述ArrayList和List<Int>的主要差別

ArrayList存在不安全類型‘(ArrayList會把所有插入其中的資料都當做Object來處理)

裝箱拆箱的操作(費時)

List是接口,ArrayList是一個實作了該接口的類,可以被執行個體化。

4.請簡述GC(垃圾回收)産生的原因,并描述如何避免

:GC回收堆上的記憶體

避免:1)減少new産生對象的次數

2)使用公用的對象(靜态成員)

3)将String換為StringBuilder

5.請描述Interface與抽象類之間的不同

抽象類表示該類中可能已經有一些方法的具體定義,但接口就是公公隻能定義各個方法的界面 ,不能具體的實作代碼在成員方法中。

類是子類用來繼承的,當父類已經有實際功能的方法時該方法在子類中可以不必實作,直接引用父類的方法,子類也可以重寫該父類的方法。

實作接口的時候必須要實作接口中所有的方法,不能遺漏任何一個。

6.下列代碼在運作中會産生幾個臨時對象?

答:其實在C#中第一行是會出錯的(Java中倒是可行)。應該這樣初始化:

7.下列代碼在運作中會發生什麼問題?如何避免?

答:會産生運作時錯誤,因為foreach是隻讀的。不能一邊周遊一邊修改。

8.請簡述關鍵字Sealed用在類聲明和函數聲明時的作用

類聲明時可防止其他類繼承此類,在方法中聲明則可防止派生類重寫此方法。

9.請簡述private,public,protected,internal的差別

public:對任何類和成員都公開,無限制通路

private:僅對該類公開

protected:對該類和其派生類公開

internal:隻能在包含該類的程式集中通路該類

protected internal:protected + internal

10.反射的實作原理?

 答:審查中繼資料并收集關于它的類型資訊的能力。

反射個人認為,就是得到程式集中的屬性和方法。

實作步驟:

1,導入using System.Reflection;

2,Assembly.Load("程式集")加載程式集,傳回類型是一個Assembly

3,   foreach (Type type in assembly.GetTypes())

            {

                string t = type.Name;

            }

   得到程式集中所有類的名稱

4,Type type = assembly.GetType("程式集.類名");擷取目前類的類型

5,Activator.CreateInstance(type); 建立此類型執行個體

6,MethodInfo mInfo = type.GetMethod("方法名");擷取目前方法

7,mInfo.Invoke(null,方法參數);

11..Net與Mono的關系?

答:Mono官網首頁

Mono is a software platform designed to allow developers to easily create 

 mono是.net的一個開源跨平台工具,就類似java虛拟機,java本身不是跨平台語言,但運作在虛拟機上就能夠實作了跨平台。.net隻能在windows下運作,mono可以實作跨平台跑,

可以運作于linux,Unix,Mac OS等。

12.簡述Unity3D支援的作為腳本的語言的名稱

答:Unity的腳本語言基于Mono的.Net平台上運作,可以使用.NET庫,這也為XML、資料庫、正規表達式等問題提供了很好的解決方案。

Unity裡的腳本都會經過編譯,他們的運作速度也很快。這三種語言實際上的功能和運作速度是一樣的,差別主要展現在語言特性上。

JavaScript:和網頁中常用的JavaScript不一樣,它編譯後的運作速度很快,文法方面也會有不少差別。

C#

Boo:可以看做是Python語言的變種,又糅合了Ruby和C#的特性,它是靜态類型語言

13.Unity3D是否支援寫成多線程程式?如果支援的話需要注意什麼?

 僅能從主線程中通路Unity3D的元件,對象和Unity3D系統調用

支援:如果同時你要處理很多事情或者與Unity的對象互動小可以用thread,否則使用coroutine。

注意:C#中有lock這個關鍵字,以確定隻有一個線程可以在特定時間内通路特定的對象

14.Unity3D的協程和C#線程之間的差別是什麼?

多線程程式同時運作多個線程 ,而在任一指定時刻隻有一個協程在運作,并且這個正在運作的協同程式隻在必要時才被挂起。

除主線程之外的線程無法通路Unity3D的對象、元件、方法。

Unity3d沒有多線程的概念,不過unity也給我們提供了StartCoroutine(協同程式)和LoadLevelAsync(異步加載關卡)背景加載場景的方法。 StartCoroutine為什麼叫協同程式呢,所謂協同,就是當

你在StartCoroutine的函數體裡處理一段代碼時,利用yield語句等待執行結果,這期間不影響主程式的繼續執行,可以協同工作。而LoadLevelAsync則允許你在背景加載新資源和場景,是以再利用協同

,你就可以前台用loading條或動畫提示玩家遊戲未卡死,同時背景協同處理加載的事宜asynchronous[e ɪˈ s ɪŋ kr ə n ə s] .synchronous同步。 

15.U3D中用于記錄節點空間幾何資訊的元件名稱,及其父類名稱

答:Transform 父類是 Component

16.簡述四元數的作用,四元數對歐拉角的優點?

答:四元數用于表示旋轉

相對歐拉角的優點:

1)能進行增量旋轉

2)避免萬向鎖

3)給定方位的表達方式有兩種,互為負(歐拉角有無數種表達方式)

17.向量的點乘、叉乘以及歸一化的意義?

1)點乘描述了兩個向量的相似程度,結果越大兩向量越相似,還可表示投影

2)叉乘得到的向量垂直于原來的兩個向量

3)标準化向量:用在隻關系方向,不關心大小的時候

18.矩陣相乘的意義及注意點

用于表示線性變換:旋轉、縮放、投影、平移、仿射

注意矩陣的蠕變:誤差的積累

19.為何大家都在移動裝置上尋求U3D原生GUI的替代方案

不美觀,OnGUI很耗費時間,使用不友善 

20.請簡述如何在不同分辨率下保持UI的一緻性

NGUI很好的解決了這一點,螢幕分辨率的自适應性,原理就是計算出螢幕的寬高比跟原來的預設的螢幕分辨率求出一個對比值,然後修改錄影機的size。

21.為什麼dynamic font在unicode環境下優于static font

Unicode是國際組織制定的可以容納世界上所有文字和符号的字元編碼方案。

使用動态字型時,Unity将不會預先生成一個與所有字型的字元紋理。當需要支援亞洲語言或者較大的字型的時候,若使用正常紋理,則字型的紋理将非常大。

22.Render的作用?描述MeshRender和SkinnedMeshRender的關系與不同

A renderer is what makes an object appear on the screen。

23.簡述SkinnedMesh的實作原理

<a target="_blank" href="http://blog.csdn.net/n5/article/details/3105872">http://blog.csdn.net/n5/article/details/3105872</a>

24.在場景中放置多個Camera并同時處于活動狀态會發生什麼

遊戲界面可以看到很多錄影機的混合

25.Prefab的作用?如何在移動環境的裝置下恰當地使用它?

Prefab在執行個體化的時候用到,主要用于經常會用到的物體,屬性友善修改

26.如何銷毀一個UnityEngine.Object及其子類

Destory

27.為什麼Unity3D中會發生在元件上出現資料丢失的情況?

元件上綁定的對象被删除了

28.如何安全的在不同工程間安全地遷移asset資料?三種

将Assets目錄和Library目錄一起遷移

導出包

用unity自帶的assets Server功能

29.MeshCollider和其他Collider的一個主要不同點?

答:Convex?

30.當一個細小的高速物體撞向另一個較大的物體時,會出現什麼情況?如何避免?

穿透(碰撞檢測失敗)

<a target="_blank" href="http://forum.unity3d.com/threads/3353-collision-detection-at-high-speed">http://forum.unity3d.com/threads/3353-collision-detection-at-high-speed</a>

31.OnEnable、Awake、Start運作時的發生順序?哪些可能在同一個對象周期中反複的發生?

Awake -》OnEnable-》Start

OnEnable在同一周期中可以反複地發生

<a target="_blank" href="http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html">http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html</a>

32.請簡述OnBecameVisible及OnBecameInvisible的發生時機,以及這一對回調函數的意義?

當物體是否可見切換之時。

可以用于隻需要在物體可見時才進行的計算。

33.Unity3D如何獲知場景中需要加載的資料?

題目是擷取的意思?

Resource.Load

AssetBundle

34.MeshRender中material和sharedmaterial的差別?

修改sharedMaterial将改變所有物體使用這個材質的外觀,并且也改變儲存在工程裡的材質設定。