欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:c# 面試問題匯總

柚子快報(bào)邀請(qǐng)碼778899分享:c# 面試問題匯總

http://yzkb.51969.com/

面試問題總結(jié)

1.碰撞穿透

原因: GameObject移動(dòng)過快,被碰撞Collider過薄 兩個(gè)GameObject同時(shí)移動(dòng)

解決思路: 選擇rigidbody屬性參數(shù)(Discrete、Continuous、ContinuousDynamic) Discrete :(離散型檢測模式)就是普通的默認(rèn)狀態(tài); Continuous:(連續(xù)檢測)則是更加精細(xì)的碰撞檢測,但是很耗資源;在這種狀態(tài)下,當(dāng)這個(gè)剛體與其他普通剛體碰撞時(shí),仍將使用Discrete的碰撞檢測,但是與沒有剛體的Mesh Collider碰撞時(shí)就會(huì)連續(xù)檢測了。 Continuous dynamic:(動(dòng)態(tài)連續(xù)檢測)則是對(duì)沒有剛體的Mesh Collider或是對(duì)處在Continuous或是Continuous Dynamic狀態(tài)下的剛體使用連續(xù)碰撞檢測,對(duì)其他的剛體使用普通的Discrete檢測。

解決方案: 1.當(dāng)使用默認(rèn)的離散式碰撞檢測時(shí),如果前一楨時(shí)對(duì)象在墻這一面,下一楨時(shí)對(duì)象已到到了墻另一面,那么碰撞檢測算法將檢測不到碰撞的發(fā)生,你可以將該對(duì)象的碰撞檢測屬性設(shè)置為Continuous,這時(shí)碰撞檢測算法將會(huì)防止對(duì)象穿過所有的靜態(tài)碰撞體,設(shè)置為Continuous Dynamic將還會(huì)防止穿過其他也設(shè)置為Continuous或者Continuous Dynamic的剛體 2.將移動(dòng)相關(guān)代碼轉(zhuǎn)移到FixUpdate中 3.不使用剛體 Rigidbody的方式,采用發(fā)射子彈之前,先發(fā)射射線,記錄碰撞點(diǎn)(判斷是否會(huì)發(fā)生碰撞),然后在發(fā)射子彈。

2.Lua中table的實(shí)現(xiàn)

結(jié)構(gòu):數(shù)組+哈希表 Table由三個(gè)連續(xù)內(nèi)存構(gòu)成:Table結(jié)構(gòu),一塊連續(xù)整數(shù)索引的數(shù)組,一塊2的整數(shù)次冪的哈希表

3.時(shí)間復(fù)雜度有哪些

O(1):hashSet、hashmap,數(shù)組下標(biāo) O(log n):對(duì)半查找法,樹形遍歷,快排,堆排序,歸并排序 O(n):list查詢值,數(shù)組查詢值 O(n^2):冒泡、插入、選擇 O(n^3):for(for(for())) O(2^n):斐波那契的遞歸算法

4.lua面向?qū)ο蟮膶?shí)現(xiàn)

封裝: 對(duì)象由屬性和方法組成。LUA中最基本的結(jié)構(gòu)是table,所以需要用table來描述對(duì)象的屬性。lua 中的 function 可以用來表示方法。那么LUA中的類可以通過 table + function 模擬出來。

function Object : new()

local obj = { }

--元表知識(shí) __index 當(dāng)找自己的變量找不到時(shí) 就會(huì)去找元表當(dāng)中的__index指向的內(nèi)容

self._index = self

setmetatable(obj,self)

return obj

end

繼承:

function Object:subClass(className)

--_G知識(shí)點(diǎn) 是總表 所有全局表里 都以鍵值對(duì)的形式存在其中

--通過_G創(chuàng)建空表

_G[className] = {}

--寫相關(guān)繼承的方法

--用到元表

local obj = _G[className]

self._index = self

--定義base屬性繼承父類

obj.base = self

setmetatable(obj,self)

end

多態(tài):

Object:subClass("GameObject")

GameObject.posX = 0

GameObject.posY = 0

function GameObject:Move()

self.posX = self.posX+1

self.posY = self.posY+1

print(self.posX)

print(self.posY)

end

function Player:Move( )

--注意這里如果是傳入base:Move(),move的self將為base本身

self.base.Move(self)

end

local p1 = Player:new()

p1:Move()

local p2 = Player:new()

p2:Move()

GameObject:subClass("Player")

抽象: 詳情:菜鳥教程 這篇文章也不錯(cuò)

