今年3月份面試unity3d游戲程序,先做的面試題,然後人事問了我幾個之前游戲開發的問題,問我英語怎麼樣等等,介紹了公司情況和對unity3d程序的要求。之後就回來了,總共面了不到1個半小時吧。筆試答得不好。下面分享一下這次我的unity3d筆試題,答案是我做的,如果有什麼錯誤或者更好的回答,歡迎大家吐槽糾正。
1、C#程序題
private static void aaa(int x) { x = 10; } private static void bbb(ref int x) { x = 10; } static void Main(string[] args) { int x = 0; aaa(x); //現在x的值是:___ bbb(ref x); //現在x的值是:___ }
答案:0,,10。
詳細解答:一個是復制一份值過去,一個是把地址傳過去
2、英文翻譯題(把下面文字翻譯成中文)
Transform.LocalPosition
var localPosition:Vector3;
Description:
Position of the transform relative to the parent transform.
If the transform has no parent,it is the same as Transform.position.
Note that the parent transform's world rotation and scale are applied to the local position when calculating the world position.This means that while 1 unit in Transform.position is always 1 unit in transform.localPosition will get scaled by the scale of all ancestors.
描述:
相對於父級的變換的位置。
如果該變換沒有父級,那麼等同於Transform.position。
注意當計算世界的位置時,父級變換的世界旋轉和縮放被應用到自身的位置。意思是說Transform.position的1個單位是1個單位,Transform.localPosition的1個單位將由所有祖先的縮放獲得縮放,簡單來所自身位置的1單位將受它所有上級的縮放影響。
詳細解答:文章來自於《unity聖典》,參考http://game.ceeger.com/Script/Transform/Transform.localPosition.html
3、U3D提供了一個用於保存讀取數據的類,(playerprefs),請列出保存讀取整形數據的函數。
答案:PlayerPrefs.SetInt();
詳細解答:
PlayerPrefs類可保存與讀取3種基本的數據類型,它們是浮點型、整形和字符串型,涉及的方法如下:
SetFloat();保存浮點類型
SetInt();保存整形
SetString();保存字符串型
GetFloat();獲取浮點類型
GetInt();獲取整形
GetString();獲取字符串
4、請簡述向量點乘的含義:
向量u點乘向量v;u的長度與v在u上的投影長度的乘積,它是一個標量,而且可正可負。
參考:
http://hi.baidu.com/cly84920/item/7bc79fdf97ff4f91260ae733
http://wenku.baidu.com/link?url=9Nq1MttA0DqgPgYWYIix7hpqUTDv8ifyq4xK09LtzaWpLNxYpnsjhqU1kWS5Tg4ZiLPTAJsqCB4U3Ka_4L4lL1oKfb1yTXSHck6DX1QRrdO
5、物體發生碰撞的必要條件是什麼。
答案:兩個物體都必須帶有碰撞器(Collider),其中一個物體還必須帶有Rigidbody剛體。
6、程序題:aaa()函數的意義,以及test()執行以後在控制台輸出什麼?
public delegate void DoHurt();
protected DoHurt hurtCall;
public void aaa(DoHurt call) { this.hurtCall=(DoHurt)Delegate.Combine(this.hurtCall,call); } public void myHurt001() { Debug.log("調用1"); } public void myhurt002(int a,int b) { Debug.Log("調用2"); } public void test() { this.aaa(myHurt001); this.aaa(myHurt002); this.hurtCall(); }
答案:貌似this.aaa(myHurt002)會報錯。
詳細解答:如果hurtCall為null,call不為null時,hurtCall這個委托變量就指向call指向的方法,如果hurtCall不為null,call為null時,hurtCall這個委托變量就指向hurtCall指向的方法。aaa方法的參數為一個無參的委托變量,這裡面指向了myHurt002,而myHurt002是一個有參數的方法。這道題歡迎探討。
7、游戲對象B是游戲對象A的子物體,游戲對象A經過了旋轉,請寫出游戲對象B圍繞自身的Y軸進行旋轉的腳本語句,以及游戲對象B圍繞世界坐標的Y軸旋轉的腳本語句。
對象B圍繞自身的Y軸進行旋轉:B.transform.Rotate(Vector.up);
對象B圍繞世界坐標的Y軸旋轉:B.transform.RotateAround(Vector.up);
詳細解答:transform.Rotate();用於設置模型自身旋轉;transform.RotateAround();用於設置模型圍繞某一個點旋轉。
Vector.right:X軸方向;
Vector.up:Y軸方向;
Vector.forward:Z軸方向。
8、已知三維空間中的A、B兩個點的坐標,請寫出在X-Z平面上, 兩個之間的距離的計算函數。
其實就是求A、B兩個點在XOZ平面上的投影的距離。投影以後,Y坐標等於0,X、Z不變,AB投影的距離就是兩個X坐標和兩個Z坐標的差的平方的和,再開方。
AI不熟悉,在研究中...