1、在類的構造函數前加上static會報什么錯?為什么?
構造函數格式為 public+類名,如果加上static會報錯(靜態構造函數不能有訪問修飾符)
原因:靜態構造函數不允許訪問修飾符,也不接受任何參數;
無論創建多少類型的對象,靜態構造函數只執行一次;
運行庫創建類實例或者首次訪問靜態成員之前,運行庫調用靜態構造函數;
靜態構造函數執行先於任何實例級別的構造函數;
顯然也就無法使用this和base來調用構造函數。
2、C# String類型比stringBuilder類型的優勢是什么?
如果是處理字符串的話,用string中的方法每次都需要創建一個新的字符串對象並且分配新的內存地址,而stringBuilder是在原來的內存里對字符串進行修改,所以在字符串處理方面還是建議用stringBuilder這樣比較節約內存。但是string 類的方法和功能仍然還是比stringBuilder類要強。
3、C# 函數Func(string a, string b)用Lambda表達式怎么寫?
4、數列1,1,2,3,5,8,13...第n位數是多少?用C#遞歸算法實現
通項公式應該是an = a(n-1) + a(n-2) 這樣就可以做遞歸了
5、一個簡單的游戲,怪物會走動\攻擊\死亡,游戲角色會走動,跳躍\攻擊\格擋\死亡,還會接受玩家從輸入端輸入的指令,NPC會走動,他們彼此之間可以互相通信.請畫出以上三種角色的UML圖示.
面試問了三個問題:
1\NGUI Button怎樣接受用戶點擊並調用函數,具體方法名稱是什么
.OnClick()主要是在UICamera腳本中用射線判斷點擊的物體並通過SendMessage調用OnClick() OnPress()等函數,可以說NGUI的按鈕是通過發消息這個方式調用的。
2、怎么判斷兩個平面是否相交?不能用碰撞體,說出計算方法(我本來說用transform但是不會算邊界坐標,不知道有木有大神提點下)
3、<憤怒的小鳥>給予初速度以后,怎么讓小鳥受到重力和空氣阻力的影響而繪制拋物線軌跡,說出具體的計算方法. (來自百度貼吧)
Vector3 v代表初速度v'代表現在的速度,假設小鳥是沿的z軸也就是transform.forward方向運動的質量為1,那么v‘=v-new Vector3(0,g*t,f*t),transform.Translate(v')做的就是拋物線運動(g為重力加速度不要用現實中的需要自己調試,f為阻力也要自己調試設置,t為時間)
=====================================================================================
1.請描述游戲動畫有哪幾種,以及其原理。
答:主要有關節動畫、單一網格模型動畫(關鍵幀動畫)、骨骼動畫。
關節動畫把角色分成若干獨立部分,一個部分對應一個網格模型,部分的動畫連接成一個整體的動畫,角色比較靈活Quake2中使用了這種動畫;
單一網絡模型動畫由一個完整的網格模型構成,在動畫序列的關鍵幀里記錄各個頂點的原位置及其改變量,然后插值運算實現動畫效果,角色動畫較真實。
骨骼動畫,廣泛應用的動畫方式,集成了以上兩個方式的優點,骨骼按角色特點組成一定的層次結構,由關節相連,可做相對運動,皮膚作為單一網格蒙在骨骼之外,決定角色的外觀。皮膚網格每一個頂點都會受到骨骼的影響,從而實現完美的動畫。
2.alpha blend 工作原理
答:alpha blend 用於做半透明效果。Color = (源顏色 * 源系數) OP ( 目標顏色* 目標系數);其中OP(混合方式)有加,減,反減,取最小,取最大;
????
3.寫光照計算中的diffuse的計算公式
答:漫反射光(diffuse)計算公式為:Idiffuse = Dintensity*Dcolor*N.L ; (Dintensity表示漫反射強度,Dcolor表示漫反射光顏色,N為該點的法向量,L為光源向量)
其他,3D渲染中,物體表面的光照計算公式為:
I = 環境光(Iambient) + 漫反射光(Idiffuse) + 鏡面高光(Ispecular);
其中,環境光(ambient)計算公式為:
Iambient= Aintensity* Acolor; (Aintensity表示環境光強度,Acolor表示環境光顏色)
漫反射光(diffuse)計算公式為:
Idiffuse = Dintensity*Dcolor*N.L ; (Dintensity表示漫反射強度,Dcolor表示漫反射光顏色,N為該點的法向量,L為光源向量)
鏡面光照(specular)計算公式為:
Ispecular = Sintensity*Scolor*(R.V)n; (Sintensity表示鏡面光照強度,Scolor表示鏡面光顏色,R為光的反射向量,V為觀察者向量)
綜上所得:整個光照公式為:
I = Aintensity* Acolor+ Dintensity*Dcolor*N.L + Sintensity*Scolor*(R.V)n ;
將一些值合並,並使用白色作為光照顏色,則上述公式可簡化為:
I = A + D*N.L + (R.V)n
4.lod是什么,優缺點是什么
答:LOD技術即Levels of Detail的簡稱,意為多細節層次。LOD技術指根據物體模型的節點在顯示環境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數和細節度,從而獲得高效率的渲染運算。
缺點:?????
5.兩種陰影判斷的方法工作原理
答:難道是Orthographic和Perspective么??????
6.Vertex Shader是什么?怎么計算?
答:頂點着色器,怎么計算哦???
7.MipMap是什么?作用?
答:在三維計算機圖形的貼圖渲染中有一個常用的技術被稱為Mipmapping。為了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱為 MIP map 或者 mipmap。
8.用u3d實現2d游戲,有幾種方式?
答:1.用本身的GUI
2.把攝像機的Projection調成Orthographic,物體的Z軸不考慮了。
9.u3d中碰撞器和觸發器的區別?
答:碰撞器會有碰撞的效果,IsTrigger = false,可以調用OnCollisionEnter/Stay/Exit函數。 觸發器沒有碰撞效果,isTrigger = true,可以調用OnTriggerEnter/stay/exit函數
10.物體發生碰撞的必要條件
答:其中至少一個物體(運動的)必須帶有碰撞器(collider)+剛體(Rigidbody)或者CharacterController,另一個物體也必須至少帶有collider。
11.CharacterController和Rigidbody的區別
答:CharacterController自帶膠囊碰撞器,里面好像封裝了一個剛體
Rigidbody就是剛體,使物體帶有物理的特性
12.物體發生碰撞時,有幾個階段,分別對應的函數
答:三個階段,OnCollisionEnter/Stay/Exit函數
13.u3d中,幾種施加力的方式,描述出來。
答:rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函數
14.什么叫做鏈條關節
答:Hinge Joint ,他可以模擬兩個物體間用一根鏈條連接在一起的情況,能保持兩個物體在一個固定距離內部相互移動而不產生作用力,但是達到固定距離后就會產生拉力。
15.物體自旋轉使用的函數叫什么
答:transform.Rotate
16.物體繞某點旋轉使用函數叫什么
答:transform.RotateAround
17.u3d提供了一個用於保存讀取數據的類,(playerPrefs),請列出保存讀取整形數據的函數
答:PlayerPrefs.SetInt(“CoinNum”,100);
18.unity3d提供了幾種光源,分別是什么
答:4種,Directionl light ,Point Light ,Spot Light,Area Light
19.unity3d從喚醒到銷毀有一段生命周期,請列出系統自己調用的幾個重要方法。
答:Awake ---> Start ---> Update --> FixedUpdate --> LateUpdate --->OnGUI -->Reset --> OnDisable -->OnDestory;
20.物理更新一般在哪個系統函數里?
答:FixedUpdate,每固定幀繪制時執行一次,和update不同的是FixedUpdate是渲染幀執行,如果你的渲染效率低下的時候FixedUpdate調用次數就會跟着下降。FixedUpdate比較適用於物理引擎的計算,因為是跟每幀渲染有關。Update就比較適合做控制。
21.移動相機動作在哪個函數里,為什么在這個函數里。
答:LateUpdate,在每幀執行完畢調用,他是在所有update結束后才掉,比較適合用於命令腳本的執行。官網上例子是攝像機的跟隨,都是在所有update操作完才跟進攝像機,不然就有可能出現攝像機已經推進了,但是視角里還未有角色的空幀出現。
22.當游戲中需要頻繁創建一個物體對象時,我們需要怎么做來節省內存。
答:動態的創建。需要幾個我們就
23.一個場景放置多個camera並同時處於活動狀態,會發生什么
答:游戲界面可以看到很多攝像機的混合。可以用depth(深度),Layer(層)+ Culling Mask,enable = false/true來控制
24.簡述prefab的用處和環境
答:Prefab在實例化的時候用到,主要用於經常會用到的物體,屬性方便修改。
25.如何銷毀一個UnityEngine.Object以及其子類
答:Destory
26.為什么u3d會出現組件上數據丟失的情況
答:一般是組件上綁定的物體對象被刪除了。
27.u3d下如何安全的在不同工程遷移asset數據
答:方法1,可以把assets目錄和Library目錄一起遷移,
方法2,導出包,
方法3,用unity帶的assets server功能