5. ‘.’和‘:’區(qū)別

對(duì)于創(chuàng)建方法來說’:‘會(huì)默認(rèn)第一個(gè)參數(shù)為self,而’.‘不會(huì) 對(duì)于執(zhí)行方法來說‘:’會(huì)默認(rèn)傳入一個(gè)參數(shù)為self,而’.'不會(huì)

有趣的實(shí)驗(yàn):

tabA = {id = 1}

tabB = {id = 2}

function tabB:funA()

print(self.id)

end

tabA.base = tabB

function tabA:funB()

self.base:funA()

self.base.funA(self)

end

tabA:funB()

結(jié)果是 2, 1

也就是說‘:’傳入的是self.base .fun(self)傳入的是self

6. 點(diǎn)乘叉乘

點(diǎn)成判斷前后,叉乘判斷左右

//返回值為正時(shí),目標(biāo)在自己的前方,反之在自己的后方

Vector3 dir = target.position - transform.position; //位置差,方向

Vector3.Dot(transform.forward, dir);

//返回值為正時(shí),目標(biāo)在自己的右方,反之在自己的左方 ,transform.forward實(shí)際上是 (0,0,1)*rotation, 也就是只有z有值,

Vector3.Cross(transform.forward, target.position).y

7. Unity路徑

Application.dataPath: 這個(gè)屬性返回的是程序的數(shù)據(jù)文件所在文件夾的路徑,例如在Editor中就是項(xiàng)目的Assets文件夾的路徑,通過這個(gè)路徑可以訪問項(xiàng)目中任何文件夾中的資源,但是在移動(dòng)端它是完全沒用。

Application.streamingAssetsPath: 這個(gè)屬性用于返回流數(shù)據(jù)的緩存目錄,返回路徑為相對(duì)路徑,適合設(shè)置一些外部數(shù)據(jù)文件的路徑。在Unity工程的Assets目錄下起一個(gè)名為“StreamingAssets”的文件夾即可,然后用Application.streamingAssetsPath訪問,這個(gè)文件夾中的資源在打包時(shí)會(huì)原封不動(dòng)的打包進(jìn)去,不會(huì)壓縮,一般放置一些資源數(shù)據(jù)。在PC/MAC中可實(shí)現(xiàn)對(duì)文件的“增刪改查”等操作,但在移動(dòng)端是一個(gè)只讀路徑。

Application.persistentDataPath: 此屬性返回一個(gè)持久化數(shù)據(jù)存儲(chǔ)目錄的路徑,可以在此路徑下存儲(chǔ)一些持久化的數(shù)據(jù)文件。這個(gè)路徑可讀、可寫,但是只能在程序運(yùn)行時(shí)才能讀寫操作,不能提前將數(shù)據(jù)放入這個(gè)路徑。在IOS上是應(yīng)用程序的沙盒,可以被iCloud自動(dòng)備份,可以通過同步推送一類的助手直接取出文件;在Android上的位置是根據(jù)Project Setting里設(shè)置的Write Access路徑,可以設(shè)置是程序沙盒還是sdcard,注意:如果在Android設(shè)置保存在沙盒中,那么就必須root以后才能用電腦取出文件,因此建議寫入sdcard里。一般情況下,建議將獲得的文件保存在這個(gè)路徑下,例如可以從StreamingAsset中讀取的二進(jìn)制文件或者從AssetBundle讀取的文件寫入PersistentDatapath。

Application.temporaryCachePath: 此屬性返回一個(gè)臨時(shí)數(shù)據(jù)的緩存目錄,跟Application.persistentDataPath類似,但是在IOS上不能被自動(dòng)備份。

8. pairs和ipairs區(qū)別

ipairs:ipairs函數(shù)用于遍歷數(shù)組(即索引從1開始的值序列)。它返回一個(gè)迭代器對(duì)象,該對(duì)象可以用于依次獲取數(shù)組的每個(gè)元素。與 pairs 不同的是,ipairs 只能遍歷數(shù)組的索引從1開始的連續(xù)元素,不能遍歷表中的鍵值對(duì)??梢允褂?ipairs 返回的迭代器對(duì)象的 __ipairs 方法獲取下一個(gè)元素。示例如下

pairs:pairs 函數(shù)用于遍歷表(table)的所有鍵值對(duì)。它返回一個(gè)迭代器對(duì)象,該對(duì)象可以用于依次獲取表的每個(gè)鍵值對(duì)。可以使用 next 方法來獲取下一個(gè)鍵值對(duì)。示例如下:

