今年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上的投影長度的乘積,它是一個標量,而且可正可負。
物理意義:叉乘 點乘,也叫向量的內積、數量積。顧名思義,求下來的結果是一個數。 向量a·向量b=|a||b|cos<a,b> 在物理學中,已知力與位移求功,實際上就是求向量F與向量s的內積,即要用點乘。 叉乘,也叫向量的外積、向量積。顧名思義,求下來的結果是一個向量,記這個向量為c。 |向量c|=|向量a×向量b|=|a||b|sin<a,b> 向量c的方向與a,b所在的平面垂直,且方向要用“右手法則”判斷(用右手的四指先表示向量a的方向,然后手指朝着手心的方向擺動到向量b的方向,大拇指所指的方向就是向量c的方向)。 因此 向量的外積不遵守乘法交換率,因為 向量a×向量b=-向量b×向量a 在物理學中,已知力與力臂求力矩,就是向量的外積,即叉乘。 將向量用坐標表示(三維向量), 若向量a=(a1,b1,c1),向量b=(a2,b2,c2), 則 向量a·向量b=a1a2+b1b2+c1c2 向量a×向量b= | i j k| |a1 b1 c1| |a2 b2 c2| =(b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) (i、j、k分別為空間中相互垂直的三條坐標軸的單位向量)。
參考:
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坐標的差的平方的和,再開方。
9、假設一個只能火力點,它將攻擊任何出現在其正前方30度內的、距離在10米之內的敵人,請為其書寫開火判斷AI腳本。
AI不熟悉,在研究中...