9.lua中#實(shí)現(xiàn)原理

長度先從最大數(shù)組索引處開始查找,如果為nil向前按照二分法查找,發(fā)現(xiàn)該處元素不為nil,直接向后查詢,也是按照二分法查詢

10. Delegate與Event區(qū)別

1.事件必須是委托類型的 2.event可以在Interface中定義。而delegate不能。 3.event只能在自身類中調(diào)用,在其它類中只能使用+=和-=。在自身類中可以使用=,但是在其它類中不可以使用=。 delegate則非常自由,沒有限制 4.event是delegate 的一種特例。

11.c# using的幾種用法

1.對(duì)命名空間的引用 2. 定義命名空間的別名 3. 自動(dòng)釋放所新建的對(duì)象

12. 已知兩個(gè)對(duì)象的transform,怎么判斷第一個(gè)對(duì)象的扇形技能擊中第二個(gè)對(duì)象

1.

public float MaxDistance = 5f;

public float MaxRadius;

public Transform target;

void Update () {

if (Vector3.Distance(target.position , transform.position) > 5f)

{

print("不在范圍內(nèi)");

}

else

{

//獲取自身到目標(biāo)的向量

Vector3 dir = target.position - transform.position;

//在判斷自身到目標(biāo)的向量方向,跟自己正上方做個(gè)對(duì)比,就可以得到具體距離角度多少

float angle = Vector3.Angle(dir,transform.forward);

//根據(jù)角度判斷,

if (angle <= MaxRadius / 2)

{

print("在視線范圍內(nèi)");

}

}

}

13.如何再lua中判斷一個(gè)gameobject為nil

再c#中添加一個(gè)判空方法

14 已知一個(gè)單鏈表為A->B->C->D->E->F 變?yōu)?F->E->D->C->B->A

//偽代碼

index1 = A;

index2 = A;

linkA = new link(A->B->C->D->E->F)

linkB = new link()

while (index2 != null)

{

index2 = index2.next();

if (linkB.head != null){

index1.next = linkB.head;

}

linkB.head = index1;

index1 = index2;

}

15 在一個(gè)圓形區(qū)域隨機(jī)生成相同密度的花

先隨機(jī)角度,在隨機(jī)長度

16 二叉樹中已知深度遍歷出最右邊的全部節(jié)點(diǎn)

//偽代碼,向右深度遍歷

curNode = tree.root;

curDepth = 0

recordCount = 0

result = new list()

result [curDepth] = tree.root;

isBack = false

while(recordCount < maxDepth){

if (curNode.right ~= null and not isBack){

curNode = curNode.right;

if(result [curDepth - 1] == null){

result [curDepth - 1] = curNode;

recordCount++;

}

curDepth++;

isBack = false;

}

elseif((curNode.right == null and not isBack) or (curNode.right ~= null and isBack)){

if (curNode.left == null)

{

curNode = curNode.parent;

curDepth--;

isBack = true;

}

else

{

curNode = curNode.left;

if(result [curDepth - 1] == null){

result [curDepth - 1] = curNode;

recordCount++;

}

curDepth++;

isBack = false;

}

}

}

17 lua中的數(shù)據(jù)類型有哪些

nil:表示空值,是唯一的值,用于表示無效值。 boolean:布爾類型,包含false和true兩個(gè)值。 number:數(shù)字類型,可以是雙精度浮點(diǎn)數(shù)。 string:字符串類型,由一對(duì)雙引號(hào)或單引號(hào)表示。 userdata:自定義類型,表示C數(shù)據(jù)結(jié)構(gòu)的引用。 function:函數(shù)類型,可以是C或Lua編寫的函數(shù)。 thread:線程類型,表示執(zhí)行的獨(dú)立線程。 table:表類型,是一個(gè)關(guān)聯(lián)數(shù)組,索引可以是數(shù)字或字符串。

18 lua中bool假值是那兩種

false 和 nil

19 lua中num是單精度還是雙精度

雙精度浮點(diǎn)數(shù)

20 lua字符串拼接的幾種方式

… table.concat () string.format(“%s%s%s”,str1,str2,str3) string.rep()

21 lua tonumber失敗返回什么值

print(tonumber(‘a(chǎn)sd/’)) --nil print(tonumber(“你好”)) --nil print(tonumber(nil)) --nil print(tonumber({})) --nil

//隨時(shí)更新

柚子快報(bào)邀請(qǐng)碼778899分享:c# 面試問題匯總

http://yzkb.51969.com/

參考閱讀

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19234846.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